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

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

?? clipregion.c

?? lgui_0.3.0.rar
?? C
字號:
/*	Copyright (C) 2004-2005 Li Yudong	Some ideas come from MiniGUI*//*** This program is free software; you can redistribute it and/or modify** it under the terms of the GNU General Public License as published by** the Free Software Foundation; either version 2 of the License, or** (at your option) any later version.**** This program is distributed in the hope that it will be useful,** but WITHOUT ANY WARRANTY; without even the implied warranty of** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the** GNU General Public License for more details.**** You should have received a copy of the GNU General Public License** along with this program; if not, write to the Free Software** Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA*/#include "../include/common.h"#include "../include/blockheap.h"#include "../include/rect.h"#include "../include/invalidregion.h"#include "../include/clipregion.h"static PrivateHeap ClipRegionHeap;BOOL InitClipRegionHeap(){	return HeapCreate(&ClipRegionHeap,SIZE_CRGN_HEAP,sizeof(ClipRect));}void DestroyClipRegionHeap(){	HeapDestroy(&ClipRegionHeap);}BOOLInitClipRegion(	PClipRegion pClipRegion){	if(!pClipRegion)		return false;	memset(pClipRegion,0,sizeof(ClipRegion));	pClipRegion->pHeap = &ClipRegionHeap;	return true;}BOOL IsEmptyClipRegion(	const PClipRegion pClipRegion){	if(!pClipRegion->pHead)		return true;	else		return false;}BOOLGetBoundClipRegion(	PClipRegion pClipRegion){	RECT rect;	PClipRect pListNode, pTemp;	if(!pClipRegion)		return false;		pListNode = pClipRegion->pHead;	if(!pListNode)		return true;	memcpy(&rect,&pListNode->rect,sizeof(RECT));	pListNode = pListNode->pNext;	while(pListNode){		if(pListNode->rect.left < rect.left)			rect.left = pListNode->rect.left;		if(pListNode->rect.top < rect.top)			rect.top = pListNode->rect.top;		if(pListNode->rect.right > rect.right)			rect.right = pListNode->rect.right;		if(pListNode->rect.bottom > rect.bottom)			rect.bottom = pListNode->rect.bottom;		pListNode = pListNode->pNext;	}	memcpy(&pClipRegion->rcBound,&rect,sizeof(RECT));	    //cleanup null rect node in the clipregion link table	pListNode = pClipRegion->pHead;	while(pListNode->pNext){		if(IsRectEmpty(&pListNode->pNext->rect)){			pTemp = pListNode->pNext;			pListNode->pNext = pTemp->pNext;			HeapFree(pClipRegion->pHeap,(void*)pTemp);		}		else			pListNode = pListNode->pNext;	}	pClipRegion->pTail = pListNode;	if(IsRectEmpty(&pClipRegion->pHead->rect)){		pTemp = pClipRegion->pHead;		pClipRegion->pHead = pTemp->pNext;		HeapFree(pClipRegion->pHeap,(void*)pTemp);	}	return true;}		 	//make the clipregion clean by delete the empty nodeBOOL CleanupClipRegion(	PClipRegion pClipRegion){	PClipRect pListNode;	PClipRect pPrevNode;	pPrevNode = pListNode = pClipRegion->pHead;	if(!pClipRegion)		return false;	while(pListNode){		if(IsRectEmpty(&pListNode->rect)){			if(pListNode == pClipRegion->pHead){				if(pClipRegion->pHead == pClipRegion->pTail){//only one node					pClipRegion->pHead = pClipRegion->pTail = NULL;				}				else{//not only one node 					pClipRegion->pHead = pListNode->pNext;				}			}			else if(pListNode == pClipRegion->pTail){				pClipRegion->pTail = pPrevNode;			}			else{				pPrevNode->pNext = pListNode->pNext;			}			HeapFree(pClipRegion->pHeap, (void*)pListNode);		}		pPrevNode = pListNode;		pListNode = pListNode->pNext;	}	return true;}// make clip region emptyBOOL EmptyClipRegion(	PClipRegion pClipRegion){	PClipRect pListNode;	PClipRect pNextNode;	if(!pClipRegion)		return false;	pNextNode = pListNode = pClipRegion->pHead;	while(pListNode){		pNextNode = pListNode->pNext;		HeapFree(pClipRegion->pHeap,(void*)pListNode);		pListNode = pNextNode;	}	pClipRegion->pHead = pClipRegion->pTail = NULL;	memset(&pClipRegion->rcBound,0,sizeof(RECT));	return true;}//set initial rectangle to clip regionBOOLSetInitRectClipRegion(	PClipRegion pClipRegion,	const PRECT prc){	PClipRect pNodeList;	if(pClipRegion->pHead)//if not empty clipregion		if(!EmptyClipRegion(pClipRegion))			return false;	pNodeList = (PClipRect)HeapAlloc(pClipRegion->pHeap);	if(!pNodeList)		return false;	memcpy(&pNodeList->rect,prc,sizeof(RECT));	pNodeList->pNext = NULL;	pClipRegion->pHead = pClipRegion->pTail = pNodeList;	memcpy(&pClipRegion->rcBound,prc,sizeof(RECT));	return true;}BOOLCopyClipRegion(	PClipRegion pDst,	PClipRegion	pSrc){	PClipRect pSrcNode,pDstNode;	if(pDst->pHead)		EmptyClipRegion(pDst);	if(!pSrc->pHead)		return false;	if(!pDst->pHeap)		return false;	pDst->pHead = (PClipRect)HeapAlloc(pSrc->pHeap);	pDstNode = pDst->pHead;	pSrcNode = pSrc->pHead;	memcpy(&pDst->pHead->rect,&pSrc->pHead->rect,sizeof(RECT));	pSrcNode = pSrcNode->pNext;	while(pSrcNode){		pDstNode->pNext = (PClipRect)HeapAlloc(pSrc->pHeap);		memcpy(&pDstNode->pNext->rect,&pSrcNode->rect,sizeof(RECT));		pDstNode = pDstNode->pNext;		pSrcNode = pSrcNode->pNext;	}	pDstNode->pNext = NULL;	pDst->pTail = pDstNode;	memcpy(&pDst->rcBound,&pSrc->rcBound,sizeof(RECT));	return true;}//Add a rect to clip region//no recalculate boundary of clip regionBOOLAddRectClipRegion(	PClipRegion pClipRegion,	const PRECT prc){	PClipRect pNodeList;	if(!pClipRegion)		return false;	if(!pClipRegion->pHeap)		return false;	pNodeList = (PClipRect)HeapAlloc(pClipRegion->pHeap);	memcpy(&pNodeList->rect,prc,sizeof(RECT));	pNodeList->pNext = NULL;	if(!pClipRegion->pHead){		pClipRegion->pHead = pClipRegion->pTail = pNodeList;		memcpy(&pClipRegion->rcBound,prc,sizeof(RECT));	}	else{		pClipRegion->pTail->pNext = pNodeList;		pClipRegion->pTail = pNodeList;	}	return true;}//every rect of clip region will be clipped by the prcBOOLIntersectClipRegion(	PClipRegion pClipRegion, 	const PRECT prc){	PClipRect pNodeList;	NormalizeRect(prc);	pNodeList = pClipRegion->pHead;	while(pNodeList){		if(!IntersectRect(&pNodeList->rect,&pNodeList->rect,prc))			SetRectEmpty(&pNodeList->rect);		pNodeList = pNodeList->pNext;	}	GetBoundClipRegion(pClipRegion);	return true;}BOOLSubtractClipRegion(	PClipRegion pClipRegion, 	const PRECT prc){//	RECT rcDest;	int i,iCount;	RECT rcNew[4];	RECT rcClip;	RECT rcThis;	PClipRect pNodeList, pInsertPos,pNewNode;	if(!pClipRegion)		return false;	if(!pClipRegion->pHeap)		return false;	memcpy(&rcClip,prc,sizeof(RECT));	NormalizeRect(&rcClip);	InflateRect(&rcClip,1,1);	pNodeList = pClipRegion->pHead;	if(!IsIntersect(&rcClip, &pClipRegion->rcBound))		return true;	while(pNodeList){		if(!IsIntersect(&pNodeList->rect,&rcClip)){			pNodeList = pNodeList->pNext;			continue;		}		memcpy(&rcThis,&pNodeList->rect,sizeof(RECT));		iCount = 0;		if(rcClip.top >= rcThis.top){			memcpy(&rcNew[iCount],&rcThis,sizeof(RECT));			rcNew[iCount].bottom = rcClip.top;			rcThis.top = rcClip.top;			iCount ++;		}		if(rcClip.bottom <= rcThis.bottom){			memcpy(&rcNew[iCount],&rcThis,sizeof(RECT));			rcNew[iCount].top = rcClip.bottom;			rcThis.bottom = rcClip.bottom;			iCount ++;		}		if(rcClip.left >= rcThis.left){			memcpy(&rcNew[iCount],&rcThis,sizeof(RECT));			rcNew[iCount].right = rcClip.left;			iCount ++;		}		if(prc->right <= rcThis.right){			memcpy(&rcNew[iCount],&rcThis,sizeof(RECT));			rcNew[iCount].left = rcClip.right;			iCount ++;		}		if(!iCount){			SetRectEmpty(&pNodeList->rect);		}		else{			pInsertPos = pNodeList->pNext;			memcpy(&pNodeList->rect,&rcNew[0],sizeof(RECT));			for(i=1;i<iCount;i++){				pNewNode = (PClipRect)HeapAlloc(pClipRegion->pHeap);				memcpy(&pNewNode->rect,&rcNew[i],sizeof(RECT));				pNodeList->pNext = pNewNode;				pNodeList = pNodeList->pNext;			}			pNodeList->pNext = pInsertPos;		}		pNodeList = pNodeList->pNext;	}	GetBoundClipRegion(pClipRegion);	return true;}//get intersect between a clipregion and a invalidate regionBOOL  ClipRgnIntersectInvRgn(	PClipRegion pRstRegion, 	const PClipRegion pClipRegion, 	const PInvalidRegion pInvalidRegion){	RECT rc;	PClipRect pClipRect,pNewNode;	PInvalidRect pInvalidRect;	if(!pClipRegion)		return false;	if(!pInvalidRegion)		return false;	if(!pRstRegion)		return false;	if(!pRstRegion->pHeap)		return false;	if(!IsIntersect(&pClipRegion->rcBound,&pInvalidRegion->rcBound))		return true;	pClipRect = pClipRegion->pHead;	pInvalidRect = pInvalidRegion->pHead;	while(pClipRect){		while(pInvalidRect){			if(IntersectRect(&rc,&(pClipRect->rect),&(pInvalidRect->rect))){				pNewNode = (PClipRect)HeapAlloc(pRstRegion->pHeap);				pNewNode->pNext = NULL;				memcpy(&pNewNode->rect,&rc,sizeof(RECT));				if(!pRstRegion->pHead){					pRstRegion->pHead = pRstRegion->pTail = pNewNode;				}				else{					pRstRegion->pTail->pNext = pNewNode;					pRstRegion->pTail = pNewNode;				}			}			pInvalidRect = pInvalidRect->pNext;		}		pInvalidRect = pInvalidRegion->pHead;		pClipRect = pClipRect->pNext;	}		GetBoundClipRegion(pRstRegion);	return true;}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美激情一二三区| 欧美手机在线视频| 国产精品视频一二三| 大桥未久av一区二区三区中文| 欧美国产一区二区在线观看| 国产白丝网站精品污在线入口| 久久精品日韩一区二区三区| 成人97人人超碰人人99| 亚洲人成伊人成综合网小说| 欧洲国产伦久久久久久久| 亚洲愉拍自拍另类高清精品| 欧美亚洲国产bt| 狂野欧美性猛交blacked| 国产亚洲欧美在线| 91网站在线播放| 五月激情综合色| 久久久久久黄色| 欧美色电影在线| 国产一区二区福利视频| 亚洲美腿欧美偷拍| 日韩一区二区视频| 成人黄页在线观看| 午夜视频在线观看一区二区| 国产午夜久久久久| 在线观看亚洲a| 麻豆91精品91久久久的内涵| 中文字幕一区二区三中文字幕| 欧美中文字幕亚洲一区二区va在线| 久久精品国内一区二区三区 | 欧美精品黑人性xxxx| 久久疯狂做爰流白浆xx| |精品福利一区二区三区| 欧美一区二区三区在线视频| av中文字幕一区| 久久国产精品第一页| 一级做a爱片久久| 久久婷婷成人综合色| 欧美日韩精品专区| 成人av在线播放网址| 蜜桃免费网站一区二区三区| 亚洲黄色尤物视频| 久久久久亚洲蜜桃| 欧美日韩免费一区二区三区| 成人激情视频网站| 欧美aaa在线| 亚洲成av人片www| 亚洲欧美偷拍三级| 精品国产一区二区国模嫣然| 在线观看日韩精品| 成人av先锋影音| 国产乱人伦偷精品视频免下载 | 麻豆精品在线观看| 亚洲动漫第一页| 蜜乳av一区二区三区| 亚洲色图视频网| 国产日韩欧美麻豆| 日韩一区二区三区免费看| 欧美性一二三区| 91视频com| 91在线观看成人| 国产综合色产在线精品| 麻豆一区二区在线| 老鸭窝一区二区久久精品| 亚洲国产精品久久艾草纯爱| 亚洲美女视频一区| √…a在线天堂一区| 国产精品私人影院| 久久婷婷国产综合精品青草| 欧美mv日韩mv亚洲| 精品理论电影在线| 欧美变态tickling挠脚心| 欧美一区二区三区日韩视频| 欧美日产国产精品| 欧美精品丝袜中出| 欧美一区二区高清| 精品区一区二区| 久久你懂得1024| 国产女同性恋一区二区| 国产精品久久久久久久久免费丝袜 | 在线不卡一区二区| 欧美一区二区三区性视频| 欧美一级片在线看| 欧美精品一区二区三区很污很色的| 欧美一区二区三区四区视频| 日韩免费观看2025年上映的电影| 日韩精品在线一区| 久久综合久色欧美综合狠狠| 久久久亚洲国产美女国产盗摄| 国产丝袜欧美中文另类| 中文字幕亚洲电影| 亚洲欧美日韩国产中文在线| 亚洲第一在线综合网站| 麻豆精品国产传媒mv男同| 国内偷窥港台综合视频在线播放| 国内精品伊人久久久久影院对白| 成人夜色视频网站在线观看| 91啪亚洲精品| 91.com视频| 久久久不卡影院| 亚洲女人的天堂| 日本成人在线一区| 国产成人精品免费视频网站| a级精品国产片在线观看| 欧美日韩一区二区三区在线| 日韩丝袜情趣美女图片| 国产偷国产偷精品高清尤物| 一区二区三区在线视频播放| 蜜臀av国产精品久久久久 | 久久精品国产久精国产| 国产成人精品免费| 欧美日韩精品专区| 国产欧美综合色| 亚洲午夜精品网| 国产一区久久久| 色国产综合视频| 精品久久久网站| 一区二区三区在线免费| 久久国产精品72免费观看| 91社区在线播放| 欧美精品一区二区精品网| 一区在线观看视频| 精品一区在线看| 在线影视一区二区三区| wwwwww.欧美系列| 亚洲精品水蜜桃| 国产精品1区二区.| 欧美伦理电影网| 亚洲免费毛片网站| 国产专区欧美精品| 欧美日韩精品一区二区三区蜜桃 | 国产精品久久久久永久免费观看| 三级亚洲高清视频| 99久久99久久精品免费观看 | 欧美精品aⅴ在线视频| 日本一二三四高清不卡| 免费在线观看成人| 欧美日韩精品一区二区| 欧美国产激情一区二区三区蜜月 | 国产一区二区三区观看| 欧美日韩一级片网站| 成人免费一区二区三区视频| 久久91精品久久久久久秒播| 欧美色涩在线第一页| 中文字幕精品一区二区精品绿巨人 | 一区二区三区在线视频免费观看| 国产一区不卡在线| 日韩一二三区不卡| 亚洲超碰97人人做人人爱| 99re热这里只有精品视频| 久久精品欧美一区二区三区麻豆| 久久er99热精品一区二区| 7777精品伊人久久久大香线蕉的 | 国产精品久久久久国产精品日日| 久久精品二区亚洲w码| 欧美日韩国产精品成人| 一区二区三区蜜桃网| 色综合中文字幕| 综合色中文字幕| 99热在这里有精品免费| 国产精品三级电影| 99久久国产免费看| 中文字幕在线免费不卡| 成人小视频免费观看| 欧美激情一区二区三区不卡| 国产99精品国产| 国产精品美女久久久久久久久久久| 国产成人精品免费一区二区| 国产亚洲视频系列| av在线免费不卡| 亚洲自拍偷拍图区| 欧美日本在线视频| 美腿丝袜在线亚洲一区| 精品久久久久久久人人人人传媒 | 国产精品资源在线观看| 久久众筹精品私拍模特| 国产成人免费xxxxxxxx| 亚洲视频资源在线| 91官网在线免费观看| 亚洲一区二区精品3399| 制服.丝袜.亚洲.另类.中文| 蜜臀av一区二区在线免费观看| 精品乱人伦一区二区三区| 国产成人亚洲综合a∨猫咪| 国产日韩欧美在线一区| 91影院在线免费观看| 亚洲主播在线观看| 欧美一区二区成人6969| 国产伦精品一区二区三区免费 | 久久精品国产精品亚洲精品| 久久女同精品一区二区| 99久久综合色| 亚洲成a人在线观看| 日韩欧美一二区| www.久久精品| 日韩av二区在线播放| 91精品国产91久久久久久一区二区| 国产制服丝袜一区| 亚洲男帅同性gay1069| 欧美一级搡bbbb搡bbbb| 蜜臀av一区二区三区|