From 95d09a7673ea388814f0efd93e2d530f9a0d6c69 Mon Sep 17 00:00:00 2001 From: Vincent Wei Date: Wed, 16 Jan 2019 11:43:27 +0800 Subject: [PATCH] tune and cleanup --- RELEASE-NOTES.md | 18 ++++++------ include/gdi.h | 50 ++++++++++++++++++++++----------- src/font/devfont.c | 9 +++--- src/font/fontname.c | 14 ++++++---- src/font/freetype1.c | 4 +-- src/font/freetype2.c | 64 +++++++++++++++++++++++++------------------ src/font/logfont.c | 2 +- src/font/qpf.c | 4 +-- src/font/rawbitmap.c | 8 ++---- src/font/type1.c | 4 +-- src/font/upf.c | 8 ++---- src/font/varbitmap.c | 4 +-- src/include/devfont.h | 5 ++-- src/newgdi/attr.c | 49 ++++++--------------------------- src/newgdi/glyph.c | 38 ++++++------------------- 15 files changed, 129 insertions(+), 152 deletions(-) diff --git a/RELEASE-NOTES.md b/RELEASE-NOTES.md index 4388ece8..6b4dfe2b 100644 --- a/RELEASE-NOTES.md +++ b/RELEASE-NOTES.md @@ -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 diff --git a/include/gdi.h b/include/gdi.h index b10de536..3486bf97 100644 --- a/include/gdi.h +++ b/include/gdi.h @@ -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 /** diff --git a/src/font/devfont.c b/src/font/devfont.c index 7eeb0563..253bb8a2 100644 --- a/src/font/devfont.c +++ b/src/font/devfont.c @@ -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; diff --git a/src/font/fontname.c b/src/font/fontname.c index c3aa10c8..77da8dac 100644 --- a/src/font/fontname.c +++ b/src/font/fontname.c @@ -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; diff --git a/src/font/freetype1.c b/src/font/freetype1.c index 04092eb9..985498d6 100644 --- a/src/font/freetype1.c +++ b/src/font/freetype1.c @@ -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; diff --git a/src/font/freetype2.c b/src/font/freetype2.c index d4b24a56..416b5f8b 100644 --- a/src/font/freetype2.c +++ b/src/font/freetype2.c @@ -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 } diff --git a/src/font/logfont.c b/src/font/logfont.c index 4bc87942..7df2ec00 100644 --- a/src/font/logfont.c +++ b/src/font/logfont.c @@ -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; diff --git a/src/font/qpf.c b/src/font/qpf.c index a7e7428f..4934fed5 100644 --- a/src/font/qpf.c +++ b/src/font/qpf.c @@ -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; diff --git a/src/font/rawbitmap.c b/src/font/rawbitmap.c index 3dc2cc11..8cb46f68 100644 --- a/src/font/rawbitmap.c +++ b/src/font/rawbitmap.c @@ -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 diff --git a/src/font/type1.c b/src/font/type1.c index 53393b0c..43caf1f7 100644 --- a/src/font/type1.c +++ b/src/font/type1.c @@ -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); } diff --git a/src/font/upf.c b/src/font/upf.c index 3ab88fde..aace0b6d 100644 --- a/src/font/upf.c +++ b/src/font/upf.c @@ -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); diff --git a/src/font/varbitmap.c b/src/font/varbitmap.c index a17216a5..47b6f73b 100644 --- a/src/font/varbitmap.c +++ b/src/font/varbitmap.c @@ -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 diff --git a/src/include/devfont.h b/src/include/devfont.h index fcdd19a4..26aecf83 100644 --- a/src/include/devfont.h +++ b/src/include/devfont.h @@ -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 { diff --git a/src/newgdi/attr.c b/src/newgdi/attr.c index ff6b7852..659a5d7e 100644 --- a/src/newgdi/attr.c +++ b/src/newgdi/attr.c @@ -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) diff --git a/src/newgdi/glyph.c b/src/newgdi/glyph.c index 65fa0531..5916100d 100644 --- a/src/newgdi/glyph.c +++ b/src/newgdi/glyph.c @@ -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; }