*
* \author various
* \author John Levon
- * \author André Pönitz
+ * \author André Pönitz
*
* Full author contact details are available in file CREDITS.
*/
#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 ViewMetricsInfo;
+class Paragraph;
+class ParagraphList;
+class ParagraphMetrics;
+class Row;
+class Text;
+class TextMetrics;
-namespace lyx {
-namespace frontend {
-class Painter;
-}
-}
+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;
+
+ /// return the label font for this row
+ FontInfo labelFont() const;
+
+ /// contains painting related information.
+ PainterInfo & pi_;
+ /// Text for the row
+ Text const & text_;
+ TextMetrics & text_metrics_;
+ ParagraphList const & pars_;
-/// paint visible paragraph of main text
-void paintText(BufferView const & bv, ViewMetricsInfo const & vi,
- lyx::frontend::Painter & painter);
+ /// The row to paint
+ Row const & row_;
-/// paint the rows of a text inset
-void paintTextInset(LyXText const & text, PainterInfo & pi, int x, int y);
+ /// Row's paragraph
+ pit_type const pit_;
+ Paragraph const & par_;
+ ParagraphMetrics const & pm_;
-/// some space for drawing the 'nested' markers (in pixel)
-inline int nestMargin() { return 15; }
+ /// 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_;
-/// margin for changebar
-inline int changebarMargin() { return 10; }
+ /// row changed? (change tracking)
+ Change const change_;
-/// right margin
-inline int rightMargin() { return 10; }
+ // Looks ugly - is
+ double const xo_;
+ int const yo_; // current baseline
+ double x_;
+ int width_;
+ float line_thickness_;
+ int line_offset_;
+};
+} // namespace lyx
#endif // ROWPAINTER_H