X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Frowpainter.h;h=874a28b00047cfae86de0ae62afc0666e5c23310;hb=fc2658eff011adb08192cf897416698c34aab268;hp=a8ceac5265b6d0296da0e4a2b9ab7c671e1b19ec;hpb=b6c446209516284fc0b7f0af9f1ac01fcf8740cf;p=lyx.git diff --git a/src/rowpainter.h b/src/rowpainter.h index a8ceac5265..874a28b000 100644 --- a/src/rowpainter.h +++ b/src/rowpainter.h @@ -6,27 +6,101 @@ * * \author various * \author John Levon + * \author André Pönitz * - * Full author contact details are available in file CREDITS + * Full author contact details are available in file CREDITS. */ #ifndef ROWPAINTER_H #define ROWPAINTER_H -#include +#include "support/types.h" -#include "RowList.h" +namespace lyx { -class LyXText; +class Bidi; class BufferView; -class VSpace; +class Font; +class FontInfo; +class Inset; +class Language; +class PainterInfo; +class Paragraph; +class ParagraphList; +class ParagraphMetrics; +class Row; +class Text; +class TextMetrics; -/// paint the rows -// return last used y -int paintRows(BufferView const & bv, LyXText const & text, - RowList::iterator rit, int xo, int y, int yf, int y2, int yo); +namespace frontend { class Painter; } -/// return the pixel height of a space marker before/after a par -int getLengthMarkerHeight(BufferView const & bv, VSpace const & vsp); +/** + * 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(); + +private: + void paintForeignMark(double orig_x, Language const * lang, int desc = 0); + 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); + void paintInset(Inset const * inset, pos_type const pos); + + /// return left margin + int leftMargin() const; + + /// return the label font for this row + FontInfo const getLabelFont() const; + + /// contains painting related information. + PainterInfo & pi_; + + /// Text for the row + Text const & text_; + TextMetrics & text_metrics_; + ParagraphList const & pars_; + + /// The row to paint + Row const & row_; + + /// Row's paragraph + pit_type const pit_; + Paragraph const & par_; + ParagraphMetrics const & pm_; + + /// 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_; + + /// is row erased? (change tracking) + bool erased_; + + // Looks ugly - is + double const xo_; + int const yo_; // current baseline + double x_; + int width_; +}; + +} // namespace lyx #endif // ROWPAINTER_H