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

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

?? fg_x11drawinterface.cpp

?? 《道法自然》書的源碼FishGUI,一個跨平臺的界面庫
?? CPP
字號:
/*--------------------------------------------------------------------------

	FG_X11DrawInterface.cpp - X11的繪圖接口類的實現文件

	本程序是FishGUI軟件的一部分

	版權所有 (C) 2003,2004 王詠武
	http://www.contextfree.net/wangyw/

----------------------------------------------------------------------------

	作者對 FishGUI 軟件及其所有源代碼授權如下:

	允許任何個人、組織、機構、企業(yè)無償獲得、修改、使用、重新發(fā)布 FishGUI 軟
	件及其源代碼,或按照有償或者無償的方式發(fā)行基于 FishGUI 源代碼的全部或部
	分內容開發(fā)的軟件產品,——但行使以上權利時,須遵守以下約定:

	1、重新發(fā)布 FishGUI 軟件及其源代碼時,不得隱去軟件及其源代碼中原有的版
	   權信息和開發(fā)者標識。

	2、發(fā)行基于 FishGUI 源代碼的全部或部分內容開發(fā)的軟件產品時,必須在產品
	   的顯著位置標明以下字樣:

	   【本產品的一部分功能是基于王詠武在 FishGUI 軟件中的工作完成的】

	3、在正式出版物中引用 FishGUI 的文檔、源代碼或注釋內容的,應注明軟件的
	   原作者為王詠武。

--------------------------------------------------------------------------*/
/*! \addtogroup OSAdaptor
 *  @{ 
 */

/*! \file
 *  \brief X11的繪圖接口類的實現文件
 */

/*! @} */

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <X11/Xlib.h>
#include <X11/Xutil.h>
#include <X11/xpm.h>
#include "FG_X11DrawInterface.h"

//##ModelId=3F6EB0010086
FG_X11DrawInterface::FG_X11DrawInterface(Window win, Display * display, int screen)
: m_Win(win), m_Display(display)
{
    m_Depth     = DefaultDepth(display, screen);
    m_CMap      = DefaultColormap(display, screen);
    // m_Visual    = DefaultVisual(display, screen);
    // 使用缺省顏色表
    XSetWindowColormap(display, win, m_CMap);
    
    // 得到需要的顏色
    XColor e, s;
    COLOR_BLACK     = BlackPixel(display, screen);
    XLookupColor(display, m_CMap, "#c0c0c0", & e, & s);
    XAllocColor(display, m_CMap, &s);
    COLOR_GRAY      = s.pixel;
    COLOR_WHITE     = WhitePixel(display, screen);
    XLookupColor(display, m_CMap, "#808080", & e, & s);
    XAllocColor(display, m_CMap, &s);
    COLOR_DARKGRAY  = s.pixel;
    XLookupColor(display, m_CMap, "#0000bf", & e, & s);
    XAllocColor(display, m_CMap, &s);
    COLOR_BLUE      = s.pixel;
    XLookupColor(display, m_CMap, "#0000ff", & e, & s);
    XAllocColor(display, m_CMap, &s);
    COLOR_BLUE1     = s.pixel;
    XLookupColor(display, m_CMap, "#ff0000", & e, & s);
    XAllocColor(display, m_CMap, &s);
    COLOR_RED       = s.pixel;

	m_GC = XCreateGC(display, win, 0, NULL);
    m_CopyGC = XCreateGC(display, win, 0, NULL);

    // 創(chuàng)建字體組
    char *fontset_name, **missing_charset_list, *def_string; 
    int missing_charset_count; 
    fontset_name = "-*-*-*-*-*-*-*-*-*-*-*-*-iso8859-1, -*-*-*-*-*-*-*-*-*-*-*-*-gb2312.1980-0";
    m_FontSet = XCreateFontSet(display, fontset_name, & missing_charset_list,
                                & missing_charset_count, & def_string); 	

    // 創(chuàng)建緩沖區(qū)位圖
    m_Buffer = XCreatePixmap(display, win, SCREEN_WIDTH, SCREEN_HEIGHT, m_Depth);
}

//##ModelId=40925CB00334
FG_X11DrawInterface::~FG_X11DrawInterface()
{
    XFreePixmap(m_Display, m_Buffer);
    XFreeFontSet(m_Display, m_FontSet);
	XFreeGC(m_Display, m_GC);
	XFreeGC(m_Display, m_CopyGC);
}

//##ModelId=3F6EB0010090
void FG_X11DrawInterface::BeginDraw(const FG_Rect & rect)
{
    if (! m_iDrawCount)
        m_Invalid = rect;
    else
        m_Invalid |= rect;
    m_iDrawCount ++;
}

//##ModelId=3F6EB0010092
void FG_X11DrawInterface::EndDraw()
{
    m_iDrawCount --;
    if (! m_iDrawCount)
    {
        // 把緩沖區(qū)內容刷新到屏幕上
    	XSetFillStyle(m_Display, m_CopyGC, FillTiled);
	    XSetTile(m_Display, m_CopyGC, m_Buffer);
    	XFillRectangle(m_Display, m_Win, m_CopyGC, m_Invalid.wLeft, m_Invalid.wTop, m_Invalid.Width(), m_Invalid.Height());
    }
}

//##ModelId=3F6EB001009A
void FG_X11DrawInterface::FillRect(const FG_Rect & rect, const COLORVAL ForeColor, const COLORVAL background)
{
	XSetForeground(m_Display, m_GC, background);
	XFillRectangle(m_Display, m_Buffer, m_GC, rect.wLeft, rect.wTop, rect.Width(), rect.Height());
	if (ForeColor != background)
	{
    	XSetForeground(m_Display, m_GC, ForeColor);
	    XDrawRectangle(m_Display, m_Buffer, m_GC, rect.wLeft, rect.wTop, rect.Width(), rect.Height());
	}
}

//##ModelId=3F6EB00100A4
void FG_X11DrawInterface::Line(const short x1, const short y1, const short x2, const short y2, const COLORVAL color)
{
	XSetForeground(m_Display, m_GC, color);
	XDrawLine(m_Display, m_Buffer, m_GC, x1, y1, x2, y2);
}

//##ModelId=3F6EB00100B1
void FG_X11DrawInterface::DrawText(const char * Text, const short x, const short y, const COLORVAL color)
{
	XSetForeground(m_Display, m_GC, color);
	short my = y + GetTextHeight(Text);
    XmbDrawString(m_Display, m_Buffer, m_FontSet, m_GC, x, my, Text, strlen(Text));
}

//##ModelId=3F6EB00100C3
WORD FG_X11DrawInterface::GetTextWidth(const char * Text)
{
    XRectangle ink, logical;
    XmbTextExtents(m_FontSet, Text, strlen(Text), & ink, & logical);

    return logical.width;
}

//##ModelId=3F6EB00100CC
WORD FG_X11DrawInterface::GetTextHeight(const char * Text)
{
    XRectangle ink, logical;
    XmbTextExtents(m_FontSet, Text, strlen(Text), & ink, & logical);

    return logical.height;
}

//##ModelId=3F6EB00100CE
void FG_X11DrawInterface::DrawBitmap(const char * pBmpName, const short x1, const short y1)
{
	int status;
	XpmAttributes attributes;

	attributes.valuemask = XpmColormap | XpmCloseness;
	attributes.colormap = m_CMap;
	attributes.closeness = 65535;
	
  Pixmap pix, mask;
    // 讀取xpm文件
    if (XpmReadFileToPixmap(m_Display, m_Buffer, (char *)pBmpName, & pix, & mask, & attributes) == XpmSuccess)
    {
    	int width = attributes.width;
	    int height = attributes.height;
	    GC gc = XCreateGC(m_Display, m_Buffer, 0, NULL);
	    XSetFillStyle(m_Display, gc, FillTiled);
	    XSetTile(m_Display, gc, pix);
	    
	    XGCValues xgcv;
	    xgcv.ts_y_origin = y1;
	    xgcv.ts_x_origin = x1;
	    xgcv.clip_y_origin = y1;
	    xgcv.clip_x_origin = x1;
	    XChangeGC(m_Display, gc, GCClipXOrigin | GCClipYOrigin | GCTileStipXOrigin | GCTileStipYOrigin, & xgcv);
	    XFillRectangle(m_Display, m_Buffer, gc, x1, y1, width, height);
	    
	    XFreePixmap(m_Display, pix);
	    XFreeGC(m_Display, gc);
    }
}

//##ModelId=3F6EB00100D8
void FG_X11DrawInterface::DrawPolyLine(const short n, const FG_Point * vert, const COLORVAL color)
{
	if (n > 1)
	{
    	XSetForeground(m_Display, m_GC, color);
        for (short i = 0; i < n - 1; i ++)
    	    XDrawLine(m_Display, m_Buffer, m_GC, vert[i].x, vert[i].y, vert[i + 1].x, vert[i + 1].y);
    }
}

//##ModelId=3F6EB00100E3
void FG_X11DrawInterface::DrawDotRect(const FG_Rect & rect, const COLORVAL color)
{
    XSetForeground(m_Display, m_GC, color);

    XGCValues xgcv;
    xgcv.line_style = LineOnOffDash;
    XChangeGC(m_Display, m_GC, GCLineStyle, & xgcv);

    XDrawRectangle(m_Display, m_Buffer, m_GC, rect.wLeft, rect.wTop, rect.Width(), rect.Height());

    xgcv.line_style = LineSolid;
    XChangeGC(m_Display, m_GC, GCLineStyle, & xgcv);
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
色婷婷av一区| 亚洲综合视频网| 亚洲欧美经典视频| 国产在线精品视频| 欧美视频一区在线| 国产精品乱人伦中文| 久久精品99国产国产精| 欧美三级乱人伦电影| 一区精品在线播放| 国产精品资源网| 久久综合久久综合久久综合| 亚洲电影一区二区三区| 91国产视频在线观看| 国产欧美视频一区二区| 国产一区激情在线| 欧美一区二区播放| 丝袜美腿亚洲色图| 欧美日本高清视频在线观看| 亚洲精品国产高清久久伦理二区| 盗摄精品av一区二区三区| 26uuu国产一区二区三区| 日本在线播放一区二区三区| 久久99精品久久久久久久久久久久 | 欧美日韩免费在线视频| 亚洲欧美另类在线| eeuss鲁片一区二区三区 | 一级特黄大欧美久久久| 成人国产一区二区三区精品| 欧美国产精品专区| 国产成人激情av| 亚洲国产激情av| 成人福利视频网站| 亚洲人吸女人奶水| 91久久精品一区二区三| 中文字幕在线不卡视频| 色综合一个色综合| 一区二区三区在线高清| 在线观看亚洲a| 日韩精品久久久久久| 精品第一国产综合精品aⅴ| 久久91精品国产91久久小草| 久久这里都是精品| 国产+成+人+亚洲欧洲自线| 中文字幕在线一区免费| 在线一区二区观看| 蜜臀91精品一区二区三区| 久久天天做天天爱综合色| 成人三级在线视频| 亚洲精品国产高清久久伦理二区| 色国产综合视频| 免费观看日韩电影| 国产欧美精品区一区二区三区 | 一区二区三区免费观看| 欧美三区在线视频| 国产一区二区精品在线观看| 久久精品亚洲一区二区三区浴池| 成人精品一区二区三区四区| 亚洲自拍偷拍图区| 亚洲精品在线电影| 一本色道久久综合亚洲aⅴ蜜桃| 一区二区三区日韩欧美| 精品少妇一区二区三区视频免付费| 国模大尺度一区二区三区| 亚洲丝袜美腿综合| 日韩免费一区二区| 色综合久久综合网欧美综合网| 视频一区视频二区在线观看| 国产亚洲精品bt天堂精选| 在线精品视频一区二区三四| 美女看a上一区| 亚洲美女在线国产| 久久久久国产精品人| 欧美三级日韩三级国产三级| 国产精品一级片| 亚洲aⅴ怡春院| 日韩理论电影院| 精品国产凹凸成av人导航| 欧美熟乱第一页| 成人午夜视频在线| 日本成人在线不卡视频| 亚洲人成精品久久久久| 国产三级欧美三级日产三级99| 欧美三级日本三级少妇99| 成人av午夜影院| 黄色精品一二区| 亚洲成人自拍网| 亚洲精品国久久99热| 国产精品入口麻豆原神| 精品国产一区二区亚洲人成毛片 | av亚洲精华国产精华精| 国产美女精品人人做人人爽| 日本v片在线高清不卡在线观看| 亚洲欧美一区二区在线观看| 欧美精品一区男女天堂| 欧美一二三区在线观看| 欧美性色aⅴ视频一区日韩精品| 成人av免费在线观看| 精品一区二区三区在线视频| 日韩一区欧美二区| 亚洲自拍欧美精品| 亚洲免费在线电影| 亚洲欧美视频一区| 亚洲视频一二三| 国产精品丝袜在线| 国产精品对白交换视频 | 精品久久久久久亚洲综合网| 欧美日韩国产在线观看| 色狠狠桃花综合| 91官网在线观看| 欧美在线你懂的| 欧美日韩一区二区欧美激情| 欧美视频一二三区| 欧美丰满嫩嫩电影| 91麻豆精品国产91久久久更新时间| 欧美日韩精品综合在线| 欧美巨大另类极品videosbest| 欧美日本国产一区| 日韩一级成人av| 精品欧美一区二区久久| 26uuu亚洲婷婷狠狠天堂| 久久九九国产精品| 国产精品久线在线观看| 亚洲欧美国产77777| 亚洲综合丁香婷婷六月香| 丝袜美腿亚洲一区| 国产在线播放一区| 成人免费毛片aaaaa**| 色又黄又爽网站www久久| 欧美在线观看18| 日韩一二三四区| 中文字幕精品在线不卡| 一区二区三区国产精华| 日欧美一区二区| 国产一区二区在线电影| 99精品久久久久久| 欧美人动与zoxxxx乱| 26uuu久久天堂性欧美| 一区精品在线播放| 日韩av在线播放中文字幕| 国产精品456| 欧美亚洲图片小说| 精品国产乱码久久久久久浪潮| 国产精品少妇自拍| 亚洲gay无套男同| 国产99久久久精品| 欧美日韩你懂得| 国产欧美视频一区二区| 亚洲成人免费在线| 成人性生交大片免费 | 99国产精品视频免费观看| 欧美性色黄大片| 久久精品无码一区二区三区| 一区二区三区欧美在线观看| 国产自产视频一区二区三区| 一本一道波多野结衣一区二区| 欧美一卡二卡三卡四卡| 亚洲视频狠狠干| 精品一区二区三区av| 色噜噜久久综合| 久久久久久久久久电影| 天堂影院一区二区| www.欧美日韩国产在线| 精品成人免费观看| 亚洲成人精品影院| 95精品视频在线| 国产日韩欧美不卡| 免费黄网站欧美| 欧美私人免费视频| ●精品国产综合乱码久久久久| 麻豆一区二区99久久久久| 日本韩国精品在线| 国产精品婷婷午夜在线观看| 精品一区二区三区在线视频| 欧美在线free| 亚洲日本在线天堂| 国产成都精品91一区二区三| 日韩欧美高清一区| 日韩国产欧美视频| 欧美手机在线视频| 亚洲人成在线观看一区二区| 国产99一区视频免费| 久久久久久电影| 黄色精品一二区| 精品国产乱码久久久久久闺蜜| 人人超碰91尤物精品国产| 欧美性受xxxx黑人xyx性爽| 亚洲精品视频在线看| av色综合久久天堂av综合| 欧美激情资源网| 成人综合婷婷国产精品久久| 久久综合久久鬼色| 国产一区欧美日韩| 国产婷婷色一区二区三区| 极品少妇xxxx精品少妇偷拍| 精品福利一区二区三区免费视频| 另类小说图片综合网| 精品久久久久久久久久久久久久久| 日韩av不卡在线观看| 欧美一区二区啪啪| 美女一区二区在线观看|