| /* |
| ******************************************************************************* |
| * |
| * Copyright (C) 1999-2001, International Business Machines |
| * Corporation and others. All Rights Reserved. |
| * |
| ******************************************************************************* |
| * file name: Paragraph.h |
| * |
| * created on: 09/06/2000 |
| * created by: Eric R. Mader |
| */ |
| #ifndef __PARAGRAPH_H |
| #define __PARAGRAPH_H |
| |
| #include "unicode/utypes.h" |
| #include "unicode/uscript.h" |
| #include "unicode/brkiter.h" |
| #include "unicode/ubidi.h" |
| |
| #include "GUISupport.h" |
| #include "RenderingFontInstance.h" |
| #include "FontMap.h" |
| |
| U_NAMESPACE_USE |
| |
| #define MARGIN 10 |
| |
| struct RunParams |
| { |
| const RenderingFontInstance *fontInstance; |
| UChar *text; |
| int32_t count; |
| UScriptCode scriptCode; |
| UBool rightToLeft; |
| }; |
| |
| struct RunInfo |
| { |
| const RenderingFontInstance *fontInstance; |
| int32_t charBase; |
| int32_t glyphBase; |
| UBool rightToLeft; |
| }; |
| |
| class Paragraph |
| { |
| public: |
| Paragraph(void *surface,RunParams runs[], int32_t count, UBiDi *bidi); |
| |
| ~Paragraph(); |
| |
| int32_t getAscent(); |
| int32_t getLineHeight(); |
| int32_t getLineCount(); |
| void breakLines(int32_t width, int32_t height); |
| void draw(void *surface, int32_t firstLine, int32_t lastLine); |
| |
| static Paragraph *paragraphFactory(const char *fileName, FontMap *fontMap, GUISupport *guiSupport, void *surface); |
| |
| protected: |
| int32_t previousBreak(int32_t charIndex); |
| int32_t getCharRun(int32_t ch, int32_t startingRun, int32_t direction); |
| int32_t getGlyphRun(int32_t glyph, int32_t startingRun, int32_t direction); |
| |
| int32_t getRunWidth(int32_t startGlyph, int32_t endGlyph); |
| int32_t drawRun(void *surface, const RenderingFontInstance *fontInstance, int32_t firstChar, int32_t lastChar, |
| int32_t x, int32_t y); |
| |
| |
| private: |
| UBiDi *fBidi; |
| |
| int32_t fRunCount; |
| RunInfo *fRunInfo; |
| |
| int32_t fCharCount; |
| UChar *fText; |
| BreakIterator *fBrkiter; |
| |
| int32_t fGlyphCount; |
| LEGlyphID *fGlyphs; |
| int32_t *fCharIndices; |
| int32_t *fGlyphIndices; |
| int32_t *fDX; |
| int32_t *fDY; |
| |
| int32_t fBreakCount; |
| int32_t *fBreakArray; |
| |
| int32_t fLineHeight; |
| int32_t fAscent; |
| int32_t fWidth; |
| int32_t fHeight; |
| }; |
| |
| #endif |
| |
| |