⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 logfont.c

📁 在ecos 下mingui 的移植开发
💻 C
字号:
//// $Id: logfont.c,v 1.9 2000/08/28 03:08:21 weiym Exp $// // Log fonts management.//// logfont.c// // Copyright (C) 2000, Wei Yongming.// Copyright (C) 2000, BluePoint Software.//// Current maintainer: Wei Yongming.// // Created by Wei Yongming///***  This library is free software; you can redistribute it and/or**  modify it under the terms of the GNU Library General Public**  License as published by the Free Software Foundation; either**  version 2 of the License, or (at your option) any later version.****  This library 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**  Library General Public License for more details.****  You should have received a copy of the GNU Library General Public**  License along with this library; if not, write to the Free**  Software Foundation, Inc., 59 Temple Place - Suite 330, Boston,**  MA 02111-1307, USA*/// Create date: 2000/07/07//// Modify records:////  Who             When        Where       For What                Status//-----------------------------------------------------------------------------//// TODO://#include <stdio.h>#include <stdlib.h>#include <string.h>#include <semaphore.h>#include <pthread.h>#include "common.h"#include "gdi.h"#include "window.h"#include "cliprect.h"#include "gal.h"#include "internals.h"#include "dc.h"#include "sysfont.h"#include "devfont.h"#include "fontname.h"#ifndef lintstatic char fileid[] = "$Id: logfont.c,v 1.9 2000/08/28 03:08:21 weiym Exp $";#endifCHARSETOPS* 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->charset [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);}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 = &SysLogFont;    else        pdc->pLogFont = log_font;        return old;}PLOGFONT GUIAPI GetSystemFont (int font_id){    return &SysLogFont;}void GUIAPI GetLogFontInfo (HDC hdc, LOGFONT* log_font){    memcpy (log_font, dc_HDC2PDC (hdc)->pLogFont, sizeof (LOGFONT));}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -