X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Frowpainter.h;h=59dfe2cc0030174ce302370075cd2f2869fea5d1;hb=2df6a6a37876dcfaa755c9aaf6a5ddc1ad58c63e;hp=2324bf656ce9961a76cd32e6f2fa58f5894bd330;hpb=47432f0259d981d61922ee0f451183dc949aca3f;p=lyx.git diff --git a/src/rowpainter.h b/src/rowpainter.h index 2324bf656c..59dfe2cc00 100644 --- a/src/rowpainter.h +++ b/src/rowpainter.h @@ -1,3 +1,4 @@ +// -*- C++ -*- /** * \file rowpainter.h * This file is part of LyX, the document processor. @@ -5,102 +6,102 @@ * * \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 "LString.h" #include "support/types.h" -class LyXText; +namespace lyx { + +class Bidi; class BufferView; -class Row; +class Font; +class FontInfo; +class Inset; +class Language; +class PainterInfo; class Paragraph; -class Painter; -class LyXFont; -class VSpace; +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 painter - RowPainter(BufferView const & bv, LyXText const & text, Row const & row); - - /// paint the row. Returns true if CHANGED_IN_DRAW (e.g. image was loaded) - bool paint(int y_offset, int x_offset, int y, bool cleared = false); + /// initialise and run painter + RowPainter(PainterInfo & pi, Text const & text, + pit_type pit, Row const & row, Bidi & bidi, int x, int y); -private: - // paint various parts - bool paintBackground(); - void paintSelection(); + /// paint various parts + /// FIXME: transfer to TextMetrics void paintAppendix(); void paintDepthBar(); void paintChangeBar(); void paintFirst(); void paintLast(); - void paintForeignMark(float const orig_x, LyXFont const & orig_font); - void paintHebrewComposeChar(lyx::pos_type & vpos); - void paintArabicComposeChar(lyx::pos_type & vpos); - void paintChars(lyx::pos_type & vpos, bool hebrew, bool arabic); - int paintPageBreak(string const & label, int y); - int paintLengthMarker(string const & prefix, VSpace const & vsp, int start); - /// returns true when CHANGED_IN_DRAW - bool paintText(); - /// returns true when CHANGED_IN_DRAW - bool paintFromPos(lyx::pos_type & vpos); - /// returns true when CHANGED_IN_DRAW - bool paintInset(lyx::pos_type const pos); + 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); + void paintInlineCompletion(Font const & font); + /// return left margin int leftMargin() const; - /// return the font at the given pos - LyXFont const getFont(lyx::pos_type pos) const; - /// return the label font for this row - LyXFont const getLabelFont() const; - - char const transformChar(char c, lyx::pos_type pos) const; - - /// return pixel width for the given pos - int singleWidth(lyx::pos_type pos) const; - int singleWidth(lyx::pos_type pos, char c) const; + FontInfo labelFont() const; - /// bufferview to paint on - BufferView const & bv_; + /// contains painting related information. + PainterInfo & pi_; - /// Painter to use - Painter & pain_; - - /// LyXText for the row - LyXText const & text_; + /// 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 - int xo_; - int yo_; - float x_; - int y_; - bool cleared_; + double const xo_; + int const yo_; // current baseline + double x_; int width_; - float separator_; - float hfill_; - float label_hfill_; }; -/// return the pixel height of a space marker before/after a par -int getLengthMarkerHeight(BufferView const & bv, VSpace const & vsp); +} // namespace lyx #endif // ROWPAINTER_H