]> git.lyx.org Git - lyx.git/blobdiff - src/rowpainter.h
Implement LFUN_SPELLING_REMOVE (patch from switt)
[lyx.git] / src / rowpainter.h
index 566d44fc2a6f9e551ef449b5c7bb2b0eb85a18bd..9a8a7cdd5eb5e42f229e44d04c4eca296182c67e 100644 (file)
@@ -6,6 +6,7 @@
  *
  * \author various
  * \author John Levon
+ * \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 Paragraph;
+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 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 paintMisspelledMark(double orig_x, int desc);
+       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;
 
-/// paint the rows of the main text, return last drawn y value
-int paintText(BufferView const & bv);
+       /// return the label font for this row
+       FontInfo labelFont() const;
 
-/// refresh a par of the main text
-void refreshPar(BufferView const & bv, LyXText const & text,
-               lyx::pit_type pit);
+       /// contains painting related information.
+       PainterInfo & pi_;
 
-/// paint the rows of a text inset
-void paintTextInset(LyXText const & text, PainterInfo & pi);
+       /// Text for the row
+       Text const & text_;
+       TextMetrics & text_metrics_;
+       ParagraphList const & pars_;
 
-/// some space for drawing the 'nested' markers (in pixel)
-inline int nestMargin()
-{
-       return 15;
-}
+       /// The row to paint
+       Row const & row_;
 
+       /// Row's paragraph
+       pit_type const pit_;
+       Paragraph const & par_;
+       ParagraphMetrics const & pm_;
 
-/// margin for changebar
-inline int changebarMargin()
-{
-       return 10;
-}
+       /// 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_;
 
-/// right margin
-inline int rightMargin()
-{
-       return 30;
-}
+       // Looks ugly - is
+       double const xo_;
+       int const yo_;    // current baseline
+       double x_;
+       int width_;
+};
 
+} // namespace lyx
 
 #endif // ROWPAINTER_H