+// -*- C++ -*-
/**
* \file rowpainter.h
* This file is part of LyX, the document processor.
*
* \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 <config.h>
+#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();
+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
- 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_;
};
-/// 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