1 2 /* 3 * 4 * (C) Copyright IBM Corp. 1998-2008 - All Rights Reserved 5 * 6 */ 7 8 #ifndef __GXLAYOUTENGINE_H 9 #define __GXLAYOUTENGINE_H 10 11 #include "LETypes.h" 12 #include "LayoutEngine.h" 13 14 #include "MorphTables.h" 15 16 U_NAMESPACE_BEGIN 17 18 class LEFontInstance; 19 class LEGlyphStorage; 20 21 /** 22 * This class implements layout for QuickDraw GX or Apple Advanced Typograyph (AAT) 23 * fonts. A font is a GX or AAT font if it contains a 'mort' table. See Apple's 24 * TrueType Reference Manual (http://fonts.apple.com/TTRefMan/index.html) for details. 25 * Information about 'mort' tables is in the chapter titled "Font Files." 26 * 27 * @internal 28 */ 29 class GXLayoutEngine : public LayoutEngine 30 { 31 public: 32 /** 33 * This is the main constructor. It constructs an instance of GXLayoutEngine for 34 * a particular font, script and language. It takes the 'mort' table as a parameter since 35 * LayoutEngine::layoutEngineFactory has to read the 'mort' table to know that it has a 36 * GX font. 37 * 38 * Note: GX and AAT fonts don't contain any script and language specific tables, so 39 * the script and language are ignored. 40 * 41 * @param fontInstance - the font 42 * @param scriptCode - the script 43 * @param langaugeCode - the language 44 * @param morphTable - the 'mort' table 45 * @param success - set to an error code if the operation fails 46 * 47 * @see LayoutEngine::layoutEngineFactory 48 * @see ScriptAndLangaugeTags.h for script and language codes 49 * 50 * @internal 51 */ 52 GXLayoutEngine(const LEFontInstance *fontInstance, le_int32 scriptCode, le_int32 languageCode, const MorphTableHeader *morphTable, LEErrorCode &success); 53 54 /** 55 * The destructor, virtual for correct polymorphic invocation. 56 * 57 * @internal 58 */ 59 virtual ~GXLayoutEngine(); 60 61 /** 62 * ICU "poor man's RTTI", returns a UClassID for the actual class. 63 * 64 * @stable ICU 2.8 65 */ 66 virtual UClassID getDynamicClassID() const; 67 68 /** 69 * ICU "poor man's RTTI", returns a UClassID for this class. 70 * 71 * @stable ICU 2.8 72 */ 73 static UClassID getStaticClassID(); 74 75 protected: 76 77 /** 78 * The address of the 'mort' table 79 * 80 * @internal 81 */ 82 const MorphTableHeader *fMorphTable; 83 84 /** 85 * This method does GX layout using the font's 'mort' table. It converts the 86 * input character codes to glyph indices using mapCharsToGlyphs, and then 87 * applies the 'mort' table. 88 * 89 * Input parameters: 90 * @param chars - the input character context 91 * @param offset - the index of the first character to process 92 * @param count - the number of characters to process 93 * @param max - the number of characters in the input context 94 * @param rightToLeft - <code>TRUE</code> if the text is in a right to left directional run 95 * @param glyphStorage - the glyph storage object. The glyph and char index arrays will be set. 96 * 97 * Output parameters: 98 * @param success - set to an error code if the operation fails 99 * 100 * @return the number of glyphs in the glyph index array 101 * 102 * @internal 103 */ 104 virtual le_int32 computeGlyphs(const LEUnicode chars[], le_int32 offset, le_int32 count, le_int32 max, le_bool rightToLeft, 105 LEGlyphStorage &glyphStorage, LEErrorCode &success); 106 107 /** 108 * This method adjusts the glyph positions using the font's 109 * 'kern', 'trak', 'bsln', 'opbd' and 'just' tables. 110 * 111 * Input parameters: 112 * @param glyphStorage - the object holding the glyph storage. The positions will be updated as needed. 113 * 114 * Output parameters: 115 * @param success - set to an error code if the operation fails 116 * 117 * @internal 118 */ 119 virtual void adjustGlyphPositions(const LEUnicode chars[], le_int32 offset, le_int32 count, le_bool reverse, 120 LEGlyphStorage &glyphStorage, LEErrorCode &success); 121 122 }; 123 124 U_NAMESPACE_END 125 #endif 126 127