[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[freetype2-demos] master 0647db9: Remove `slight' auto-hinting mode. Add
From: |
Werner LEMBERG |
Subject: |
[freetype2-demos] master 0647db9: Remove `slight' auto-hinting mode. Add sub-pixel `light' mode. |
Date: |
Tue, 2 May 2017 07:38:05 -0400 (EDT) |
branch: master
commit 0647db90a13abdd8f35c39060c69227c8eca0de4
Author: Werner Lemberg <address@hidden>
Commit: Werner Lemberg <address@hidden>
Remove `slight' auto-hinting mode. Add sub-pixel `light' mode.
* src/ftcommon.h (LCD_MODE_SLIGHT): Replace with...
(LCD_MODE_LIGHT_SUBPIXEL): ...this new enum value.
* src/ftcommon.c (FTDemo_Update_Current_Flags,
FTDemo_Glyph_To_Bitmap): Updated.
(string_load): Handle `LCD_MODE_LIGHT_SUBPIXEL'.
Make integer delta support actually work.
(string_render_prepare): Support `LCD_MODE_LIGHT_SUBPIXEL'.
* src/ftdiff.c (HintMode): Replace HINT_MODE_AUTOHINT_SLIGHT with
HINT_MODE_AUTOHINT_LIGHT_SUBPIXEL.
(render_mode_names, render_state_draw, event_help): Updated.
* src/ftgrid.c (grid_status_draw_outline): Show fractional advance
width.
(event_lcd_mode_change, Process_Event): Updated.
* src/ftstring.c (event_lcdmode_change): Updated.
* src/ftview.c (lcd_modes): New array to map indices (as produced by
key presses) to LCD modes; we omit LCD_MODE_LIGHT_SUBPIXEL, which
doesn't make much sense within ftview.
(N_LCD_IDXS): New macro.
(status): Replace `lcd_mode' with `lcd_idx'.
(event_help): Revert change from 2017-04-19.
(Process_Event): Updated to use `lcd_modes' array.
Remove references to LCD_MODE_LIGHT.
(write_header, usage, parse_cmdline, main): Updated.
* src/ftinspect.h (AntiAliasing): Remove `AntiAliasing_Slight'.
* src/ftinspect.cpp (Engine::update, MainGUI::checkHinting,
MainGUI::checkAutoHinting, MainGUI::checkAntiAliasing,
MainGUI::createLayout): Updated.
---
ChangeLog | 41 ++++++++++++++++-
src/ftcommon.c | 39 +++++++++-------
src/ftcommon.h | 2 +-
src/ftdiff.c | 34 +++++++-------
src/ftgrid.c | 51 +++++++++++----------
src/ftinspect.cpp | 15 +-----
src/ftinspect.h | 1 -
src/ftstring.c | 4 +-
src/ftview.c | 135 ++++++++++++++++++++++++++++++------------------------
9 files changed, 185 insertions(+), 137 deletions(-)
diff --git a/ChangeLog b/ChangeLog
index cc61c17..cfc9bb0 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,42 @@
+2017-05-02 Werner Lemberg <address@hidden>
+
+ Remove `slight' auto-hinting mode. Add sub-pixel `light' mode.
+
+ * src/ftcommon.h (LCD_MODE_SLIGHT): Replace with...
+ (LCD_MODE_LIGHT_SUBPIXEL): ...this new enum value.
+
+ * src/ftcommon.c (FTDemo_Update_Current_Flags,
+ FTDemo_Glyph_To_Bitmap): Updated.
+ (string_load): Handle `LCD_MODE_LIGHT_SUBPIXEL'.
+ Make integer delta support actually work.
+ (string_render_prepare): Support `LCD_MODE_LIGHT_SUBPIXEL'.
+
+ * src/ftdiff.c (HintMode): Replace HINT_MODE_AUTOHINT_SLIGHT with
+ HINT_MODE_AUTOHINT_LIGHT_SUBPIXEL.
+ (render_mode_names, render_state_draw, event_help): Updated.
+
+ * src/ftgrid.c (grid_status_draw_outline): Show fractional advance
+ width.
+ (event_lcd_mode_change, Process_Event): Updated.
+
+ * src/ftstring.c (event_lcdmode_change): Updated.
+
+ * src/ftview.c (lcd_modes): New array to map indices (as produced by
+ key presses) to LCD modes; we omit LCD_MODE_LIGHT_SUBPIXEL, which
+ doesn't make much sense within ftview.
+ (N_LCD_IDXS): New macro.
+ (status): Replace `lcd_mode' with `lcd_idx'.
+ (event_help): Revert change from 2017-04-19.
+ (Process_Event): Updated to use `lcd_modes' array.
+ Remove references to LCD_MODE_LIGHT.
+ (write_header, usage, parse_cmdline, main): Updated.
+
+ * src/ftinspect.h (AntiAliasing): Remove `AntiAliasing_Slight'.
+
+ * src/ftinspect.cpp (Engine::update, MainGUI::checkHinting,
+ MainGUI::checkAutoHinting, MainGUI::checkAntiAliasing,
+ MainGUI::createLayout): Updated.
+
2017-04-19 Werner Lemberg <address@hidden>
Support new `slight' auto-hinting mode.
@@ -3937,7 +3976,7 @@
Render_Embolden, Render_All, Render_Text, Render_Waterfall): Ditto.
2011-05-01 Just Fill Bugs <address@hidden>
- Werner Lemberg <address@hidden>
+ Werner Lemberg <address@hidden>
[ftgrid] Show autohinter segments. Toggle with key `s'.
diff --git a/src/ftcommon.c b/src/ftcommon.c
index b85971b..68c9b33 100644
--- a/src/ftcommon.c
+++ b/src/ftcommon.c
@@ -619,13 +619,10 @@
break;
case LCD_MODE_LIGHT:
+ case LCD_MODE_LIGHT_SUBPIXEL:
target = FT_LOAD_TARGET_LIGHT;
break;
- case LCD_MODE_SLIGHT:
- target = FT_LOAD_TARGET_SLIGHT;
- break;
-
case LCD_MODE_RGB:
case LCD_MODE_BGR:
target = FT_LOAD_TARGET_LCD;
@@ -719,13 +716,10 @@
break;
case LCD_MODE_LIGHT:
+ case LCD_MODE_LIGHT_SUBPIXEL:
render_mode = FT_RENDER_MODE_LIGHT;
break;
- case LCD_MODE_SLIGHT:
- render_mode = FT_RENDER_MODE_SLIGHT;
- break;
-
case LCD_MODE_RGB:
case LCD_MODE_BGR:
render_mode = FT_RENDER_MODE_LCD;
@@ -1133,12 +1127,19 @@
glyph->vadvance.x = 0;
glyph->vadvance.y = -metrics->vertAdvance;
- if ( prev_rsb_delta - face->glyph->lsb_delta >= 32 )
- glyph->delta = -1 * 64;
- else if ( prev_rsb_delta - face->glyph->lsb_delta < -32 )
- glyph->delta = 1 * 64;
+ if ( handle->lcd_mode == LCD_MODE_LIGHT_SUBPIXEL )
+ glyph->delta = face->glyph->lsb_delta - face->glyph->rsb_delta;
else
- glyph->delta = 0;
+ {
+ if ( prev_rsb_delta - face->glyph->lsb_delta >= 32 )
+ glyph->delta = -1 * 64;
+ else if ( prev_rsb_delta - face->glyph->lsb_delta < -32 )
+ glyph->delta = 1 * 64;
+ else
+ glyph->delta = 0;
+
+ prev_rsb_delta = face->glyph->rsb_delta;
+ }
}
}
@@ -1196,6 +1197,9 @@
advances[i].x >>= 10;
advances[i].y >>= 10;
+ if ( handle->lcd_mode == LCD_MODE_LIGHT_SUBPIXEL )
+ advances[i].x += glyph->delta;
+
if ( prev_advance )
{
prev_advance->x += track_kern;
@@ -1211,7 +1215,8 @@
prev_advance->x += kern.x;
prev_advance->y += kern.y;
- if ( sc->kerning_mode > KERNING_MODE_NORMAL )
+ if ( handle->lcd_mode != LCD_MODE_LIGHT_SUBPIXEL &&
+ sc->kerning_mode > KERNING_MODE_NORMAL )
prev_advance->x += glyph->delta;
}
}
@@ -1219,7 +1224,8 @@
if ( prev_advance )
{
- if ( handle->hinted )
+ if ( handle->lcd_mode != LCD_MODE_LIGHT_SUBPIXEL &&
+ handle->hinted )
{
prev_advance->x = ROUND( prev_advance->x );
prev_advance->y = ROUND( prev_advance->y );
@@ -1235,7 +1241,8 @@
if ( prev_advance )
{
- if ( handle->hinted )
+ if ( handle->lcd_mode != LCD_MODE_LIGHT_SUBPIXEL &&
+ handle->hinted )
{
prev_advance->x = ROUND( prev_advance->x );
prev_advance->y = ROUND( prev_advance->y );
diff --git a/src/ftcommon.h b/src/ftcommon.h
index d51c934..67f01ca 100644
--- a/src/ftcommon.h
+++ b/src/ftcommon.h
@@ -137,7 +137,7 @@
LCD_MODE_MONO = 0,
LCD_MODE_AA,
LCD_MODE_LIGHT,
- LCD_MODE_SLIGHT,
+ LCD_MODE_LIGHT_SUBPIXEL,
LCD_MODE_RGB,
LCD_MODE_BGR,
LCD_MODE_VRGB,
diff --git a/src/ftdiff.c b/src/ftdiff.c
index 3a53e1b..e320861 100644
--- a/src/ftdiff.c
+++ b/src/ftdiff.c
@@ -156,7 +156,7 @@
HINT_MODE_UNHINTED,
HINT_MODE_AUTOHINT,
HINT_MODE_AUTOHINT_LIGHT,
- HINT_MODE_AUTOHINT_SLIGHT,
+ HINT_MODE_AUTOHINT_LIGHT_SUBPIXEL,
HINT_MODE_BYTECODE,
HINT_MODE_MAX
@@ -167,7 +167,7 @@
"unhinted",
"auto-hinter",
"light auto-hinter",
- "slight auto-hinter",
+ "light auto-hinter (subp.)",
"native hinter"
};
@@ -610,12 +610,10 @@
if ( rmode == HINT_MODE_AUTOHINT )
load_flags = FT_LOAD_FORCE_AUTOHINT;
- if ( rmode == HINT_MODE_AUTOHINT_LIGHT )
+ if ( rmode == HINT_MODE_AUTOHINT_LIGHT ||
+ rmode == HINT_MODE_AUTOHINT_LIGHT_SUBPIXEL )
load_flags = FT_LOAD_TARGET_LIGHT;
- if ( rmode == HINT_MODE_AUTOHINT_SLIGHT )
- load_flags = FT_LOAD_TARGET_SLIGHT;
-
if ( rmode == HINT_MODE_UNHINTED )
load_flags |= FT_LOAD_NO_HINTING | FT_LOAD_NO_BITMAP;
@@ -702,8 +700,8 @@
x_origin += vec.x;
}
- if ( rmode != HINT_MODE_AUTOHINT_SLIGHT &&
- column->use_deltas )
+ if ( rmode != HINT_MODE_AUTOHINT_LIGHT_SUBPIXEL &&
+ column->use_deltas )
{
if ( prev_rsb_delta - face->glyph->lsb_delta >= 32 )
x_origin -= 64;
@@ -712,11 +710,11 @@
}
prev_rsb_delta = face->glyph->rsb_delta;
- /* implement sub-pixel positioning for */
- /* un-hinted and slight hinting mode */
- if ( ( rmode == HINT_MODE_UNHINTED ||
- rmode == HINT_MODE_AUTOHINT_SLIGHT ) &&
- slot->format == FT_GLYPH_FORMAT_OUTLINE )
+ /* implement sub-pixel positioning for */
+ /* un-hinted and (second) light hinting mode */
+ if ( ( rmode == HINT_MODE_UNHINTED ||
+ rmode == HINT_MODE_AUTOHINT_LIGHT_SUBPIXEL ) &&
+ slot->format == FT_GLYPH_FORMAT_OUTLINE )
{
FT_Pos shift = x_origin & 63;
@@ -740,8 +738,8 @@
}
else
{
- if ( rmode == HINT_MODE_UNHINTED ||
- rmode == HINT_MODE_AUTOHINT_SLIGHT )
+ if ( rmode == HINT_MODE_UNHINTED ||
+ rmode == HINT_MODE_AUTOHINT_LIGHT_SUBPIXEL )
xmax = slot->linearHoriAdvance >> 10;
else
xmax = slot->advance.x;
@@ -782,8 +780,8 @@
(int)map->width, (int)map->rows,
map->pitch, map->buffer );
}
- if ( rmode == HINT_MODE_UNHINTED ||
- rmode == HINT_MODE_AUTOHINT_SLIGHT )
+ if ( rmode == HINT_MODE_UNHINTED ||
+ rmode == HINT_MODE_AUTOHINT_LIGHT_SUBPIXEL )
x_origin += slot->linearHoriAdvance >> 10;
else
x_origin += slot->advance.x;
@@ -1138,7 +1136,7 @@
grWriteln( " per-column parameters:" );
grLn();
grWriteln( " d toggle lsb/rsb deltas" );
- grWriteln( " h toggle hinting mode" );
+ grWriteln( " h cycle hinting mode" );
grWriteln( " H cycle hinting engine (if CFF or TTF)" );
grWriteln( " w toggle warping (if light auto-hinting" );
grWriteln( " k toggle kerning (only from `kern' table)" );
diff --git a/src/ftgrid.c b/src/ftgrid.c
index 3a395f8..ce7a567 100644
--- a/src/ftgrid.c
+++ b/src/ftgrid.c
@@ -685,7 +685,10 @@
/* show advance width */
grFillVLine( st->disp_bitmap,
st->x_origin +
- ( size->face->glyph->metrics.horiAdvance * st->scale >> 6 ),
+ ( ( size->face->glyph->metrics.horiAdvance +
+ size->face->glyph->lsb_delta -
+ size->face->glyph->rsb_delta ) *
+ st->scale >> 6 ),
0,
st->disp_height,
st->axis_color );
@@ -1176,8 +1179,8 @@
case LCD_MODE_LIGHT:
lcd_mode = "light AA";
break;
- case LCD_MODE_SLIGHT:
- lcd_mode = "slight AA";
+ case LCD_MODE_LIGHT_SUBPIXEL:
+ lcd_mode = "light AA (subpixel positioning)";
break;
case LCD_MODE_RGB:
lcd_mode = "LCD (horiz. RGB)";
@@ -1507,10 +1510,10 @@
#ifdef FT_DEBUG_AUTOFIT
case grKEY( '1' ):
- if ( handle->hinted &&
- ( handle->autohint ||
- handle->lcd_mode == LCD_MODE_LIGHT ||
- handle->lcd_mode == LCD_MODE_SLIGHT ) )
+ if ( handle->hinted &&
+ ( handle->autohint ||
+ handle->lcd_mode == LCD_MODE_LIGHT ||
+ handle->lcd_mode == LCD_MODE_LIGHT_SUBPIXEL ) )
{
status.header = "dumping glyph edges to stdout";
af_glyph_hints_dump_edges( _af_debug_hints, 1 );
@@ -1518,10 +1521,10 @@
break;
case grKEY( '2' ):
- if ( handle->hinted &&
- ( handle->autohint ||
- handle->lcd_mode == LCD_MODE_LIGHT ||
- handle->lcd_mode == LCD_MODE_SLIGHT ) )
+ if ( handle->hinted &&
+ ( handle->autohint ||
+ handle->lcd_mode == LCD_MODE_LIGHT ||
+ handle->lcd_mode == LCD_MODE_LIGHT_SUBPIXEL ) )
{
status.header = "dumping glyph segments to stdout";
af_glyph_hints_dump_segments( _af_debug_hints, 1 );
@@ -1529,10 +1532,10 @@
break;
case grKEY( '3' ):
- if ( handle->hinted &&
- ( handle->autohint ||
- handle->lcd_mode == LCD_MODE_LIGHT ||
- handle->lcd_mode == LCD_MODE_SLIGHT ) )
+ if ( handle->hinted &&
+ ( handle->autohint ||
+ handle->lcd_mode == LCD_MODE_LIGHT ||
+ handle->lcd_mode == LCD_MODE_LIGHT_SUBPIXEL ) )
{
status.header = "dumping glyph points to stdout";
af_glyph_hints_dump_points( _af_debug_hints, 1 );
@@ -1586,9 +1589,9 @@
break;
case grKEY( 'H' ):
- if ( !( handle->autohint ||
- handle->lcd_mode == LCD_MODE_LIGHT ||
- handle->lcd_mode == LCD_MODE_SLIGHT ) )
+ if ( !( handle->autohint ||
+ handle->lcd_mode == LCD_MODE_LIGHT ||
+ handle->lcd_mode == LCD_MODE_LIGHT_SUBPIXEL ) )
{
FT_Face face;
FT_Module module;
@@ -1622,9 +1625,9 @@
#ifdef FT_DEBUG_AUTOFIT
case grKEY( 'V' ):
- if ( handle->autohint ||
- handle->lcd_mode == LCD_MODE_LIGHT ||
- handle->lcd_mode == LCD_MODE_SLIGHT )
+ if ( handle->autohint ||
+ handle->lcd_mode == LCD_MODE_LIGHT ||
+ handle->lcd_mode == LCD_MODE_LIGHT_SUBPIXEL )
{
status.do_vert_hints = !status.do_vert_hints;
status.header = status.do_vert_hints ? "vertical hinting enabled"
@@ -1635,9 +1638,9 @@
break;
case grKEY( 'B' ):
- if ( handle->autohint ||
- handle->lcd_mode == LCD_MODE_LIGHT ||
- handle->lcd_mode == LCD_MODE_SLIGHT )
+ if ( handle->autohint ||
+ handle->lcd_mode == LCD_MODE_LIGHT ||
+ handle->lcd_mode == LCD_MODE_LIGHT_SUBPIXEL )
{
status.do_blue_hints = !status.do_blue_hints;
status.header = status.do_blue_hints ? "blue zone hinting enabled"
diff --git a/src/ftinspect.cpp b/src/ftinspect.cpp
index 2759381..69986bd 100644
--- a/src/ftinspect.cpp
+++ b/src/ftinspect.cpp
@@ -576,10 +576,6 @@ Engine::update()
target = FT_LOAD_TARGET_LIGHT;
break;
- case MainGUI::AntiAliasing_Slight:
- target = FT_LOAD_TARGET_SLIGHT;
- break;
-
case MainGUI::AntiAliasing_LCD:
case MainGUI::AntiAliasing_LCD_BGR:
target = FT_LOAD_TARGET_LCD;
@@ -1518,7 +1514,6 @@ MainGUI::checkHinting()
warpingCheckBox->setEnabled(false);
antiAliasingComboBoxx->setItemEnabled(AntiAliasing_Light, false);
- antiAliasingComboBoxx->setItemEnabled(AntiAliasing_Slight, false);
}
drawGlyph();
@@ -1562,7 +1557,6 @@ MainGUI::checkAutoHinting()
warpingCheckBox->setEnabled(true);
antiAliasingComboBoxx->setItemEnabled(AntiAliasing_Light, true);
- antiAliasingComboBoxx->setItemEnabled(AntiAliasing_Slight, true);
}
else
{
@@ -1580,10 +1574,8 @@ MainGUI::checkAutoHinting()
warpingCheckBox->setEnabled(false);
antiAliasingComboBoxx->setItemEnabled(AntiAliasing_Light, false);
- antiAliasingComboBoxx->setItemEnabled(AntiAliasing_Slight, false);
- if (antiAliasingComboBoxx->currentIndex() == AntiAliasing_Light
- || antiAliasingComboBoxx->currentIndex() == AntiAliasing_Slight)
+ if (antiAliasingComboBoxx->currentIndex() == AntiAliasing_Light)
antiAliasingComboBoxx->setCurrentIndex(AntiAliasing_Normal);
}
@@ -1598,8 +1590,7 @@ MainGUI::checkAntiAliasing()
if (index == AntiAliasing_None
|| index == AntiAliasing_Normal
- || index == AntiAliasing_Light
- || index == AntiAliasing_Slight)
+ || index == AntiAliasing_Light)
{
lcdFilterLabel->setEnabled(false);
lcdFilterComboBox->setEnabled(false);
@@ -2004,8 +1995,6 @@ MainGUI::createLayout()
tr("Normal"));
antiAliasingComboBoxx->insertItem(AntiAliasing_Light,
tr("Light"));
- antiAliasingComboBoxx->insertItem(AntiAliasing_Slight,
- tr("Slight"));
antiAliasingComboBoxx->insertItem(AntiAliasing_LCD,
tr("LCD (RGB)"));
antiAliasingComboBoxx->insertItem(AntiAliasing_LCD_BGR,
diff --git a/src/ftinspect.h b/src/ftinspect.h
index 47da549..7946ac0 100644
--- a/src/ftinspect.h
+++ b/src/ftinspect.h
@@ -518,7 +518,6 @@ private:
AntiAliasing_None,
AntiAliasing_Normal,
AntiAliasing_Light,
- AntiAliasing_Slight,
AntiAliasing_LCD,
AntiAliasing_LCD_BGR,
AntiAliasing_LCD_Vertical,
diff --git a/src/ftstring.c b/src/ftstring.c
index 912b1ae..6f89e05 100644
--- a/src/ftstring.c
+++ b/src/ftstring.c
@@ -257,8 +257,8 @@
case LCD_MODE_LIGHT:
lcd_mode = " light AA";
break;
- case LCD_MODE_SLIGHT:
- lcd_mode = " slight AA";
+ case LCD_MODE_LIGHT_SUBPIXEL:
+ lcd_mode = " light AA (subpixel positioning)";
break;
case LCD_MODE_RGB:
lcd_mode = " LCD (horiz. RGB)";
diff --git a/src/ftview.c b/src/ftview.c
index bd08f5e..730855c 100644
--- a/src/ftview.c
+++ b/src/ftview.c
@@ -71,6 +71,21 @@
#define N_CFF_HINTING_ENGINES 2
+ /* omit LCD_MODE_LIGHT_SUBPIXEL; we don't need it in this application */
+ static int lcd_modes[] =
+ {
+ LCD_MODE_MONO,
+ LCD_MODE_AA,
+ LCD_MODE_LIGHT,
+ LCD_MODE_RGB,
+ LCD_MODE_BGR,
+ LCD_MODE_VRGB,
+ LCD_MODE_VBGR
+ };
+
+#define N_LCD_IDXS ( sizeof ( lcd_modes ) / sizeof ( int ) )
+
+
enum
{
RENDER_MODE_ALL = 0,
@@ -92,7 +107,7 @@
int res;
int ptsize; /* current point size, 26.6 format */
- int lcd_mode;
+ int lcd_idx;
double gamma;
double xbold_factor;
double ybold_factor;
@@ -117,7 +132,7 @@
} status = { 1,
DIM_X, DIM_Y, RENDER_MODE_ALL, FT_ENCODING_NONE,
- 72, 48, -1, GAMMA, 0.04, 0.04, 0.02, 0.22,
+ 72, 48, 1, GAMMA, 0.04, 0.04, 0.02, 0.22,
0, { 0 }, 0, 0, 0, /* default values are set at runtime */
0, 0, 0, 0, 0,
FT_LCD_FILTER_DEFAULT, { 0x08, 0x4D, 0x56, 0x4D, 0x08 }, 2 };
@@ -735,33 +750,33 @@
grWriteln( " 1 all glyphs A monochrome
" );
grWriteln( " 2 all glyphs fancy B normal
" );
grWriteln( " (emboldened / slanted) C light
" );
- grWriteln( " 3 all glyphs stroked D slight
" );
- grWriteln( " 4 text string E horizontal
RGB (LCD) " );
- grWriteln( " 5 waterfall F horizontal
BGR (LCD) " );
- grWriteln( " space cycle forwards G vertical
RGB (LCD) " );
- grWriteln( " backspace cycle backwards H vertical
BGR (LCD) " );
- grWriteln( " k, l cycle back
and forth " );
- grWriteln( "b toggle embedded bitmaps
" );
- grWriteln( "c toggle color glyphs x, X adjust
horizontal " );
- grWriteln( "K toggle cache modes
emboldening (in mode 2)" );
- grWriteln( " y, Y adjust
vertical " );
- grWriteln( "p, n previous/next font
emboldening (in mode 2)" );
- grWriteln( " s, S adjust
slanting " );
- grWriteln( "Up, Down adjust size by 1 unit (in mode
2) " );
- grWriteln( "PgUp, PgDn adjust size by 10 units r, R adjust
stroking radius " );
- grWriteln( " (in mode
3) " );
- grWriteln( "Left, Right adjust index by 1
" );
- grWriteln( "F7, F8 adjust index by 16 L cycle
through " );
- grWriteln( "F9, F10 adjust index by 256 LCD
filtering " );
- grWriteln( "F11, F12 adjust index by 4096 [, ] select
custom LCD " );
- grWriteln( " filter
weight " );
- grWriteln( "h toggle hinting (if
custom filtering) " );
- grWriteln( "H cycle through hinting -, +(=) adjust
selected custom " );
- grWriteln( " engines (if available) LCD
filter weight " );
- grWriteln( "f toggle forced auto-
" );
- grWriteln( " hinting (if hinting) g, v adjust
gamma value " );
- grWriteln( "w toggle warping (in light
" );
- grWriteln( " AA mode, if available) Tab cycle
through charmaps " );
+ grWriteln( " 3 all glyphs stroked D horizontal
RGB (LCD) " );
+ grWriteln( " 4 text string E horizontal
BGR (LCD) " );
+ grWriteln( " 5 waterfall F vertical
RGB (LCD) " );
+ grWriteln( " space cycle forwards G vertical
BGR (LCD) " );
+ grWriteln( " backspace cycle backwards k, l cycle back
and forth " );
+ grWriteln( "
" );
+ grWriteln( "b toggle embedded bitmaps x, X adjust
horizontal " );
+ grWriteln( "c toggle color glyphs
emboldening (in mode 2)" );
+ grWriteln( "K toggle cache modes y, Y adjust
vertical " );
+ grWriteln( "
emboldening (in mode 2)" );
+ grWriteln( "p, n previous/next font s, S adjust
slanting " );
+ grWriteln( " (in mode
2) " );
+ grWriteln( "Up, Down adjust size by 1 unit r, R adjust
stroking radius " );
+ grWriteln( "PgUp, PgDn adjust size by 10 units (in mode
3) " );
+ grWriteln( "
" );
+ grWriteln( "Left, Right adjust index by 1 L cycle
through " );
+ grWriteln( "F7, F8 adjust index by 16 LCD
filtering " );
+ grWriteln( "F9, F10 adjust index by 256 [, ] select
custom LCD " );
+ grWriteln( "F11, F12 adjust index by 4096 filter
weight " );
+ grWriteln( " (if
custom filtering) " );
+ grWriteln( "h toggle hinting -, +(=) adjust
selected custom " );
+ grWriteln( "H cycle through hinting LCD
filter weight " );
+ grWriteln( " engines (if available)
" );
+ grWriteln( "f toggle forced auto- g, v adjust
gamma value " );
+ grWriteln( " hinting (if hinting)
" );
+ grWriteln( "w toggle warping (in light Tab cycle
through charmaps " );
+ grWriteln( " AA mode, if available)
" );
grWriteln( "
" );
grWriteln( " q, ESC quit
ftview " );
/* |----------------------------------|
|----------------------------------| */
@@ -1079,13 +1094,19 @@
return ret;
}
- if ( handle->lcd_mode == (int)( event->key - 'A' ) )
- return ret;
- if ( event->key >= 'A' && event->key < 'A' + N_LCD_MODES )
+ if ( event->key >= 'A' &&
+ event->key < 'A' + N_LCD_IDXS )
{
- handle->lcd_mode = event->key - 'A';
+ int lcd_idx = (int)( event->key - 'A' );
+
+
+ if ( status.lcd_idx == lcd_idx )
+ return ret;
+
+ handle->lcd_mode = lcd_modes[lcd_idx];
FTDemo_Update_Current_Flags( handle );
- status.update = 1;
+ status.update = 1;
+ status.lcd_idx = lcd_idx;
return ret;
}
@@ -1135,9 +1156,8 @@
break;
case grKEY( 'H' ):
- if ( !handle->autohint &&
- handle->lcd_mode != LCD_MODE_LIGHT &&
- handle->lcd_mode != LCD_MODE_SLIGHT )
+ if ( !handle->autohint &&
+ handle->lcd_mode != LCD_MODE_LIGHT )
{
FT_Face face;
FT_Module module;
@@ -1159,13 +1179,12 @@
case grKEY( 'l' ):
case grKEY( 'k' ):
- handle->lcd_mode = ( event->key == grKEY( 'l' ) )
- ? ( ( handle->lcd_mode == ( N_LCD_MODES - 1 ) )
- ? 0
- : handle->lcd_mode + 1 )
- : ( ( handle->lcd_mode == 0 )
- ? ( N_LCD_MODES - 1 )
- : handle->lcd_mode - 1 );
+ status.lcd_idx =
+ ( status.lcd_idx +
+ ( event->key == grKEY( 'l' ) ? 1 : -1 ) +
+ N_LCD_IDXS ) % N_LCD_IDXS;
+
+ handle->lcd_mode = lcd_modes[status.lcd_idx];
FTDemo_Update_Current_Flags( handle );
status.update = 1;
break;
@@ -1627,9 +1646,6 @@
case LCD_MODE_LIGHT:
lcd_mode = "light AA";
break;
- case LCD_MODE_SLIGHT:
- lcd_mode = "slight AA";
- break;
case LCD_MODE_RGB:
lcd_mode = "LCD (horiz. RGB)";
break;
@@ -1660,16 +1676,14 @@
{
/* auto-hinting */
sprintf( buf, " forced auto: %s",
- ( handle->autohint ||
- handle->lcd_mode == LCD_MODE_LIGHT ||
- handle->lcd_mode == LCD_MODE_SLIGHT ) ? "on" : "off" );
+ ( handle->autohint ||
+ handle->lcd_mode == LCD_MODE_LIGHT ) ? "on" : "off" );
grWriteCellString( display->bitmap, 0, (line++) * HEADER_HEIGHT,
buf, display->fore_color );
}
- if ( !handle->autohint &&
- handle->lcd_mode != LCD_MODE_LIGHT &&
- handle->lcd_mode != LCD_MODE_SLIGHT )
+ if ( !handle->autohint &&
+ handle->lcd_mode != LCD_MODE_LIGHT )
{
/* hinting engine */
@@ -1825,8 +1839,8 @@
" `ADOB' (Adobe standard), `ADBC' (Adobe custom).\n"
" -m text Use `text' for rendering.\n" );
fprintf( stderr,
- " -l mode Set start-up rendering mode (0 <= mode <= %d).\n",
- N_LCD_MODES );
+ " -l mode Set start-up rendering mode (0 <= mode <= %ld).\n",
+ N_LCD_IDXS );
fprintf( stderr,
" -p Preload file in memory to simulate memory-mapping.\n"
"\n"
@@ -1871,11 +1885,11 @@
break;
case 'l':
- status.lcd_mode = atoi( optarg );
- if ( status.lcd_mode < 0 || status.lcd_mode > N_LCD_MODES )
+ status.lcd_idx = atoi( optarg );
+ if ( status.lcd_idx < 0 || status.lcd_idx > (int)N_LCD_IDXS )
{
- fprintf( stderr, "argument to `l' must be between 0 and %d\n",
- N_LCD_MODES );
+ fprintf( stderr, "argument to `l' must be between 0 and %ld\n",
+ N_LCD_IDXS );
exit( 3 );
}
break;
@@ -2007,8 +2021,7 @@
event_font_change( 0 );
- if ( status.lcd_mode >= 0 )
- handle->lcd_mode = status.lcd_mode;
+ handle->lcd_mode = lcd_modes[status.lcd_idx];
FTDemo_Update_Current_Flags( handle );
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [freetype2-demos] master 0647db9: Remove `slight' auto-hinting mode. Add sub-pixel `light' mode.,
Werner LEMBERG <=