16f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/*
26f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *******************************************************************************
36f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *
46f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *   Copyright (C) 1999-2007, International Business Machines
56f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *   Corporation and others.  All Rights Reserved.
66f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *
76f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *******************************************************************************
86f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *   file name:  Paragraph.h
96f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *
106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *   created on: 09/06/2000
116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *   created by: Eric R. Mader
126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */
136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#ifndef __PARAGRAPH_H
146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#define __PARAGRAPH_H
156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "unicode/utypes.h"
176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "unicode/ubidi.h"
186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "layout/LEFontInstance.h"
206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "layout/ParagraphLayout.h"
216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "GUISupport.h"
236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "RenderingSurface.h"
246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgU_NAMESPACE_USE
266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#define MARGIN 10
286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#if 0
306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgclass LineInfo;
316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#endif
326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgclass Paragraph
346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{
356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgpublic:
366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    Paragraph(const LEUnicode chars[], le_int32 charCount, const FontRuns *fontRuns, LEErrorCode &status);
376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    ~Paragraph();
396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    le_int32 getAscent();
416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    le_int32 getLineHeight();
426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    le_int32 getLineCount();
436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    void breakLines(le_int32 width, le_int32 height);
446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    void draw(RenderingSurface *surface, le_int32 firstLine, le_int32 lastLine);
456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    static Paragraph *paragraphFactory(const char *fileName, const LEFontInstance *font, GUISupport *guiSupport);
476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgprivate:
496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    void addLine(const ParagraphLayout::Line *line);
506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    ParagraphLayout **fParagraphLayout;
526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    le_int32          fParagraphCount;
546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    le_int32          fParagraphMax;
556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    le_int32          fParagraphGrow;
566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    le_int32          fLineCount;
586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    le_int32          fLinesMax;
596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    le_int32          fLinesGrow;
606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    const ParagraphLayout::Line **fLines;
626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org          LEUnicode *fChars;
636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    le_int32         fLineHeight;
656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    le_int32         fAscent;
666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    le_int32         fWidth;
676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    le_int32         fHeight;
686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    UBiDiLevel       fParagraphLevel;
696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org};
706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orginline le_int32 Paragraph::getLineHeight()
726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{
736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    return fLineHeight;
746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org}
756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orginline le_int32 Paragraph::getLineCount()
776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{
786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    return fLineCount;
796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org}
806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orginline le_int32 Paragraph::getAscent()
826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{
836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    return fAscent;
846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org}
856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#endif
876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
89