X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Frowpainter.h;h=480a2dd56c58a946e7fe99626795e1edc5131ed5;hb=4db3e641ed6765e005343010cb90ee8af26f8f99;hp=efbd99b5478a3c75e2ccb65f8a71097d57628b63;hpb=82d3d4dff699f069c24f6e804427dd80361ee295;p=lyx.git diff --git a/src/rowpainter.h b/src/rowpainter.h index efbd99b547..480a2dd56c 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,99 +6,117 @@ * * \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 "Changes.h" -#include "RowList.h" -#include "LString.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 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, RowList::iterator rit); + /// initialise and run painter + RowPainter(PainterInfo & pi, Text const & text, + pit_type pit, Row const & row, Bidi & bidi, int x, int y); - /// paint the row. - void paint(int y_offset, int x_offset, int y); - -private: - // paint various parts - void 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 paintAppendixStart(int y); - int paintLengthMarker(string const & prefix, VSpace const & vsp, int start); void paintText(); - void paintFromPos(lyx::pos_type & vpos); - void paintInset(lyx::pos_type const pos); + void paintOnlyInsets(); + void paintSelection(); + +private: + void paintSeparator(double orig_x, double width, FontInfo const & font); + 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; - /// 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; + FontInfo labelFont() const; - char const transformChar(char c, lyx::pos_type pos) const; + /// + void paintLabel(); + /// + void paintTopLevelLabel(); - /// return pixel width for the given pos - int singleWidth(lyx::pos_type pos) const; - int singleWidth(lyx::pos_type pos, char c) 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 - RowList::iterator row_; + 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_; + + /// row changed? (change tracking) + Change const change_; // Looks ugly - is - int xo_; - int yo_; - float x_; - int y_; + double const xo_; + int const yo_; // current baseline + double x_; int width_; - float separator_; - float hfill_; - float label_hfill_; + float solid_line_thickness_; + int solid_line_offset_; + float dotted_line_thickness_; + int dotted_line_offset_; }; -/// 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