]> git.lyx.org Git - lyx.git/blobdiff - src/frontends/qt4/GuiPainter.h
GuiBibtex: Use appropriate title when using Biblatex
[lyx.git] / src / frontends / qt4 / GuiPainter.h
index 2d2cf3f36622a33f55060227e1ead04e45957f46..9657ed9770c401fe17063c8f62581b39567908dd 100644 (file)
@@ -18,6 +18,7 @@
 #include "frontends/Painter.h"
 
 #include <QPainter>
+#include <QPainterPath>
 #include <stack>
 
 class QString;
@@ -29,11 +30,11 @@ class FontInfo;
 namespace frontend {
 
 /**
- * GuiPainter - a painter implementation for Qt4
+ * GuiPainter - a painter implementation for Qt
  */
 class GuiPainter : public QPainter, public Painter {
 public:
-       GuiPainter(QPaintDevice *);
+       GuiPainter(QPaintDevice *, double pixel_ratio);
        virtual ~GuiPainter();
 
        /// draw a line from point to point
@@ -42,7 +43,7 @@ public:
                int x2, int y2,
                Color,
                line_style ls = line_solid,
-               float lw = thin_line);
+               int lw = thin_line);
 
        /**
         * lines -  draw a set of lines
@@ -55,8 +56,26 @@ public:
                int const * yp,
                int np,
                Color,
+               fill_style fs = fill_none,
                line_style ls = line_solid,
-               float lw = thin_line);
+               int lw = thin_line);
+
+       /**
+        * path -  draw a path with bezier curves
+        * @param xp array of points' x co-ords
+        * @param yp array of points' y co-ords
+        * @param c1x array of first control points' x co-ords
+        * @param c1y array of first control points' y co-ords
+        * @param c2x array of second control points' x co-ords
+        * @param c2y array of second control points' y co-ords
+        * @param np size of the points array
+        */
+       virtual void path(int const * xp, int const * yp,
+               int const * c1x, int const * c1y,
+               int const * c2x, int const * c2y,
+               int np, Color,
+               fill_style = fill_none, line_style = line_solid,
+               int line_width = thin_line);
 
        /// draw a rectangle
        virtual void rectangle(
@@ -64,7 +83,7 @@ public:
                int w, int h,
                Color,
                line_style = line_solid,
-               float lw = thin_line);
+               int lw = thin_line);
 
        /// draw a filled rectangle
        virtual void fillRectangle(
@@ -86,26 +105,39 @@ public:
        virtual void image(int x, int y, int w, int h,
                lyx::graphics::Image const & image);
 
-       /// draw a string at position x, y (y is the baseline)
-       virtual int text(int x, int y,
-               docstring const & str, FontInfo const & f);
+       /// draw a string at position x, y (y is the baseline).
+       virtual void text(int x, int y, docstring const & str, FontInfo const & f);
 
        /// draw a char at position x, y (y is the baseline)
-       virtual int text(int x, int y, char_type c, FontInfo const & f);
+       virtual void text(int x, int y, char_type c, FontInfo const & f);
+
+       /** draw a string at position x, y (y is the baseline). The
+        * text direction is enforced by the \c Font.
+        */
+       virtual void text(int x, int y, docstring const & str, Font const & f,
+                      double wordspacing, double textwidth);
+
+       /** draw a string at position x, y (y is the baseline), but
+        * make sure that the part between \c from and \c to is in
+        * \c other color. The text direction is enforced by the \c Font.
+        */
+       virtual void text(int x, int y, docstring const & str, Font const & f,
+                         Color other, size_type from, size_type to,
+                      double wordspacing, double textwidth);
 
        ///
        virtual void textDecoration(FontInfo const & f, int x, int y, int width);
 
        /// draw a string and enclose it inside a button frame
        virtual void buttonText(int x, int baseline, docstring const & s,
-               FontInfo const & font, bool mouseHover);
+               FontInfo const & font, Color back, Color frame, int offset);
 
        /// start monochrome painting mode, i.e. map every color into [min,max]
-       virtual void enterMonochromeMode(Color const & min, 
+       virtual void enterMonochromeMode(Color const & min,
                Color const & max);
        /// leave monochrome painting mode
        virtual void leaveMonochromeMode();
-       
+
        /**
         * Draw a string and enclose it inside a rectangle. If
         * back color is specified, the background is cleared with
@@ -115,9 +147,6 @@ public:
        virtual void rectText(int x, int baseline, docstring const & str,
                FontInfo const & font, Color back, Color frame);
 
-       /// draw a filled rectangle with the shape of a 3D button
-       virtual void button(int x, int y, int w, int h, bool mouseHover);
-
        /// draw a character of a preedit string for cjk support.
        virtual int preeditText(int x, int y,
                char_type c, FontInfo const & f, preedit_style style);
@@ -127,7 +156,7 @@ public:
 private:
        /// check the font, and if set, draw an underline
        void underline(FontInfo const & f,
-               int x, int y, int width);
+                      int x, int y, int width, line_style ls = line_solid);
 
        /// check the font, and if set, draw an dashed underline
        void dashedUnderline(FontInfo const & f,
@@ -137,27 +166,32 @@ private:
        void strikeoutLine(FontInfo const & f,
                int x, int y, int width);
 
+       /// check the font, and if set, draw cross-through lines
+       void crossoutLines(FontInfo const & f,
+               int x, int y, int width);
+
        /// check the font, and if set, draw double underline
        void doubleUnderline(FontInfo const & f,
                int x, int y, int width);
 
-       /// draw a bevelled button border
-       void buttonFrame(int x, int y, int w, int h);
-
-       /// draw small caps text
-       /**
-       \return width of the drawn text.
-       */
-       int smallCapsText(int x, int y,
-               QString const & str, FontInfo const & f);
-
        /// set pen parameters
        void setQPainterPen(QColor const & col,
-               line_style ls = line_solid, float lw = thin_line);
+               line_style ls = line_solid, int lw = thin_line);
+
+       // Direction for painting text
+       enum Direction { LtR, RtL, Auto };
+
+       // Helper for text() method
+       void do_drawText(int x, int y, QString str, Direction dir, FontInfo const & f, QFont ff);
+
+       // Real text() method
+       void text(int x, int y, docstring const & s,
+              FontInfo const & f, Direction const dir,
+              double const wordspacing, double tw);
 
        QColor current_color_;
        Painter::line_style current_ls_;
-       float current_lw_;
+       int current_lw_;
        ///
        bool const use_pixmap_cache_;
        ///
@@ -169,7 +203,8 @@ private:
        /// possibly apply monochrome mode
        QColor filterColor(QColor const & col);
        ///
-       QString generateStringSignature(QString const & str, FontInfo const & f);       
+       QString generateStringSignature(QString const & str, FontInfo const & f,
+                                       double wordspacing);
 };
 
 } // namespace frontend