[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[freetype2-demos] master 88738e9: [ftview] Add more control for color-la
From: |
Werner LEMBERG |
Subject: |
[freetype2-demos] master 88738e9: [ftview] Add more control for color-layered glyphs. |
Date: |
Sat, 23 Feb 2019 00:39:20 -0500 (EST) |
branch: master
commit 88738e9f6c1b0c4b9519ee43d572b6af4e74e658
Author: Werner Lemberg <address@hidden>
Commit: Werner Lemberg <address@hidden>
[ftview] Add more control for color-layered glyphs.
Key `z' toggles color-layered glyph usage.
Keys `i' and `I' cycle through color palettes.
* src/ftcommon.h (TFont): Add `palette_index' field.
(FTDemo_Handle): Add `use_layers' field.
* src/ftcommon.c (FTDemo_New, FTDemo_Install_Font): Initialize new
structure elements.
* src/ftview.c (Render_All): Select palette; use `use_layers'.
(event_help): Updated.
(event_palette_change): New function.
(Process_Event): Handle keys `z', `i', and `I'.
(write_header): Updated.
---
ChangeLog | 18 ++++++++++
src/ftcommon.c | 13 ++++---
src/ftcommon.h | 14 ++++----
src/ftview.c | 106 ++++++++++++++++++++++++++++++++++++++++++++++++---------
4 files changed, 124 insertions(+), 27 deletions(-)
diff --git a/ChangeLog b/ChangeLog
index cf7880e..736a39e 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,21 @@
+2019-02-23 Werner Lemberg <address@hidden>
+
+ [ftview] Add more control for color-layered glyphs.
+
+ Key `z' toggles color-layered glyph usage.
+ Keys `i' and `I' cycle through color palettes.
+
+ * src/ftcommon.h (TFont): Add `palette_index' field.
+ (FTDemo_Handle): Add `use_layers' field.
+ * src/ftcommon.c (FTDemo_New, FTDemo_Install_Font): Initialize new
+ structure elements.
+
+ * src/ftview.c (Render_All): Select palette; use `use_layers'.
+ (event_help): Updated.
+ (event_palette_change): New function.
+ (Process_Event): Handle keys `z', `i', and `I'.
+ (write_header): Updated.
+
2019-02-22 Werner Lemberg <address@hidden>
Minor doc string fixes.
diff --git a/src/ftcommon.c b/src/ftcommon.c
index c07ad9b..c948fa6 100644
--- a/src/ftcommon.c
+++ b/src/ftcommon.c
@@ -311,11 +311,12 @@
handle->encoding = FT_ENCODING_ORDER;
- handle->hinted = 1;
- handle->use_sbits = 1;
- handle->use_color = 1;
- handle->autohint = 0;
- handle->lcd_mode = LCD_MODE_AA;
+ handle->hinted = 1;
+ handle->use_sbits = 1;
+ handle->use_color = 1;
+ handle->use_layers = 1;
+ handle->autohint = 0;
+ handle->lcd_mode = LCD_MODE_AA;
handle->use_sbits_cache = 1;
@@ -444,6 +445,8 @@
else
font->cmap_index = face->num_charmaps; /* FT_ENCODING_ORDER */
+ font->palette_index = 0;
+
if ( handle->preload )
{
FILE* file = fopen( filename, "rb" );
diff --git a/src/ftcommon.h b/src/ftcommon.h
index 3e8f5b5..094232c 100644
--- a/src/ftcommon.h
+++ b/src/ftcommon.h
@@ -131,6 +131,7 @@
const char* filepathname;
int face_index;
int cmap_index;
+ int palette_index;
int num_indices;
void* file_address; /* for preloaded files */
size_t file_size;
@@ -198,12 +199,13 @@
FT_Int32 load_flags;
/* call FTDemo_Update_Current_Flags after setting any of the following
fields */
- int hinted; /* is glyph hinting active? */
- int use_sbits; /* do we use embedded bitmaps? */
- int use_color; /* do we use coloured glyphs? */
- int autohint; /* force auto-hinting */
- int lcd_mode; /* mono, aa, light, vrgb, ... */
- int preload; /* force font file preloading */
+ int hinted; /* is glyph hinting active? */
+ int use_sbits; /* do we use embedded bitmaps? */
+ int use_color; /* do we use coloured glyphs? */
+ int use_layers; /* do we use color-layered glyphs? */
+ int autohint; /* force auto-hinting */
+ int lcd_mode; /* mono, aa, light, vrgb, ... */
+ int preload; /* force font file preloading */
/* don't touch the following fields! */
diff --git a/src/ftview.c b/src/ftview.c
index 31f89f0..38d0815 100644
--- a/src/ftview.c
+++ b/src/ftview.c
@@ -186,7 +186,6 @@
error = FTDemo_Get_Size( handle, &size );
-
if ( error )
{
/* probably a non-existent bitmap font size */
@@ -293,7 +292,6 @@
error = FTDemo_Get_Size( handle, &size );
-
if ( error )
{
/* probably a non-existent bitmap font size */
@@ -446,8 +444,9 @@
face = size->face;
slot = face->glyph;
- /* XXX handle palette index */
- error = FT_Palette_Select( face, 0, &palette );
+ error = FT_Palette_Select( face,
+ handle->current_font->palette_index,
+ &palette );
if ( error )
palette = NULL;
@@ -473,7 +472,7 @@
&layer_color_idx,
&iterator );
- if ( palette && have_layers /* && XXX handle->use_layers */ )
+ if ( palette && have_layers && handle->use_layers )
{
FT_Int32 load_flags = handle->load_flags;
@@ -826,9 +825,11 @@
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( "
emboldening (in mode 2)" );
- grWriteln( "c toggle coloured glyphs y, Y adjust
vertical " );
+ grWriteln( "b toggle embedded bitmaps i, I cycle
through color " );
+ grWriteln( " color
palette " );
+ grWriteln( "c toggle coloured bitmaps x, X adjust
horizontal " );
+ grWriteln( "z toggle colour-layered
emboldening (in mode 2)" );
+ grWriteln( " glyphs y, Y adjust
vertical " );
grWriteln( "
emboldening (in mode 2)" );
grWriteln( "K toggle cache modes s, S adjust
slanting " );
grWriteln( " (in mode
2) " );
@@ -1072,6 +1073,44 @@
static int
+ event_palette_change( int delta )
+ {
+ FT_Size size;
+ FT_Face face;
+
+ FT_Palette_Data palette;
+
+ int palette_index = handle->current_font->palette_index;
+ int old_palette_index = palette_index;
+
+
+ error = FTDemo_Get_Size( handle, &size );
+ if ( error )
+ {
+ /* probably a non-existent bitmap font size */
+ return 0;
+ }
+
+ face = size->face;
+
+ error = FT_Palette_Data_Get( face, &palette );
+ if ( error || !palette.num_palettes )
+ return 0;
+
+ palette_index += delta;
+
+ if ( palette_index < 0 )
+ palette_index = palette.num_palettes - 1;
+ else if ( palette_index >= palette.num_palettes )
+ palette_index = 0;
+
+ handle->current_font->palette_index = palette_index;
+
+ return old_palette_index == palette_index ? 0 : 1;
+ }
+
+
+ static int
Process_Event( grEvent* event )
{
int ret = 0;
@@ -1130,6 +1169,20 @@
status.update = 1;
break;
+ case grKEY( 'z' ):
+ handle->use_layers = !handle->use_layers;
+ FTDemo_Update_Current_Flags( handle );
+ status.update = 1;
+ break;
+
+ case grKEY( 'i' ):
+ status.update = event_palette_change( 1 );
+ break;
+
+ case grKEY( 'I' ):
+ status.update = event_palette_change( -1 );
+ break;
+
case grKEY( 'K' ):
handle->use_sbits_cache = !handle->use_sbits_cache;
status.update = 1;
@@ -1414,6 +1467,11 @@
char buf[256];
int line = 4;
+ FT_Face face;
+
+
+ FTC_Manager_LookupFace( handle->cache_manager,
+ handle->scaler.face_id, &face );
FTDemo_Draw_Header( handle, display, status.ptsize, status.res,
status.render_mode != RENDER_MODE_TEXT &&
@@ -1535,13 +1593,10 @@
handle->lcd_mode != LCD_MODE_LIGHT )
{
/* hinting engine */
- FT_Face face;
FT_Module module;
const char* hinting_engine = NULL;
- FTC_Manager_LookupFace( handle->cache_manager,
- handle->scaler.face_id, &face );
module = &face->driver->root;
if ( !strcmp( module->clazz->module_name, "cff" ) )
@@ -1625,11 +1680,30 @@
grWriteCellString( display->bitmap, 0, (line++) * HEADER_HEIGHT,
buf, display->fore_color );
- /* color */
- sprintf( buf, "color: %s",
- handle->use_color ? "on" : "off" );
- grWriteCellString( display->bitmap, 0, (line++) * HEADER_HEIGHT,
- buf, display->fore_color );
+ if ( FT_HAS_COLOR( face ) )
+ {
+ sprintf( buf, "color:" );
+ grWriteCellString( display->bitmap, 0, (line++) * HEADER_HEIGHT,
+ buf, display->fore_color );
+
+ /* color bitmaps */
+ sprintf( buf, " bitmaps: %s",
+ handle->use_color ? "on" : "off" );
+ grWriteCellString( display->bitmap, 0, (line++) * HEADER_HEIGHT,
+ buf, display->fore_color );
+
+ /* color-layered glyphs */
+ sprintf( buf, " outlines: %s",
+ handle->use_layers ? "on" : "off" );
+ grWriteCellString( display->bitmap, 0, (line++) * HEADER_HEIGHT,
+ buf, display->fore_color );
+
+ /* color palette */
+ sprintf( buf, " palette idx: %d",
+ handle->current_font->palette_index );
+ grWriteCellString( display->bitmap, 0, (line++) * HEADER_HEIGHT,
+ buf, display->fore_color );
+ }
/* cache */
sprintf( buf, "cache: %s",
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [freetype2-demos] master 88738e9: [ftview] Add more control for color-layered glyphs.,
Werner LEMBERG <=