[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[freetype2-demos] master 016d0e6: [ftgrid, ftview, ftstring] Update font
From: |
Alexei Podtelezhnikov |
Subject: |
[freetype2-demos] master 016d0e6: [ftgrid, ftview, ftstring] Update font and encoding handling. |
Date: |
Thu, 28 Jun 2018 22:17:48 -0400 (EDT) |
branch: master
commit 016d0e64b93ae7f21abe79d75d56291638b51a6f
Author: Alexei Podtelezhnikov <address@hidden>
Commit: Alexei Podtelezhnikov <address@hidden>
[ftgrid, ftview, ftstring] Update font and encoding handling.
* src/ftcommon.c (my_face_requester): Check `cmap_index' range.
(FTDemo_Install_Font): `cmap_index' obeys `handle->encoding' here,
and postpone setting `num_indices'.
(FTDemo_Set_Current_Font): `handle->encoding' obeys `cmap_index' here,
also set `num_indices' accordingly.
* src/ftview.c (event_encoding_change): Simplify by calling
`FTDemo_Set_Current_Font'.
---
ChangeLog | 13 ++++++++++
src/ftcommon.c | 81 ++++++++++++++++++++++++++++++++--------------------------
src/ftview.c | 38 ++-------------------------
3 files changed, 60 insertions(+), 72 deletions(-)
diff --git a/ChangeLog b/ChangeLog
index fc63b2b..37f59b0 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,16 @@
+2018-06-28 Alexei Podtelezhnikov <address@hidden>
+
+ [ftgrid, ftview, ftstring] Update font and encoding handling.
+
+ * src/ftcommon.c (my_face_requester): Check `cmap_index' range.
+ (FTDemo_Install_Font): `cmap_index' obeys `handle->encoding' here,
+ and postpone setting `num_indices'.
+ (FTDemo_Set_Current_Font): `handle->encoding' obeys `cmap_index' here,
+ also set `num_indices' accordingly.
+
+ * src/ftview.c (event_encoding_change): Simplify by calling
+ `FTDemo_Set_Current_Font'.
+
2018-06-25 Alexei Podtelezhnikov <address@hidden>
[ftstring] Improve stress test glyphs.
diff --git a/src/ftcommon.c b/src/ftcommon.c
index 2452b67..cb0b212 100644
--- a/src/ftcommon.c
+++ b/src/ftcommon.c
@@ -264,7 +264,7 @@
*suffix = '\0';
}
- if ( (*aface)->charmaps )
+ if ( (*aface)->charmaps && font->cmap_index < (*aface)->num_charmaps )
(*aface)->charmap = (*aface)->charmaps[font->cmap_index];
}
@@ -428,13 +428,6 @@
continue;
}
- if ( handle->encoding != FT_ENCODING_ORDER )
- {
- error = FT_Select_Charmap( face, (FT_Encoding)handle->encoding );
- if ( error )
- handle->encoding = FT_ENCODING_ORDER;
- }
-
font = (PFont)malloc( sizeof ( *font ) );
/* We allocate four more bytes since we want to attach an AFM */
@@ -444,8 +437,13 @@
strcpy( (char*)font->filepathname, filename );
font->face_index = ( j << 16 ) + i;
- font->cmap_index = face->charmap ? FT_Get_Charmap_Index( face->charmap
)
- : 0;
+
+ if ( handle-> encoding != FT_ENCODING_ORDER &&
+ FT_Select_Charmap( face, (FT_Encoding)handle->encoding ) ==
+ FT_Err_Ok )
+ font->cmap_index = FT_Get_Charmap_Index( face->charmap );
+ else
+ font->cmap_index = face->num_charmaps; /* FT_ENCODING_ORDER */
if ( handle->preload )
{
@@ -496,32 +494,6 @@
font->file_size = 0;
}
- switch ( handle->encoding )
- {
- case FT_ENCODING_ORDER:
- font->num_indices = face->num_glyphs;
- break;
-
- case FT_ENCODING_UNICODE:
- font->num_indices = 0x110000L;
- break;
-
- case FT_ENCODING_ADOBE_LATIN_1:
- case FT_ENCODING_ADOBE_STANDARD:
- case FT_ENCODING_ADOBE_EXPERT:
- case FT_ENCODING_ADOBE_CUSTOM:
- case FT_ENCODING_APPLE_ROMAN:
- font->num_indices = 0x100L;
- break;
-
- /* some fonts use range 0x00-0x100, others have 0xF000-0xF0FF */
- case FT_ENCODING_MS_SYMBOL:
- font->num_indices = 0x10000L;
-
- default:
- font->num_indices = 0x10000L;
- }
-
FT_Done_Face( face );
face = NULL;
@@ -555,9 +527,46 @@
FTDemo_Set_Current_Font( FTDemo_Handle* handle,
PFont font )
{
+ FT_Face face;
+
+
handle->current_font = font;
handle->scaler.face_id = (FTC_FaceID)font;
+ error = FTC_Manager_LookupFace( handle->cache_manager,
+ handle->scaler.face_id, &face );
+
+ if ( font->cmap_index < face->num_charmaps )
+ handle->encoding = face->charmaps[font->cmap_index]->encoding;
+ else
+ handle->encoding = FT_ENCODING_ORDER;
+
+ switch ( handle->encoding )
+ {
+ case FT_ENCODING_ORDER:
+ font->num_indices = face->num_glyphs;
+ break;
+
+ case FT_ENCODING_UNICODE:
+ font->num_indices = 0x110000L;
+ break;
+
+ case FT_ENCODING_ADOBE_LATIN_1:
+ case FT_ENCODING_ADOBE_STANDARD:
+ case FT_ENCODING_ADOBE_EXPERT:
+ case FT_ENCODING_ADOBE_CUSTOM:
+ case FT_ENCODING_APPLE_ROMAN:
+ font->num_indices = 0x100L;
+ break;
+
+ /* some fonts use range 0x00-0x100, others have 0xF000-0xF0FF */
+ case FT_ENCODING_MS_SYMBOL:
+ font->num_indices = 0x10000L;
+
+ default:
+ font->num_indices = 0x10000L;
+ }
+
handle->string_reload = 1;
}
diff --git a/src/ftview.c b/src/ftview.c
index 17e02b7..c248ee9 100644
--- a/src/ftview.c
+++ b/src/ftview.c
@@ -1024,43 +1024,9 @@
else
font->cmap_index = 0;
- error = FTC_Manager_LookupFace( handle->cache_manager,
- handle->scaler.face_id, &face );
+ FTDemo_Set_Current_Font( handle, font );
- if ( font->cmap_index < face->num_charmaps )
- {
- handle->encoding = face->charmaps[font->cmap_index]->encoding;
- status.offset = 0x20;
- }
- else
- {
- handle->encoding = FT_ENCODING_ORDER;
- status.offset = 0;
- }
-
- switch ( handle->encoding )
- {
- case FT_ENCODING_ORDER:
- font->num_indices = face->num_glyphs;
- break;
-
- case FT_ENCODING_UNICODE:
- font->num_indices = 0x110000L;
- break;
-
- case FT_ENCODING_ADOBE_LATIN_1:
- case FT_ENCODING_ADOBE_STANDARD:
- case FT_ENCODING_ADOBE_EXPERT:
- case FT_ENCODING_ADOBE_CUSTOM:
- case FT_ENCODING_APPLE_ROMAN:
- font->num_indices = 0x100L;
- break;
-
- /* some fonts use range 0x00-0x100, others have 0xF000-0xF0FF */
- case FT_ENCODING_MS_SYMBOL:
- default:
- font->num_indices = 0x10000L;
- }
+ status.offset = handle->encoding == FT_ENCODING_ORDER ? 0 : 0x20;
return 1;
}
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [freetype2-demos] master 016d0e6: [ftgrid, ftview, ftstring] Update font and encoding handling.,
Alexei Podtelezhnikov <=