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

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

?? drvstrok.cpp

?? 可用于嵌入式編程學習
?? CPP
?? 第 1 頁 / 共 2 頁
字號:
/*

Copyright (c) 1995-2000 Microsoft Corporation.  All rights reserved.

*/
#include "precomp.h"

// Flip and round flags:

#define DEBUGTEMP 0

#define FL_H_ROUND_DOWN         0x00000080L     // .... .... 1... ....
#define FL_V_ROUND_DOWN         0x00008000L     // 1... .... .... ....

#define FL_FLIP_D               0x00000005L     // .... .... .... .1.1
#define FL_FLIP_V               0x00000008L     // .... .... .... 1...
#define FL_FLIP_SLOPE_ONE       0x00000010L     // .... .... ...1 ....
#define FL_FLIP_HALF            0x00000002L     // .... .... .... ..1.
#define FL_FLIP_H               0x00000200L     // .... ..1. .... ....

#define FL_ROUND_MASK           0x0000001CL     // .... .... ...1 11..
#define FL_ROUND_SHIFT          2

#define FL_RECTLCLIP_MASK       0x0000000CL     // .... .... .... 11..
#define FL_RECTLCLIP_SHIFT      2

#define FL_STRIP_MASK           0x00000003L     // .... .... .... ..11
#define FL_STRIP_SHIFT          0

#define FL_SIMPLE_CLIP          0x00000020      // .... .... ..1. ....
#define FL_COMPLEX_CLIP         0x00000040      // .... .... .1.. ....
#define FL_CLIP                (FL_SIMPLE_CLIP | FL_COMPLEX_CLIP)

#define FL_STYLED               0x00000400L     // .... .1.. .... ....
#define FL_ALTERNATESTYLED      0x00001000L     // ...1 .... .... ....

#define FL_STYLE_MASK           0x00000400L
#define FL_STYLE_SHIFT          10

#define FL_LAST_PEL_INCLUSIVE   0x00002000L     // ..1. .... .... ....


#define CLIP_LIMIT 50
typedef struct _CLIPENUM {
    LONG    c;
    RECTL   arcl[CLIP_LIMIT];   // Space for enumerating complex clipping

} CLIPENUM;                         /* ce, pce */

#define SWAP(a,b,type) { type tmp=(a); a=(b); b=tmp; }

const FLONG gaflRound[] = {
    FL_H_ROUND_DOWN | FL_V_ROUND_DOWN, // no flips
    FL_H_ROUND_DOWN | FL_V_ROUND_DOWN, // FL_FLIP_D
    FL_H_ROUND_DOWN,                   // FL_FLIP_V
    FL_V_ROUND_DOWN,                   // FL_FLIP_V | FL_FLIP_D
    FL_V_ROUND_DOWN,                   // FL_FLIP_SLOPE_ONE
    0xbaadf00d,                        // FL_FLIP_SLOPE_ONE | FL_FLIP_D
    FL_H_ROUND_DOWN,                   // FL_FLIP_SLOPE_ONE | FL_FLIP_V
    0xbaadf00d                         // FL_FLIP_SLOPE_ONE | FL_FLIP_V | FL_FLIP_D
};

inline GPE *SurfobjToGPE( SURFOBJ *pso )
{
	return (GPE *)(pso->dhpdev);
}

class TmpGPESurf
{
	GPESurf *m_pGPESurf;
	GPESurf m_GPESurf;
public:
	operator GPESurf *() { return m_pGPESurf; }
	TmpGPESurf
	(
		SURFOBJ *pso1,
		SURFOBJ *pso2 = (SURFOBJ *)NULL,
		TmpGPESurf *pTmp2 = (TmpGPESurf *)NULL
	);
	~TmpGPESurf() {}
};


BOOL APIENTRY DrvStrokePath(
	SURFOBJ   *pso,
	PATHOBJ   *ppo,
	CLIPOBJ   *pco,
	XFORMOBJ  *pxo,
	BRUSHOBJ  *pbo,
	POINTL    *pptlBrushOrg,
	LINEATTRS *plineattrs,
	MIX        mix)
{
	DEBUGMSG(GPE_ZONE_ENTER,(TEXT("Entering DrvStrokePath\r\n")));

	CLIPENUM ce;						// Clip enumeration allocation
	int moreClipLists;					// Continue flag for clip enumeration
	PATHDATA pd;						// Path enumeration allocation
	int morePointLists;					// Continue flag for path enumeration
	GPELineParms parms;					// Line parameters passed to individual line drawing calls
	GPE *pGPE = SurfobjToGPE(pso);		// Extract pGPE for this device from SURFOBJ
	TmpGPESurf pDst(pso);				// Either actual pSurf or temporary one for dest surf
	RECTL *prclCurr;					// Pointer into cliprect list
	RECTL arclClip[8];					// Cliprect rotated/flipped
	RECTL *prclFlipped;					// Pointer into arclClip[]
	unsigned long pointNo;				// Point counter within subpath
	POINTFIX ptfxStartFigure;			// X,Y of first point in subpath
	POINTFIX ptfxLast;					// X,Y of last point from previous point sequence
	POINTFIX *pptfxPrev;				// &[X,Y] of previous point
	POINTFIX *pptfxBuf;					// &[X,Y] of current point
	ULONG cptfx;						// Remaining points in current point list
	FIX fx0, fy0, fx1, fy1;				// Endpoints of line segment in 28.4 format
	unsigned long fl;					// Current flip/rotate flags for line segment
	unsigned long x,y;					// Integer components of starting point on line
	FIX M0, N0;							// Fractional component of fx0,fy0 after flipping (0..15)
	FIX M1, N1;							// Fractional component of fx1, fy1 after flipping
	FIX dM, dN;							// dX and dY after flipping  ( 28.4 format )
	unsigned long x0, y0;				// Starting point wrt initial x,y ( +0..+2 each )
	unsigned long x1, y1;				// End point wrt initial x,y
	long llGamma;						// Error term
	long llBeta;						// Error term... minor dimension
	long errorTerm;
	int cStylePels;						// Number of pixels in unclipped line
	int cPels;							// Number of pixels in clipped line
	int xLeft, xRight, yTop, yBottom;	// Rotated/reflected cliprect
	long xStart,yStart;					// Final first pixel coordinates
//	long ll;
//	unsigned long ulDelta;
	int iDir;							// Octant number for line


#if DEBUGTEMP
					int orig_x0 = 0xcccccccc;
					int orig_x1 = 0xcccccccc;
					int orig_y0 = 0xcccccccc;
					int x0_v1 = 0xcccccccc;
					int y0_v1 = 0xcccccccc;
					int x0_v2 = 0xcccccccc;
					int y0_v2 = 0xcccccccc;
					int orig_y1 = 0xcccccccc;
					int x1_v3 = 0xcccccccc;
					int y1_v3 = 0xcccccccc;
					int dM_v = 0xcccccccc;
					int dN_v = 0xcccccccc;
					int llGamma_v = 0xcccccccc;
#endif

	// Populate GPELineParms elements which are consistent along path

	// struct GPELineParms
	// {
	// 	SCODE 			(GPE::*pLine)(GPELineParms *);
	// 	GPESurf 		*pDst;
	// 	unsigned long	x1,	y1, x2, y2;
	// 	COLOR			solidColor;
	// 	RECTL			*prclClip;
	// 	int				state;
	// 	unsigned short	mix;
	// };

	parms.solidColor = pbo->iSolidColor;
	DEBUGMSG(GPE_ZONE_LINE,(TEXT("Mix:%04x Line color: %08x\r\n"), mix, pbo->iSolidColor));
	parms.mix = (unsigned short)mix;
	parms.pDst = pDst;
	parms.style = 0;

	if( plineattrs && (((mix>>8)&0x00ff)!=(mix&0x00ff)))
	{
		if( plineattrs->fl & LA_ALTERNATE )	// Every other pixel on
			parms.style = 0xaaaaaaaa;
		else if( plineattrs->pstyle && plineattrs->cstyle  )
		{
			int bitno=0;
			int bitval=0;
			int dashno;
			int dashpixel;
			for( dashno=0;
				bitno < 32;
				dashno++ )
			{
				dashno %= plineattrs->cstyle;
				for( dashpixel=0;
					( dashpixel < plineattrs->pstyle[dashno].l ) && ( bitno < 32 );
					dashpixel++, bitno++ )
						parms.style |= (bitval<<bitno);
				bitval ^= 1;
				if( dashno == 64 )		// in case all of the segments have 0 length
				{
					parms.style = 0;
					break;
				}
			}
		}
		if( plineattrs->fl & LA_STARTGAP )	// First dash is actually a gap
			parms.style = ~(parms.style);
	}




	// Call device specific line prepare
	// This can set up hardware mode (such as color) and must populate pLineParms->pLine

	DEBUGMSG(GPE_ZONE_LINE,(TEXT("Calling GPE::Line [prepare]\r\n")));

	if( FAILED( pGPE->Line( &parms, gpePrepare ) ) )
	{
		DEBUGMSG(GPE_ZONE_ENTER,(TEXT("Leaving DrvStrokePath\r\n")));
		return FALSE;
	}

	// Examine clipping

	if ( ( pco == NULL ) || ( pco->iDComplexity == DC_TRIVIAL ) )
	{
		DEBUGMSG(GPE_ZONE_LINE,(TEXT("DrvStrokePath: no clipping\r\n")));
		prclCurr = (RECTL *)NULL;
		moreClipLists = 0;
	}
	else if ( pco->iDComplexity == DC_RECT )
	{
		DEBUGMSG(GPE_ZONE_LINE,(TEXT("DrvStrokePath: single (DC_RECT) cliprect\r\n")));
		prclCurr = &pco->rclBounds;
		moreClipLists = 0;
	}
	else
	{
		DEBUGMSG(GPE_ZONE_LINE,(TEXT("DrvStrokePath: complex clipping region\r\n")));
		moreClipLists = 1;
	}

	// Iterate through each rectangle in clip list (once if no list)

	for( ce.c = 1-moreClipLists; ce.c || moreClipLists; prclCurr++, ce.c-- )
	{
		if( ce.c == 0 )
		{
			// Get next list of cliprects from clipobj
			moreClipLists = CLIPOBJ_bEnum( pco, sizeof(ce), (ULONG *)&ce );
			prclCurr = ce.arcl;
			if( !ce.c )
				continue;
		}


		parms.styleState = 0;


		// Flip cliprect into possible orientations

        arclClip[0]        =  *prclCurr;

    // FL_FLIP_D:

        arclClip[1].top    =  prclCurr->left;
        arclClip[1].left   =  prclCurr->top;
        arclClip[1].bottom =  prclCurr->right;
        arclClip[1].right  =  prclCurr->bottom;

    // FL_FLIP_V:

        arclClip[2].top    = -prclCurr->bottom + 1;
        arclClip[2].left   =  prclCurr->left;
        arclClip[2].bottom = -prclCurr->top + 1;
        arclClip[2].right  =  prclCurr->right;

    // FL_FLIP_V | FL_FLIP_D:

        arclClip[3].top    =  prclCurr->left;
        arclClip[3].left   = -prclCurr->bottom + 1;
        arclClip[3].bottom =  prclCurr->right;
        arclClip[3].right  = -prclCurr->top + 1;


    // FL_FLIP_H:

        arclClip[4].top    =  prclCurr->top;
        arclClip[4].left   =  -prclCurr->right + 1;
        arclClip[4].bottom =  prclCurr->bottom;
        arclClip[4].right  =  -prclCurr->left + 1;

    // FL_FLIP_H | FL_FLIP_D:

        arclClip[5].top    =  -prclCurr->right + 1;
        arclClip[5].left   =  prclCurr->top;
        arclClip[5].bottom =  -prclCurr->left + 1;
        arclClip[5].right  =  prclCurr->bottom;

    // FL_FLIP_H | FL_FLIP_V:

        arclClip[6].top    = -prclCurr->bottom + 1;
        arclClip[6].left   = -prclCurr->right + 1;
        arclClip[6].bottom = -prclCurr->top + 1;
        arclClip[6].right  = -prclCurr->left + 1;

    // FL_FLIP_H | FL_FLIP_V | FL_FLIP_D:

        arclClip[7].top    =  -prclCurr->right + 1;
        arclClip[7].left   =  -prclCurr->bottom + 1;
        arclClip[7].bottom =  -prclCurr->left + 1;
        arclClip[7].right  =  -prclCurr->top + 1;

		// Loop through the line segments in the path
		PATHOBJ_vEnumStart(ppo);
		do
		{
			morePointLists = PATHOBJ_bEnum( ppo, &pd );
			cptfx = pd.count;
			if( !cptfx )
				break;
			if( pd.flags & PD_BEGINSUBPATH )
			{
				ptfxStartFigure = *pd.pptfx;
				pptfxPrev = pd.pptfx;
				pptfxBuf = pd.pptfx+1;
				cptfx--;
			}
			else
			{
				pptfxPrev = &ptfxLast;
				pptfxBuf = pd.pptfx;
			}
			for( pointNo=0; pointNo<=cptfx; pointNo++ )
			{
//				parms.solidColor = (pointNo & 1 ) ? 2 : 4;	 // old test to alternate line colors

				if( pointNo < cptfx )
				{
					fx0 = pptfxPrev->x;
					fy0 = pptfxPrev->y;
					fx1 = pptfxBuf->x;
					fy1 = pptfxBuf->y;
					pptfxPrev = pptfxBuf++;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美色精品天天在线观看视频| 欧美日韩成人综合| 天涯成人国产亚洲精品一区av| 精品久久五月天| 日本道在线观看一区二区| 国产精品综合在线视频| 亚洲va欧美va国产va天堂影院| 久久久不卡网国产精品二区| 欧美日韩国产中文| 91在线精品一区二区| 国产精品影视在线观看| 日本v片在线高清不卡在线观看| 中国av一区二区三区| 精品少妇一区二区三区在线视频| 日本高清不卡aⅴ免费网站| 国产成人啪午夜精品网站男同| 日韩制服丝袜av| 亚洲午夜精品在线| 亚洲四区在线观看| 国产精品无人区| 精品剧情v国产在线观看在线| 欧美精品欧美精品系列| 91久久人澡人人添人人爽欧美| 国产成人精品三级| 国产一区二区三区在线观看免费视频 | 欧美日韩一级片在线观看| 成人国产免费视频| 国产成人欧美日韩在线电影| 国内精品嫩模私拍在线| 免费成人在线观看视频| 亚洲大片免费看| 洋洋av久久久久久久一区| 亚洲视频一区二区在线| 国产精品视频一二三区| 欧美激情在线看| 亚洲国产高清在线| 国产精品午夜电影| 国产精品伦理在线| 国产精品久久久一本精品| 中文字幕精品三区| 亚洲欧洲精品一区二区精品久久久| 国产女人水真多18毛片18精品视频| 久久综合中文字幕| 久久人人爽人人爽| 国产午夜一区二区三区| 国产欧美视频在线观看| 欧美国产激情一区二区三区蜜月| 久久九九影视网| 日本一二三四高清不卡| 国产精品嫩草99a| 国产精品成人一区二区三区夜夜夜| 国产精品青草综合久久久久99| 欧美极品aⅴ影院| 国产精品护士白丝一区av| 国产精品国产三级国产aⅴ原创| 国产精品乱人伦中文| 国产精品成人免费精品自在线观看 | 久久激情五月婷婷| 韩国精品主播一区二区在线观看| 国产一区二区三区不卡在线观看 | 国产在线看一区| 国产寡妇亲子伦一区二区| 成人免费视频网站在线观看| 99国产欧美另类久久久精品| 日本电影亚洲天堂一区| 欧美一区二区三区在线看| www欧美成人18+| 国产精品久久久久桃色tv| 亚洲男人天堂一区| 日韩一区精品视频| 国产露脸91国语对白| 99精品热视频| 7777精品伊人久久久大香线蕉经典版下载 | 爽好多水快深点欧美视频| 伦理电影国产精品| 国产九色sp调教91| 91丝袜美腿高跟国产极品老师| 欧美在线小视频| 欧美一区二区三区色| 国产目拍亚洲精品99久久精品| 亚洲欧美日韩精品久久久久| 同产精品九九九| 国产一区二区三区四区五区美女 | 亚洲午夜av在线| 九九视频精品免费| 91色porny在线视频| 欧美福利电影网| 亚洲国产成人私人影院tom| 一区二区久久久| 久久激情五月婷婷| 91免费观看视频| 欧美变态tickle挠乳网站| 亚洲天堂久久久久久久| 久久99精品国产| 在线观看日韩毛片| 国产欧美精品在线观看| 亚洲国产中文字幕在线视频综合| 国产在线一区二区| 欧美日韩一二三| 国产精品第13页| 麻豆精品国产传媒mv男同| 91美女福利视频| 久久综合国产精品| 日韩二区三区四区| 色先锋久久av资源部| 国产欧美日韩在线看| 青青草97国产精品免费观看| 91小宝寻花一区二区三区| 久久久久久久久久久久久女国产乱| 一区二区三区产品免费精品久久75| 国产美女精品在线| 欧美一区二区成人| 亚洲综合偷拍欧美一区色| 福利一区二区在线观看| 欧美一级欧美三级在线观看| 一区二区三区在线观看国产| 国产盗摄一区二区| 精品美女被调教视频大全网站| 亚洲成人黄色影院| 色偷偷成人一区二区三区91| 欧美国产禁国产网站cc| 国内成人自拍视频| 日韩一区二区麻豆国产| 午夜不卡在线视频| 91黄色小视频| 亚洲另类一区二区| 91麻豆免费在线观看| |精品福利一区二区三区| 国产黄色成人av| 久久久久久久综合色一本| 久久99热狠狠色一区二区| 日韩欧美一区二区三区在线| 五月天欧美精品| 欧美日韩国产大片| 亚洲成人先锋电影| 欧美精品tushy高清| 五月激情丁香一区二区三区| 欧美色图12p| 亚洲二区在线视频| 欧美人牲a欧美精品| 日本中文字幕不卡| 日韩一区和二区| 麻豆一区二区在线| 精品国产乱码久久久久久牛牛| 麻豆精品视频在线观看视频| 日韩免费观看高清完整版| 全国精品久久少妇| 欧美大片免费久久精品三p| 麻豆国产精品视频| 久久久电影一区二区三区| 成人精品视频.| 亚洲三级电影全部在线观看高清| 91免费看片在线观看| 亚洲午夜精品17c| 9191久久久久久久久久久| 免费高清视频精品| 精品国产第一区二区三区观看体验| 韩国av一区二区| 国产欧美精品区一区二区三区 | 日韩一区二区三区四区| 久久99精品视频| 国产日韩精品一区二区浪潮av | 免费的成人av| 久久久久久久综合日本| 成人18视频在线播放| 亚洲国产精品一区二区www| 欧美精品色一区二区三区| 久久66热re国产| 国产精品嫩草影院com| 欧美在线色视频| 久久激情五月婷婷| 中文字幕一区二区三区不卡在线| 91福利视频在线| 久久99精品久久只有精品| 国产精品黄色在线观看| 欧美卡1卡2卡| 国产精品自拍av| 一区二区欧美精品| 精品99一区二区三区| 99视频超级精品| 日韩黄色在线观看| 久久久久久久久久看片| 欧美性猛交一区二区三区精品| 久久精品72免费观看| 亚洲美女区一区| 日韩免费在线观看| 91网址在线看| 久久国产精品72免费观看| 综合色中文字幕| 日韩欧美一级片| 91成人在线精品| 国产麻豆日韩欧美久久| 亚洲电影中文字幕在线观看| 国产偷v国产偷v亚洲高清| 69堂国产成人免费视频| 成人天堂资源www在线| 日韩av中文在线观看| 亚洲色图.com| 久久女同精品一区二区| 欧美日韩久久一区二区|