mirror of
https://github.com/VincentWei/MiniGUI.git
synced 2026-09-23 08:33:55 +08:00
tune and cleanup
This commit is contained in:
+10
-8
@@ -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
@@ -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
@@ -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
@@ -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;
|
||||
|
||||
@@ -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
@@ -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
@@ -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
@@ -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;
|
||||
|
||||
|
||||
@@ -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
@@ -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
@@ -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);
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
@@ -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
@@ -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;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user