10 #ifndef __PARAGRAPHLAYOUT_H
12 #define __PARAGRAPHLAYOUT_H
24 #if ! UCONFIG_NO_BREAK_ITERATION
26 #include "layout/LETypes.h"
27 #include "layout/LEFontInstance.h"
28 #include "layout/LayoutEngine.h"
89 inline le_int32 countRuns()
const;
99 le_int32 getAscent()
const;
109 le_int32 getDescent()
const;
119 le_int32 getLeading()
const;
130 le_int32 getWidth()
const;
147 const VisualRun *getVisualRun(le_int32 runIndex)
const;
169 static const char fgClassID;
178 le_int32 fRunCapacity;
184 inline Line &operator=(
const Line & ) {
return *
this; };
186 void computeMetrics();
188 void append(
const LEFontInstance *font,
UBiDiDirection direction, le_int32 glyphCount,
189 const LEGlyphID glyphs[],
const float positions[],
const le_int32 glyphToCharMap[]);
222 inline const LEFontInstance *getFont()
const;
241 inline le_int32 getGlyphCount()
const;
253 inline const LEGlyphID *getGlyphs()
const;
268 inline const float *getPositions()
const;
280 inline const le_int32 *getGlyphToCharMap()
const;
290 inline le_int32 getAscent()
const;
300 inline le_int32 getDescent()
const;
310 inline le_int32 getLeading()
const;
332 static const char fgClassID;
334 const LEFontInstance *fFont;
337 const le_int32 fGlyphCount;
339 const LEGlyphID *fGlyphs;
340 const float *fPositions;
341 const le_int32 *fGlyphToCharMap;
349 inline VisualRun(
const LEFontInstance *font,
UBiDiDirection direction, le_int32 glyphCount,
350 const LEGlyphID glyphs[],
const float positions[],
const le_int32 glyphToCharMap[]);
398 ParagraphLayout(
const LEUnicode chars[], le_int32 count,
399 const FontRuns *fontRuns,
400 const ValueRuns *levelRuns,
401 const ValueRuns *scriptRuns,
402 const LocaleRuns *localeRuns,
404 LEErrorCode &status);
433 static le_bool isComplex(
const LEUnicode chars[], le_int32 count,
const FontRuns *fontRuns);
447 static le_bool isComplex(
const LEUnicode chars[], le_int32 count);
481 virtual le_int32 getAscent()
const;
491 virtual le_int32 getDescent()
const;
501 virtual le_int32 getLeading()
const;
509 inline void reflow();
511 #ifndef U_HIDE_INTERNAL_API
521 inline le_bool isDone()
const;
541 Line *nextLine(
float width);
564 static const char fgClassID;
568 LayoutEngine *engine;
569 const LEFontInstance *font;
581 ParagraphLayout() {};
582 ParagraphLayout(
const ParagraphLayout & ) : UObject( ){};
583 inline ParagraphLayout &operator=(
const ParagraphLayout & ) {
return *
this; };
585 void computeLevels(
UBiDiLevel paragraphLevel);
587 Line *computeVisualRuns();
588 void appendRun(Line *line, le_int32 run, le_int32 firstChar, le_int32 lastChar);
590 void computeScripts();
592 void computeLocales();
594 void computeSubFonts(
const FontRuns *fontRuns, LEErrorCode &status);
596 void computeMetrics();
598 le_int32 getLanguageCode(
const Locale *locale);
600 le_int32 getCharRun(le_int32 charIndex);
604 le_int32 previousBreak(le_int32 charIndex);
607 const LEUnicode *fChars;
610 const FontRuns *fFontRuns;
611 const ValueRuns *fLevelRuns;
612 const ValueRuns *fScriptRuns;
613 const LocaleRuns *fLocaleRuns;
616 le_bool fClientLevels;
617 le_bool fClientScripts;
618 le_bool fClientLocales;
626 le_int32 *fGlyphToCharMap;
627 le_int32 *fCharToMinGlyphMap;
628 le_int32 *fCharToMaxGlyphMap;
630 le_int32 fGlyphCount;
635 le_int32 *fStyleRunLimits;
636 le_int32 *fStyleIndices;
637 StyleRunInfo *fStyleRunInfo;
638 le_int32 fStyleRunCount;
640 BreakIterator *fBreakIterator;
644 le_int32 fFirstVisualRun;
645 le_int32 fLastVisualRun;
646 float fVisualRunLastX;
647 float fVisualRunLastY;
660 inline void ParagraphLayout::reflow()
665 inline ParagraphLayout::Line::Line()
666 :
UObject(), fAscent(0), fDescent(0), fLeading(0), fRunCount(0), fRunCapacity(0), fRuns(
NULL)
671 inline ParagraphLayout::Line::Line(
const Line & )
672 : UObject(), fAscent(0), fDescent(0), fLeading(0), fRunCount(0), fRunCapacity(0), fRuns(
NULL)
709 return fGlyphToCharMap;
714 return fFont->getAscent();
719 return fFont->getDescent();
724 return fFont->getLeading();
727 inline ParagraphLayout::VisualRun::VisualRun()
733 inline ParagraphLayout::VisualRun::VisualRun(
const VisualRun &)
739 inline ParagraphLayout::VisualRun::VisualRun(
const LEFontInstance *font,
UBiDiDirection direction, le_int32 glyphCount,
740 const LEGlyphID glyphs[],
const float positions[],
const le_int32 glyphToCharMap[])
741 : fFont(font), fDirection(direction), fGlyphCount(glyphCount),
742 fGlyphs(glyphs), fPositions(positions), fGlyphToCharMap(glyphToCharMap)