`Activate' gray-scale specifing hinting within the TrueType bytecode interpreter. This is an experimental feature which should probably be made optional. * src/truetype/ttgload.c (TT_Process_Simple_Glyph, load_truetype_glyph): Move the code to set the pedantic_hinting flag to... (TT_Load_Glyph): Here. Set `grayscale' flag except for `FT_LOAD_TARGET_MONO'. * src/truetyep/ttinterp.c (Ins_GETINFO): Return MS rasterizer version 1.7. Return rotation and stretching info only if glyph is rotated or stretched, respectively. Handle grayscale info. * src/truetype/ttinterp.h (TT_ExecContextRec): Add `grayscale' member.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129
diff --git a/ChangeLog b/ChangeLog
index a6537b9..f53fd0b 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,24 @@
+2004-08-05 David Turner <david@freetype.org>
+
+ `Activate' gray-scale specifing hinting within the TrueType
+ bytecode interpreter. This is an experimental feature which
+ should probably be made optional.
+
+ * src/truetype/ttgload.c (TT_Process_Simple_Glyph,
+ load_truetype_glyph): Move the code to set the pedantic_hinting flag
+ to...
+ (TT_Load_Glyph): Here.
+ Set `grayscale' flag except for `FT_LOAD_TARGET_MONO'.
+
+ * src/truetyep/ttinterp.c (Ins_GETINFO): Return MS rasterizer
+ version 1.7.
+ Return rotation and stretching info only if glyph is rotated or
+ stretched, respectively.
+ Handle grayscale info.
+
+ * src/truetype/ttinterp.h (TT_ExecContextRec): Add `grayscale'
+ member.
+
2004-08-02 George Williams <gww@silcom.com>
* src/base/ftobjs.c (FT_Attach_File): Initialize `open.stream'.
diff --git a/src/truetype/ttgload.c b/src/truetype/ttgload.c
index 9e6937e..0c3ee44 100644
--- a/src/truetype/ttgload.c
+++ b/src/truetype/ttgload.c
@@ -818,8 +818,6 @@
goto Exit;
load->exec->is_composite = FALSE;
- load->exec->pedantic_hinting = (FT_Bool)( load->load_flags &
- FT_LOAD_PEDANTIC );
load->exec->pts = *zone;
load->exec->pts.n_points += 4;
@@ -1548,8 +1546,6 @@
if ( IS_HINTED( loader->load_flags ) && n_ins > 0 )
{
exec->is_composite = TRUE;
- exec->pedantic_hinting =
- (FT_Bool)( loader->load_flags & FT_LOAD_PEDANTIC );
error = TT_Run_Context( exec, ((TT_Size)loader->size)->debug );
if ( error && exec->pedantic_hinting )
goto Fail;
@@ -1973,6 +1969,12 @@
/* load default graphics state - if needed */
if ( size->GS.instruct_control & 2 )
loader.exec->GS = tt_default_graphics_state;
+
+ loader.exec->pedantic_hinting =
+ FT_BOOL( load_flags & FT_LOAD_PEDANTIC );
+
+ loader.exec->grayscale =
+ FT_BOOL( FT_LOAD_TARGET_MODE( load_flags ) != FT_LOAD_TARGET_MONO );
}
#endif /* TT_CONFIG_OPTION_BYTECODE_INTERPRETER */
diff --git a/src/truetype/ttinterp.c b/src/truetype/ttinterp.c
index 7446cdc..e3fc671 100644
--- a/src/truetype/ttinterp.c
+++ b/src/truetype/ttinterp.c
@@ -6617,8 +6617,6 @@
/* Opcode range: 0x88 */
/* Stack: uint32 --> uint32 */
/* */
- /* XXX: According to Apple specs, bits 1 & 2 of the argument ought to be */
- /* consulted before rotated/stretched info is returned. */
static void
Ins_GETINFO( INS_ARG )
{
@@ -6627,18 +6625,21 @@
K = 0;
- /* We return then Windows 3.1 version number */
- /* for the font scaler */
+ /* We return MS rasterizer version 1.7 for the font scaler. */
if ( ( args[0] & 1 ) != 0 )
- K = 3;
+ K = 35;
- /* Has the glyph been rotated ? */
- if ( CUR.tt_metrics.rotated )
+ /* Has the glyph been rotated? */
+ if ( ( args[0] & 2 ) != 0 && CUR.tt_metrics.rotated )
K |= 0x80;
- /* Has the glyph been stretched ? */
- if ( CUR.tt_metrics.stretched )
- K |= 0x100;
+ /* Has the glyph been stretched? */
+ if ( ( args[0] & 4 ) != 0 && CUR.tt_metrics.stretched )
+ K |= 1 << 8;
+
+ /* Are we hinting for grayscale? */
+ if ( ( args[0] & 32 ) != 0 && CUR.grayscale )
+ K |= (1 << 12);
args[0] = K;
}
diff --git a/src/truetype/ttinterp.h b/src/truetype/ttinterp.h
index eb0bb0b..6df0c97 100644
--- a/src/truetype/ttinterp.h
+++ b/src/truetype/ttinterp.h
@@ -4,7 +4,7 @@
/* */
/* TrueType bytecode interpreter (specification). */
/* */
-/* Copyright 1996-2001, 2002, 2003 by */
+/* Copyright 1996-2001, 2002, 2003, 2004 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -219,6 +219,8 @@ FT_BEGIN_HEADER
FT_ULong loadSize;
TT_SubGlyph_Stack loadStack; /* loading subglyph stack */
+ FT_Bool grayscale; /* are we hinting for grayscale? */
+
} TT_ExecContextRec;