tune style for LOGFONT

This commit is contained in:
Vincent Wei
2019-01-11 10:55:55 +08:00
parent b18cd49398
commit 0d2352884a
6 changed files with 149 additions and 60 deletions
+75 -42
View File
@@ -5459,24 +5459,26 @@ MG_EXPORT int GUIAPI SubtractRect (RECT* rc, const RECT* psrc1, const RECT* psrc
#define FONT_WEIGHT_NIL '\0'
#define FONT_WEIGHT_ALL '*'
#define FONT_WEIGHT_BLACK 'c'
#define FONT_WEIGHT_BOLD 'b'
#define FONT_WEIGHT_BOOK 'k'
#define FONT_WEIGHT_DEMIBOLD 'd'
#define FONT_WEIGHT_THIN 't'
#define FONT_WEIGHT_EXTRA_LIGHT 'e'
#define FONT_WEIGHT_LIGHT 'l'
#define FONT_WEIGHT_MEDIUM 'm'
#define FONT_WEIGHT_REGULAR 'r'
#define FONT_WEIGHT_SUBPIXEL 's'
#define FONT_WEIGHT_MEDIUM 'm'
#define FONT_WEIGHT_DEMIBOLD 'd'
#define FONT_WEIGHT_BOLD 'b'
#define FONT_WEIGHT_EXTRA_BOLD 'x'
#define FONT_WEIGHT_BLACK 'c'
#define FS_WEIGHT_MASK 0x000000FF
#define FS_WEIGHT_BLACK 0x00000001
#define FS_WEIGHT_BOLD 0x00000002
#define FS_WEIGHT_BOOK 0x00000004
#define FS_WEIGHT_DEMIBOLD 0x00000006 /* BOOK | BOLD */
#define FS_WEIGHT_LIGHT 0x00000010
#define FS_WEIGHT_MEDIUM 0x00000020
#define FS_WEIGHT_SUBPIXEL 0x00000040
#define FS_WEIGHT_THIN 0x00000010
#define FS_WEIGHT_EXTRA_LIGHT 0x00000011
#define FS_WEIGHT_LIGHT 0x00000012
#define FS_WEIGHT_REGULAR 0x00000000
#define FS_WEIGHT_MEDIUM 0x00000020
#define FS_WEIGHT_DEMIBOLD 0x00000021
#define FS_WEIGHT_EXTRA_BOLD 0x00000022
#define FS_WEIGHT_BOLD 0x00000023
#define FS_WEIGHT_BLACK 0x00000024
#define FONT_SLANT_NIL '\0'
#define FONT_SLANT_ALL '*'
@@ -5490,9 +5492,10 @@ MG_EXPORT int GUIAPI SubtractRect (RECT* rc, const RECT* psrc1, const RECT* psrc
#define FS_SLANT_ROMAN 0x00000000
#define FONT_FLIP_NIL '\0'
#define FONT_FLIP_HORZ 'H'
#define FONT_FLIP_VERT 'V'
#define FONT_FLIP_HORZVERT 'T'
#define FONT_FLIP_HORZ 'h'
#define FONT_FLIP_VERT 'v'
#define FONT_FLIP_HORZVERT 't'
#define FONT_FLIP_NONE 'n'
#define FS_FLIP_MASK 0x0000F000
#define FS_FLIP_HORZ 0x00001000
@@ -5500,20 +5503,68 @@ MG_EXPORT int GUIAPI SubtractRect (RECT* rc, const RECT* psrc1, const RECT* psrc
#define FS_FLIP_HORZVERT 0x00003000 /* HORZ | VERT */
#define FONT_OTHER_NIL '\0'
#define FONT_OTHER_AUTOSCALE 'S'
#define FONT_OTHER_TTFNOCACHE 'N'
#define FONT_OTHER_TTFKERN 'K'
#define FONT_OTHER_TTFNOCACHEKERN 'R'
#define FONT_OTHER_LCDPORTRAIT 'P'
#define FONT_OTHER_LCDPORTRAITKERN 'Q'
#define FONT_OTHER_AUTOSCALE 's'
#define FONT_OTHER_TTFNOCACHE 'n'
#define FONT_OTHER_TTFKERN 'k'
#define FONT_OTHER_TTFNOCACHEKERN 'r'
#define FONT_OTHER_LCDPORTRAIT 'p'
#define FONT_OTHER_LCDPORTRAITKERN 'q'
#define FS_OTHER_MASK 0x00FF0000
#define FS_OTHER_AUTOSCALE 0x00010000
#define FS_OTHER_TTFNOCACHE 0x00020000
#define FS_OTHER_TTFKERN 0x00040000
#define FS_OTHER_TTFNOCACHEKERN 0x00060000 /* KERN | NOCACHE */
#define FS_OTHER_LCDPORTRAIT 0x00100000
#define FS_OTHER_LCDPORTRAITKERN 0x00140000
#define FS_OTHER_TTFNOCACHEKERN 0x00060000 /* KERN | NOCACHE */
#define FS_OTHER_LCDPORTRAITKERN 0x00140000 /* KERN | PORTRAIT */
#define FONT_DECORATE_NIL '\0'
#define FONT_DECORATE_NONE 'n'
#define FONT_DECORATE_UNDERLINE 'u'
#define FONT_DECORATE_STRUCKOUT 's'
#define FONT_DECORATE_BOTH 'b'
#define FS_DECORATE_MASK 0x0F000000
#define FS_DECORATE_UNDERLINE 0x01000000
#define FS_DECORATE_STRUCKOUT 0x02000000
#define FS_DECORATE_BOTH 0x03000000
#define FONT_RENDER_NIL '\0'
#define FONT_RENDER_MONO 'n'
#define FONT_RENDER_GREY 'g'
#define FONT_RENDER_SUBPIXEL 's'
#define FS_RENDER_MASK 0xF0000000
#define FS_RENDER_MONO 0x00000000
#define FS_RENDER_GREY 0x10000000
#define FS_RENDER_SUBPIXEL 0x20000000
/* deprecated since v3.2.1, use FS_RENDER_XXX/FONT_RENDER_XXX instead */
#define FONT_WEIGHT_SUBPIXEL 's'
#define FONT_WEIGHT_BOOK 'k'
/* deprecated since v3.2.1, use FS_DECORATE_XXX/FONT_DECORATE_XXX instead */
#define FONT_UNDERLINE_NIL '\0'
#define FONT_UNDERLINE_ALL '*'
#define FONT_UNDERLINE_LINE 'u'
#define FONT_UNDERLINE_NONE 'n'
#define FONT_STRUCKOUT_NIL '\0'
#define FONT_STRUCKOUT_ALL '*'
#define FONT_STRUCKOUT_LINE 's'
#define FONT_STRUCKOUT_NONE 'n'
/*
#define FS_WEIGHT_SUBPIXEL 0x00000000
#define FS_WEIGHT_BOOK 0x00000000
#define FS_UNDERLINE_MASK 0x00000000
#define FS_UNDERLINE_LINE 0x00000000
#define FS_UNDERLINE_NONE 0x00000000
#define FS_STRUCKOUT_MASK 0x00000000
#define FS_STRUCKOUT_LINE 0x00000000
#define FS_STRUCKOUT_NONE 0x00000000
*/
/*
* Backward compatiblilty definitions.
@@ -5550,24 +5601,6 @@ MG_EXPORT int GUIAPI SubtractRect (RECT* rc, const RECT* psrc1, const RECT* psrc
#define FS_SPACING_CHARCELL 0x00000000
*/
#define FONT_UNDERLINE_NIL '\0'
#define FONT_UNDERLINE_ALL '*'
#define FONT_UNDERLINE_LINE 'u'
#define FONT_UNDERLINE_NONE 'n'
#define FS_UNDERLINE_MASK 0x00F00000
#define FS_UNDERLINE_LINE 0x00100000
#define FS_UNDERLINE_NONE 0x00000000
#define FONT_STRUCKOUT_NIL '\0'
#define FONT_STRUCKOUT_ALL '*'
#define FONT_STRUCKOUT_LINE 's'
#define FONT_STRUCKOUT_NONE 'n'
#define FS_STRUCKOUT_MASK 0x0F000000
#define FS_STRUCKOUT_LINE 0x01000000
#define FS_STRUCKOUT_NONE 0x00000000
#define FONT_TYPE_NAME_LEN 3
#define FONT_TYPE_NAME_BITMAP_RAW "rbf"
#define FONT_TYPE_NAME_BITMAP_VAR "vbf"
+59 -8
View File
@@ -131,38 +131,53 @@ DWORD fontConvertStyle (const char* style_part)
{
DWORD style = 0;
style &= ~FS_WEIGHT_MASK;
switch (style_part [0]) {
case FONT_WEIGHT_BLACK:
style |= FS_WEIGHT_BLACK;
break;
case FONT_WEIGHT_EXTRA_BOLD:
style |= FS_WEIGHT_EXTRA_BOLD;
break;
case FONT_WEIGHT_BOLD:
style |= FS_WEIGHT_BOLD;
break;
/* deprecated since v3.2.1
case FONT_WEIGHT_BOOK:
style |= FS_WEIGHT_BOOK;
break;
*/
case FONT_WEIGHT_DEMIBOLD:
style |= FS_WEIGHT_DEMIBOLD;
break;
case FONT_WEIGHT_LIGHT:
style |= FS_WEIGHT_LIGHT;
break;
case FONT_WEIGHT_MEDIUM:
style |= FS_WEIGHT_MEDIUM;
break;
case FONT_WEIGHT_REGULAR:
style |= FS_WEIGHT_REGULAR;
break;
case FONT_WEIGHT_SUBPIXEL:
style |= FS_WEIGHT_SUBPIXEL;
break;
case FONT_WEIGHT_LIGHT:
style |= FS_WEIGHT_LIGHT;
break;
case FONT_WEIGHT_EXTRA_LIGHT:
style |= FS_WEIGHT_EXTRA_LIGHT;
break;
case FONT_WEIGHT_THIN:
style |= FS_WEIGHT_THIN;
break;
/* deprecated since v3.2.1
case FONT_WEIGHT_SUBPIXEL:
style |= FS_WEIGHT_SUBPIXEL;
break;
case FONT_WEIGHT_ALL:
style |= FS_WEIGHT_MASK;
break;
break;
*/
default:
return 0xFFFFFFFF;
break;
}
style &= ~FS_SLANT_MASK;
switch (style_part [1]) {
case FONT_SLANT_ITALIC:
style |= FS_SLANT_ITALIC;
@@ -180,6 +195,7 @@ DWORD fontConvertStyle (const char* style_part)
return 0xFFFFFFFF;
}
style &= ~FS_FLIP_MASK;
switch (style_part [2]) {
case FONT_FLIP_HORZ:
style |= FS_FLIP_HORZ;
@@ -194,6 +210,7 @@ DWORD fontConvertStyle (const char* style_part)
break;
}
style &= ~FS_OTHER_MASK;
switch (style_part [3]) {
case FONT_OTHER_AUTOSCALE:
style |= FS_OTHER_AUTOSCALE;
@@ -217,6 +234,39 @@ DWORD fontConvertStyle (const char* style_part)
break;
}
style &= ~FS_DECORATE_MASK;
switch (style_part [4]) {
case FONT_DECORATE_NONE:
break;
case FONT_DECORATE_UNDERLINE:
style |= FS_DECORATE_UNDERLINE;
break;
case FONT_DECORATE_STRUCKOUT:
style |= FS_DECORATE_STRUCKOUT;
break;
case FONT_DECORATE_BOTH:
style |= FS_DECORATE_BOTH;
break;
default:
break;
}
style &= ~FS_RENDER_MASK;
switch (style_part [5]) {
case FONT_RENDER_MONO:
style |= FS_RENDER_MONO;
break;
case FONT_RENDER_GREY:
style |= FS_RENDER_GREY;
break;
case FONT_RENDER_SUBPIXEL:
style |= FS_RENDER_SUBPIXEL;
break;
default:
break;
}
/* deprecated since v3.2.1
switch (style_part [4]) {
case FONT_UNDERLINE_LINE:
style |= FS_UNDERLINE_LINE;
@@ -244,6 +294,7 @@ DWORD fontConvertStyle (const char* style_part)
default:
return 0xFFFFFFFF;
}
*/
return style;
}
+2 -3
View File
@@ -55,8 +55,7 @@
#include "freetype2.h"
#define IS_SUBPIXEL(logfont) \
(((logfont)->style & FS_WEIGHT_MASK) == FS_WEIGHT_SUBPIXEL)
#define IS_SUBPIXEL(logfont) ((logfont)->style & FS_OTHER_SUBPIXEL)
#ifdef TTF_DBG
static int bbox_nohit = 0;
@@ -200,7 +199,7 @@ print_bitmap_grey (void* buffer, int width, int rows, int pitch)
static DWORD get_glyph_type (LOGFONT* logfont, DEVFONT* devfont)
{
if (logfont->style & FS_WEIGHT_SUBPIXEL)
if (logfont->style & FS_OTHER_SUBPIXEL)
return DEVFONTGLYPHTYPE_SUBPIXEL;
else if (logfont->style & FS_WEIGHT_BOOK)
return DEVFONTGLYPHTYPE_GREYBMP;
+1 -1
View File
@@ -227,7 +227,7 @@ static PLOGFONT gdiCreateLogFont (const char* type, const char* family,
/* reset style of logfont */
/* remove HORZVERT style if weight is subpixel */
if (log_font->style & FS_WEIGHT_SUBPIXEL) {
if ((log_font->style & FS_RENDER_MASK) == FS_RENDER_SUBPIXEL) {
log_font->style &= ~FS_FLIP_HORZVERT;
log_font->style &= ~FS_SLANT_ITALIC;
}
+6 -3
View File
@@ -482,9 +482,12 @@ static DEVFONT* new_instance (LOGFONT* logfont, DEVFONT* devfont,
BOOL need_sbc_font)
{
if (QPFONT_INFO_P (devfont)->fm->flags & FLAG_MODE_SMOOTH) {
logfont->style &= ~FS_WEIGHT_SUBPIXEL;
logfont->style |= FS_WEIGHT_BOOK;
logfont->style &= ~FS_WEIGHT_LIGHT;
logfont->style &= ~FS_RENDER_MASK;
logfont->style |= FS_RENDER_GREY;
}
else {
logfont->style &= ~FS_RENDER_MASK;
logfont->style |= FS_RENDER_MONO;
}
return devfont;
+6 -3
View File
@@ -471,9 +471,12 @@ static DEVFONT* new_instance (LOGFONT* logfont, DEVFONT* devfont,
*set logfont to weight book;
**/
if (!((UPFV1_FILE_HEADER*)p_upf)->mono_bitmap) {
logfont->style &= ~FS_WEIGHT_SUBPIXEL;
logfont->style |= FS_WEIGHT_BOOK;
logfont->style &= ~FS_WEIGHT_LIGHT;
logfont->style &= ~FS_RENDER_MASK;
logfont->style |= FS_RENDER_GREY;
}
else {
logfont->style &= ~FS_RENDER_MASK;
logfont->style |= FS_RENDER_MONO;
}
return devfont;