tune and cleanup

This commit is contained in:
Vincent Wei
2019-01-16 11:43:27 +08:00
parent 53253ed101
commit 95d09a7673
15 changed files with 129 additions and 152 deletions
+10 -8
View File
@@ -17,10 +17,9 @@ The styles of LOGFONT changed.
* Add new rendering style:
1. `FS_RENDER_ANY`: Not specified
1. `FS_RENDER_MONO`:
1. `FS_RENDER_OUTLINE`:
1. `FS_RENDER_GREY`:
1. `FS_RENDER_SUBPIXEL`:
* Some bad style definitions are deprecated:
* Some old styles are deprecated:
1. `FS_WEIGHT_BOOK`; use `FS_RENDER_GREY` instead.
1. `FS_WEIGHT_SUBPIXEL`; use `FS_RENDER_SUBPIXEL` instead.
* Introduced or redefined the weight styles to follow OpenType specification:
@@ -36,11 +35,13 @@ The styles of LOGFONT changed.
1. `FONT_WEIGHT_BLACK`: Black (Heavy).
* Introduce the new decoration styles and replace
`FONT_UNDERLINE_LINE` and `FONT_STRUCKOUT_LINE` with them:
1. `FONT_DECORATE_ANY`:
1. `FONT_DECORATE_NONE`:
1. `FONT_DECORATE_UNDERLINE`:
1. `FONT_DECORATE_STRUCKOUT`:
1. `FONT_DECORATE_BOTH`:
1. `FONT_DECORATE_ANY`: Not specified.
1. `FONT_DECORATE_NONE`: None.
1. `FONT_DECORATE_UNDERLINE`: glyphs are underscored.
1. `FONT_DECORATE_STRUCKOUT`: glyphs are overstruck.
1. `FONT_DECORATE_US`: Both `FONT_DECORATE_UNDERLINE` and `FONT_DECORATE_STRUCKOUT`.
1. `FONT_DECORATE_REVERSE`: Reversed for future. Glyphs have their foreground and background reversed.
1. `FONT_DECORATE_OUTLINE`: Outline (hollow) glyphs.
* The following style are deprecated:
1. `FONT_OTHER_LCDPORTRAIT`
1. `FONT_OTHER_LCDPORTRAITKERN`
@@ -76,8 +77,9 @@ please define the font name in the following way:
One should get the font metrics information by calling `GetFontMetrics` function
if you want to get the height and descent data of one font.
* More fields added for GLYPHBITMAP struct in order to return the rasterized
* More fields added for GLYPHBITMAP struct in order to return the completed rasterized
glyph bitmap information.
* Rename `mg_FT_LcdFilter` to `FT2LCDFilter` in order to follow MiniGUI naming spec.
#### New APIs
+34 -16
View File
@@ -5534,25 +5534,26 @@ MG_EXPORT int GUIAPI SubtractRect (RECT* rc, const RECT* psrc1, const RECT* psrc
#define FONT_DECORATE_NONE 'n'
#define FONT_DECORATE_UNDERLINE 'u'
#define FONT_DECORATE_STRUCKOUT 's'
#define FONT_DECORATE_BOTH 'b'
#define FONT_DECORATE_REVERSE 'r'
#define FONT_DECORATE_OUTLINE 'o'
#define FONT_DECORATE_US 'U' /* UNDERLINE | STRUCKOUT */
#define FS_DECORATE_MASK 0x0F000000
#define FS_DECORATE_UNDERLINE 0x01000000
#define FS_DECORATE_STRUCKOUT 0x02000000
#define FS_DECORATE_BOTH 0x03000000
#define FS_DECORATE_REVERSE 0x04000000
#define FS_DECORATE_OUTLINE 0x08000000
#define FONT_RENDER_NIL '\0'
#define FONT_RENDER_ANY '*'
#define FONT_RENDER_MONO 'n'
#define FONT_RENDER_OUTLINE 'o'
#define FONT_RENDER_GREY 'g'
#define FONT_RENDER_SUBPIXEL 's'
#define FS_RENDER_MASK 0xF0000000
#define FS_RENDER_MONO 0x00000000
#define FS_RENDER_OUTLINE 0x10000000
#define FS_RENDER_GREY 0x20000000
#define FS_RENDER_SUBPIXEL 0x30000000
#define FS_RENDER_GREY 0x10000000
#define FS_RENDER_SUBPIXEL 0x20000000
/*
* Backward compatiblilty definitions.
@@ -6327,15 +6328,13 @@ MG_EXPORT PLOGFONT GUIAPI SelectFont (HDC hdc, PLOGFONT log_font);
*/
MG_EXPORT const DEVFONT* GUIAPI GetNextDevFont (const DEVFONT* dev_font);
#ifdef _MGFONT_FT2
/**
* List of values to identify various types of LCD filters,
* Note a freetype2 specific definition.
*/
typedef enum
{
typedef enum {
/** equal to FT_LCD_FILTER_NONE */
MG_SMOOTH_NONE = 0,
/** equal to FT_LCD_FILTER_DEFAULT */
@@ -6346,10 +6345,10 @@ typedef enum
MG_SMOOTH_LEGACY = 16,
/** equal to FT_LCD_FILTER_MAX */
MG_SMOOTH_MAX /*do not remove*/
} mg_FT_LcdFilter;
} FT2LCDFilter;
/**
* \fn BOOL ft2SetLcdFilter(LOGFONT* logfont, mg_FT_LcdFilter filter)
* \fn BOOL ft2SetLcdFilter(LOGFONT* logfont, FT2LCDFilter filter)
*
* \brief Set freetype2 smooth mode.
*
@@ -6357,13 +6356,13 @@ typedef enum
*
* \param logfont The logical font.
*
* \param filter The handle font smooth mode, it must be a value of mg_FT_LcdFilter.
* \param filter The handle font smooth mode, it must be a value of FT2LCDFilter.
*
* \return TRUE on success, otherwise FALSE.
*
* \sa mg_FT_LcdFilter
* \sa FT2LCDFilter
*/
MG_EXPORT BOOL GUIAPI ft2SetLcdFilter (LOGFONT* logfont, mg_FT_LcdFilter filter);
MG_EXPORT BOOL GUIAPI ft2SetLcdFilter (LOGFONT* logfont, FT2LCDFilter filter);
#endif
@@ -8826,7 +8825,7 @@ typedef struct _GLYPHBITMAP
/**
* The type of glyph bitmap, one of the following values:
* - GLYPHBMP_TYPE_MONO
* - GLYPHBMP_TYPE_PRERENDER
* - GLYPHBMP_TYPE_GREY
* - GLYPHBMP_TYPE_SUBPIXEL
* - GLYPHBMP_TYPE_PRERENDER
*/
@@ -8950,10 +8949,29 @@ MG_EXPORT int GUIAPI DrawGlyphString (HDC hdc, int x, int y, Glyph32* glyphs,
#define GLYPH_INFO_METRICS 0x04
#define GLYPH_INFO_BMP 0x10
/*the type of glyph bitmap*/
/**
* The type of glyph bitmap: monochrome
*/
#define GLYPHBMP_TYPE_MONO 0x00
/**
* The type of glyph bitmap: grey (8-bit)
*/
#define GLYPHBMP_TYPE_GREY 0x01
/**
* The type of glyph bitmap: grey (4-bit)
*/
#define GLYPHBMP_TYPE_GREY4b 0x02
/**
* The type of glyph bitmap: subpixel
*/
#define GLYPHBMP_TYPE_SUBPIXEL 0x02
/**
* The type of glyph bitmap: pre-rendered BITMAP object
*/
#define GLYPHBMP_TYPE_PRERENDER 0x03
/**
+5 -4
View File
@@ -440,10 +440,11 @@ static DEVFONT* make_devfont (const char* font_name, void* data, BOOL is_filenam
devfont->charset_ops = charset_ops;
if (is_filename) {
devfont->data = devfont->font_ops->load_font_data (font_name, data);
devfont->data = devfont->font_ops->load_font_data (devfont,
font_name, data);
if (devfont->data == NULL) {
_MG_PRINTF ("FONT>DevFont: error in loading font %s from %s file.\n",
_MG_PRINTF ("FONT>DevFont: error in loading font %s from %s file\n",
font_name, (const char*) data);
free (devfont);
return NULL;
@@ -679,7 +680,7 @@ one_list:
cur = tmp->next;
if (!tmp->relationship && tmp->need_unload)
tmp->font_ops->unload_font_data (tmp->data);
tmp->font_ops->unload_font_data (tmp, tmp->data);
free (tmp);
}
@@ -717,7 +718,7 @@ static inline void del_devfont_from_list(const char* font_name, BOOL is_mbc_list
if (strcmp (cur->name, font_name) == 0) {
/*unload cur->data*/
if (!cur->relationship && cur->need_unload)
cur->font_ops->unload_font_data (cur->data);
cur->font_ops->unload_font_data (cur, cur->data);
if (cur == head) {
cur = cur->next;
+9 -5
View File
@@ -239,8 +239,15 @@ DWORD fontConvertStyle (const char* style_part)
case FONT_DECORATE_STRUCKOUT:
style |= FS_DECORATE_STRUCKOUT;
break;
case FONT_DECORATE_BOTH:
style |= FS_DECORATE_BOTH;
case FONT_DECORATE_REVERSE:
style |= FS_DECORATE_REVERSE;
break;
case FONT_DECORATE_OUTLINE:
style |= FS_DECORATE_OUTLINE;
break;
case FONT_DECORATE_US:
style |= FS_DECORATE_UNDERLINE;
style |= FS_DECORATE_STRUCKOUT;
break;
default:
break;
@@ -251,9 +258,6 @@ DWORD fontConvertStyle (const char* style_part)
case FONT_RENDER_MONO:
style |= FS_RENDER_MONO;
break;
case FONT_RENDER_OUTLINE:
style |= FS_RENDER_OUTLINE;
break;
case FONT_RENDER_GREY:
style |= FS_RENDER_GREY;
break;
+2 -2
View File
@@ -65,7 +65,7 @@ static TT_Engine ttf_engine; /* The ONLY freetype engine */
static BYTE virtual_palette [] = {0, 32, 64, 128, 255};
/************************ Create/Destroy FreeType font ***********************/
static void* load_font_data (const char* font_name, const char *file_name)
static void* load_font_data (DEVFONT* devfont, const char* font_name, const char *file_name)
{
unsigned short i, n;
unsigned short platform, encoding;
@@ -144,7 +144,7 @@ error_after_create_info:
return NULL;
}
static void unload_font_data (void* data)
static void unload_font_data (DEVFONT* devfont, void* data)
{
TTFINSTANCEINFO* ttf_inst_info = (TTFINSTANCEINFO*)data;
TTFGLYPHINFO* ttf_glyph_info = ttf_inst_info->ttf_glyph_info;
+38 -26
View File
@@ -863,29 +863,6 @@ new_instance (LOGFONT* logfont, DEVFONT* devfont, BOOL need_sbc_font)
ft_inst_info->size = size;
#endif
// According to face information, change the style information for logical font.
if (face->style_flags & FT_STYLE_FLAG_ITALIC)
new_devfont->style |= FS_SLANT_ITALIC;
#if 0 // VincentWei: use TT_OS2 table data here
if (face->style_flags & FT_STYLE_FLAG_BOLD)
new_devfont->style |= FS_WEIGHT_BOLD;
#else
{
TT_OS2* tt_os2 = (TT_OS2*)FT_Get_Sfnt_Table (face, FT_SFNT_OS2);
unsigned int weight_style = FS_WEIGHT_REGULAR;
if (tt_os2->usWeightClass >= 100 && tt_os2->usWeightClass <= 900) {
weight_style = (tt_os2->usWeightClass/100 * 10);
}
else {
_DBG_PRINTF("FreeType2: Unknown tt_os2->usWeightClass: %u\n", tt_os2->usWeightClass);
}
new_devfont->style &= ~FS_WEIGHT_MASK;
new_devfont->style |= weight_style;
}
#endif
FT_UNLOCK(&ft_lock);
return new_devfont;
@@ -968,7 +945,7 @@ static int is_rotatable (LOGFONT* logfont, DEVFONT* devfont, int rot_desired)
}
/************************ Create/Destroy FreeType font ***********************/
static void* load_font_data (const char* font_name, const char *file_name)
static void* load_font_data (DEVFONT* devfont, const char* font_name, const char *file_name)
{
int i;
FT_Error error;
@@ -1029,6 +1006,40 @@ static void* load_font_data (const char* font_name, const char *file_name)
ft_data->ft_face_info = ft_face_info;
if (devfont) {
// According to OS/2 table information,
// change the style information for dev font.
TT_OS2* tt_os2 = (TT_OS2*)FT_Get_Sfnt_Table (face, FT_SFNT_OS2);
unsigned int weight_style = FS_WEIGHT_REGULAR;
if (tt_os2->usWeightClass >= 100 && tt_os2->usWeightClass <= 900) {
weight_style = (tt_os2->usWeightClass/100 * 10);
}
else {
_DBG_PRINTF("FreeType2: Unknown tt_os2->usWeightClass: %u\n",
tt_os2->usWeightClass);
}
devfont->style &= ~FS_WEIGHT_MASK;
devfont->style |= weight_style;
devfont->style &= ~FS_SLANT_MASK;
if (tt_os2->fsSelection & (0x01 << 9)) // OBLIQUE
devfont->style |= FS_SLANT_OBLIQUE;
else if (tt_os2->fsSelection & 0x01) // ITALIC
devfont->style |= FS_SLANT_ITALIC;
devfont->style &= ~FS_DECORATE_MASK;
if (tt_os2->fsSelection & (0x01 << 1)) // UNDERSCORE
devfont->style |= FS_DECORATE_UNDERLINE;
if (tt_os2->fsSelection & (0x01 << 2)) // NEGATIVE
devfont->style |= FS_DECORATE_REVERSE;
if (tt_os2->fsSelection & (0x01 << 3)) // OUTLINED (HOLLOW)
devfont->style |= FS_DECORATE_OUTLINE;
if (tt_os2->fsSelection & (0x01 << 4)) // STRIKEOUT
devfont->style |= FS_DECORATE_STRUCKOUT;
}
FT_UNLOCK(&ft_lock);
return ft_data;
@@ -1039,7 +1050,7 @@ error:
return NULL;
}
static void unload_font_data (void* data)
static void unload_font_data (DEVFONT* devfont, void* data)
{
FT2_DATA* ft_data = (FT2_DATA*)data;
#ifndef _MGFONT_TTF_CACHE
@@ -1171,7 +1182,7 @@ FONTOPS __mg_ttf_ops = {
};
BOOL
ft2SetLcdFilter (LOGFONT* logfont, mg_FT_LcdFilter filter)
ft2SetLcdFilter (LOGFONT* logfont, FT2LCDFilter filter)
{
BOOL rv = FALSE;
DEVFONT* devfont;
@@ -1201,6 +1212,7 @@ ft2SetLcdFilter (LOGFONT* logfont, mg_FT_LcdFilter filter)
#else
if (filter == MG_SMOOTH_NONE) {
logfont->style &= ~FS_RENDER_MASK;
logfont->style |= FS_RENDER_MONO;
}
#endif
}
+1 -1
View File
@@ -306,7 +306,7 @@ PLOGFONT GUIAPI CreateLogFont (const char* type, const char* family,
if (underline == FONT_UNDERLINE_LINE) {
if (struckout == FONT_STRUCKOUT_LINE) {
style_name[4] = FONT_DECORATE_BOTH;
style_name[4] = FONT_DECORATE_US;
}
else {
style_name[4] = FONT_DECORATE_UNDERLINE;
+2 -2
View File
@@ -154,7 +154,7 @@ static void clear_glyph_tree (QPF_GLYPHTREE* tree)
free (tree->more);
}
static void* load_font_data (const char* font_name, const char* file_name)
static void* load_font_data (DEVFONT* devfont, const char* font_name, const char* file_name)
{
FILE* fp = NULL;
uchar* data;
@@ -222,7 +222,7 @@ error:
return NULL;
}
static void unload_font_data (void* data)
static void unload_font_data (DEVFONT* devfont, void* data)
{
QPFINFO* qpf_info = (QPFINFO*)data;
+2 -6
View File
@@ -65,11 +65,7 @@
#define RBFONT_INFO(devfont) ((RBFINFO*)(devfont.data))
/********************** Load/Unload of raw bitmap font ***********************/
#if 0
static void* load_font_data (char* font_name, char* file_name,
char* real_font_name)
#endif
static void* load_font_data (const char* font_name, const char* file_name)
static void* load_font_data (DEVFONT* devfont, const char* font_name, const char* file_name)
{
FILE* fp = NULL;
RBFINFO* rbf_info = calloc (1, sizeof(RBFINFO));
@@ -129,7 +125,7 @@ error_load:
/********************** Init/Term of raw bitmap font ***********************/
static void unload_font_data (void* data)
static void unload_font_data (DEVFONT* devfont, void* data)
{
RBFINFO* rbfinfo = (RBFINFO*)data;
#ifdef HAVE_MMAP
+2 -2
View File
@@ -79,7 +79,7 @@ static encstruct default_enc;
#define CHARSPACEUNIT2PIXEL(x) (x/1000)
static void* load_font_data (const char* font_name, const char* file_name)
static void* load_font_data (DEVFONT* devfont, const char* font_name, const char* file_name)
{
int j;
int font_id;
@@ -109,7 +109,7 @@ error:
return NULL;
}
static void unload_font_data (void* data)
static void unload_font_data (DEVFONT* devfont, void* data)
{
free (data);
}
+2 -6
View File
@@ -58,11 +58,7 @@
#include "fontname.h"
#define UPFONT_INFO_P(devfont) ((UPFINFO*)(devfont->data))
#if 0
static void* load_font_data (char* font_name, char* file_name
char* real_font_name)
#endif
static void* load_font_data (const char* font_name, const char* file_name)
static void* load_font_data (DEVFONT* devfont, const char* font_name, const char* file_name)
{
FILE* fp = NULL;
UPFV1_FILE_HEADER * filehead;
@@ -136,7 +132,7 @@ error:
return NULL;
}
static void unload_font_data (void* data)
static void unload_font_data (DEVFONT* devfont, void* data)
{
#ifdef HAVE_MMAP
munmap (((UPFINFO*) data)->root_dir, ((UPFINFO*) data)->file_size);
+2 -2
View File
@@ -327,7 +327,7 @@ static void swap_intdata (Uint32* data, int num)
}
#endif
static void* load_font_data (const char* fontname, const char* filename)
static void* load_font_data (DEVFONT* devfont, const char* fontname, const char* filename)
{
FILE* fp = NULL;
@@ -441,7 +441,7 @@ error:
return NULL;
}
static void unload_font_data (void* data)
static void unload_font_data (DEVFONT* devfont, void* data)
{
VBFINFO* info = (VBFINFO*) data;
#ifdef HAVE_MMAP
+2 -3
View File
@@ -251,11 +251,10 @@ struct _FONTOPS
* FIXME real_fontname: return real name in file by a char point
**/
//void* (*load_font_data) (char* fontname, char* filename, char* real_fontname);
void* (*load_font_data) (const char* fontname, const char* filename);
void* (*load_font_data) (DEVFONT* devfont, const char* fontname, const char* filename);
/** The method to unload data of a devfont*/
void (*unload_font_data) (void* data);
void (*unload_font_data) (DEVFONT* devfont, void* data);
};
typedef struct {
+9 -40
View File
@@ -162,37 +162,6 @@ static void make_gray_pixels (PDC pdc)
static void make_filter_pixels (PDC pdc)
{
#if 0 // VincentWei: use FS_RENDER_MASK instead (3.4.0)
if (pdc->pLogFont->style & FS_WEIGHT_BOOK) {
int i;
Uint8 r, g, b, a;
if (make_alpha_pixel_format (pdc))
return;
GAL_GetRGB (pdc->textcolor, pdc->surface->format, &r, &g, &b);
a = 0;
for (i = 0; i < 16; i++) {
pdc->filter_pixels [i] = GAL_MapRGBA (pdc->alpha_pixel_format,
r, g, b, a);
a += 16;
}
pdc->filter_pixels [16] = GAL_MapRGBA (pdc->alpha_pixel_format,
r, g, b, 255);
}
else if (pdc->pLogFont->style & FS_WEIGHT_LIGHT) {
gal_pixel trans = pdc->bkcolor ^ 1;
if (trans == pdc->textcolor)
trans = pdc->bkcolor ^ 3;
pdc->filter_pixels [0] = trans;
pdc->filter_pixels [1] = pdc->bkcolor;
pdc->filter_pixels [2] = pdc->textcolor;
}
#else
switch (pdc->pLogFont->style & FS_RENDER_MASK) {
case FS_RENDER_GREY: {
int i;
@@ -215,21 +184,21 @@ static void make_filter_pixels (PDC pdc)
break;
}
case FS_RENDER_OUTLINE: {
gal_pixel trans = pdc->bkcolor ^ 1;
if (trans == pdc->textcolor)
trans = pdc->bkcolor ^ 3;
case FS_RENDER_MONO:
if (pdc->pLogFont->style & FS_DECORATE_OUTLINE) {
gal_pixel trans = pdc->bkcolor ^ 1;
if (trans == pdc->textcolor)
trans = pdc->bkcolor ^ 3;
pdc->filter_pixels [0] = trans;
pdc->filter_pixels [1] = pdc->bkcolor;
pdc->filter_pixels [2] = pdc->textcolor;
pdc->filter_pixels [0] = trans;
pdc->filter_pixels [1] = pdc->bkcolor;
pdc->filter_pixels [2] = pdc->textcolor;
}
break;
}
default:
break;
}
#endif
}
Uint32 GUIAPI SetDCAttr (HDC hdc, int attr, Uint32 value)
+9 -29
View File
@@ -1978,35 +1978,17 @@ static BOOL _gdi_get_glyph_data (PDC pdc, Glyph32 glyph_value,
DWORD glyph_type = devfont->font_ops->get_glyph_type (logfont, devfont);
switch (glyph_type & DEVFONTGLYPHTYPE_MASK_BMPTYPE) {
case GLYPHBMP_TYPE_MONO:
#if 0 // VincentWei: use FS_RENDER_MASK instead (3.4.0)
if (logfont->style & FS_WEIGHT_BOOK) {
if ((logfont->style & FS_RENDER_MASK) == FS_RENDER_GREY) {
if (pdc->alpha_pixel_format)
ctxt->cb = _dc_book_scan_line;
}
else if (logfont->style & FS_WEIGHT_LIGHT) {
else if ((logfont->style & FS_RENDER_MASK) == FS_RENDER_SUBPIXEL) {
ctxt->cb = _dc_subpixel_scan_line;
}
else if (logfont->style & FS_DECORATE_OUTLINE) {
if (pdc->textcolor != pdc->bkcolor)
ctxt->cb = _dc_light_scan_line;
}
else if (logfont->style & FS_WEIGHT_SUBPIXEL) {
ctxt->cb = _dc_subpixel_scan_line;
}
#else
switch (logfont->style & FS_RENDER_MASK) {
case FS_RENDER_GREY:
if (pdc->alpha_pixel_format)
ctxt->cb = _dc_book_scan_line;
break;
case FS_RENDER_OUTLINE:
if (pdc->textcolor != pdc->bkcolor)
ctxt->cb = _dc_light_scan_line;
break;
case FS_RENDER_SUBPIXEL:
ctxt->cb = _dc_subpixel_scan_line;
break;
}
#endif
if (!ctxt->cb) {
ctxt->cb = _dc_regular_scan_line;
@@ -2386,12 +2368,10 @@ int _font_get_glyph_advance (LOGFONT* logfont, DEVFONT* devfont,
}
if (glyph_bmptype == DEVFONTGLYPHTYPE_MONOBMP) {
switch (logfont->style & FS_RENDER_MASK) {
case FS_RENDER_GREY:
case FS_RENDER_OUTLINE:
if ((logfont->style & FS_RENDER_MASK) == FS_RENDER_GREY ||
(logfont->style & FS_DECORATE_OUTLINE)) {
if (adv_x) *adv_x += 1;
advance += 1;
break;
}
}
@@ -2838,7 +2818,7 @@ int _gdi_draw_one_glyph (PDC pdc, Glyph32 glyph_value, BOOL direction,
need_rc_back = TRUE;
if (glyph_bmptype == DEVFONTGLYPHTYPE_MONOBMP
&& (logfont->style & FS_RENDER_MASK) == FS_RENDER_OUTLINE) {
&& (logfont->style & FS_DECORATE_OUTLINE)) {
fg_gal_rc.x--; fg_gal_rc.y--;
fg_gal_rc.w += 2; fg_gal_rc.h += 2;
}
@@ -2852,7 +2832,7 @@ int _gdi_draw_one_glyph (PDC pdc, Glyph32 glyph_value, BOOL direction,
area, &bg_gal_rc, &flag);
if (glyph_bmptype == DEVFONTGLYPHTYPE_MONOBMP
&& (logfont->style & FS_RENDER_MASK) == FS_RENDER_OUTLINE) {
&& (logfont->style & FS_DECORATE_OUTLINE)) {
bg_gal_rc.x--; bg_gal_rc.y--;
bg_gal_rc.w += 2; bg_gal_rc.h += 2;
}