Viewing file: ScriptCompositeFontInstance.h (6.15 KB) -rw-r--r-- Select action/file-type: (+) | (+) | (+) | Code (+) | Session (+) | (+) | SDB (+) | (+) | (+) | (+) | (+) | (+) |
/* * %W% %E% * * © 2016 and later: Unicode, Inc. and others. * License & terms of use: http://www.unicode.org/copyright.html#License * * (C) Copyright IBM Corp. 1998-2011 - All Rights Reserved * */
#ifndef __SCRIPTCOMPOSITEFONTINSTANCE_H #define __SCRIPTCOMPOSITEFONTINSTANCE_H
#include "layout/LETypes.h" #include "layout/LEFontInstance.h"
#include "FontMap.h"
// U_NAMESPACE_BEGIN
class ScriptCompositeFontInstance : public LEFontInstance { public:
ScriptCompositeFontInstance(FontMap *fontMap);
virtual ~ScriptCompositeFontInstance();
/** * Get a physical font which can render the given text. For composite fonts, * if there is no single physical font which can render all of the text, * return a physical font which can render an initial substring of the text, * and set the <code>offset</code> parameter to the end of that substring. * * Internally, the LayoutEngine works with runs of text all in the same * font and script, so it is best to call this method with text which is * in a single script, passing the script code in as a hint. If you don't * know the script of the text, you can use zero, which is the script code * for characters used in more than one script. * * The default implementation of this method is intended for instances of * <code>LEFontInstance</code> which represent a physical font. It returns * <code>this</code> and indicates that the entire string can be rendered. * * This method will return a valid <code>LEFontInstance</code> unless you * have passed illegal parameters, or an internal error has been encountered. * For composite fonts, it may return the warning <code>LE_NO_SUBFONT_WARNING</code> * to indicate that the returned font may not be able to render all of * the text. Whenever a valid font is returned, the <code>offset</code> parameter * will be advanced by at least one. * * Subclasses which implement composite fonts must override this method. * Where it makes sense, they should use the script code as a hint to render * characters from the COMMON script in the font which is used for the given * script. For example, if the input text is a series of Arabic words separated * by spaces, and the script code passed in is <code>arabScriptCode</code> you * should return the font used for Arabic characters for all of the input text, * including the spaces. If, on the other hand, the input text contains characters * which cannot be rendered by the font used for Arabic characters, but which can * be rendered by another font, you should return that font for those characters. * * @param chars - the array of Unicode characters. * @param offset - a pointer to the starting offset in the text. On exit this * will be set the the limit offset of the text which can be * rendered using the returned font. * @param limit - the limit offset for the input text. * @param script - the script hint. * @param success - set to an error code if the arguments are illegal, or no font * can be returned for some reason. May also be set to * <code>LE_NO_SUBFONT_WARNING</code> if the subfont which * was returned cannot render all of the text. * * @return an <code>LEFontInstance</code> for the sub font which can render the characters, or * <code>NULL</code> if there is an error. * * @see LEScripts.h */ virtual const LEFontInstance *getSubFont(const LEUnicode chars[], le_int32 *offset, le_int32 limit, le_int32 script, LEErrorCode &success) const;
/** * This method maps a single character to a glyph index, using the * font's charcter to glyph map. * * @param ch - the character * * @return the glyph index */ virtual LEGlyphID mapCharToGlyph(LEUnicode32 ch) const;
virtual const void *getFontTable(LETag tableTag) const;
virtual le_int32 getUnitsPerEM() const;
virtual le_int32 getAscent() const;
virtual le_int32 getDescent() const;
virtual le_int32 getLeading() const;
virtual void getGlyphAdvance(LEGlyphID glyph, LEPoint &advance) const;
virtual le_bool getGlyphPoint(LEGlyphID glyph, le_int32 pointNumber, LEPoint &point) const;
float getXPixelsPerEm() const;
float getYPixelsPerEm() const;
float getScaleFactorX() const;
float getScaleFactorY() const;
/** * ICU "poor man's RTTI", returns a UClassID for the actual class. */ virtual inline UClassID getDynamicClassID() const { return getStaticClassID(); }
/** * ICU "poor man's RTTI", returns a UClassID for this class. */ static inline UClassID getStaticClassID() { return (UClassID)&fgClassID; }
protected: FontMap *fFontMap;
private:
/** * The address of this static class variable serves as this class's ID * for ICU "poor man's RTTI". */ static const char fgClassID; };
inline const void *ScriptCompositeFontInstance::getFontTable(LETag /*tableTag*/) const { return NULL; }
// Can't get units per EM without knowing which sub-font, so // return a value that will make units == points inline le_int32 ScriptCompositeFontInstance::getUnitsPerEM() const { return 1; }
inline le_int32 ScriptCompositeFontInstance::getAscent() const { return fFontMap->getAscent(); }
inline le_int32 ScriptCompositeFontInstance::getDescent() const { return fFontMap->getDescent(); }
inline le_int32 ScriptCompositeFontInstance::getLeading() const { return fFontMap->getLeading(); }
inline float ScriptCompositeFontInstance::getXPixelsPerEm() const { return fFontMap->getPointSize(); }
inline float ScriptCompositeFontInstance::getYPixelsPerEm() const { return fFontMap->getPointSize(); }
// Can't get a scale factor without knowing the sub-font, so // return 1.0. inline float ScriptCompositeFontInstance::getScaleFactorX() const { return 1.0; }
// Can't get a scale factor without knowing the sub-font, so // return 1.0 inline float ScriptCompositeFontInstance::getScaleFactorY() const { return 1.0; }
// U_NAMESPACE_END #endif
|