X-Git-Url: https://git.saurik.com/apple/icu.git/blobdiff_plain/b75a7d8f3b4adbae880cab104ce2c6a50eee4db2..6de34a005df0e4a02d88750703b950237b77d9c8:/icuSources/samples/layout/paragraph.cpp?ds=sidebyside diff --git a/icuSources/samples/layout/paragraph.cpp b/icuSources/samples/layout/paragraph.cpp index 1bbac30c..2ac4504e 100644 --- a/icuSources/samples/layout/paragraph.cpp +++ b/icuSources/samples/layout/paragraph.cpp @@ -27,14 +27,24 @@ #define MARGIN 10 #define LINE_GROW 32 -Paragraph::Paragraph(const LEUnicode chars[], int32_t charCount, const FontRuns *fontRuns) +Paragraph::Paragraph(const LEUnicode chars[], int32_t charCount, const FontRuns *fontRuns, LEErrorCode &status) : fParagraphLayout(NULL), fLineCount(0), fLinesMax(0), fLinesGrow(LINE_GROW), fLines(NULL), fChars(NULL), fLineHeight(-1), fAscent(-1), fWidth(-1), fHeight(-1) { + if (LE_FAILURE(status)) { + return; + } + + LocaleRuns *locales = NULL; + fChars = LE_NEW_ARRAY(LEUnicode, charCount); LE_ARRAY_COPY(fChars, chars, charCount); - fParagraphLayout = new ParagraphLayout(fChars, charCount, fontRuns, NULL, NULL, NULL, UBIDI_LTR, false); + fParagraphLayout = new ParagraphLayout(fChars, charCount, fontRuns, NULL, NULL, locales, UBIDI_DEFAULT_LTR, FALSE, status); + + if (LE_FAILURE(status)) { + return; + } le_int32 ascent = fParagraphLayout->getAscent(); le_int32 descent = fParagraphLayout->getDescent(); @@ -102,6 +112,13 @@ void Paragraph::draw(RenderingSurface *surface, le_int32 firstLine, le_int32 las le_int32 runCount = line->countRuns(); le_int32 run; + if (fParagraphLayout->getParagraphLevel() == UBIDI_RTL) { + le_int32 lastX = line->getWidth(); + + x = (fWidth - lastX - MARGIN); + } + + for (run = 0; run < runCount; run += 1) { const ParagraphLayout::VisualRun *visualRun = line->getVisualRun(run); le_int32 glyphCount = visualRun->getGlyphCount(); @@ -118,8 +135,7 @@ void Paragraph::draw(RenderingSurface *surface, le_int32 firstLine, le_int32 las Paragraph *Paragraph::paragraphFactory(const char *fileName, const LEFontInstance *font, GUISupport *guiSupport) { - LEErrorCode fontStatus = LE_NO_ERROR; - UErrorCode scriptStatus = U_ZERO_ERROR; + LEErrorCode status = LE_NO_ERROR; le_int32 charCount; const UChar *text = UnicodeReader::readFile(fileName, guiSupport, charCount); Paragraph *result = NULL; @@ -132,7 +148,12 @@ Paragraph *Paragraph::paragraphFactory(const char *fileName, const LEFontInstanc fontRuns.add(font, charCount); - result = new Paragraph(text, charCount, &fontRuns); + result = new Paragraph(text, charCount, &fontRuns, status); + + if (LE_FAILURE(status)) { + delete result; + result = NULL; + } LE_DELETE_ARRAY(text);