+++ /dev/null
-/*
- *
- * (C) Copyright IBM Corp. 1998-2004 - All Rights Reserved
- *
- */
-
-#ifndef __LOENGINE_H
-#define __LOENGINE_H
-
-#include "unicode/utypes.h"
-#include "unicode/uobject.h"
-#include "unicode/uscript.h"
-#include "unicode/unistr.h"
-
-#include "layout/LETypes.h"
-#include "layout/LayoutEngine.h"
-
-U_NAMESPACE_BEGIN
-
-/**
- * This is a wrapper class designed to allow ICU clients to
- * use LayoutEngine in a way that is consistent with the rest
- * of ICU.
- *
- * (LayoutEngine was developed seperately from ICU and
- * the same source is used in non-ICU environments, so it cannot
- * be changed to match ICU coding conventions).
- *
- * This class is designed for clients who wish to use LayoutEngine
- * to layout complex text. If you need to subclass LayoutEngine,
- * you'll need to use the LayoutEngine interfaces directly.
- *
- * Basically, it creates an instance of LayoutEngine, stashes
- * it in fLayoutEngine, and uses it to implement the layout
- * functionality.
- *
- * Use the createInstance method to create an ICULayoutEngine. Use
- * delete to destroy it. The layoutChars method computes the glyphs
- * and positions, and saves them in the ICULayoutEngine object.
- * Use getGlyphs, getPositions and getCharIndices to retreive this
- * data.
- *
- * You'll also need an implementation of LEFontInstance for your platform.
- *
- * @see LayoutEngine.h
- * @see LEFontInstance.h
- *
- * @obsolete ICU 3.0. Use LayoutEngine.h instead since this API will be removed in that release.
- */
-#ifndef U_HIDE_OBSOLETE_API
-class U_LAYOUT_API ICULayoutEngine : public UObject {
-private:
- /**
- * This holds the instance of LayoutEngine that does all
- * the work.
- */
- LayoutEngine *fLayoutEngine;
-
- /**
- * This no argument constructor is private so that clients
- * can't envoke it. Clients should use createInstance.
- *
- * @see createInstance
- */
- ICULayoutEngine();
-
- /**
- * The main constructor. It is defined as private to
- * stop clients from invoking it. Clients should use
- * createInstance.
- *
- * @param layoutEngine - the LayoutEngine that this instance wraps.
- *
- * @see createInstance
- */
- ICULayoutEngine(LayoutEngine *layoutEngine);
-
-public:
-
- /**
- * The destructor. At least on Windows it needs to be
- * virtual to ensure that it deletes the object from the
- * same heap that createInstance will allocate it from. We
- * don't know why this is...
- *
- * @see createInstance
- *
- * @obsolete ICU 3.0. Use LayoutEngine.h instead since this API will be removed in that release.
- */
- virtual ~ICULayoutEngine();
-
- /**
- * This method computes the glyph, character index and position arrays
- * for the input characters.
- *
- * @param chars - the input character context
- * @param startOffset - the starting offset of the characters to process
- * @param endOffset - the ending offset of the characters to process
- * @param maxOffset - the number of characters in the input context
- * @param rightToLeft - TRUE if the characers are in a right to left directional run
- * @param x - the initial X position
- * @param y - the initial Y position
- * @param success - output parameter set to an error code if the operation fails
- *
- * @return the number of glyphs in the glyph array
- *
- * Note; the glyph, character index and position array can be accessed
- * using the getter method below.
- *
- * @obsolete ICU 3.0. Use LayoutEngine.h instead since this API will be removed in that release.
- */
- int32_t layoutChars(const UChar chars[],
- int32_t startOffset,
- int32_t endOffset,
- int32_t maxOffset,
- UBool rightToLeft,
- float x, float y,
- UErrorCode &success);
-
-
- /**
- * This method computes the glyph, character index and position arrays
- * for the input characters.
- *
- * @param str - the input character context
- * @param startOffset - the starting offset of the characters to process
- * @param endOffset - the ending offset of the characters to process
- * @param rightToLeft - TRUE if the characers are in a right to left directional run
- * @param x - the initial X position
- * @param y - the initial Y position
- * @param success - output parameter set to an error code if the operation fails
- *
- * @return the number of glyphs in the glyph array
- *
- * Note; the glyph, character index and position array can be accessed
- * using the getter method below.
- *
- * @obsolete ICU 3.0. Use LayoutEngine.h instead since this API will be removed in that release.
- */
- int32_t layoutString(const UnicodeString &str,
- int32_t startOffset,
- int32_t endOffset,
- UBool rightToLeft,
- float x, float y,
- UErrorCode &success);
-
- /**
- * This method returns the number of glyphs in the glyph array. Note
- * that the number of glyphs will be greater than or equal to the number
- * of characters used to create the LayoutEngine.
- *
- * @return the number of glyphs in the glyph array
- *
- * @obsolete ICU 3.0. Use LayoutEngine.h instead since this API will be removed in that release.
- */
- int32_t countGlyphs() const;
-
- /**
- * This method copies the glyph array into a caller supplied array.
- * The caller must ensure that the array is large enough to hold all
- * the glyphs.
- *
- * @param glyphs - the destiniation glyph array
- * @param success - output parameter set to an error code if the operation fails
- *
- * @obsolete ICU 3.0. Use LayoutEngine.h instead since this API will be removed in that release.
- */
- void getGlyphs(uint32_t glyphs[], UErrorCode &success);
-
- /**
- * This method copies the character index array into a caller supplied array.
- * The caller must ensure that the array is large enough to hold a character
- * index for each glyph.
- *
- * @param charIndices - the destiniation character index array
- * @param success - output parameter set to an error code if the operation fails
- *
- * @obsolete ICU 3.0. Use LayoutEngine.h instead since this API will be removed in that release.
- */
- void getCharIndices(int32_t charIndices[], UErrorCode &success);
-
- /**
- * This method copies the character index array into a caller supplied array.
- * The caller must ensure that the array is large enough to hold a character
- * index for each glyph.
- *
- * @param charIndices - the destiniation character index array
- * @param indexBase - an offset which will be added to each index
- * @param success - output parameter set to an error code if the operation fails
- *
- * @obsolete ICU 3.0. Use LayoutEngine.h instead since this API will be removed in that release.
- */
- void getCharIndices(int32_t charIndices[], int32_t indexBase, UErrorCode &success);
-
- /**
- * This method copies the position array into a caller supplied array.
- * The caller must ensure that the array is large enough to hold an
- * X and Y position for each glyph, plus an extra X and Y for the
- * advance of the last glyph.
- *
- * @param positions - the destiniation position array
- * @param success - output parameter set to an error code if the operation fails
- *
- * @obsolete ICU 3.0. Use LayoutEngine.h instead since this API will be removed in that release.
- */
- void getGlyphPositions(float positions[], UErrorCode &success);
-
- /**
- * This method returns the X and Y position of the glyph at the
- * given index.
- *
- * Input parameters:
- * @param glyphIndex - the index of the glyph
- *
- * Output parameters:
- * @param x - the glyph's X position
- * @param y - the glyph's Y position
- * @param success - output parameter set to an error code if the operation fails
- *
- * @obsolete ICU 3.0. Use LayoutEngine.h instead since this API will be removed in that release.
- */
- void getGlyphPosition(int32_t glyphIndex, float &x, float &y, UErrorCode &success);
-
- /**
- * This method returns an ICULayoutEngine capable of laying out text
- * in the given font, script and langauge.
- *
- * @param fontInstance - the font of the text
- * @param scriptCode - the script of the text
- * @param locale - used to determine the language of the text
- * @param success - output parameter set to an error code if the operation fails
- *
- * @return an ICULayoutEngine which can layout text in the given font.
- *
- * NOTE: currently, locale is ignored...
- *
- * @see LEFontInstance
- *
- * @obsolete ICU 3.0. Use LayoutEngine.h instead since this API will be removed in that release.
- */
- static ICULayoutEngine *createInstance(const LEFontInstance *fontInstance,
- UScriptCode scriptCode, Locale &locale,
- UErrorCode &success);
-
- /**
- * ICU "poor man's RTTI", returns a UClassID for the actual class.
- *
- * @obsolete ICU 3.0. Use LayoutEngine.h instead since this API will be removed in that release.
- */
- virtual UClassID getDynamicClassID() const;
-
- /**
- * ICU "poor man's RTTI", returns a UClassID for this class.
- *
- * @obsolete ICU 3.0. Use LayoutEngine.h instead since this API will be removed in that release.
- */
- static UClassID getStaticClassID();
-};
-
-inline ICULayoutEngine::ICULayoutEngine()
-{
- // nothing at all...
-}
-
-inline ICULayoutEngine::ICULayoutEngine(LayoutEngine *layoutEngine)
- : fLayoutEngine(layoutEngine)
-{
- // nothing else to do
-}
-
-inline ICULayoutEngine::~ICULayoutEngine()
-{
- delete fLayoutEngine;
- fLayoutEngine = 0;
-}
-
-inline int32_t ICULayoutEngine::layoutChars(const UChar chars[],
- int32_t startOffset,
- int32_t endOffset,
- int32_t maxOffset,
- UBool rightToLeft,
- float x, float y,
- UErrorCode &success)
-{
- // NOTE: call reset() so that clients can safely reuse
- fLayoutEngine->reset();
- return fLayoutEngine->layoutChars(chars,
- startOffset,
- endOffset - startOffset,
- maxOffset,
- rightToLeft,
- x, y,
- (LEErrorCode &) success);
-}
-
-inline int32_t ICULayoutEngine::layoutString(const UnicodeString &str,
- int32_t startOffset,
- int32_t endOffset,
- UBool rightToLeft,
- float x, float y,
- UErrorCode &success)
-{
- // NOTE: call reset() so that clients can safely reuse
- fLayoutEngine->reset();
- return fLayoutEngine->layoutChars(str.getBuffer(),
- startOffset,
- endOffset - startOffset,
- str.length(),
- rightToLeft,
- x, y,
- (LEErrorCode &) success);
-}
-
-inline int32_t ICULayoutEngine::countGlyphs() const
-{
- return fLayoutEngine->getGlyphCount();
-}
-
-inline void ICULayoutEngine::getGlyphs(uint32_t glyphs[], UErrorCode &success)
-{
- fLayoutEngine->getGlyphs(glyphs, (LEErrorCode &) success);
-}
-
-inline void ICULayoutEngine::getCharIndices(int32_t charIndices[], UErrorCode &success)
-{
- fLayoutEngine->getCharIndices(charIndices, (LEErrorCode &) success);
-}
-
-inline void ICULayoutEngine::getCharIndices(int32_t charIndices[], int32_t indexBase, UErrorCode &success)
-{
- fLayoutEngine->getCharIndices(charIndices, indexBase, (LEErrorCode &) success);
-}
-
-inline void ICULayoutEngine::getGlyphPositions(float positions[], UErrorCode &success)
-{
- fLayoutEngine->getGlyphPositions(positions, (LEErrorCode &) success);
-}
-
-inline void ICULayoutEngine::getGlyphPosition(int32_t glyphIndex, float &x, float &y, UErrorCode &success)
-{
- fLayoutEngine->getGlyphPosition(glyphIndex, x, y, (LEErrorCode &) success);
-}
-
-inline ICULayoutEngine *ICULayoutEngine::createInstance(const LEFontInstance *fontInstance,
- UScriptCode scriptCode,
- Locale &locale, UErrorCode &success)
-{
- LayoutEngine *engine = LayoutEngine::layoutEngineFactory(fontInstance,
- (le_int32) scriptCode,
- 0,
- (LEErrorCode &) success);
-
- return new ICULayoutEngine(engine);
-}
-#endif // U_HIDE_OBSOLETE_API
-
-U_NAMESPACE_END
-#endif