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

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

?? cursor.c

?? 這是針對 Linux (i386)平臺的 minigui 3.6.2 開發包(MiniGUI-Processes 運行模式)。
?? C
?? 第 1 頁 / 共 2 頁
字號:
/*** $Id: cursor.c,v 1.55 2004/04/16 08:39:36 weiym Exp $**** cursor.c: the Cursor Support module of MiniGUI.**** Copyright (C) 2003 Feynman Software.** Copyright (C) 1999 ~ 2002 Wei Yongming.**** Current maintainer: Wei Yongming.**** Create date: 1999.01.06*//*** 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 <stdio.h>#include <stddef.h>#include <stdlib.h>#include <string.h>#include <errno.h>#include "common.h"#include "minigui.h"#include "gdi.h"#include "window.h"#include "cliprect.h"#include "internals.h"#include "ctrlclass.h"#include "gal.h"#include "dc.h"#include "memops.h"#include "inline.h"#include "gal.h"#include "cursor.h"#include "ial.h"#include "readbmp.h"#include "misc.h"#include "cursor.h"#include "sysres.h"// mutex ensuring exclusive access to mouse.pthread_mutex_t __mg_mouselock;static int curx, cury;static int oldx = -1, oldy;static RECT cliprc = { 0, 0, 0, 0};#ifdef _CURSOR_SUPPORT static PCURSOR SysCursor [MAX_SYSCURSORINDEX + 1];static HCURSOR def_cursor;static BYTE* savedbits = NULL;static BYTE* cursorbits = NULL;static int csrimgsize;static int csrimgpitch; static int oldboxleft = -100, oldboxtop = -100;static int nShowCount = 0;static PCURSOR pCurCsr = NULL;#ifdef _USE_NEWGALUint8* GetPixelUnderCursor (int x, int y, gal_pixel* pixel){    Uint8* dst = NULL;        pthread_mutex_lock (&__mg_mouselock);    if (nShowCount >= 0 && pCurCsr            && x >= oldboxleft && y >= oldboxtop            && (x < oldboxleft + CURSORWIDTH)            && (y < oldboxtop + CURSORHEIGHT)) {        int _x = x - oldboxleft;        int _y = y - oldboxtop;        dst = savedbits + _y * csrimgpitch                + _x * __gal_screen->format->BytesPerPixel;        *pixel = _mem_get_pixel (dst, __gal_screen->format->BytesPerPixel);    }    pthread_mutex_unlock (&__mg_mouselock);    return dst;}#endif// Cursor creating and destroying.// Only called from InitCursor and client code.HCURSOR GUIAPI LoadCursorFromFile(const char* filename){    FILE* fp;    WORD wTemp;    int  w, h, xhot, yhot, colornum;    DWORD size, offset;    DWORD imagesize, imagew, imageh;    BYTE* image;    HCURSOR csr = 0;        if( !(fp = fopen(filename, "rb")) ) return 0;    fseek(fp, sizeof(WORD), SEEK_SET);    // the cbType of struct CURSORDIR.    wTemp = MGUI_ReadLE16FP (fp);    if(wTemp != 2) goto error;    // skip the cdCount of struct CURSORDIR, we always use the first cursor.    fseek(fp, sizeof(WORD), SEEK_CUR);        // cursor info, read the members of struct CURSORDIRENTRY.    w = fgetc (fp);  // the width of first cursor.    h = fgetc (fp);  // the height of first cursor.    if(w != CURSORWIDTH || h != CURSORHEIGHT) goto error;    fseek(fp, sizeof(BYTE)*2, SEEK_CUR); // skip the bColorCount and bReserved.    wTemp = MGUI_ReadLE16FP (fp);    xhot = wTemp;    wTemp = MGUI_ReadLE16FP (fp);    yhot = wTemp;    size = MGUI_ReadLE32FP (fp);    offset = MGUI_ReadLE32FP (fp);    // read the cursor image info.    fseek(fp, offset, SEEK_SET);    fseek(fp, sizeof(DWORD), SEEK_CUR); // skip the biSize member.    imagew = MGUI_ReadLE32FP (fp);    imageh = MGUI_ReadLE32FP (fp);    // check the biPlanes member;    wTemp = MGUI_ReadLE16FP (fp);    if(wTemp != 1) goto error;    // check the biBitCount member;    wTemp = MGUI_ReadLE16FP (fp);    if(wTemp > 4) goto error;    colornum = (int)wTemp;    fseek(fp, sizeof(DWORD), SEEK_CUR); // skip the biCompression members.    imagesize = MGUI_ReadLE32FP (fp);    // skip the rest members and the color table.    fseek(fp, sizeof(DWORD)*4 + sizeof(BYTE)*(4<<colornum), SEEK_CUR);        // allocate memory for image.    if ((image = (BYTE*)ALLOCATE_LOCAL (imagesize)) == NULL)        goto error;    // read image    fread (image, imagesize, 1, fp);        csr = CreateCursor(xhot, yhot, w, h,                         image + (imagesize - MONOSIZE), image, colornum);    DEALLOCATE_LOCAL (image);error:    fclose (fp);    return csr;}HCURSOR GUIAPI LoadCursorFromMem (const void* area){    const Uint8* p = (Uint8*)area;    WORD wTemp;    int  w, h, xhot, yhot, colornum;    DWORD size, offset;    DWORD imagesize, imagew, imageh;        p += sizeof (WORD);    wTemp = MGUI_ReadLE16Mem (&p);    if(wTemp != 2) goto error;    // skip the cdCount of struct CURSORDIR, we always use the first cursor.    p += sizeof (WORD);        // cursor info, read the members of struct CURSORDIRENTRY.    w = *p++;  // the width of first cursor.    h = *p++;  // the height of first cursor.    if (w != CURSORWIDTH || h != CURSORHEIGHT)        goto error;    // skip the bColorCount and bReserved.    p += sizeof(BYTE)*2;    xhot = MGUI_ReadLE16Mem (&p);    yhot = MGUI_ReadLE16Mem (&p);    size = MGUI_ReadLE32Mem (&p);    offset = MGUI_ReadLE32Mem (&p);    // read the cursor image info.    p = (Uint8*)area + offset;    // skip the biSize member.    p += sizeof (DWORD);        imagew = MGUI_ReadLE32Mem (&p);    imageh = MGUI_ReadLE32Mem (&p);    // check the biPlanes member;    wTemp = MGUI_ReadLE16Mem (&p);    if (wTemp != 1) goto error;    // check the biBitCount member;    wTemp = MGUI_ReadLE16Mem (&p);    if (wTemp > 4) goto error;    colornum = wTemp;    // skip the biCompression members.    p += sizeof (DWORD);        imagesize = MGUI_ReadLE32Mem (&p);    // skip the rest members and the color table.    p += sizeof(DWORD)*4 + sizeof(BYTE)*(4<<colornum);        return CreateCursor (xhot, yhot, w, h,                         p + (imagesize - MONOSIZE), p, colornum);error:    return 0;}#ifdef _USE_NEWGALstatic BITMAP csr_bmp = {BMP_TYPE_NORMAL, 0, 0, 0, 0, CURSORWIDTH, CURSORHEIGHT};#endif// Only called from InitCursor and client code.HCURSOR GUIAPI CreateCursor(int xhotspot, int yhotspot, int w, int h,                     const BYTE* pANDBits, const BYTE* pXORBits, int colornum){    PCURSOR pcsr;        if( w != CURSORWIDTH || h != CURSORHEIGHT ) return 0;    // allocate memory.    if( !(pcsr = (PCURSOR)malloc(sizeof(CURSOR))) ) return 0;    if( !(pcsr->AndBits = malloc(csrimgsize)) ) {        free(pcsr);        return 0;    }    if( !(pcsr->XorBits = malloc(csrimgsize)) ) {        free(pcsr->AndBits);        free(pcsr);        return 0;    }    pcsr->xhotspot = xhotspot;    pcsr->yhotspot = yhotspot;    pcsr->width = w;    pcsr->height = h;#ifdef _USE_NEWGAL    if (colornum == 1) {        ExpandMonoBitmap (HDC_SCREEN, pcsr->AndBits, csrimgpitch, pANDBits, MONOPITCH,                        w, h, MYBMP_FLOW_UP, 0, 0xFFFFFFFF);        ExpandMonoBitmap (HDC_SCREEN, pcsr->XorBits, csrimgpitch, pXORBits, MONOPITCH,                        w, h, MYBMP_FLOW_UP, 0, 0xFFFFFFFF);    }    else if (colornum == 4) {        ExpandMonoBitmap (HDC_SCREEN, pcsr->AndBits, csrimgpitch, pANDBits, MONOPITCH,                        w, h, MYBMP_FLOW_UP, 0, 0xFFFFFFFF);        Expand16CBitmap (HDC_SCREEN, pcsr->XorBits, csrimgpitch, pXORBits, MONOPITCH*4,                        w, h, MYBMP_FLOW_UP, NULL);    }#else    if(colornum == 1) {        ExpandMonoBitmap (HDC_SCREEN, w, h, pANDBits, MONOPITCH, MYBMP_FLOW_UP,                         pcsr->AndBits, csrimgpitch, 0, 0xFFFFFFFF);        ExpandMonoBitmap (HDC_SCREEN, w, h, pXORBits, MONOPITCH, MYBMP_FLOW_UP,                         pcsr->XorBits, csrimgpitch, 0, 0xFFFFFFFF);    }    else if(colornum == 4) {        ExpandMonoBitmap (HDC_SCREEN, w, h, pANDBits, MONOPITCH, MYBMP_FLOW_UP,                         pcsr->AndBits, csrimgpitch, 0, 0xFFFFFFFF);        Expand16CBitmap (HDC_SCREEN, w, h, pXORBits, MONOPITCH*4, MYBMP_FLOW_UP,                        pcsr->XorBits, csrimgpitch, NULL);    }#endif    return (HCURSOR)pcsr;}// Only called from client code.BOOL GUIAPI DestroyCursor(HCURSOR hcsr){    int i;    PCURSOR pcsr = (PCURSOR)hcsr;    if (pcsr == NULL)        return TRUE;    for(i = 0; i <= MAX_SYSCURSORINDEX; i++)    {        if(pcsr == SysCursor[i])            return FALSE;    }    free(pcsr->AndBits);    free(pcsr->XorBits);    free(pcsr);    return TRUE;}// Only called from client code, and accessed items are not changable ones.HCURSOR GUIAPI GetSystemCursor(int csrid){    if(csrid > MAX_SYSCURSORINDEX || csrid < 0)        return 0;     return (HCURSOR)(SysCursor[csrid]);}HCURSOR GUIAPI GetDefaultCursor (void){    return def_cursor;}#define CURSORSECTION   "cursorinfo"BOOL InitCursor(void){    char szValue[MAX_NAME + 1];    int number;    int i;#ifdef _USE_NEWGAL    csrimgsize = GAL_GetBoxSize (__gal_screen, CURSORWIDTH, CURSORHEIGHT, &csrimgpitch);    csr_bmp.bmBitsPerPixel = __gal_screen->format->BitsPerPixel;    csr_bmp.bmBytesPerPixel = __gal_screen->format->BytesPerPixel;    csr_bmp.bmPitch = csrimgpitch;#else    csrimgpitch = CURSORWIDTH * BYTESPERPHYPIXEL;    csrimgsize = csrimgpitch * CURSORHEIGHT;#endif    if( !(savedbits = malloc(csrimgsize)) )        return FALSE;    if( !(cursorbits = malloc(csrimgsize)) )    {        free(savedbits);        savedbits = NULL;        return FALSE;    }    if( GetMgEtcValue (CURSORSECTION, "cursornumber", szValue, 10) < 0 )        goto error;        number = atoi(szValue);    if(number <= 0)        return TRUE;    number = number < (MAX_SYSCURSORINDEX + 1) ?              number : (MAX_SYSCURSORINDEX + 1);    for(i = 0; i < number; i++) {        if ( !(SysCursor[i] = LoadSystemCursor(i)) )             goto error;    }	    pthread_mutex_init(&__mg_mouselock, NULL);

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美zozozo| 亚洲成人精品一区| 国产欧美一区二区精品久导航| 3751色影院一区二区三区| 欧美精品三级日韩久久| 777xxx欧美| 欧美成人精精品一区二区频| 日韩一区二区三区视频在线观看| 欧美精品777| 欧美成人一区二区三区| 欧美丰满嫩嫩电影| 日韩西西人体444www| 日韩午夜三级在线| 国产色91在线| 国产精品二区一区二区aⅴ污介绍| 最近日韩中文字幕| 有码一区二区三区| 丝袜诱惑制服诱惑色一区在线观看 | 欧美在线你懂得| 91麻豆精品国产91久久久久| 欧美精品免费视频| 久久久五月婷婷| 国产精品萝li| 亚洲gay无套男同| 蜜桃av噜噜一区| 成人免费高清视频在线观看| 色婷婷av一区二区三区软件| 欧美视频在线播放| 久久久久久一二三区| 中文字幕制服丝袜一区二区三区| 亚洲一区欧美一区| 久久国产麻豆精品| jlzzjlzz国产精品久久| 欧美日韩在线播放一区| 26uuu国产在线精品一区二区| 国产精品每日更新| 亚瑟在线精品视频| 国产91富婆露脸刺激对白| 欧美在线free| 久久人人爽人人爽| 亚洲一区二区三区视频在线 | 91女厕偷拍女厕偷拍高清| 欧美日韩成人综合| 国产丝袜在线精品| 午夜视频一区在线观看| 国产精品一区在线| 欧美日韩成人综合| 一区在线中文字幕| 日本欧美一区二区在线观看| 成人激情免费网站| 欧美一区二区三区啪啪| 亚洲欧洲日产国产综合网| 日日欢夜夜爽一区| 99久久久精品| 精品国产伦一区二区三区观看方式 | 丝袜美腿亚洲色图| 成人丝袜18视频在线观看| 欧美日韩大陆在线| 国产精品国产三级国产专播品爱网| 午夜私人影院久久久久| jlzzjlzz亚洲女人18| 日韩免费看的电影| 亚洲一区二区三区小说| 国产成人免费9x9x人网站视频| 欧美日本一区二区| 亚洲日本免费电影| 国产成人av影院| 精品国产欧美一区二区| 亚洲福中文字幕伊人影院| 成人中文字幕合集| 久久久久久一级片| 麻豆精品一区二区三区| 欧美午夜精品免费| 亚洲欧美日韩电影| 播五月开心婷婷综合| 亚洲精品在线电影| 日本v片在线高清不卡在线观看| 91浏览器打开| 国产精品国产三级国产普通话三级| 青青草国产精品97视觉盛宴| 日本高清不卡一区| 日韩理论片一区二区| 国产成人av网站| 久久久久亚洲蜜桃| 美国毛片一区二区三区| 91精品国产综合久久久蜜臀粉嫩| 一区二区三区精品视频| 91小视频免费看| 亚洲欧美在线观看| 成人av集中营| 国产精品盗摄一区二区三区| 国产a区久久久| 中文字幕免费在线观看视频一区| 久久福利资源站| 亚洲精品在线电影| 国产在线国偷精品产拍免费yy| 日韩一区二区三区观看| 奇米一区二区三区av| 欧美群妇大交群中文字幕| 亚洲chinese男男1069| 欧美日韩免费在线视频| 亚洲地区一二三色| 欧美日韩国产综合一区二区| 亚洲最新视频在线播放| 日本韩国精品在线| 亚洲观看高清完整版在线观看| 欧美中文字幕不卡| 婷婷亚洲久悠悠色悠在线播放| 欧美三级在线看| 偷拍亚洲欧洲综合| 日韩欧美一级在线播放| 久久99精品久久久久久久久久久久| 欧美一区二区三区视频免费| 青青草一区二区三区| 精品久久久久香蕉网| 国产传媒一区在线| 亚洲人成伊人成综合网小说| 日本精品一区二区三区四区的功能| 亚洲永久免费av| 欧美一区二区三区视频在线观看 | eeuss鲁一区二区三区| 亚洲欧洲国产日本综合| 日本高清无吗v一区| 日韩电影在线一区二区| 精品噜噜噜噜久久久久久久久试看| 国产尤物一区二区| 中文字幕亚洲综合久久菠萝蜜| 色综合天天综合狠狠| 亚洲国产日韩精品| 精品少妇一区二区三区在线视频| 国产精品正在播放| 一区二区三区不卡视频在线观看 | 欧美国产日韩a欧美在线观看| 99精品国产99久久久久久白柏| 一区二区三区四区高清精品免费观看| 欧美色综合网站| 狠狠狠色丁香婷婷综合久久五月| 中文字幕精品一区| 欧美日韩精品福利| 国产精品一区免费在线观看| 亚洲另类在线视频| 欧美tk—视频vk| 本田岬高潮一区二区三区| 亚洲尤物视频在线| 久久精品在线观看| 欧美少妇一区二区| 国产成人精品亚洲日本在线桃色| 一区二区三区av电影 | 首页国产丝袜综合| 欧美激情一区在线| 欧美高清hd18日本| 97久久久精品综合88久久| 男人的j进女人的j一区| 国产精品嫩草影院av蜜臀| 69久久99精品久久久久婷婷| 国产成人综合网站| 亚洲h动漫在线| 亚洲欧美自拍偷拍色图| 日韩精品专区在线影院重磅| 99精品欧美一区二区蜜桃免费 | 欧美日韩黄色影视| av影院午夜一区| 精品一区二区在线看| 一区二区欧美视频| 国产欧美一区二区三区鸳鸯浴| 欧美精选一区二区| 91在线porny国产在线看| 激情国产一区二区| 亚洲6080在线| 亚洲男人的天堂在线观看| 久久综合久久99| 欧美午夜宅男影院| 91香蕉视频黄| 国产成人免费在线视频| 久久国产夜色精品鲁鲁99| 香蕉加勒比综合久久| 日韩理论片一区二区| 日本一区二区免费在线| 日韩一区和二区| 欧美日本一道本| 色天天综合久久久久综合片| 国产精品影视在线| 激情综合网av| 免费成人深夜小野草| 亚洲国产精品久久艾草纯爱| 亚洲欧美怡红院| 国产人伦精品一区二区| 欧美videos中文字幕| 欧美一区二区成人| 欧美日韩精品欧美日韩精品一| 91免费在线视频观看| 成人高清在线视频| 国产成人精品www牛牛影视| 韩国三级中文字幕hd久久精品| 青青草精品视频| 男女性色大片免费观看一区二区| 午夜视频一区二区| 亚洲第一福利视频在线| 亚洲成人动漫av| 亚洲成av人片一区二区三区|