ref: 17cd687266dadb4bd371c2c74e3298a8ccf87da5
parent: f47d263f1bb01fe7701249fe5df4ac2e1534bd51
author: David Turner <[email protected]>
date: Mon Sep 1 22:34:29 EDT 2008
* include/freetype/ftcache.h, src/cache/ftccmap.c: modify FTC_CMapCache_Lookup to accept a negative cmap index to mean "use default cached FT_Face's charmap". This fixes Savannah issue #22625
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,10 @@
2008-09-01 david turner <[email protected]>
+ * include/freetype/ftcache.h, src/cache/ftccmap.c:
+ modify FTC_CMapCache_Lookup to accept a negative cmap index
+ to mean "use default cached FT_Face's charmap". This fixes
+ Savannah issue #22625
+
* include/freetype/ftoption.h, include/freetype/ftconfig.h,
builds/unix/ftconfig.in, include/freetype/freetype.h,
src/base/ftcalc.c:
--- a/include/freetype/ftcache.h
+++ b/include/freetype/ftcache.h
@@ -610,6 +610,7 @@
*
* cmap_index ::
* The index of the charmap in the source face.
+ * Any negative value means to use the cache FT_Face's default charmap.
*
* char_code ::
* The character code (in the corresponding charmap).
--- a/src/cache/ftccmap.c
+++ b/src/cache/ftccmap.c
@@ -288,7 +288,19 @@
FT_Error error;
FT_UInt gindex = 0;
FT_UInt32 hash;
+ FT_Int no_cmap_change = 0;
+ if (cmap_index < 0)
+ {
+ /* treat a negative cmap index as a special value that
+ * means you don't want to change the FT_Face's character
+ * map through this call. this can be useful when the
+ * face requester callback already set the face's charmap
+ * to the appropriate value.
+ */
+ no_cmap_change = 1;
+ cmap_index = 0;
+ }
if ( !cache )
{
@@ -311,7 +323,7 @@
* Adobe Acrobat Reader Pack, named `KozMinProVI-Regular.otf',
* which contains more than 5 charmaps.
*/
- if ( cmap_index >= 16 )
+ if ( cmap_index >= 16 && !no_cmap_change )
{
FTC_OldCMapDesc desc = (FTC_OldCMapDesc) face_id;
@@ -393,12 +405,12 @@
old = face->charmap;
cmap = face->charmaps[cmap_index];
- if ( old != cmap )
+ if ( old != cmap && !no_cmap_change )
FT_Set_Charmap( face, cmap );
gindex = FT_Get_Char_Index( face, char_code );
- if ( old != cmap )
+ if ( old != cmap && !no_cmap_change )
FT_Set_Charmap( face, old );
}