Main Page | Class Hierarchy | Alphabetical List | Data Structures | File List | Data Fields | Globals | Related Pages

loengine.h

00001 /* 00002 * @(#)loengine.h 1.0 00/12/11 00003 * 00004 * (C) Copyright IBM Corp. 1998, 1999, 2000 - All Rights Reserved 00005 * 00006 */ 00007 00008 #ifndef __LOENGINE_H 00009 #define __LOENGINE_H 00010 00011 #include "unicode/utypes.h" 00012 #include "unicode/uscript.h" 00013 #include "unicode/unistr.h" 00014 00015 #include "layout/LETypes.h" 00016 #include "layout/LayoutEngine.h" 00017 00018 U_NAMESPACE_BEGIN 00019 00048 class U_LAYOUT_API ICULayoutEngine 00049 { 00050 private: 00055 LayoutEngine *fLayoutEngine; 00056 00063 ICULayoutEngine(); 00064 00074 ICULayoutEngine(LayoutEngine *layoutEngine); 00075 00076 public: 00077 00086 virtual ~ICULayoutEngine(); 00087 00106 int32_t layoutChars(const UChar chars[], 00107 int32_t startOffset, 00108 int32_t endOffset, 00109 int32_t maxOffset, 00110 UBool rightToLeft, 00111 float x, float y, 00112 UErrorCode &success); 00113 00114 00132 int32_t layoutString(const UnicodeString &str, 00133 int32_t startOffset, 00134 int32_t endOffset, 00135 UBool rightToLeft, 00136 float x, float y, 00137 UErrorCode &success); 00138 00146 int32_t countGlyphs() const; 00147 00156 void getGlyphs(uint16_t glyphs[], UErrorCode &success); 00157 00166 void getCharIndices(int32_t charIndices[], UErrorCode &success); 00167 00177 void getCharIndices(int32_t charIndices[], int32_t indexBase, UErrorCode &success); 00178 00188 void getGlyphPositions(float positions[], UErrorCode &success); 00189 00203 void getGlyphPosition(int32_t glyphIndex, float &x, float &y, UErrorCode &success); 00204 00220 static ICULayoutEngine *createInstance(const LEFontInstance *fontInstance, 00221 UScriptCode script, Locale &locale, 00222 UErrorCode &success); 00223 }; 00224 00225 inline ICULayoutEngine::ICULayoutEngine() 00226 { 00227 // nothing at all... 00228 } 00229 00230 inline ICULayoutEngine::ICULayoutEngine(LayoutEngine *layoutEngine) 00231 : fLayoutEngine(layoutEngine) 00232 { 00233 // nothing else to do 00234 } 00235 00236 inline ICULayoutEngine::~ICULayoutEngine() 00237 { 00238 delete fLayoutEngine; 00239 fLayoutEngine = 0; 00240 } 00241 00242 inline int32_t ICULayoutEngine::layoutChars(const UChar chars[], 00243 int32_t startOffset, 00244 int32_t endOffset, 00245 int32_t maxOffset, 00246 UBool rightToLeft, 00247 float x, float y, 00248 UErrorCode &success) 00249 { 00250 // NOTE: call reset() so that clients can safely reuse 00251 fLayoutEngine->reset(); 00252 return fLayoutEngine->layoutChars(chars, 00253 startOffset, 00254 endOffset - startOffset, 00255 maxOffset, 00256 rightToLeft, 00257 x, y, 00258 (LEErrorCode &) success); 00259 } 00260 00261 inline int32_t ICULayoutEngine::layoutString(const UnicodeString &str, 00262 int32_t startOffset, 00263 int32_t endOffset, 00264 UBool rightToLeft, 00265 float x, float y, 00266 UErrorCode &success) 00267 { 00268 int32_t glyphCount = 0; 00269 int32_t max = str.length(); 00270 UChar *chars = new UChar[max]; 00271 00272 str.extract(0, max, chars); 00273 00274 // NOTE: call reset() so that clients can safely reuse 00275 fLayoutEngine->reset(); 00276 glyphCount = fLayoutEngine->layoutChars(chars, 00277 startOffset, 00278 endOffset - startOffset, 00279 max, 00280 rightToLeft, 00281 x, y, 00282 (LEErrorCode &) success); 00283 00284 delete[] chars; 00285 00286 return glyphCount; 00287 } 00288 00289 inline int32_t ICULayoutEngine::countGlyphs() const 00290 { 00291 return fLayoutEngine->getGlyphCount(); 00292 } 00293 00294 inline void ICULayoutEngine::getGlyphs(uint16_t glyphs[], UErrorCode &success) 00295 { 00296 fLayoutEngine->getGlyphs(glyphs, (LEErrorCode &) success); 00297 } 00298 00299 inline void ICULayoutEngine::getCharIndices(int32_t charIndices[], UErrorCode &success) 00300 { 00301 fLayoutEngine->getCharIndices(charIndices, (LEErrorCode &) success); 00302 } 00303 00304 inline void ICULayoutEngine::getCharIndices(int32_t charIndices[], int32_t indexBase, UErrorCode &success) 00305 { 00306 fLayoutEngine->getCharIndices(charIndices, indexBase, (LEErrorCode &) success); 00307 } 00308 00309 inline void ICULayoutEngine::getGlyphPositions(float positions[], UErrorCode &success) 00310 { 00311 fLayoutEngine->getGlyphPositions(positions, (LEErrorCode &) success); 00312 } 00313 00314 inline void ICULayoutEngine::getGlyphPosition(int32_t glyphIndex, float &x, float &y, UErrorCode &success) 00315 { 00316 fLayoutEngine->getGlyphPosition(glyphIndex, x, y, (LEErrorCode &) success); 00317 } 00318 00319 inline ICULayoutEngine *ICULayoutEngine::createInstance(const LEFontInstance *fontInstance, 00320 UScriptCode script, 00321 Locale &locale, UErrorCode &success) 00322 { 00323 LayoutEngine *engine = LayoutEngine::layoutEngineFactory(fontInstance, 00324 (le_int32) script, 00325 0, 00326 (LEErrorCode &) success); 00327 00328 return new ICULayoutEngine(engine); 00329 } 00330 00331 U_NAMESPACE_END 00332 #endif

Generated on Wed Jul 28 05:45:12 2004 for ICU 2.1 by doxygen 1.3.7