`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.
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_ULong loadSize;
TT_SubGlyph_Stack loadStack; /* loading subglyph stack */
+ FT_Bool grayscale; /* are we hinting for grayscale? */
+
} TT_ExecContextRec;