1 /* 2 * 3 * (C) Copyright IBM Corp. 1998-2005 - All Rights Reserved 4 * 5 */ 6 7 #ifndef __VALUERECORDS_H 8 #define __VALUERECORDS_H 9 10 /** 11 * \file 12 * \internal 13 */ 14 15 #include "LETypes.h" 16 #include "LEFontInstance.h" 17 #include "OpenTypeTables.h" 18 #include "GlyphIterator.h" 19 20 U_NAMESPACE_BEGIN 21 22 typedef le_uint16 ValueFormat; 23 typedef le_int16 ValueRecordField; 24 25 struct ValueRecord 26 { 27 le_int16 values[ANY_NUMBER]; 28 29 le_int16 getFieldValue(ValueFormat valueFormat, ValueRecordField field) const; 30 le_int16 getFieldValue(le_int16 index, ValueFormat valueFormat, ValueRecordField field) const; 31 void adjustPosition(ValueFormat valueFormat, const char *base, GlyphIterator &glyphIterator, 32 const LEFontInstance *fontInstance) const; 33 void adjustPosition(le_int16 index, ValueFormat valueFormat, const char *base, GlyphIterator &glyphIterator, 34 const LEFontInstance *fontInstance) const; 35 36 static le_int16 getSize(ValueFormat valueFormat); 37 38 private: 39 static le_int16 getFieldCount(ValueFormat valueFormat); 40 static le_int16 getFieldIndex(ValueFormat valueFormat, ValueRecordField field); 41 }; 42 43 enum ValueRecordFields 44 { 45 vrfXPlacement = 0, 46 vrfYPlacement = 1, 47 vrfXAdvance = 2, 48 vrfYAdvance = 3, 49 vrfXPlaDevice = 4, 50 vrfYPlaDevice = 5, 51 vrfXAdvDevice = 6, 52 vrfYAdvDevice = 7 53 }; 54 55 enum ValueFormatBits 56 { 57 vfbXPlacement = 0x0001, 58 vfbYPlacement = 0x0002, 59 vfbXAdvance = 0x0004, 60 vfbYAdvance = 0x0008, 61 vfbXPlaDevice = 0x0010, 62 vfbYPlaDevice = 0x0020, 63 vfbXAdvDevice = 0x0040, 64 vfbYAdvDevice = 0x0080, 65 vfbReserved = 0xFF00, 66 vfbAnyDevice = vfbXPlaDevice + vfbYPlaDevice + vfbXAdvDevice + vfbYAdvDevice 67 }; 68 69 U_NAMESPACE_END 70 #endif 71 72 73