X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Frowpainter.h;h=6408fdc73fb33ac0b9dea21807af71f3686aa27b;hb=c20e885331c9bba720e386985d0e7bcdb5bf8b9c;hp=566d44fc2a6f9e551ef449b5c7bb2b0eb85a18bd;hpb=ed064bdee611821c1ebdac78b7a085dfde9f0b5a;p=lyx.git diff --git a/src/rowpainter.h b/src/rowpainter.h index 566d44fc2a..6408fdc73f 100644 --- a/src/rowpainter.h +++ b/src/rowpainter.h @@ -6,6 +6,7 @@ * * \author various * \author John Levon + * \author André Pönitz * * Full author contact details are available in file CREDITS. */ @@ -13,41 +14,102 @@ #ifndef ROWPAINTER_H #define ROWPAINTER_H +#include "Changes.h" + #include "support/types.h" -class LyXText; +namespace lyx { + +class Bidi; class BufferView; +class Font; +class FontInfo; +class Inset; +class Language; class PainterInfo; +class Paragraph; +class ParagraphList; +class ParagraphMetrics; +class Row; +class Text; +class TextMetrics; + +namespace frontend { class Painter; } + +/** + * A class used for painting an individual row of text. + * FIXME: get rid of that class. + */ +class RowPainter { +public: + /// initialise and run painter + RowPainter(PainterInfo & pi, Text const & text, + pit_type pit, Row const & row, Bidi & bidi, int x, int y); + + /// paint various parts + /// FIXME: transfer to TextMetrics + void paintAppendix(); + void paintDepthBar(); + void paintChangeBar(); + void paintFirst(); + void paintLast(); + void paintText(); + void paintOnlyInsets(); + void paintSelection(); + +private: + void paintForeignMark(double orig_x, Language const * lang, int desc = 0); + void paintMisspelledMark(double orig_x, bool changed); + void paintHebrewComposeChar(pos_type & vpos, FontInfo const & font); + void paintArabicComposeChar(pos_type & vpos, FontInfo const & font); + void paintChars(pos_type & vpos, FontInfo const & font, + bool hebrew, bool arabic); + int paintAppendixStart(int y); + void paintFromPos(pos_type & vpos, bool changed); + void paintInset(Inset const * inset, pos_type const pos); + void paintInlineCompletion(Font const & font); + + /// return left margin + int leftMargin() const; -/// paint the rows of the main text, return last drawn y value -int paintText(BufferView const & bv); + /// return the label font for this row + FontInfo labelFont() const; -/// refresh a par of the main text -void refreshPar(BufferView const & bv, LyXText const & text, - lyx::pit_type pit); + /// contains painting related information. + PainterInfo & pi_; -/// paint the rows of a text inset -void paintTextInset(LyXText const & text, PainterInfo & pi); + /// Text for the row + Text const & text_; + TextMetrics & text_metrics_; + ParagraphList const & pars_; -/// some space for drawing the 'nested' markers (in pixel) -inline int nestMargin() -{ - return 15; -} + /// The row to paint + Row const & row_; + /// Row's paragraph + pit_type const pit_; + Paragraph const & par_; + ParagraphMetrics const & pm_; -/// margin for changebar -inline int changebarMargin() -{ - return 10; -} + /// bidi cache, comes from outside the rowpainter because + /// rowpainters are normally created in a for loop and there only + /// one of them is active at a time. + Bidi & bidi_; + /// row changed? (change tracking) + Change const change_; -/// right margin -inline int rightMargin() -{ - return 30; -} + // Looks ugly - is + double const xo_; + int const yo_; // current baseline + double x_; + int width_; + float solid_line_thickness_; + int solid_line_offset_; + float dotted_line_thickness_; + int dotted_line_offset_; +}; +} // namespace lyx #endif // ROWPAINTER_H