1ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru/* 2ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * 3ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * (C) Copyright IBM Corp. 1998-2007 - All Rights Reserved 4ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * 5ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru */ 6ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 7ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#ifndef __GLYPHPOSITIONADJUSTMENTS_H 8ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#define __GLYPHPOSITIONADJUSTMENTS_H 9ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 10ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru/** 11ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * \file 12ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * \internal 13ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru */ 14ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 15ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#include "LETypes.h" 16ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#include "OpenTypeTables.h" 17ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 18ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste QueruU_NAMESPACE_BEGIN 19ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 20ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queruclass LEGlyphStorage; 21ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queruclass LEFontInstance; 22ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 23ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queruclass GlyphPositionAdjustments : public UMemory 24ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru{ 25ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queruprivate: 26ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru class Adjustment : public UMemory { 27ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru public: 28ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 29ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru inline Adjustment(); 30ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru inline Adjustment(float xPlace, float yPlace, float xAdv, float yAdv, le_int32 baseOff = -1); 31ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru inline ~Adjustment(); 32ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 33ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru inline float getXPlacement() const; 34ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru inline float getYPlacement() const; 35ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru inline float getXAdvance() const; 36ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru inline float getYAdvance() const; 37ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 38ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru inline le_int32 getBaseOffset() const; 39ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 40ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru inline void setXPlacement(float newXPlacement); 41ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru inline void setYPlacement(float newYPlacement); 42ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru inline void setXAdvance(float newXAdvance); 43ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru inline void setYAdvance(float newYAdvance); 44ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 45ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru inline void setBaseOffset(le_int32 newBaseOffset); 46ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 47ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru inline void adjustXPlacement(float xAdjustment); 48ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru inline void adjustYPlacement(float yAdjustment); 49ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru inline void adjustXAdvance(float xAdjustment); 50ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru inline void adjustYAdvance(float yAdjustment); 51ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 52ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru private: 53ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru float xPlacement; 54ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru float yPlacement; 55ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru float xAdvance; 56ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru float yAdvance; 57ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 58ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru le_int32 baseOffset; 59ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 60ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru // allow copying of this class because all of its fields are simple types 61ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru }; 62ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 63ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru class EntryExitPoint : public UMemory 64ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru { 65ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru public: 66ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru inline EntryExitPoint(); 67ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru inline ~EntryExitPoint(); 68ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 69ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru inline le_bool isCursiveGlyph() const; 70ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru inline le_bool baselineIsLogicalEnd() const; 71ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 72ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru LEPoint *getEntryPoint(LEPoint &entryPoint) const; 73ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru LEPoint *getExitPoint(LEPoint &exitPoint) const; 74ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 75ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru inline void clearEntryPoint(); 76ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru inline void clearExitPoint(); 77ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru inline void setEntryPoint(LEPoint &newEntryPoint, le_bool baselineIsLogicalEnd); 78ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru inline void setExitPoint(LEPoint &newExitPoint, le_bool baselineIsLogicalEnd); 79ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru inline void setCursiveGlyph(le_bool baselineIsLogicalEnd); 80ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 81ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru private: 82ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru enum EntryExitFlags 83ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru { 84ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru EEF_HAS_ENTRY_POINT = 0x80000000L, 85ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru EEF_HAS_EXIT_POINT = 0x40000000L, 86ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru EEF_IS_CURSIVE_GLYPH = 0x20000000L, 87ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru EEF_BASELINE_IS_LOGICAL_END = 0x10000000L 88ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru }; 89ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 90ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru le_uint32 fFlags; 91ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru LEPoint fEntryPoint; 92ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru LEPoint fExitPoint; 93ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru }; 94ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 95ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru le_int32 fGlyphCount; 96ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru EntryExitPoint *fEntryExitPoints; 97ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru Adjustment *fAdjustments; 98ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 99ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru GlyphPositionAdjustments(); 100ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 101ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Querupublic: 102ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru GlyphPositionAdjustments(le_int32 glyphCount); 103ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru ~GlyphPositionAdjustments(); 104ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 105ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru inline le_bool hasCursiveGlyphs() const; 106ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru inline le_bool isCursiveGlyph(le_int32 index) const; 107ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru inline le_bool baselineIsLogicalEnd(le_int32 index) const; 108ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 109ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru const LEPoint *getEntryPoint(le_int32 index, LEPoint &entryPoint) const; 110ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru const LEPoint *getExitPoint(le_int32 index, LEPoint &exitPoint) const; 111ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 112ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru inline float getXPlacement(le_int32 index) const; 113ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru inline float getYPlacement(le_int32 index) const; 114ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru inline float getXAdvance(le_int32 index) const; 115ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru inline float getYAdvance(le_int32 index) const; 116ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 117ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru inline le_int32 getBaseOffset(le_int32 index) const; 118ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 119ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru inline void setXPlacement(le_int32 index, float newXPlacement); 120ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru inline void setYPlacement(le_int32 index, float newYPlacement); 121ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru inline void setXAdvance(le_int32 index, float newXAdvance); 122ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru inline void setYAdvance(le_int32 index, float newYAdvance); 123ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 124ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru inline void setBaseOffset(le_int32 index, le_int32 newBaseOffset); 125ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 126ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru inline void adjustXPlacement(le_int32 index, float xAdjustment); 127ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru inline void adjustYPlacement(le_int32 index, float yAdjustment); 128ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru inline void adjustXAdvance(le_int32 index, float xAdjustment); 129ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru inline void adjustYAdvance(le_int32 index, float yAdjustment); 130ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 131ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru void clearEntryPoint(le_int32 index); 132ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru void clearExitPoint(le_int32 index); 133ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru void setEntryPoint(le_int32 index, LEPoint &newEntryPoint, le_bool baselineIsLogicalEnd); 134ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru void setExitPoint(le_int32 index, LEPoint &newExitPoint, le_bool baselineIsLogicalEnd); 135ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru void setCursiveGlyph(le_int32 index, le_bool baselineIsLogicalEnd); 136ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 137ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru void applyCursiveAdjustments(LEGlyphStorage &glyphStorage, le_bool rightToLeft, const LEFontInstance *fontInstance); 138ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru}; 139ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 140ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queruinline GlyphPositionAdjustments::Adjustment::Adjustment() 141ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru : xPlacement(0), yPlacement(0), xAdvance(0), yAdvance(0), baseOffset(-1) 142ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru{ 143ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru // nothing else to do! 144ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru} 145ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 146ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queruinline GlyphPositionAdjustments::Adjustment::Adjustment(float xPlace, float yPlace, float xAdv, float yAdv, le_int32 baseOff) 147ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru : xPlacement(xPlace), yPlacement(yPlace), xAdvance(xAdv), yAdvance(yAdv), baseOffset(baseOff) 148ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru{ 149ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru // nothing else to do! 150ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru} 151ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 152ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queruinline GlyphPositionAdjustments::Adjustment::~Adjustment() 153ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru{ 154ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru // nothing to do! 155ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru} 156ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 157ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queruinline float GlyphPositionAdjustments::Adjustment::getXPlacement() const 158ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru{ 159ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru return xPlacement; 160ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru} 161ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 162ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queruinline float GlyphPositionAdjustments::Adjustment::getYPlacement() const 163ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru{ 164ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru return yPlacement; 165ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru} 166ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 167ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queruinline float GlyphPositionAdjustments::Adjustment::getXAdvance() const 168ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru{ 169ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru return xAdvance; 170ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru} 171ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 172ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queruinline float GlyphPositionAdjustments::Adjustment::getYAdvance() const 173ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru{ 174ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru return yAdvance; 175ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru} 176ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 177ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queruinline le_int32 GlyphPositionAdjustments::Adjustment::getBaseOffset() const 178ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru{ 179ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru return baseOffset; 180ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru} 181ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 182ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queruinline void GlyphPositionAdjustments::Adjustment::setXPlacement(float newXPlacement) 183ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru{ 184ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru xPlacement = newXPlacement; 185ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru} 186ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 187ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queruinline void GlyphPositionAdjustments::Adjustment::setYPlacement(float newYPlacement) 188ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru{ 189ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru yPlacement = newYPlacement; 190ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru} 191ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 192ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queruinline void GlyphPositionAdjustments::Adjustment::setXAdvance(float newXAdvance) 193ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru{ 194ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru xAdvance = newXAdvance; 195ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru} 196ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 197ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queruinline void GlyphPositionAdjustments::Adjustment::setYAdvance(float newYAdvance) 198ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru{ 199ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru yAdvance = newYAdvance; 200ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru} 201ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 202ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queruinline void GlyphPositionAdjustments::Adjustment::setBaseOffset(le_int32 newBaseOffset) 203ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru{ 204ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru baseOffset = newBaseOffset; 205ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru} 206ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 207ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queruinline void GlyphPositionAdjustments::Adjustment::adjustXPlacement(float xAdjustment) 208ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru{ 209ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru xPlacement += xAdjustment; 210ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru} 211ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 212ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queruinline void GlyphPositionAdjustments::Adjustment::adjustYPlacement(float yAdjustment) 213ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru{ 214ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru yPlacement += yAdjustment; 215ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru} 216ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 217ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queruinline void GlyphPositionAdjustments::Adjustment::adjustXAdvance(float xAdjustment) 218ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru{ 219ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru xAdvance += xAdjustment; 220ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru} 221ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 222ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queruinline void GlyphPositionAdjustments::Adjustment::adjustYAdvance(float yAdjustment) 223ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru{ 224ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru yAdvance += yAdjustment; 225ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru} 226ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 227ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queruinline GlyphPositionAdjustments::EntryExitPoint::EntryExitPoint() 228ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru : fFlags(0) 229ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru{ 230ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru fEntryPoint.fX = fEntryPoint.fY = fExitPoint.fX = fExitPoint.fY = 0; 231ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru} 232ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 233ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queruinline GlyphPositionAdjustments::EntryExitPoint::~EntryExitPoint() 234ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru{ 235ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru // nothing special to do 236ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru} 237ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 238ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queruinline le_bool GlyphPositionAdjustments::EntryExitPoint::isCursiveGlyph() const 239ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru{ 240ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru return (fFlags & EEF_IS_CURSIVE_GLYPH) != 0; 241ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru} 242ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 243ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queruinline le_bool GlyphPositionAdjustments::EntryExitPoint::baselineIsLogicalEnd() const 244ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru{ 245ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru return (fFlags & EEF_BASELINE_IS_LOGICAL_END) != 0; 246ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru} 247ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 248ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queruinline void GlyphPositionAdjustments::EntryExitPoint::clearEntryPoint() 249ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru{ 250ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru fFlags &= ~EEF_HAS_ENTRY_POINT; 251ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru} 252ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 253ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queruinline void GlyphPositionAdjustments::EntryExitPoint::clearExitPoint() 254ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru{ 255ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru fFlags &= ~EEF_HAS_EXIT_POINT; 256ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru} 257ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 258ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queruinline void GlyphPositionAdjustments::EntryExitPoint::setEntryPoint(LEPoint &newEntryPoint, le_bool baselineIsLogicalEnd) 259ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru{ 260ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru if (baselineIsLogicalEnd) { 261ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru fFlags |= (EEF_HAS_ENTRY_POINT | EEF_IS_CURSIVE_GLYPH | EEF_BASELINE_IS_LOGICAL_END); 262ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } else { 263ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru fFlags |= (EEF_HAS_ENTRY_POINT | EEF_IS_CURSIVE_GLYPH); 264ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 265ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 266ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru fEntryPoint = newEntryPoint; 267ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru} 268ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 269ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queruinline void GlyphPositionAdjustments::EntryExitPoint::setExitPoint(LEPoint &newExitPoint, le_bool baselineIsLogicalEnd) 270ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru{ 271ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru if (baselineIsLogicalEnd) { 272ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru fFlags |= (EEF_HAS_EXIT_POINT | EEF_IS_CURSIVE_GLYPH | EEF_BASELINE_IS_LOGICAL_END); 273ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } else { 274ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru fFlags |= (EEF_HAS_EXIT_POINT | EEF_IS_CURSIVE_GLYPH); 275ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 276ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 277ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru fExitPoint = newExitPoint; 278ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru} 279ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 280ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queruinline void GlyphPositionAdjustments::EntryExitPoint::setCursiveGlyph(le_bool baselineIsLogicalEnd) 281ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru{ 282ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru if (baselineIsLogicalEnd) { 283ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru fFlags |= (EEF_IS_CURSIVE_GLYPH | EEF_BASELINE_IS_LOGICAL_END); 284ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } else { 285ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru fFlags |= EEF_IS_CURSIVE_GLYPH; 286ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 287ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru} 288ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 289ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queruinline le_bool GlyphPositionAdjustments::isCursiveGlyph(le_int32 index) const 290ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru{ 291ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru return fEntryExitPoints != NULL && fEntryExitPoints[index].isCursiveGlyph(); 292ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru} 293ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 294ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queruinline le_bool GlyphPositionAdjustments::baselineIsLogicalEnd(le_int32 index) const 295ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru{ 296ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru return fEntryExitPoints != NULL && fEntryExitPoints[index].baselineIsLogicalEnd(); 297ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru} 298ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 299ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queruinline float GlyphPositionAdjustments::getXPlacement(le_int32 index) const 300ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru{ 301ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru return fAdjustments[index].getXPlacement(); 302ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru} 303ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 304ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queruinline float GlyphPositionAdjustments::getYPlacement(le_int32 index) const 305ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru{ 306ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru return fAdjustments[index].getYPlacement(); 307ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru} 308ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 309ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queruinline float GlyphPositionAdjustments::getXAdvance(le_int32 index) const 310ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru{ 311ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru return fAdjustments[index].getXAdvance(); 312ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru} 313ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 314ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queruinline float GlyphPositionAdjustments::getYAdvance(le_int32 index) const 315ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru{ 316ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru return fAdjustments[index].getYAdvance(); 317ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru} 318ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 319ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 320ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queruinline le_int32 GlyphPositionAdjustments::getBaseOffset(le_int32 index) const 321ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru{ 322ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru return fAdjustments[index].getBaseOffset(); 323ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru} 324ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 325ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queruinline void GlyphPositionAdjustments::setXPlacement(le_int32 index, float newXPlacement) 326ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru{ 327ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru fAdjustments[index].setXPlacement(newXPlacement); 328ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru} 329ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 330ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queruinline void GlyphPositionAdjustments::setYPlacement(le_int32 index, float newYPlacement) 331ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru{ 332ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru fAdjustments[index].setYPlacement(newYPlacement); 333ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru} 334ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 335ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queruinline void GlyphPositionAdjustments::setXAdvance(le_int32 index, float newXAdvance) 336ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru{ 337ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru fAdjustments[index].setXAdvance(newXAdvance); 338ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru} 339ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 340ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queruinline void GlyphPositionAdjustments::setYAdvance(le_int32 index, float newYAdvance) 341ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru{ 342ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru fAdjustments[index].setYAdvance(newYAdvance); 343ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru} 344ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 345ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queruinline void GlyphPositionAdjustments::setBaseOffset(le_int32 index, le_int32 newBaseOffset) 346ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru{ 347ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru fAdjustments[index].setBaseOffset(newBaseOffset); 348ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru} 349ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 350ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queruinline void GlyphPositionAdjustments::adjustXPlacement(le_int32 index, float xAdjustment) 351ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru{ 352ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru fAdjustments[index].adjustXPlacement(xAdjustment); 353ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru} 354ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 355ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queruinline void GlyphPositionAdjustments::adjustYPlacement(le_int32 index, float yAdjustment) 356ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru{ 357ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru fAdjustments[index].adjustYPlacement(yAdjustment); 358ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru} 359ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 360ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queruinline void GlyphPositionAdjustments::adjustXAdvance(le_int32 index, float xAdjustment) 361ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru{ 362ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru fAdjustments[index].adjustXAdvance(xAdjustment); 363ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru} 364ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 365ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queruinline void GlyphPositionAdjustments::adjustYAdvance(le_int32 index, float yAdjustment) 366ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru{ 367ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru fAdjustments[index].adjustYAdvance(yAdjustment); 368ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru} 369ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 370ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queruinline le_bool GlyphPositionAdjustments::hasCursiveGlyphs() const 371ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru{ 372ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru return fEntryExitPoints != NULL; 373ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru} 374ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 375ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste QueruU_NAMESPACE_END 376ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#endif 377