亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? s3c2440disp.cpp

?? Sharp3.5_LCD_Display S3C2440的
?? CPP
?? 第 1 頁 / 共 2 頁
字號:
				ptrLine[x * (m_colorDepth >> 3)] = cbsLine[(x - m_CursorRect.left) * (m_colorDepth >> 3)];
				if (m_colorDepth > 8)
				{
					ptrLine[x * (m_colorDepth >> 3) + 1] = cbsLine[(x - m_CursorRect.left) * (m_colorDepth >> 3) + 1];
					if (m_colorDepth > 16)
					{
						ptrLine[x * (m_colorDepth >> 3) + 2] = cbsLine[(x - m_CursorRect.left) * (m_colorDepth >> 3) + 2];
					}
				}
			}
		}
#ifdef ROTATE
		m_CursorRect = rSave;
#endif //ROTATE
		m_CursorVisible = FALSE;
	}
}

SCODE	S3C2440DISP::SetPointerShape(GPESurf *pMask, GPESurf *pColorSurf, INT xHot, INT yHot, INT cX, INT cY)
{
	UCHAR	*andPtr;		// input pointer
	UCHAR	*xorPtr;		// input pointer
	UCHAR	*andLine;		// output pointer
	UCHAR	*xorLine;		// output pointer
	char	bAnd;
	char	bXor;
	int		row;
	int		col;
	int		i;
	int		bitMask;

	RETAILMSG(0, (TEXT("S3C2440DISP::SetPointerShape(0x%X, 0x%X, %d, %d, %d, %d)\r\n"),pMask, pColorSurf, xHot, yHot, cX, cY));

	// turn current cursor off
	CursorOff();

	// release memory associated with old cursor
	if (m_CursorBackingStore)
	{
		delete (void*)m_CursorBackingStore;
		m_CursorBackingStore = NULL;
	}
	if (m_CursorXorShape)
	{
		delete (void*)m_CursorXorShape;
        m_CursorXorShape = NULL;
	}
	if (m_CursorAndShape)
	{
		delete (void*)m_CursorAndShape;
        m_CursorAndShape = NULL;
	}

	if (!pMask)							// do we have a new cursor shape
	{
		m_CursorDisabled = TRUE;		// no, so tag as disabled
	}
	else
	{
		m_CursorDisabled = FALSE;		// yes, so tag as not disabled

		// allocate memory based on new cursor size
        m_CursorBackingStore = new UCHAR[(cX * (m_colorDepth >> 3)) * cY];
        m_CursorXorShape = new UCHAR[cX * cY];
        m_CursorAndShape = new UCHAR[cX * cY];

		// store size and hotspot for new cursor
		m_CursorSize.x = cX;
		m_CursorSize.y = cY;
		m_CursorHotspot.x = xHot;
		m_CursorHotspot.y = yHot;

		andPtr = (UCHAR*)pMask->Buffer();
		xorPtr = (UCHAR*)pMask->Buffer() + (cY * pMask->Stride());

		// store OR and AND mask for new cursor
		for (row = 0; row < cY; row++)
		{
			andLine = &m_CursorAndShape[cX * row];
			xorLine = &m_CursorXorShape[cX * row];

			for (col = 0; col < cX / 8; col++)
			{
				bAnd = andPtr[row * pMask->Stride() + col];
				bXor = xorPtr[row * pMask->Stride() + col];

				for (bitMask = 0x0080, i = 0; i < 8; bitMask >>= 1, i++)
				{
					andLine[(col * 8) + i] = bAnd & bitMask ? 0xFF : 0x00;
					xorLine[(col * 8) + i] = bXor & bitMask ? 0xFF : 0x00;
				}
			}
		}
	}

	return	S_OK;
}

SCODE	S3C2440DISP::MovePointer(INT xPosition, INT yPosition)
{
	RETAILMSG(0, (TEXT("S3C2440DISP::MovePointer(%d, %d)\r\n"), xPosition, yPosition));

	CursorOff();

	if (xPosition != -1 || yPosition != -1)
	{
		// compute new cursor rect
		m_CursorRect.left = xPosition - m_CursorHotspot.x;
		m_CursorRect.right = m_CursorRect.left + m_CursorSize.x;
		m_CursorRect.top = yPosition - m_CursorHotspot.y;
		m_CursorRect.bottom = m_CursorRect.top + m_CursorSize.y;

		CursorOn();
	}

	return	S_OK;
}

void	S3C2440DISP::WaitForNotBusy(void)
{
	RETAILMSG(0, (TEXT("S3C2440DISP::WaitForNotBusy\r\n")));
	return;
}

int		S3C2440DISP::IsBusy(void)
{
	RETAILMSG(0, (TEXT("S3C2440DISP::IsBusy\r\n")));
	return	0;
}

void	S3C2440DISP::GetPhysicalVideoMemory(unsigned long *physicalMemoryBase, unsigned long *videoMemorySize)
{
	RETAILMSG(0, (TEXT("S3C2440DISP::GetPhysicalVideoMemory\r\n")));

	*physicalMemoryBase = gdwLCDVirtualFrameBase;
	*videoMemorySize = m_cbScanLineLength * m_nScreenHeight;
}

SCODE	S3C2440DISP::AllocSurface(GPESurf **surface, INT width, INT height, EGPEFormat format, INT surfaceFlags)
{
	RETAILMSG(0, (TEXT("S3C2440DISP::AllocSurface\r\n")));

	if (surfaceFlags & GPE_REQUIRE_VIDEO_MEMORY)
	{
		return	E_OUTOFMEMORY;
	}

	// Allocate from system memory
	*surface = new GPESurf(width, height, format);

	if (*surface != NULL)
	{
		// Check that the bits were allocated succesfully
		if (((*surface)->Buffer()) == NULL)
		{
			delete *surface;				// Clean up
		}
		else
		{
			return S_OK;
		}
	}
	return E_OUTOFMEMORY;
}

SCODE	S3C2440DISP::WrappedEmulatedLine (GPELineParms *lineParameters)
{
	SCODE	retval;
	RECT	bounds;
	int		N_plus_1;				// Minor length of bounding rect + 1

	// calculate the bounding-rect to determine overlap with cursor
	if (lineParameters->dN)			// The line has a diagonal component (we'll refresh the bounding rect)
	{
		N_plus_1 = 2 + ((lineParameters->cPels * lineParameters->dN) / lineParameters->dM);
	}
	else
	{
		N_plus_1 = 1;
	}

	switch(lineParameters->iDir)
	{
		case 0:
			bounds.left = lineParameters->xStart;
			bounds.top = lineParameters->yStart;
			bounds.right = lineParameters->xStart + lineParameters->cPels + 1;
			bounds.bottom = bounds.top + N_plus_1;
			break;
		case 1:
			bounds.left = lineParameters->xStart;
			bounds.top = lineParameters->yStart;
			bounds.bottom = lineParameters->yStart + lineParameters->cPels + 1;
			bounds.right = bounds.left + N_plus_1;
			break;
		case 2:
			bounds.right = lineParameters->xStart + 1;
			bounds.top = lineParameters->yStart;
			bounds.bottom = lineParameters->yStart + lineParameters->cPels + 1;
			bounds.left = bounds.right - N_plus_1;
			break;
		case 3:
			bounds.right = lineParameters->xStart + 1;
			bounds.top = lineParameters->yStart;
			bounds.left = lineParameters->xStart - lineParameters->cPels;
			bounds.bottom = bounds.top + N_plus_1;
			break;
		case 4:
			bounds.right = lineParameters->xStart + 1;
			bounds.bottom = lineParameters->yStart + 1;
			bounds.left = lineParameters->xStart - lineParameters->cPels;
			bounds.top = bounds.bottom - N_plus_1;
			break;
		case 5:
			bounds.right = lineParameters->xStart + 1;
			bounds.bottom = lineParameters->yStart + 1;
			bounds.top = lineParameters->yStart - lineParameters->cPels;
			bounds.left = bounds.right - N_plus_1;
			break;
		case 6:
			bounds.left = lineParameters->xStart;
			bounds.bottom = lineParameters->yStart + 1;
			bounds.top = lineParameters->yStart - lineParameters->cPels;
			bounds.right = bounds.left + N_plus_1;
			break;
		case 7:
			bounds.left = lineParameters->xStart;
			bounds.bottom = lineParameters->yStart + 1;
			bounds.right = lineParameters->xStart + lineParameters->cPels + 1;
			bounds.top = bounds.bottom - N_plus_1;
			break;
		default:
			RETAILMSG(0, (TEXT("Invalid direction: %d\r\n"), lineParameters->iDir));
			return E_INVALIDARG;
	}

	// check for line overlap with cursor and turn off cursor if overlaps
	if (m_CursorVisible && !m_CursorDisabled &&
		m_CursorRect.top < bounds.bottom && m_CursorRect.bottom > bounds.top &&
		m_CursorRect.left < bounds.right && m_CursorRect.right > bounds.left)
	{
		CursorOff();
		m_CursorForcedOff = TRUE;
	}

	// do emulated line
	retval = EmulatedLine (lineParameters);

	// se if cursor was forced off because of overlap with line bouneds and turn back on
	if (m_CursorForcedOff)
	{
		m_CursorForcedOff = FALSE;
		CursorOn();
	}

	return	retval;

}

SCODE	S3C2440DISP::Line(GPELineParms *lineParameters, EGPEPhase phase)
{
	RETAILMSG(0, (TEXT("S3C2440DISP::Line\r\n")));

	if (phase == gpeSingle || phase == gpePrepare)
	{

		if ((lineParameters->pDst != m_pPrimarySurface))
		{
			lineParameters->pLine = EmulatedLine;
		}
		else
		{
			lineParameters->pLine = (SCODE (GPE::*)(struct GPELineParms *)) WrappedEmulatedLine;
		}
	}
	return S_OK;
}

SCODE	S3C2440DISP::BltPrepare(GPEBltParms *blitParameters)
{
	RECTL	rectl;

	RETAILMSG(0, (TEXT("S3C2440DISP::BltPrepare\r\n")));

	// default to base EmulatedBlt routine
	blitParameters->pBlt = EmulatedBlt;

	// see if we need to deal with cursor
	if (m_CursorVisible && !m_CursorDisabled)
	{
		// check for destination overlap with cursor and turn off cursor if overlaps
		if (blitParameters->pDst == m_pPrimarySurface)	// only care if dest is main display surface
		{
			if (blitParameters->prclDst != NULL)		// make sure there is a valid prclDst
			{
				rectl = *blitParameters->prclDst;		// if so, use it
			}
			else
			{
				rectl = m_CursorRect;					// if not, use the Cursor rect - this forces the cursor to be turned off in this case
			}

			if (m_CursorRect.top < rectl.bottom && m_CursorRect.bottom > rectl.top &&
				m_CursorRect.left < rectl.right && m_CursorRect.right > rectl.left)
			{
				CursorOff();
				m_CursorForcedOff = TRUE;
			}
		}

		// check for source overlap with cursor and turn off cursor if overlaps
		if (blitParameters->pSrc == m_pPrimarySurface)	// only care if source is main display surface
		{
			if (blitParameters->prclSrc != NULL)		// make sure there is a valid prclSrc
			{
				rectl = *blitParameters->prclSrc;		// if so, use it
			}
			else
			{
				rectl = m_CursorRect;					// if not, use the CUrsor rect - this forces the cursor to be turned off in this case
			}
			if (m_CursorRect.top < rectl.bottom && m_CursorRect.bottom > rectl.top &&
				m_CursorRect.left < rectl.right && m_CursorRect.right > rectl.left)
			{
				CursorOff();
				m_CursorForcedOff = TRUE;
			}
		}
	}

#ifdef ROTATE
    if (m_iRotate && (blitParameters->pDst == m_pPrimarySurface || blitParameters->pSrc == m_pPrimarySurface))
    {
        blitParameters->pBlt = (SCODE (GPE::*)(GPEBltParms *))EmulatedBltRotate;
    }
#endif //ROTATE

	#ifdef CLEARTYPE
	if (((blitParameters->rop4 & 0xffff) == 0xaaf0 ) && (blitParameters->pMask->Format() == gpe8Bpp))
	{
	    switch (m_colorDepth)
	    {
	    case 16:
	 	blitParameters->pBlt = (SCODE (GPE::*)(struct GPEBltParms *)) ClearTypeBlt::ClearTypeBltDst16;
		return S_OK;
	    case 24:
blitParameters->pBlt = (SCODE (GPE::*)(struct GPEBltParms *)) ClearTypeBlt::ClearTypeBltDst24;
		return S_OK;
	    case 32:
blitParameters->pBlt = (SCODE (GPE::*)(struct GPEBltParms *)) ClearTypeBlt::ClearTypeBltDst32;
		return S_OK;
	    default:
		break;
	    }
	}
#endif //CLEARTYPE

	// see if there are any optimized software blits available
	EmulatedBltSelect02(blitParameters);
	EmulatedBltSelect08(blitParameters);
	EmulatedBltSelect16(blitParameters);

	return S_OK;
}

SCODE	S3C2440DISP::BltComplete(GPEBltParms *blitParameters)
{
	RETAILMSG(0, (TEXT("S3C2440DISP::BltComplete\r\n")));

	// see if cursor was forced off because of overlap with source or destination and turn back on
	if (m_CursorForcedOff)
	{
		m_CursorForcedOff = FALSE;
		CursorOn();
	}

	return S_OK;
}

INT		S3C2440DISP::InVBlank(void)
{
	RETAILMSG(0, (TEXT("S3C2440DISP::InVBlank\r\n")));
	return 0;
}

SCODE	S3C2440DISP::SetPalette(const PALETTEENTRY *source, USHORT firstEntry, USHORT numEntries)
{
	RETAILMSG(0, (TEXT("S3C2440DISP::SetPalette\r\n")));

	if (firstEntry < 0 || firstEntry + numEntries > 256 || source == NULL)
	{
		return	E_INVALIDARG;
	}

	return	S_OK;
}

ULONG	S3C2440DISP::GetGraphicsCaps()
{
    
#ifdef  CLEARTYPE
	return	GCAPS_GRAY16 | GCAPS_CLEARTYPE;
#else
	return  GCAPS_GRAY16;
#endif 
}

void	RegisterDDHALAPI(void)
{
	return;	// no DDHAL support
}

#if defined(CLEARTYPE) || defined(ROTATE)
//extern GetGammaValue(ULONG * pGamma);
//extern SetGammaValue(ULONG ulGamma, BOOL bUpdateReg);

ULONG  S3C2440DISP::DrvEscape(
                        SURFOBJ *pso,
                        ULONG    iEsc,
                        ULONG    cjIn,
                        PVOID    pvIn,
                        ULONG    cjOut,
                        PVOID    pvOut)
{
/*
    if (iEsc == DRVESC_GETGAMMAVALUE)
    {
	return GetGammaValue((ULONG *)pvOut);
    }
    else if (iEsc == DRVESC_SETGAMMAVALUE)
    {
	return SetGammaValue(cjIn, *(BOOL *)pvIn);
    }
*/
#ifdef ROTATE
    if (iEsc == DRVESC_GETSCREENROTATION)
    {
        *(int *)pvOut = ((DMDO_0 | DMDO_90 | DMDO_180 | DMDO_270) << 8) | ((BYTE)m_iRotate);
        return DISP_CHANGE_SUCCESSFUL; 
    }
    else if (iEsc == DRVESC_SETSCREENROTATION)
    {
        if ((cjIn == DMDO_0) ||
           (cjIn == DMDO_90) ||
           (cjIn == DMDO_180) ||
           (cjIn == DMDO_270) )
           {
               return DynRotate(cjIn);
           }
        return DISP_CHANGE_BADMODE;
    }
#endif //ROTATE & ROTATE
    
    return 0;
}
#endif //CLEARTYPE

ULONG *APIENTRY DrvGetMasks(DHPDEV dhpdev)
{
	return gBitMasks;
}

#ifdef ROTATE
void S3C2440DISP::SetRotateParms()
{
    int iswap;
    switch(m_iRotate)
    {
    case DMDO_0:
		m_nScreenHeightSave = m_nScreenHeight;
		m_nScreenWidthSave = m_nScreenWidth;
		break;
    case DMDO_180:
		m_nScreenHeightSave = m_nScreenHeight;
		m_nScreenWidthSave = m_nScreenWidth;
		break;
	case DMDO_90:
	case DMDO_270:
		iswap = m_nScreenHeight;
		m_nScreenHeight = m_nScreenWidth;
		m_nScreenWidth = iswap;
	    m_nScreenHeightSave = m_nScreenWidth;
	    m_nScreenWidthSave = m_nScreenHeight;
		break;
	default:
	  	m_nScreenHeightSave = m_nScreenHeight;
		m_nScreenWidthSave = m_nScreenWidth;
		break;
    }
	return;
}

LONG S3C2440DISP::DynRotate(int angle)
{
    GPESurfRotate *pSurf = (GPESurfRotate *)m_pPrimarySurface;
	if (angle == m_iRotate)
		return DISP_CHANGE_SUCCESSFUL;

	m_iRotate = angle;

	switch(m_iRotate)
    {
    case DMDO_0:
    case DMDO_180:
		m_nScreenHeight = m_nScreenHeightSave;
		m_nScreenWidth = m_nScreenWidthSave;
		break;
	case DMDO_90:
	case DMDO_270:
		m_nScreenHeight = m_nScreenWidthSave;
		m_nScreenWidth = m_nScreenHeightSave;
		break;
    }

	m_pMode->width = m_nScreenWidth;
	m_pMode->height = m_nScreenHeight;
	pSurf->SetRotation(m_nScreenWidth, m_nScreenHeight, angle);

	return DISP_CHANGE_SUCCESSFUL;
}
#endif //ROTATE

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
丝袜美腿亚洲色图| 一区二区三区日韩| 国产日韩欧美制服另类| 国产日韩精品一区二区三区在线| 久久婷婷久久一区二区三区| 国产无人区一区二区三区| 亚洲色图另类专区| √…a在线天堂一区| 久久99国产精品麻豆| 99久久婷婷国产综合精品电影 | 日韩一级黄色大片| 日韩精品一区在线观看| 亚洲精品免费看| 国产剧情一区在线| 在线观看亚洲一区| 国产午夜精品久久久久久久 | 久久国产麻豆精品| 亚洲aaa精品| 成人网男人的天堂| 8x8x8国产精品| 亚洲日本青草视频在线怡红院| 天天操天天干天天综合网| 美女在线观看视频一区二区| 成人av资源站| 2021中文字幕一区亚洲| 亚洲成a人在线观看| 成人综合婷婷国产精品久久免费| 欧美午夜寂寞影院| 91麻豆精品91久久久久久清纯 | 麻豆精品一区二区三区| 在线免费观看日本一区| 久久人人爽人人爽| 日韩影视精彩在线| 欧洲另类一二三四区| 亚洲国产精品t66y| 国产成人高清在线| 久久久精品影视| 免费在线欧美视频| 欧美午夜电影网| 亚洲欧美一区二区三区孕妇| 国产精品一级黄| 欧美性一二三区| 亚洲综合小说图片| 91黄色激情网站| 中文字幕一区二| 国产99久久久国产精品潘金网站| 日韩欧美成人午夜| 久久精品国产第一区二区三区| 日韩欧美成人激情| 成人综合婷婷国产精品久久| 亚洲免费成人av| 欧美日韩www| 韩国av一区二区| 国产精品成人午夜| 91福利在线免费观看| 午夜欧美视频在线观看| 日韩欧美国产麻豆| 99精品视频中文字幕| 一区二区三区精品| 日韩欧美卡一卡二| av午夜精品一区二区三区| 亚洲激情六月丁香| 日韩一区二区麻豆国产| 成人禁用看黄a在线| 亚洲成av人片一区二区| 欧美成人精品1314www| 成人免费毛片app| 亚洲成人综合在线| 久久亚洲影视婷婷| 91国偷自产一区二区开放时间 | 成人av免费网站| 亚洲国产毛片aaaaa无费看 | 中文字幕亚洲在| 日韩视频免费观看高清完整版在线观看 | 99免费精品在线| 日韩国产在线一| 中文在线资源观看网站视频免费不卡 | 亚洲成a人在线观看| 久久久久国产精品厨房| 欧美亚日韩国产aⅴ精品中极品| 精品综合免费视频观看| 中文字幕在线不卡视频| 欧美r级电影在线观看| 色av成人天堂桃色av| 精品一区二区三区免费观看| 亚洲国产综合色| 18欧美亚洲精品| 国产日韩视频一区二区三区| 欧美二区三区91| 91福利在线导航| jiyouzz国产精品久久| 国产综合成人久久大片91| 亚洲一二三四区| 国产精品久久精品日日| 欧美精品一区二区久久久| 欧美日韩亚洲国产综合| 97精品久久久久中文字幕 | 国产三级欧美三级日产三级99| 欧美日韩精品欧美日韩精品 | 亚洲欧美福利一区二区| 久久综合精品国产一区二区三区| 欧美色男人天堂| 99国产精品久久久久久久久久久| 久久99精品国产91久久来源| 亚洲成人动漫一区| 亚洲va韩国va欧美va| 一二三区精品福利视频| 亚洲黄色av一区| 亚洲欧美激情一区二区| 亚洲欧洲成人精品av97| 国产精品久久久久久久久久久免费看 | 国产一区二区三区美女| 免费成人深夜小野草| 午夜精品一区二区三区电影天堂 | 极品少妇一区二区| 黄色小说综合网站| 韩国v欧美v日本v亚洲v| 久久国产尿小便嘘嘘| 国产综合色视频| 成人一区二区三区中文字幕| 国产精品一线二线三线| 国产寡妇亲子伦一区二区| 国产成人在线看| 99久久免费视频.com| 色哟哟一区二区| 欧美日韩免费电影| 欧美一级黄色片| 在线播放91灌醉迷j高跟美女| 欧美蜜桃一区二区三区| 欧美变态tickling挠脚心| 久久综合视频网| 国产亚洲精品精华液| 国产精品狼人久久影院观看方式| 中文字幕亚洲一区二区va在线| 亚洲蜜臀av乱码久久精品蜜桃| 亚洲网友自拍偷拍| 另类小说图片综合网| 国产精品主播直播| 色婷婷一区二区| 91精品国产综合久久香蕉麻豆| 欧美成人精品3d动漫h| 中文字幕精品综合| 一级日本不卡的影视| 午夜精品久久久久久久久| 看片网站欧美日韩| 成人美女视频在线看| 色94色欧美sute亚洲线路一ni| 日韩一区二区精品葵司在线| 中文字幕va一区二区三区| 亚洲综合免费观看高清完整版 | 久久综合av免费| 国产精品国产a| 日韩精品三区四区| 国产精品1区2区3区在线观看| 99re热这里只有精品免费视频| 欧美日韩国产经典色站一区二区三区| 91精品国产色综合久久ai换脸| 久久久久国产精品免费免费搜索| 亚洲精品综合在线| 激情久久五月天| 在线区一区二视频| 久久蜜桃av一区精品变态类天堂| 亚洲欧美国产77777| 麻豆精品一区二区综合av| 91视频国产观看| 欧美r级在线观看| 亚洲v精品v日韩v欧美v专区| 国产精品性做久久久久久| 欧美日韩电影在线| 国产精品久久午夜| 美女视频黄 久久| 欧美亚州韩日在线看免费版国语版| 久久尤物电影视频在线观看| 亚洲综合视频在线观看| 风流少妇一区二区| 欧美精品自拍偷拍动漫精品| 中文字幕亚洲区| 国产剧情一区二区三区| 日韩美一区二区三区| 亚洲成a人片在线不卡一二三区| www.色综合.com| 精品88久久久久88久久久 | 亚洲欧洲制服丝袜| 成人性生交大片免费看中文| 欧美一级夜夜爽| 婷婷夜色潮精品综合在线| 99精品偷自拍| 亚洲婷婷在线视频| 国产麻豆9l精品三级站| 日韩欧美aaaaaa| 久久91精品国产91久久小草 | 日一区二区三区| 欧美日韩你懂的| 亚洲一区成人在线| 欧美主播一区二区三区美女| 一区在线播放视频| 成人免费观看视频| 久久久久久一级片| 国产福利一区二区三区视频在线| 337p日本欧洲亚洲大胆精品 |