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

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

?? text-lite.c

?? ARM9-2410教學實驗系統下Linux下minigui程序
?? C
?? 第 1 頁 / 共 2 頁
字號:
/*** $Id: text-lite.c,v 1.14 2003/09/04 03:09:52 weiym Exp $**** text-lite.c: The Text Support of GDI for MiniGUI-Lite.**** Copyright (C) 2000 ~ 2002 Wei Yongming.** Copyright (C) 2003 Feynman Software.**** Current maintainer: Wei Yongming.**** Create date: 2000/4/19*//*** 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 <string.h>#include "common.h"#include "minigui.h"#include "gdi.h"#include "window.h"#include "cliprect.h"#include "gal.h"#include "internals.h"#include "ctrlclass.h"#include "dc.h"#include "drawtext.h"#include "cursor.h"extern BOOL dc_GenerateECRgn (PDC pdc, BOOL fForce);int GUIAPI GetFontHeight (HDC hdc){    PDC pdc = dc_HDC2PDC(hdc);    return pdc->pLogFont->size;}int GUIAPI GetMaxFontWidth (HDC hdc){    PDC pdc = dc_HDC2PDC(hdc);    DEVFONT* sbc_devfont = pdc->pLogFont->sbc_devfont;    DEVFONT* mbc_devfont = pdc->pLogFont->mbc_devfont;    int sbc_max_width = (*sbc_devfont->font_ops->get_max_width) (pdc->pLogFont, sbc_devfont);    int mbc_max_width = 0;    if (mbc_devfont)        mbc_max_width = (*mbc_devfont->font_ops->get_max_width) (pdc->pLogFont, mbc_devfont);        return (sbc_max_width > mbc_max_width) ? sbc_max_width : mbc_max_width;}void GUIAPI GetTextExtent (HDC hdc, const char* spText, int len, SIZE* pSize){    PDC pdc;    pdc = dc_HDC2PDC(hdc);    if (len < 0) len = strlen (spText);    gdi_get_TextOut_extent (pdc, pdc->pLogFont, spText, len, pSize);}void GUIAPI GetTabbedTextExtent (HDC hdc, const char* spText, int len, SIZE* pSize){    PDC pdc;    pdc = dc_HDC2PDC(hdc);    if (len < 0) len = strlen (spText);    gdi_get_TabbedTextOut_extent (pdc, pdc->pLogFont, pdc->tabstop,                 spText, len, pSize, NULL);}void GUIAPI GetLastTextOutPos (HDC hdc, POINT* pt){    PDC pdc;    pdc = dc_HDC2PDC(hdc);    *pt = pdc->CurTextPos;}int GUIAPI TextOutLen (HDC hdc, int x, int y, const char* spText, int len){    PCLIPRECT pClipRect;    PDC pdc;    RECT rcOutput;    SIZE size;    if (len == 0) return 0;    if (len < 0) len = strlen (spText);    pdc = dc_HDC2PDC(hdc);    gdi_get_TextOut_extent (pdc, pdc->pLogFont, spText, len, &size);    {        // update text out position        int width = size.cx;        extent_x_SP2LP (pdc, &width);        pdc->CurTextPos.x = x + width;        pdc->CurTextPos.y = y;    }    if (dc_IsGeneralHDC(hdc)) {        if (!dc_GenerateECRgn (pdc, FALSE)) {            return size.cx;        }    }    // Transfer logical to device to screen here.    coor_LP2SP(pdc, &x, &y);    rcOutput.left = x;    rcOutput.top  = y;    rcOutput.right = x + size.cx + 1;    rcOutput.bottom = y + size.cy + 1;    NormalizeRect(&rcOutput);    IntersectRect (&rcOutput, &rcOutput, &pdc->ecrgn.rcBound);    if( !dc_IsMemHDC(hdc) ) ShowCursorForGDI(FALSE, &rcOutput);    // set graphics context.    GAL_SetGC(pdc->gc);    // set text out mode.    pClipRect = pdc->ecrgn.head;    while(pClipRect)    {        if (DoesIntersect (&rcOutput, &pClipRect->rc)) {            GAL_SetClipping(pdc->gc, pClipRect->rc.left, pClipRect->rc.top,                    pClipRect->rc.right - 1, pClipRect->rc.bottom - 1);            gdi_strnwrite (pdc, x, y, spText, len);        }                    pClipRect = pClipRect->next;    }    if( !dc_IsMemHDC(hdc) ) ShowCursorForGDI(TRUE, &rcOutput);    return size.cx;}int GUIAPI TabbedTextOutLen (HDC hdc, int x, int y, const char* spText, int len) {    PCLIPRECT pClipRect;    PDC pdc;    SIZE size;    RECT rcOutput;    if (len == 0) return 0;    if (len < 0) len = strlen (spText);    pdc = dc_HDC2PDC(hdc);    coor_LP2SP (pdc, &pdc->CurTextPos.x, &pdc->CurTextPos.y);    gdi_get_TabbedTextOut_extent (pdc, pdc->pLogFont, pdc->tabstop, spText, len,                 &size, &pdc->CurTextPos);    coor_SP2LP (pdc, &pdc->CurTextPos.x, &pdc->CurTextPos.y);    if (dc_IsGeneralHDC(hdc)) {        if (!dc_GenerateECRgn (pdc, FALSE)) {            return size.cx;        }    }    // Transfer logical to device to screen here.    coor_LP2SP(pdc, &x, &y);        rcOutput.left = x;    rcOutput.top  = y;    rcOutput.right = x + size.cx + 1;    rcOutput.bottom = y + size.cy + 1;    NormalizeRect(&rcOutput);    IntersectRect (&rcOutput, &rcOutput, &pdc->ecrgn.rcBound);    if( !dc_IsMemHDC(hdc) ) ShowCursorForGDI(FALSE, &rcOutput);    // set graphics context.    GAL_SetGC(pdc->gc);    pClipRect = pdc->ecrgn.head;    while(pClipRect)    {        if (DoesIntersect (&rcOutput, &pClipRect->rc)) {            GAL_SetClipping(pdc->gc, pClipRect->rc.left, pClipRect->rc.top,                    pClipRect->rc.right - 1, pClipRect->rc.bottom - 1);            gdi_tabbedtextout (pdc, x, y, spText, len);        }                    pClipRect = pClipRect->next;    }    if( !dc_IsMemHDC(hdc) ) ShowCursorForGDI(TRUE, &rcOutput);    return size.cx;}char* strnchr (const char* s, size_t n, int c){    size_t i;        for (i=0; i<n; i++) {        if ( *s == c)            return (char *)s;        s ++;    }    return NULL;}int substrlen (const char* text, int len, char delimiter, int* nr_delim){    char* substr;    *nr_delim = 0;    if ( (substr = strnchr (text, len, delimiter)) == NULL)        return len;    len = substr - text;    while (*substr == delimiter) {        (*nr_delim) ++;        substr ++;    }    return len;}int GUIAPI TabbedTextOutEx (HDC hdc, int x, int y, const char* spText,		int nCount, int nTabs, int *pTabPos, int nTabOrig){    PDC pdc;    int line_len, sub_len;    int nr_tab = 0, tab_pos, def_tab;    int x_orig = x, max_x = x;    int line_height;    int nr_delim_newline, nr_delim_tab;    if (nCount == 0) return 0;    if (nCount < 0) nCount = strlen (spText);    pdc = dc_HDC2PDC(hdc);    line_height = pdc->pLogFont->size + pdc->alExtra + pdc->blExtra;    y += pdc->alExtra;    if (nTabs == 0 || pTabPos == NULL) {        int ave_width = (*pdc->pLogFont->sbc_devfont->font_ops->get_ave_width)                        (pdc->pLogFont, pdc->pLogFont->sbc_devfont);        def_tab = ave_width * pdc->tabstop;    }    else        def_tab = pTabPos [nTabs - 1];    while (nCount) {        line_len = substrlen (spText, nCount, '\n', &nr_delim_newline);        nCount -= line_len + nr_delim_newline;        nr_tab = 0;        x = x_orig;        tab_pos = nTabOrig;        while (line_len) {            int i, width;            sub_len = substrlen (spText, line_len, '\t', &nr_delim_tab);            width = TextOutLen (hdc, x, y, spText, sub_len);            x += width;             if (x >= tab_pos) {                while (x >= tab_pos)                    tab_pos += (nr_tab >= nTabs) ? def_tab : pTabPos [nr_tab++];                for (i = 0; i < nr_delim_tab - 1; i ++)                    tab_pos += (nr_tab >= nTabs) ? def_tab : pTabPos [nr_tab++];            }            else {                for (i = 0; i < nr_delim_tab; i ++)                    tab_pos += (nr_tab >= nTabs) ? def_tab : pTabPos [nr_tab++];            }            x = tab_pos;            line_len -= sub_len + nr_delim_tab;            spText += sub_len + nr_delim_tab;        }        if (max_x < x) max_x = x;        spText += nr_delim_newline;        y += line_height * nr_delim_newline;    }    return max_x - x_orig;}static void txtDrawOneLine (PDC pdc, const char* pText, int nLen, int x, int y,                    const RECT* prcOutput, UINT nFormat, int nTabWidth){    RECT rcInter;    PCLIPRECT pClipRect;    pClipRect = pdc->ecrgn.head;    while(pClipRect)    {        if (IntersectRect (&rcInter, prcOutput, &pClipRect->rc)) {            GAL_SetClipping(pdc->gc, rcInter.left, rcInter.top,                    rcInter.right - 1, rcInter.bottom - 1);            if (nFormat & DT_EXPANDTABS) {                const char* sub = pText;                const char* left;                int nSubLen = nLen;                int nOutputLen;                                while ((left = strnchr (sub, nSubLen, '\t'))) {                                        nOutputLen = left - sub;                    x += gdi_strnwrite (pdc, x, y, sub, nOutputLen);                                        nSubLen -= (nOutputLen + 1);                    sub = left + 1;                    x += nTabWidth;                }                if (nSubLen != 0)                    gdi_strnwrite (pdc, x, y, sub, nSubLen);            }            else                gdi_strnwrite (pdc, x, y, pText, nLen);        }                    pClipRect = pClipRect->next;    }}static int txtGetWidthOfNextWord (PDC pdc, const char* pText, int nCount, int* nChars){    int width;    DEVFONT* sbc_devfont = pdc->pLogFont->sbc_devfont;    DEVFONT* mbc_devfont = pdc->pLogFont->mbc_devfont;    WORDINFO word_info;     *nChars = 0;    if (nCount == 0) return 0;    if (mbc_devfont) {        int mbc_pos, sub_len;        mbc_pos = (*mbc_devfont->charset_ops->pos_first_char) (pText, nCount);        if (mbc_pos == 0) {            sub_len = (*mbc_devfont->charset_ops->len_first_substr) (pText, nCount);            (*mbc_devfont->charset_ops->get_next_word) (pText, sub_len, &word_info);            width = (*mbc_devfont->font_ops->get_str_width)                         (pdc->pLogFont, mbc_devfont, pText, word_info.len, pdc->cExtra);            *nChars = word_info.len;            return width;        }        else if (mbc_pos > 0)            nCount = mbc_pos;    }    (*sbc_devfont->charset_ops->get_next_word) (pText, nCount, &word_info);    width = (*sbc_devfont->font_ops->get_str_width)                     (pdc->pLogFont, sbc_devfont, pText, word_info.len, pdc->cExtra);    *nChars = word_info.len;#if 0    fprintf (stderr, "text: %s, width: %d, word len: %d\n", pText, width, word_info.len);#endif    return width;}// This function return the normal characters' number (refrence)// and tab's number per line (return value).static int txtGetOneLine (PDC pdc, const char* pText, int nCount, int nTabWidth,         int maxwidth, UINT uFormat, int* nChar){    int tabs = 0;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产白丝网站精品污在线入口| 亚洲国产精品黑人久久久| 国产精品无人区| 国产专区欧美精品| 日韩欧美亚洲国产另类| 亚洲一区在线电影| 5月丁香婷婷综合| 综合分类小说区另类春色亚洲小说欧美 | 国产精品黄色在线观看| 国内精品国产成人| 久久影院午夜论| 国产精品正在播放| 久久亚洲欧美国产精品乐播 | 日本久久一区二区三区| 亚洲人成精品久久久久| 色先锋资源久久综合| 怡红院av一区二区三区| 一本大道久久a久久综合婷婷| 日韩亚洲欧美成人一区| 秋霞电影网一区二区| 欧美一二三在线| 日本欧美一区二区三区| 91精品国产欧美一区二区18| 色综合中文字幕| 午夜精品久久久久久久| 日韩三级视频在线看| 丁香另类激情小说| 亚洲一区二区三区免费视频| 这里只有精品免费| 国产成人精品综合在线观看| 1区2区3区国产精品| 在线播放欧美女士性生活| 国产一本一道久久香蕉| 亚洲美女视频在线| 精品久久久久一区二区国产| 91影视在线播放| 国产原创一区二区三区| 婷婷丁香激情综合| 亚洲日本在线观看| 久久精品一二三| 宅男噜噜噜66一区二区66| 国产aⅴ综合色| 国产黄色精品视频| 久久福利视频一区二区| 日韩vs国产vs欧美| 一个色在线综合| 国产精品久久久一区麻豆最新章节| 在线观看av不卡| 在线观看亚洲精品视频| 成人激情视频网站| 顶级嫩模精品视频在线看| 亚洲男人的天堂在线aⅴ视频| 99视频超级精品| 成人听书哪个软件好| 国产成人在线看| 国产激情偷乱视频一区二区三区| 久久精品72免费观看| 日韩 欧美一区二区三区| 日本伊人色综合网| 麻豆精品视频在线观看免费| 肉丝袜脚交视频一区二区| 性做久久久久久久免费看| 亚洲视频图片小说| 亚洲色欲色欲www在线观看| 亚洲欧洲国产日本综合| 亚洲人吸女人奶水| 亚洲va韩国va欧美va精品| 亚洲电影第三页| 久久丁香综合五月国产三级网站| 五月开心婷婷久久| 极品美女销魂一区二区三区 | 伦理电影国产精品| 韩国女主播一区二区三区| 国产乱妇无码大片在线观看| 大陆成人av片| 在线国产电影不卡| 精品国产一区二区亚洲人成毛片| 久久久久99精品国产片| 一区二区三区在线视频观看 | 亚洲视频一区二区在线| 午夜欧美在线一二页| 国产乱妇无码大片在线观看| 色综合视频在线观看| 日韩视频免费观看高清完整版 | 7777精品久久久大香线蕉| 国产三级欧美三级日产三级99 | 亚洲色图在线视频| 老司机一区二区| 天天综合天天综合色| 国产真实乱对白精彩久久| 欧美日本视频在线| 亚洲欧洲日产国产综合网| 国内久久精品视频| 91精品国产麻豆国产自产在线| 亚洲色图19p| 风间由美中文字幕在线看视频国产欧美| 欧美视频三区在线播放| 亚洲美女免费在线| 色视频成人在线观看免| 中文字幕在线不卡视频| 国产suv精品一区二区三区| 欧美va亚洲va| 国产一区二区三区av电影| 欧美精品在线观看一区二区| 亚洲小说欧美激情另类| 日本国产一区二区| 偷拍一区二区三区四区| 欧美色大人视频| 男男成人高潮片免费网站| 欧美一区二区三区人| 奇米精品一区二区三区四区| 日韩一级完整毛片| 国产一区二区成人久久免费影院 | 日韩一级黄色片| 麻豆精品视频在线| 日本一区二区三区四区| 成人午夜激情视频| 一区二区三区中文免费| 884aa四虎影成人精品一区| 美女在线视频一区| 欧美高清在线一区| 欧美日韩精品一区二区三区蜜桃| 麻豆国产91在线播放| 成人免费在线视频观看| 91九色最新地址| 国产一区二区不卡| 亚洲永久免费av| 久久综合成人精品亚洲另类欧美 | 欧美一区二区三区四区在线观看| 亚洲自拍偷拍av| 白白色 亚洲乱淫| 日韩和欧美一区二区| 中文在线免费一区三区高中清不卡| www.日本不卡| 久久精品国产网站| 香蕉加勒比综合久久| 中文字幕在线观看一区| 精品成人在线观看| 在线成人免费视频| 欧美图区在线视频| 91色视频在线| 成人动漫精品一区二区| 国产精品一级黄| 极品美女销魂一区二区三区| 午夜精品久久久久久久久久久| 欧美国产日韩一二三区| 久久青草国产手机看片福利盒子| 911精品产国品一二三产区| 欧美日韩在线电影| 欧美在线观看一区| 欧美性极品少妇| 欧洲国产伦久久久久久久| 成人app下载| 处破女av一区二区| 成人美女视频在线观看18| 国产精选一区二区三区| 国产高清亚洲一区| 成人精品视频一区二区三区| 国产成人h网站| 成人爱爱电影网址| 欧美在线观看18| 91精选在线观看| 久久久久一区二区三区四区| 国产日韩精品一区| 亚洲日本成人在线观看| 亚洲国产一区视频| 日本成人在线一区| 国产又粗又猛又爽又黄91精品| 粉嫩av亚洲一区二区图片| 91久久免费观看| 欧美日韩成人在线一区| 久久久综合网站| 亚洲444eee在线观看| 国产在线播放一区三区四| 色呦呦国产精品| 精品电影一区二区三区| 一区二区激情小说| 国产福利91精品一区二区三区| av一本久道久久综合久久鬼色| 91精品国产一区二区三区蜜臀 | 欧美性猛片xxxx免费看久爱| 91麻豆精品在线观看| 欧美精品九九99久久| 中文字幕日韩一区| 精品亚洲porn| 欧美丰满少妇xxxxx高潮对白 | 国产精品另类一区| 久久99久久99精品免视看婷婷| 色综合视频一区二区三区高清| 精品美女被调教视频大全网站| 亚洲综合色丁香婷婷六月图片| 国产成人精品三级| 国产午夜一区二区三区| 日韩av一区二区三区四区| 欧美在线不卡一区| 亚洲最新视频在线观看| 91精品福利在线| 一区二区三区精品在线观看| 成人夜色视频网站在线观看| 国产视频一区二区在线|