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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? cliprect.c

?? 這是針對 Linux (i386)平臺的 minigui 3.6.2 開發(fā)包(MiniGUI-Processes 運行模式)。
?? C
字號:
/*** $Id: cliprect.c,v 1.5 2004/04/01 08:57:13 weiym Exp $** ** cliprect.c: the Clip Rect module.** ** Copyright (C) 2003 Feynman Software.** Copyright (C) 1999 ~ 2002, Wei Yongming**** Current maintainer: Wei Yongming.**** Create date: 1999/3/26 by Wei Yongming.*//*** 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*//*** TODO:*/ #include <stdio.h>#include <stdlib.h>#include <errno.h>#include "common.h"#include "gdi.h"#include "cliprect.h"#include "gal.h"#include "blockheap.h"/************************** clip region operation ****************************/static void EvaluateBoundRect (PCLIPRGN pRgn){    PCLIPRECT pCRect, pTemp;    pCRect = pRgn->head;    if (pCRect == NULL) {        SetRectEmpty (&pRgn->rcBound);        return;    }    pRgn->rcBound = pCRect->rc;    pCRect = pCRect->next;    while (pCRect) {        if(pRgn->rcBound.left > pCRect->rc.left)            pRgn->rcBound.left = pCRect->rc.left;           if(pRgn->rcBound.top > pCRect->rc.top)            pRgn->rcBound.top = pCRect->rc.top;        if(pRgn->rcBound.right < pCRect->rc.right)            pRgn->rcBound.right = pCRect->rc.right;        if(pRgn->rcBound.bottom < pCRect->rc.bottom)            pRgn->rcBound.bottom = pCRect->rc.bottom;        pCRect = pCRect->next;    }    // Remove empty clip rects.    pCRect = pRgn->head;    while (pCRect->next) {        if (IsRectEmpty (&pCRect->next->rc)) {            pTemp = pCRect->next;            pCRect->next = pTemp->next;            FreeClipRect (pRgn->heap, pTemp);        }        else            pCRect = pCRect->next;    }    pRgn->tail = pCRect;    if (IsRectEmpty (&pRgn->head->rc)) {        pTemp = pRgn->head;        pRgn->head = pTemp->next;        FreeClipRect (pRgn->heap, pTemp);    }}void GUIAPI InitClipRgn (PCLIPRGN pRgn, PBLOCKHEAP heap){     SetRectEmpty (&pRgn->rcBound);     pRgn->head = NULL;     pRgn->tail = NULL;     pRgn->heap = heap;   // read-only field.}void GUIAPI GetClipRgnBoundRect (PCLIPRGN pRgn, PRECT pRect){     *pRect = pRgn->rcBound;}/* return TRUE if point is in region */BOOL GUIAPI PtInRegion (PCLIPRGN region, int x, int y){    PCLIPRECT cliprect = region->head;    /* check with bounding rect of clipping region */    if (!PtInRect (&region->rcBound, x, y))        return FALSE;    /* find the ban in which this point lies */    cliprect = region->head;    while (cliprect) {        if (PtInRect (&cliprect->rc, x, y))            return TRUE;        cliprect = cliprect->next;    }    return FALSE;}/* Returns TRUE if rect is at least partly inside region */BOOL GUIAPI RectInRegion (PCLIPRGN region, const RECT* rect){    PCLIPRECT cliprect = region->head;    /* check with bounding rect of clipping region */    if (!DoesIntersect (&region->rcBound, rect))        return FALSE;    /* find the ban in which this point lies */    cliprect = region->head;    while (cliprect) {        if (DoesIntersect (&cliprect->rc, rect))            return TRUE;        cliprect = cliprect->next;    }    return FALSE;}void GUIAPI OffsetRegion (PCLIPRGN region, int x, int y){    CLIPRECT* cliprect = region->head;    while (cliprect) {        OffsetRect (&cliprect->rc, x, y);        cliprect = cliprect->next;    }    if (region->head) {        OffsetRect (&region->rcBound, x, y);    }}BOOL GUIAPI SetClipRgn (PCLIPRGN pRgn, const RECT* pRect){    PCLIPRECT pClipRect;    RECT rcTemp;    rcTemp = *pRect;    if (IsRectEmpty (&rcTemp))        return FALSE;    NormalizeRect (&rcTemp);    // empty rgn first    EmptyClipRgn (pRgn);    // get a new clip rect from free list    pClipRect = ClipRectAlloc (pRgn->heap);    // set clip rect    pClipRect->rc = rcTemp;    pClipRect->next = NULL;    pRgn->head = pRgn->tail = pClipRect;    pRgn->rcBound = rcTemp;    return TRUE;} BOOL GUIAPI IsEmptyClipRgn (const CLIPRGN* pRgn){     if (pRgn->head == NULL)         return TRUE;     return FALSE;}void GUIAPI EmptyClipRgn (PCLIPRGN pRgn){     PCLIPRECT pCRect, pTemp;     pCRect = pRgn->head;     while (pCRect) {         pTemp = pCRect->next;         FreeClipRect (pRgn->heap, pCRect);         pCRect = pTemp;     }     SetRectEmpty (&pRgn->rcBound);     pRgn->head = NULL;     pRgn->tail = NULL;}BOOL GUIAPI ClipRgnCopy (PCLIPRGN pDstRgn, const CLIPRGN* pSrcRgn){    PCLIPRECT pcr;    PCLIPRECT pnewcr;    // return false if the destination region is not a empty one.    if (pDstRgn->head) return FALSE;    if (!(pcr = pSrcRgn->head)) return TRUE;    pnewcr = ClipRectAlloc (pDstRgn->heap);    pDstRgn->head = pnewcr;    pnewcr->rc = pcr->rc;    while (pcr->next) {       pcr = pcr->next;       pnewcr->next = ClipRectAlloc (pDstRgn->heap);       pnewcr = pnewcr->next;       pnewcr->rc = pcr->rc;    }    pnewcr->next = NULL;    pDstRgn->tail = pnewcr;    pDstRgn->rcBound = pSrcRgn->rcBound;     return TRUE;}BOOL GUIAPI ClipRgnIntersect (PCLIPRGN pRstRgn,                        const CLIPRGN* pRgn1, const CLIPRGN* pRgn2){    RECT rc;    PCLIPRECT pnewcr;    PCLIPRECT pcr1, pcr2;    if (pRstRgn->head) return FALSE;    if (!(pcr1 = pRgn1->head)) return TRUE;    if (!(pcr2 = pRgn2->head)) return TRUE;    pnewcr = ClipRectAlloc (pRstRgn->heap);    pnewcr->next = NULL;    pRstRgn->head = pnewcr;    while (pcr1) {        while (pcr2) {            if (IntersectRect (&rc, &pcr1->rc, &pcr2->rc)) {               pnewcr->rc = rc;               pnewcr->next = ClipRectAlloc (pRstRgn->heap);            }            pcr2 = pcr2->next;        }        pcr2 = pRgn2->head;        pcr1 = pcr1->next;    }    pRstRgn->tail = pnewcr;    if (pnewcr->next)    {        FreeClipRect(pRstRgn->heap, pnewcr->next);        pnewcr->next = NULL;    }    EvaluateBoundRect(pRstRgn);    return TRUE;}BOOL GUIAPI AddClipRect (PCLIPRGN pRgn, const RECT* pRect){     PCLIPRECT pClipRect;     RECT rcTemp;     rcTemp = *pRect;     if (IsRectEmpty (&rcTemp))         return FALSE;     NormalizeRect (&rcTemp);     pClipRect = ClipRectAlloc (pRgn->heap);     pClipRect->rc = rcTemp;     pClipRect->next = NULL;     if (pRgn->head) {         pRgn->tail->next = pClipRect;         pRgn->tail = pClipRect;     }     else {         pRgn->head = pRgn->tail = pClipRect;     }     return TRUE;}BOOL GUIAPI IntersectClipRect (PCLIPRGN pRgn, const RECT* pRect){    PCLIPRECT pCRect;    RECT rcTemp;     if (IsRectEmpty (pRect)) {        EmptyClipRgn (pRgn);        return TRUE;    }    rcTemp = *pRect;    NormalizeRect (&rcTemp);    // intersect    pCRect = pRgn->head;    while (pCRect) {        if (!IntersectRect (&pCRect->rc, &pCRect->rc, &rcTemp))            SetRectEmpty(&pCRect->rc);        pCRect = pCRect->next;    }    EvaluateBoundRect (pRgn);    return TRUE;}BOOL GUIAPI SubtractClipRect (PCLIPRGN pRgn, const RECT* pRect){    PCLIPRECT pCRect, pSaved, pTemp;    RECT rc[4], rcTemp, rcInflated;    int nCount;    PRECT src, erc;    int i;    if (IsRectEmpty (pRect))        return FALSE;    rcInflated = *pRect;    erc = &rcInflated;    NormalizeRect (erc);    if (!DoesIntersect(&pRgn->rcBound, erc)) {        return FALSE;    }    pCRect = pRgn->head;    while (pCRect) {        src = &pCRect->rc;        if (!IntersectRect(&rcTemp, src, erc)) {            pCRect = pCRect->next;            continue;        }        pSaved = pCRect->next;        nCount = 0;        if(erc->top > src->top)        {            rc[nCount].left  = src->left;            rc[nCount].top   = src->top;            rc[nCount].right = src->right;            rc[nCount].bottom = erc->top;            nCount++;            src->top = erc->top;        }        if(erc->bottom < src->bottom)        {            rc[nCount].top  = erc->bottom;            rc[nCount].left   = src->left;            rc[nCount].right = src->right;            rc[nCount].bottom = src->bottom;            nCount++;             src->bottom = erc->bottom;        }        if(erc->left > src->left)        {            rc[nCount].left  = src->left;            rc[nCount].top   = src->top;            rc[nCount].right = erc->left;            rc[nCount].bottom = src->bottom;            nCount++;        }        if(erc->right < src->right)        {            rc[nCount].left  = erc->right;            rc[nCount].top   = src->top;            rc[nCount].right = src->right;            rc[nCount].bottom = src->bottom;            nCount++;        }        if (nCount == 0)            SetRectEmpty (&pCRect->rc);        else if(nCount > 0)            pCRect->rc = rc[0];        for(i = 1; i<nCount; i++)        {            pTemp = ClipRectAlloc (pRgn->heap);             pTemp->rc = rc[i];            pCRect->next = pTemp;            pCRect = pTemp;        }        pCRect->next = pSaved;        pCRect = pSaved;    }    EvaluateBoundRect (pRgn);    return TRUE;}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲乱码国产乱码精品精的特点| 欧美男同性恋视频网站| 欧美经典一区二区三区| 欧美色综合网站| 国产美女精品一区二区三区| 亚洲成人免费视| 国产精品毛片高清在线完整版| 91精品国产欧美一区二区18| 懂色一区二区三区免费观看 | 日韩一区二区高清| 麻豆国产精品视频| 精品国产免费久久| a亚洲天堂av| 亚洲自拍偷拍av| 亚洲精品一区二区三区在线观看| 精品亚洲欧美一区| 亚洲日本va午夜在线影院| 欧美综合欧美视频| 激情五月婷婷综合| 自拍偷拍亚洲激情| 日韩欧美国产综合一区| 成人午夜伦理影院| 日本不卡一区二区三区高清视频| 久久人人爽爽爽人久久久| 99精品视频在线播放观看| 捆绑变态av一区二区三区| 中文字幕成人av| 欧美一区二区免费| 91久久精品一区二区二区| 久久99国产精品成人| 亚洲小说春色综合另类电影| 欧美国产成人在线| 日韩午夜中文字幕| 高清国产一区二区| 日韩综合在线视频| 成人欧美一区二区三区小说| 欧美韩国日本综合| 日韩免费观看高清完整版| 在线免费不卡视频| 色伊人久久综合中文字幕| 国产精品一区二区在线观看网站 | 91精品在线观看入口| 成人a免费在线看| 国产精品自拍毛片| 国产精品白丝jk黑袜喷水| 日韩国产高清影视| 天天做天天摸天天爽国产一区 | 久久久一区二区| 欧美va亚洲va在线观看蝴蝶网| 欧美系列亚洲系列| 欧美日韩久久久一区| 欧美性受xxxx黑人xyx性爽| 94色蜜桃网一区二区三区| 日本高清视频一区二区| 欧美在线免费播放| 欧美一卡二卡三卡| 久久久久久免费| 国产精品初高中害羞小美女文| 欧美国产日韩亚洲一区| 中文字幕综合网| 亚洲国产成人va在线观看天堂| 亚洲国产成人av网| 九九久久精品视频| av在线播放一区二区三区| 色94色欧美sute亚洲13| 日韩一区二区三免费高清| 久久久久久久久久久久电影| 亚洲成人动漫在线观看| 成人免费黄色大片| 日韩午夜av电影| 亚洲一区二区三区三| 国产成人午夜高潮毛片| 91精品在线观看入口| 亚洲综合成人在线视频| 91婷婷韩国欧美一区二区| 久久精品视频一区二区| 蜜臀av一级做a爰片久久| 欧美嫩在线观看| 亚洲电影视频在线| 91精品在线麻豆| 天天综合天天综合色| 激情亚洲综合在线| 91精品国产欧美一区二区| 亚洲男人电影天堂| 99麻豆久久久国产精品免费| 日韩欧美色电影| 亚洲国产美国国产综合一区二区 | 国产欧美日本一区视频| 蜜臀a∨国产成人精品| 欧美亚洲国产bt| 一片黄亚洲嫩模| 91国内精品野花午夜精品 | 91九色最新地址| 亚洲综合色婷婷| 在线观看日韩毛片| 亚洲精品视频免费看| 91麻豆.com| 偷拍与自拍一区| 日韩一区二区三区精品视频| 图片区小说区国产精品视频| 欧美日韩国产综合久久| 性做久久久久久久久| 欧美一区二区在线播放| 韩国欧美国产1区| 国产清纯在线一区二区www| 成人午夜又粗又硬又大| 亚洲女同一区二区| 欧美老女人第四色| 国产精品综合久久| 亚洲精品高清视频在线观看| 91精品国产综合久久久蜜臀图片 | 91国偷自产一区二区三区成为亚洲经典 | 国产精品中文欧美| 亚洲图片另类小说| 日韩欧美一区电影| 91在线视频在线| 久久福利资源站| 亚洲国产日韩综合久久精品| 欧美videofree性高清杂交| 色综合咪咪久久| 韩国中文字幕2020精品| 亚洲福利一区二区三区| 欧美mv日韩mv国产网站app| 色婷婷久久一区二区三区麻豆| 日本女优在线视频一区二区| 久久精品视频在线免费观看| 欧美日本高清视频在线观看| 成人黄色软件下载| 麻豆视频一区二区| 亚洲成人中文在线| 亚洲综合区在线| 久久五月婷婷丁香社区| 制服丝袜在线91| 欧美午夜不卡在线观看免费| 国产成人午夜精品影院观看视频 | 91首页免费视频| 国产69精品久久777的优势| 麻豆传媒一区二区三区| 亚洲成a人在线观看| 亚洲婷婷在线视频| 国产欧美日韩在线| 在线不卡免费av| 成人激情综合网站| 九九久久精品视频| 性久久久久久久| 亚洲欧洲99久久| 国产午夜精品美女毛片视频| 欧美精品久久久久久久久老牛影院| 不卡一区二区中文字幕| 精品影视av免费| 美女网站色91| 日韩av不卡一区二区| 一区二区三区欧美日| 亚洲视频图片小说| 国产欧美精品一区二区色综合朱莉| 欧美日韩一区二区三区视频| 成人久久视频在线观看| 另类专区欧美蜜桃臀第一页| 亚洲成人你懂的| 日本中文字幕不卡| 日韩高清不卡一区二区三区| 亚洲v日本v欧美v久久精品| 亚洲国产精品久久人人爱 | 久久久精品免费免费| 亚洲国产日产av| 久久91精品久久久久久秒播| 国产成人精品亚洲日本在线桃色| 91丨porny丨首页| 欧美mv和日韩mv的网站| 亚洲色图制服丝袜| 国产精品一区二区免费不卡 | 一本一本久久a久久精品综合麻豆 一本一道波多野结衣一区二区 | 国产女同性恋一区二区| 综合久久一区二区三区| 亚洲综合在线观看视频| 粉嫩aⅴ一区二区三区四区五区| 欧美精品三级在线观看| 久久综合久久鬼色| 亚洲色图欧美激情| 青草av.久久免费一区| av电影在线观看完整版一区二区| 欧美色视频一区| 久久免费偷拍视频| 亚洲综合色在线| 福利电影一区二区| 欧美区在线观看| 亚洲天堂福利av| 国产高清不卡一区| 欧美手机在线视频| 亚洲综合男人的天堂| 一本久久综合亚洲鲁鲁五月天 | 91精品国产欧美一区二区18 | 免费日韩伦理电影| 91国内精品野花午夜精品| 精品av综合导航| 秋霞电影一区二区| 91精品麻豆日日躁夜夜躁| 美女一区二区久久| 国产亚洲欧美色| 激情文学综合插|