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

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

?? logfont.c

?? miniucgui1.30版本的源碼
?? C
字號(hào):
/*** $Id: logfont.c,v 1.12 2003/09/04 06:02:53 weiym Exp $** ** logfont.c: Log fonts management.**** Copyright (C) 2003 Feynman Software** Copyright (C) 2001 ~ 2002 Wei Yongming.**** Current maintainer: Wei Yongming.** ** Created by Wei Yongming**** Create date: 2000/07/07*//*** 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 "sysfont.h"#include "devfont.h"#include "fontname.h"CHARSETOPS* GetCharsetOps (const char* charset_name);/************************** Exported functions ******************************/static PLOGFONT gdiCreateLogFont ( const char* type, const char* family,     const char* charset, DWORD style, int size, int rotation){    PLOGFONT log_font;    int sbc_descent, mbc_descent = 0;    char dev_family [LEN_FONT_NAME + 1];    DEVFONT* sbc_devfont, *mbc_devfont;    // is valid style?    if (style == 0xFFFFFFFF)        return INV_LOGFONT;    // is supported charset?    if (GetCharsetOps (charset) == NULL) {        return INV_LOGFONT;    }    if ((log_font = malloc (sizeof (LOGFONT))) == NULL)        return INV_LOGFONT;        log_font->style = style;#if 0    fprintf (stderr, "LogFont: style: %x\n", log_font->style);#endif    if (type) {        strncpy (log_font->type, type, LEN_FONT_NAME);        log_font->type [LEN_FONT_NAME] = '\0';    }    else        strcpy (log_font->type, FONT_TYPE_NAME_ALL);    strncpy (log_font->family, family, LEN_FONT_NAME);    log_font->family [LEN_FONT_NAME] = '\0';    strncpy (log_font->charset, charset, LEN_FONT_NAME);    log_font->charset [LEN_FONT_NAME] = '\0';    if (size > FONT_MAX_SIZE)        log_font->size = FONT_MAX_SIZE;    else if (size < FONT_MIN_SIZE)        log_font->size = FONT_MIN_SIZE;    else        log_font->size = size;    log_font->rotation = rotation;#if 0    fprintf (stderr, "log_font: %s, %s, %s, %d.\n",                    log_font->type, log_font->family, log_font->charset,                    log_font->size);#endif    sbc_devfont = GetMatchedSBDevFont (log_font);    if (sbc_devfont->font_ops->new_instance)        sbc_devfont = (*sbc_devfont->font_ops->new_instance) (log_font, sbc_devfont, TRUE);    if (sbc_devfont == NULL) {        free (log_font);        return INV_LOGFONT;    }    mbc_devfont = GetMatchedMBDevFont (log_font);    if (mbc_devfont && mbc_devfont->font_ops->new_instance)        mbc_devfont = (*mbc_devfont->font_ops->new_instance) (log_font, mbc_devfont, FALSE);    log_font->sbc_devfont = sbc_devfont;    log_font->mbc_devfont = mbc_devfont;    /*      * Adjust the logical font information     */    // family name    if (log_font->mbc_devfont) {        fontGetFamilyFromName (log_font->mbc_devfont->name, dev_family);        strncpy (log_font->family, dev_family, LEN_FONT_NAME);        log_font->family [LEN_FONT_NAME] = '\0';    }    else {        fontGetFamilyFromName (log_font->sbc_devfont->name, dev_family);        strncpy (log_font->family, dev_family, LEN_FONT_NAME);        log_font->family [LEN_FONT_NAME] = '\0';    }    // charset name    if (log_font->mbc_devfont) {        strncpy (log_font->charset,             log_font->mbc_devfont->charset_ops->name, LEN_FONT_NAME);        log_font->charset [LEN_FONT_NAME] = '\0';    }    else {        strncpy (log_font->charset,             log_font->sbc_devfont->charset_ops->name, LEN_FONT_NAME);        log_font->charset [LEN_FONT_NAME] = '\0';    }    // size    log_font->size = (*log_font->sbc_devfont->font_ops->get_font_height)            (log_font, log_font->sbc_devfont);    if (log_font->mbc_devfont) {        int size = (*log_font->mbc_devfont->font_ops->get_font_height)            (log_font, log_font->mbc_devfont);        if (size > log_font->size)            log_font->size = size;    }    sbc_descent = (*log_font->sbc_devfont->font_ops->get_font_descent)            (log_font, log_font->sbc_devfont);    if (log_font->mbc_devfont) {        mbc_descent = (*log_font->mbc_devfont->font_ops->get_font_descent)            (log_font, log_font->mbc_devfont);    }    log_font->size += ABS (sbc_descent - mbc_descent);    return log_font;}PLOGFONT GUIAPI CreateLogFontIndirect (LOGFONT *logfont){    return gdiCreateLogFont (logfont->type, logfont->family,         logfont->charset, logfont->style, logfont->size, logfont->rotation);}PLOGFONT GUIAPI CreateLogFont (const char* type, const char* family,     const char* charset, char weight, char slant, char set_width,     char spacing, char underline, char struckout, int size, int rotation){    DWORD style;    char style_name [] = {weight, slant, set_width,                           spacing, underline, struckout};        if ((style = fontConvertStyle (style_name)) == 0xFFFFFFFF) {        return INV_LOGFONT;    }    return gdiCreateLogFont (type, family, charset, style, size, rotation);}PLOGFONT GUIAPI CreateLogFontByName (const char* font_name){    char type[LEN_FONT_NAME + 1];    char family[LEN_FONT_NAME + 1];    char charset[LEN_FONT_NAME + 1];    DWORD style;    int height;    if (!fontGetTypeNameFromName (font_name, type) ||            !fontGetFamilyFromName (font_name, family) ||            !fontGetCharsetFromName (font_name, charset) ||            ((height = fontGetHeightFromName (font_name)) == -1) ||            (style = fontGetStyleFromName (font_name) == 0xFFFFFFFF))        return NULL;    return gdiCreateLogFont (type, family, charset, style, height, 0);}void GUIAPI DestroyLogFont (PLOGFONT log_font){    LOGFONT* logfont = (PLOGFONT)log_font;    if (logfont->sbc_devfont->font_ops->delete_instance)        (*logfont->sbc_devfont->font_ops->delete_instance) (logfont->sbc_devfont);    if (logfont->mbc_devfont && logfont->mbc_devfont->font_ops->delete_instance)        (*logfont->mbc_devfont->font_ops->delete_instance) (logfont->mbc_devfont);    free (logfont);}PLOGFONT GUIAPI GetCurFont (HDC hdc){    PDC pdc;    pdc = dc_HDC2PDC(hdc);    return pdc->pLogFont;}PLOGFONT GUIAPI SelectFont (HDC hdc, PLOGFONT log_font){    PLOGFONT old;    PDC pdc;    pdc = dc_HDC2PDC(hdc);    old = pdc->pLogFont;    if (log_font == INV_LOGFONT)        pdc->pLogFont = g_SysLogFont [1] ? g_SysLogFont [1] : g_SysLogFont [0];    else        pdc->pLogFont = log_font;        return old;}void GUIAPI GetLogFontInfo (HDC hdc, LOGFONT* log_font){    memcpy (log_font, dc_HDC2PDC (hdc)->pLogFont, sizeof (LOGFONT));}void GUIAPI GetFontMetrics (LOGFONT* log_font, FONTMETRICS* font_metrics){    int sbc_value, mbc_value;        sbc_value = log_font->sbc_devfont->font_ops->get_font_height (log_font, log_font->sbc_devfont);    if (log_font->mbc_devfont) {        mbc_value = log_font->mbc_devfont->font_ops->get_font_height (log_font, log_font->mbc_devfont);        font_metrics->font_height = MAX (sbc_value, mbc_value);    }    else {        font_metrics->font_height = sbc_value;    }    sbc_value = log_font->sbc_devfont->font_ops->get_font_ascent (log_font, log_font->sbc_devfont);    if (log_font->mbc_devfont) {        mbc_value = log_font->mbc_devfont->font_ops->get_font_ascent (log_font, log_font->mbc_devfont);        font_metrics->ascent = MAX (sbc_value, mbc_value);    }    else {        font_metrics->ascent = sbc_value;    }    sbc_value = log_font->sbc_devfont->font_ops->get_font_descent (log_font, log_font->sbc_devfont);    if (log_font->mbc_devfont) {        mbc_value = log_font->mbc_devfont->font_ops->get_font_descent (log_font, log_font->mbc_devfont);        font_metrics->descent = MAX (sbc_value, mbc_value);    }    else {        font_metrics->descent = sbc_value;    }    sbc_value = log_font->sbc_devfont->font_ops->get_max_width (log_font, log_font->sbc_devfont);    if (log_font->mbc_devfont) {        mbc_value = log_font->mbc_devfont->font_ops->get_max_width (log_font, log_font->mbc_devfont);        font_metrics->max_width = MAX (sbc_value, mbc_value);    }    else {        font_metrics->max_width = sbc_value;    }    sbc_value = log_font->sbc_devfont->font_ops->get_ave_width (log_font, log_font->sbc_devfont);    if (log_font->mbc_devfont) {        mbc_value = log_font->mbc_devfont->font_ops->get_ave_width (log_font, log_font->mbc_devfont);        font_metrics->ave_width = mbc_value;    }    else {        font_metrics->ave_width = sbc_value;    }}void GUIAPI GetGlyphBitmap (LOGFONT* log_font, const char* mchar, int mchar_len,                 GLYPHBITMAP* glyph_bitmap){    DEVFONT* sbc_devfont = log_font->sbc_devfont;    DEVFONT* mbc_devfont = log_font->mbc_devfont;    DEVFONT* devfont;    if (mbc_devfont) {        int mbc_pos;        mbc_pos = (*mbc_devfont->charset_ops->pos_first_char) (mchar, mchar_len);        if (mbc_pos == 0) {            devfont = mbc_devfont;        }        else {            devfont = sbc_devfont;        }    }    else {        devfont = sbc_devfont;    }    if (devfont->font_ops->get_char_bbox) {        glyph_bitmap->bbox_x = 0;        glyph_bitmap->bbox_y = 0;        devfont->font_ops->get_char_bbox (log_font, devfont, mchar, mchar_len,                    &glyph_bitmap->bbox_x,                    &glyph_bitmap->bbox_y,                    &glyph_bitmap->bbox_w,                    &glyph_bitmap->bbox_h);    }    else {        glyph_bitmap->bbox_x = 0;        glyph_bitmap->bbox_y = devfont->font_ops->get_font_descent (log_font, devfont);        glyph_bitmap->bbox_w = devfont->font_ops->get_char_width (log_font, devfont, mchar, mchar_len);        glyph_bitmap->bbox_h = devfont->font_ops->get_font_height (log_font, devfont);    }    if (devfont->font_ops->get_char_advance) {        devfont->font_ops->get_char_advance (log_font, devfont, mchar, mchar_len,                    &glyph_bitmap->advance_x,                    &glyph_bitmap->advance_y);    }    else {        glyph_bitmap->advance_x = glyph_bitmap->bbox_w;        glyph_bitmap->advance_y = 0;    }    devfont->font_ops->get_char_advance (log_font, devfont, mchar, mchar_len,                    &glyph_bitmap->advance_x,                    &glyph_bitmap->advance_y);    glyph_bitmap->bmp_size = devfont->font_ops->char_bitmap_size (log_font, devfont, mchar, mchar_len);    glyph_bitmap->bmp_pitch = (glyph_bitmap->bbox_w + 7) >> 3;    glyph_bitmap->bits = devfont->font_ops->get_char_bitmap (log_font, devfont, mchar, mchar_len);}

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日韩av中文字幕一区二区 | 日本视频免费一区| 亚洲欧美另类小说| 亚洲视频电影在线| 亚洲欧美一区二区三区极速播放| 国产亚洲欧洲一区高清在线观看| 欧美成人一区二区三区在线观看| 欧美精品在线观看播放| 欧美日韩激情一区| 欧美日韩不卡一区| 91精品国产免费久久综合| 欧美一级xxx| www国产精品av| 国产亚洲一区二区三区四区 | 精品国产乱码久久久久久老虎| 91精品国产欧美一区二区18| 51精品国自产在线| 日韩一区二区三区免费观看| 精品日韩一区二区三区免费视频| 欧美成人猛片aaaaaaa| 久久你懂得1024| 国产精品电影一区二区三区| 亚洲欧美偷拍卡通变态| 亚洲一级不卡视频| 蜜臀精品久久久久久蜜臀| 国产一区二区成人久久免费影院| 成人激情小说乱人伦| 色噜噜久久综合| 欧美一区二区视频免费观看| 久久综合色天天久久综合图片| 国产欧美日韩另类视频免费观看| 亚洲色图第一区| 五月天视频一区| 国产一区二区电影| 色悠久久久久综合欧美99| 国产欧美一区二区三区鸳鸯浴| 国产精品区一区二区三| 伊人色综合久久天天人手人婷| 丝袜诱惑制服诱惑色一区在线观看 | 欧美视频一区二| 69成人精品免费视频| 久久色视频免费观看| 亚洲丝袜美腿综合| 日韩和的一区二区| 成人av电影在线观看| 欧美日韩亚洲综合| 欧美激情资源网| 视频一区中文字幕| 成人激情免费网站| 日韩一区二区三区四区五区六区| 国产精品久久久久一区二区三区 | 亚洲精品一区二区在线观看| 成人欧美一区二区三区在线播放| 视频在线观看一区二区三区| 国产成人激情av| 欧美三级电影一区| 国产精品欧美一区二区三区| 视频一区二区三区中文字幕| 大白屁股一区二区视频| 69堂精品视频| 成人免费在线视频| 韩国v欧美v亚洲v日本v| 欧美日韩一区二区三区不卡| 中文字幕欧美国产| 麻豆国产欧美一区二区三区| 日本韩国视频一区二区| 国产日韩视频一区二区三区| 日本欧美韩国一区三区| 91一区二区在线| 2017欧美狠狠色| 日日摸夜夜添夜夜添亚洲女人| www.在线欧美| 久久久夜色精品亚洲| 日本中文字幕一区二区视频| 91福利精品视频| 中文字幕在线观看不卡视频| 久久99久久精品| 欧美日韩国产bt| 一区二区三区免费在线观看| 成人av综合一区| 久久久精品黄色| 精品一二线国产| 91精品国产综合久久精品| 亚洲精品视频免费看| 成人精品鲁一区一区二区| 久久久不卡影院| 国模冰冰炮一区二区| 日韩精品一区二区三区在线 | 国产成人免费av在线| 欧美一级欧美三级| 亚洲大片在线观看| 欧美日韩美少妇| 亚洲在线视频网站| 一本色道**综合亚洲精品蜜桃冫| 国产欧美一区二区三区在线老狼| 极品美女销魂一区二区三区 | 久久激情五月激情| 制服丝袜亚洲色图| 无码av中文一区二区三区桃花岛| 欧洲av在线精品| 亚洲精品菠萝久久久久久久| 色综合久久久久久久久| 亚洲色图一区二区| 91丝袜国产在线播放| 亚洲欧美综合网| 91视频免费观看| 中文字幕亚洲成人| 在线日韩一区二区| 亚洲123区在线观看| 欧美日韩午夜在线视频| 午夜精品久久久久久久 | 亚洲在线免费播放| 欧洲精品一区二区三区在线观看| 亚洲午夜电影在线| 正在播放一区二区| 免费高清视频精品| 国产午夜精品一区二区三区视频| 床上的激情91.| 亚洲黄色av一区| 制服.丝袜.亚洲.中文.综合| 另类小说一区二区三区| 久久亚洲精品国产精品紫薇| 成人午夜看片网址| 亚洲欧美偷拍另类a∨色屁股| 欧美色图在线观看| 日本v片在线高清不卡在线观看| 精品国产成人在线影院| 风流少妇一区二区| 亚洲免费三区一区二区| 欧美日韩久久一区二区| 精品亚洲aⅴ乱码一区二区三区| 国产日产欧美一区二区视频| 91亚洲男人天堂| 亚洲成人你懂的| 欧美精品一区二区三区很污很色的 | 国产乱码一区二区三区| 亚洲欧美综合色| 91精品国产91热久久久做人人| 国产精品综合在线视频| 亚洲免费大片在线观看| 日韩一区二区三区视频| 成人性生交大合| 一区二区三区久久| 精品999在线播放| 99视频在线精品| 日本欧美韩国一区三区| 国产精品美女久久久久久| 欧美色网一区二区| 国产精品一线二线三线精华| 亚洲猫色日本管| 日韩欧美一级片| 91免费国产视频网站| 蜜臀国产一区二区三区在线播放| 国产精品视频一二三区 | 亚洲欧美另类综合偷拍| 日韩一区二区在线看| jlzzjlzz欧美大全| 日本不卡一区二区三区| 亚洲欧洲av另类| 精品国产乱码久久久久久浪潮 | 久久美女高清视频| 欧日韩精品视频| 成人免费黄色在线| 视频一区二区国产| 中文字幕在线观看不卡视频| 欧美成人一级视频| 欧美中文字幕一二三区视频| 岛国一区二区三区| 蜜桃一区二区三区在线观看| 亚洲欧美日韩在线| 亚洲综合网站在线观看| 国产拍欧美日韩视频二区| 91精品国产91久久久久久最新毛片| 99视频一区二区三区| 国产一区不卡在线| 蜜臀av亚洲一区中文字幕| 一二三四社区欧美黄| 国产精品久久久久久久久免费樱桃 | 综合av第一页| 久久久综合视频| 日韩一区二区三区电影| 欧美专区日韩专区| av在线不卡免费看| 国产在线观看一区二区| 奇米色一区二区| 亚洲一区二区三区四区五区中文| 欧美国产欧美综合| 久久久国产精品不卡| 精品国产伦一区二区三区观看方式 | 久久久亚洲精华液精华液精华液 | 亚洲成a人在线观看| 亚洲人妖av一区二区| 国产日产欧美一区| 精品国一区二区三区| 欧美一区二区三区在线| 欧美日韩精品一区视频| 欧美午夜免费电影| 欧美丝袜丝nylons| 在线免费av一区| 精品视频色一区|