📄 mgfont.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 + -