00001
00002
00003
00004
00005
00006
00007
00008
#ifndef __LOENGINE_H
00009
#define __LOENGINE_H
00010
00011
#include "unicode/utypes.h"
00012
#include "unicode/uobject.h"
00013
#include "unicode/uscript.h"
00014
#include "unicode/unistr.h"
00015
00016
#include "layout/LETypes.h"
00017
#include "layout/LayoutEngine.h"
00018
00019
U_NAMESPACE_BEGIN
00020
00051 class U_LAYOUT_API ICULayoutEngine :
public UObject {
00052
private:
00057 LayoutEngine *fLayoutEngine;
00058
00065 ICULayoutEngine();
00066
00076 ICULayoutEngine(LayoutEngine *layoutEngine);
00077
00078
public:
00079
00090
virtual ~ICULayoutEngine();
00091
00112 int32_t layoutChars(
const UChar chars[],
00113 int32_t startOffset,
00114 int32_t endOffset,
00115 int32_t maxOffset,
00116
UBool rightToLeft,
00117
float x,
float y,
00118
UErrorCode &success);
00119
00120
00140 int32_t layoutString(
const UnicodeString &str,
00141 int32_t startOffset,
00142 int32_t endOffset,
00143
UBool rightToLeft,
00144
float x,
float y,
00145
UErrorCode &success);
00146
00156 int32_t countGlyphs()
const;
00157
00168
void getGlyphs(uint32_t glyphs[],
UErrorCode &success);
00169
00180
void getCharIndices(int32_t charIndices[],
UErrorCode &success);
00181
00193
void getCharIndices(int32_t charIndices[], int32_t indexBase,
UErrorCode &success);
00194
00206
void getGlyphPositions(
float positions[],
UErrorCode &success);
00207
00222
void getGlyphPosition(int32_t glyphIndex,
float &x,
float &y,
UErrorCode &success);
00223
00241
static ICULayoutEngine *createInstance(
const LEFontInstance *fontInstance,
00242 UScriptCode scriptCode,
Locale &locale,
00243
UErrorCode &success);
00244
00250 virtual inline UClassID getDynamicClassID()
const {
return getStaticClassID(); }
00251
00257 static inline UClassID getStaticClassID() {
return (
UClassID)&fgClassID; }
00258
00259
private:
00260
00265
static const char fgClassID;
00266 };
00267
00268
inline ICULayoutEngine::ICULayoutEngine()
00269 {
00270
00271 }
00272
00273
inline ICULayoutEngine::ICULayoutEngine(LayoutEngine *layoutEngine)
00274 : fLayoutEngine(layoutEngine)
00275 {
00276
00277 }
00278
00279 inline ICULayoutEngine::~ICULayoutEngine()
00280 {
00281
delete fLayoutEngine;
00282 fLayoutEngine = 0;
00283 }
00284
00285 inline int32_t
ICULayoutEngine::layoutChars(
const UChar chars[],
00286 int32_t startOffset,
00287 int32_t endOffset,
00288 int32_t maxOffset,
00289 UBool rightToLeft,
00290
float x,
float y,
00291 UErrorCode &success)
00292 {
00293
00294 fLayoutEngine->reset();
00295
return fLayoutEngine->layoutChars(chars,
00296 startOffset,
00297 endOffset - startOffset,
00298 maxOffset,
00299 rightToLeft,
00300 x, y,
00301 (LEErrorCode &) success);
00302 }
00303
00304 inline int32_t
ICULayoutEngine::layoutString(
const UnicodeString &str,
00305 int32_t startOffset,
00306 int32_t endOffset,
00307 UBool rightToLeft,
00308
float x,
float y,
00309 UErrorCode &success)
00310 {
00311
00312 fLayoutEngine->reset();
00313
return fLayoutEngine->layoutChars(str.
getBuffer(),
00314 startOffset,
00315 endOffset - startOffset,
00316 str.
length(),
00317 rightToLeft,
00318 x, y,
00319 (LEErrorCode &) success);
00320 }
00321
00322 inline int32_t
ICULayoutEngine::countGlyphs()
const
00323
{
00324
return fLayoutEngine->getGlyphCount();
00325 }
00326
00327 inline void ICULayoutEngine::getGlyphs(uint32_t glyphs[], UErrorCode &success)
00328 {
00329 fLayoutEngine->getGlyphs(glyphs, (LEErrorCode &) success);
00330 }
00331
00332 inline void ICULayoutEngine::getCharIndices(int32_t charIndices[], UErrorCode &success)
00333 {
00334 fLayoutEngine->getCharIndices(charIndices, (LEErrorCode &) success);
00335 }
00336
00337 inline void ICULayoutEngine::getCharIndices(int32_t charIndices[], int32_t indexBase, UErrorCode &success)
00338 {
00339 fLayoutEngine->getCharIndices(charIndices, indexBase, (LEErrorCode &) success);
00340 }
00341
00342 inline void ICULayoutEngine::getGlyphPositions(
float positions[], UErrorCode &success)
00343 {
00344 fLayoutEngine->getGlyphPositions(positions, (LEErrorCode &) success);
00345 }
00346
00347 inline void ICULayoutEngine::getGlyphPosition(int32_t glyphIndex,
float &x,
float &y, UErrorCode &success)
00348 {
00349 fLayoutEngine->getGlyphPosition(glyphIndex, x, y, (LEErrorCode &) success);
00350 }
00351
00352 inline ICULayoutEngine *
ICULayoutEngine::createInstance(
const LEFontInstance *fontInstance,
00353 UScriptCode scriptCode,
00354
Locale &locale, UErrorCode &success)
00355 {
00356 LayoutEngine *engine = LayoutEngine::layoutEngineFactory(fontInstance,
00357 (le_int32) scriptCode,
00358 0,
00359 (LEErrorCode &) success);
00360
00361
return new ICULayoutEngine(engine);
00362 }
00363
00364
U_NAMESPACE_END
00365
#endif