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

📄 mgfont.cpp

📁 monqueror一个很具有参考价值的源玛
💻 CPP
字号:
#include <stdio.h>#include <stdlib.h>#include <assert.h>#include <iostream.h>#include "render_interface.h"#include "mgfont.h"#include "kdebug.h"MGFont::MGFont () : m_family ("Song"){    PLOGFONT sf = GetSystemFont (SYSLOGFONT_WCHAR_DEF);	m_weight = MG::Normal;	m_pointSize = sf->size;	m_italic = false;    m_charset = GB_2312;#if 0    m_font = GetSystemFont (SYSLOGFONT_WCHAR_DEF);#endif}static const char* ConvertFamilyName (MGFont::CharSet charset, MGString family){    switch (charset) {    case MGFont::GB_2312:    case MGFont::Set_GBK:    case MGFont::Set_Zh:        if (family.find ("宋体") >= 0)            return "song";        else if (family.find ("黑体") >= 0)            return "hei";        else if (family.find ("楷体") >= 0)            return "kai";        else if (family.find ("仿宋") >= 0)            return "fsong";        else            return family.latin1();        break;    case MGFont::Big5:    case MGFont::Set_Zh_TW:        return "ming";    default:        break;    }    return family.latin1();}#if 0void MGFont::CreateFont (void){    if (m_font != GetSystemFont (SYSLOGFONT_WCHAR_DEF))        return;	char w = FONT_WEIGHT_REGULAR;	switch (m_weight)	{	case MG::Light:		w = FONT_WEIGHT_BOOK;		break;	case MG::DemiBold:		w = FONT_WEIGHT_DEMIBOLD;		break;	case MG::Bold:		w = FONT_WEIGHT_BOLD;		break;	case MG::Black:		w = FONT_WEIGHT_BLACK;		break;	}    const char* szCharset;    switch (m_charset) {    case GB_2312:    case Set_GBK:    case Set_Zh:        szCharset = "GB2312";        break;    case Big5:    case Set_Zh_TW:        szCharset = "BIG5";        break;    case Latin1:        szCharset = "ISO8859-1";        break;    default:        szCharset = "GB2312";        break;    }    const char* family = ConvertFamilyName (m_charset, m_family);    m_font = CreateLogFont (NULL, family, szCharset, w, 					m_italic ? FONT_SLANT_ITALIC : FONT_SLANT_ROMAN,					FONT_SETWIDTH_NORMAL, FONT_SPACING_CHARCELL,					FONT_UNDERLINE_NONE, FONT_STRUCKOUT_NONE,					m_pointSize, 0);    if (m_font == NULL)        m_font = GetSystemFont (SYSLOGFONT_WCHAR_DEF);}#endifMGFont::MGFont (const MGString& family, int pointSize,			int weight, bool italic, CharSet charset){	m_weight = weight;	m_pointSize = pointSize;	m_italic = italic;    m_family = family;    m_charset = charset;}PLOGFONT MGFont::CreateFont(const MGString& family, int ps, int weight, bool italic, CharSet charset){	char w = FONT_WEIGHT_REGULAR;	switch( weight )	{	case MG::Light:		w = FONT_WEIGHT_BOOK;		break;	case MG::DemiBold:		w = FONT_WEIGHT_DEMIBOLD;		break;	case MG::Bold:		w = FONT_WEIGHT_BOLD;		break;	case MG::Black:		w = FONT_WEIGHT_BLACK;		break;	}    const char* szCharset;    switch (charset) {    case GB_2312:    case Set_GBK:    case Set_Zh:        szCharset = "GB2312";        break;    case Big5:    case Set_Zh_TW:        szCharset = "BIG5";        break;    case Latin1:        szCharset = "ISO8859-1";        break;    default:        szCharset = "GB2312";        break;    }    const char* szFamily = ConvertFamilyName (charset, family);#if 0    fprintf (stderr, "CreateFont: %d(%s), %s(%s).\n", charset, szCharset, family.latin1(), szFamily);#endif	PLOGFONT font = CreateLogFont( NULL, szFamily, szCharset, w, 					italic ? FONT_SLANT_ITALIC : FONT_SLANT_ROMAN,					FONT_SETWIDTH_NORMAL, FONT_SPACING_CHARCELL,					FONT_UNDERLINE_NONE, FONT_STRUCKOUT_NONE,					ps, 0 );	return font;}PLOGFONT MGFont::CreateFont(const MGFont& font){	char w = FONT_WEIGHT_REGULAR;	switch (font.m_weight )	{	case MG::Light:		w = FONT_WEIGHT_BOOK;		break;	case MG::DemiBold:		w = FONT_WEIGHT_DEMIBOLD;		break;	case MG::Bold:		w = FONT_WEIGHT_BOLD;		break;	case MG::Black:		w = FONT_WEIGHT_BLACK;		break;	}    const char* szCharset;    switch (font.m_charset) {    case GB_2312:    case Set_GBK:    case Set_Zh:        szCharset = "GB2312";        break;    case Set_Zh_TW:    case Big5:        szCharset = "BIG5";        break;    case Latin1:        szCharset = "ISO8859-1";        break;    default:        szCharset = "GB2312";        break;    }    const char* szFamily = ConvertFamilyName (font.m_charset, font.m_family);#if 0    fprintf (stderr, "CreateFont: %d(%s), %s(%s).\n", font.m_charset, szCharset, font.m_family.latin1(), szFamily);#endif	PLOGFONT logfont = CreateLogFont( NULL, szFamily, szCharset, w, 					font.m_italic ? FONT_SLANT_ITALIC : FONT_SLANT_ROMAN,					FONT_SETWIDTH_NORMAL, FONT_SPACING_CHARCELL,					FONT_UNDERLINE_NONE, FONT_STRUCKOUT_NONE,					font.m_pointSize, 0 );	return logfont;}MGFont& MGFont::operator=( const MGFont& f ){	m_weight = f.m_weight;	m_pointSize = f.m_pointSize;	m_italic = f.m_italic;    m_family = f.m_family;    m_charset = f.m_charset;	return *this;}MGFont::~MGFont(){#if 0    if (m_font != GetSystemFont (SYSLOGFONT_WCHAR_DEF))        DestroyLogFont (m_font);#endif}bool MGFont::operator==( const MGFont& f ) const{	return m_weight == f.m_weight &&	  	   	m_pointSize == f.m_pointSize &&			m_italic == f.m_italic &&            m_charset == f.m_charset &&            m_family == f.m_family;}bool MGFont::operator!=( const MGFont& f ) const{	return !operator==( f );}int MGFont::pointSize() const{	return m_pointSize;}void MGFont::setPointSize( int s ){	m_pointSize = s;}bool MGFont::italic() const{	return m_italic;}void MGFont::setItalic( bool bItalic ){	m_italic = bItalic;}int MGFont::weight() const{	return m_weight;}void MGFont::setWeight( int w ){	m_weight = w;}MGFont::CharSet MGFont::charSet () const{    return m_charset;}void MGFont::setCharSet (CharSet charset){    m_charset = charset;}QString MGFont::family () const{    return m_family;}void MGFont::setFamily (const MGString& family){    m_family = family;}

⌨️ 快捷键说明

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