]> git.lyx.org Git - lyx.git/blobdiff - src/frontends/Painter.h
Improved input method support by M. Iwami. I fixed some typo, and simplified the...
[lyx.git] / src / frontends / Painter.h
index eb00a3e195c4ad6bf615a20476797d59e5ddb77b..0ac00c4715a5c5296f8f79ee3c4b12ff885417d4 100644 (file)
@@ -7,24 +7,22 @@
  * \author unknown
  * \author John Levon
  *
  * \author unknown
  * \author John Levon
  *
- * Full author contact details are available in file CREDITS
+ * Full author contact details are available in file CREDITS.
  */
 
 #ifndef PAINTER_H
 #define PAINTER_H
 
  */
 
 #ifndef PAINTER_H
 #define PAINTER_H
 
-#ifdef __GNUG__
-#pragma interface
-#endif
+#include "support/docstring.h"
 
 
-#include "LString.h"
-#include "LColor.h"
+namespace lyx {
 
 
+class LColor_color;
 class LyXFont;
 
 class LyXFont;
 
-namespace grfx {
-       class Image;
-}
+namespace graphics { class Image; }
+
+namespace frontend {
 
 /**
  * Painter - A painter class to encapsulate all graphics parameters and operations
 
 /**
  * Painter - A painter class to encapsulate all graphics parameters and operations
@@ -45,9 +43,17 @@ namespace grfx {
  * management.
  *
  * Note that the methods return *this for convenience.
  * management.
  *
  * Note that the methods return *this for convenience.
+ *
+ * Caution: All char_type and docstring arguments of the text drawing
+ * methods of this class are no UCS4 chars or strings if the font is a
+ * symbol font. They simply denote the code points of the font instead.
+ * You have to keep this in mind when you implement the methods in a
+ * frontend. You must not pass these parameters to a unicode conversion
+ * function in particular.
  */
 class Painter {
 public:
  */
 class Painter {
 public:
+       Painter(): drawing_enabled_(true) {}
        /// possible line widths
        enum line_width {
                line_thin, //< thin line
        /// possible line widths
        enum line_width {
                line_thin, //< thin line
@@ -60,24 +66,21 @@ public:
                line_onoffdash //< dashes with spaces
        };
 
                line_onoffdash //< dashes with spaces
        };
 
-       virtual ~Painter() {}
-
-       /// begin painting
-       virtual void start() {}
-
-       /// end painting
-       virtual void end() {}
+       /// possible character styles of preedit string.
+       /// This is used for CJK input method support.
+       enum preedit_style {
+               preedit_default, //< when unselecting, no cursor and dashed underline.
+               preedit_selecting, //< when selecting.
+               preedit_cursor //< with cursor.
+       };
 
 
-       /// return the width of the work area in pixels
-       virtual int paperWidth() const = 0;
-       /// return the height of the work area in pixels
-       virtual int paperHeight() const = 0;
+       virtual ~Painter() {}
 
        /// draw a line from point to point
 
        /// draw a line from point to point
-       virtual Painter & line(
+       virtual void line(
                int x1, int y1,
                int x2, int y2,
                int x1, int y1,
                int x2, int y2,
-               LColor::color = LColor::foreground,
+               LColor_color,
                line_style = line_solid,
                line_width = line_thin) = 0;
 
                line_style = line_solid,
                line_width = line_thin) = 0;
 
@@ -87,71 +90,64 @@ public:
         * @param yp array of points' y co-ords
         * @param np size of the points array
         */
         * @param yp array of points' y co-ords
         * @param np size of the points array
         */
-       virtual Painter & lines(
+       virtual void lines(
                int const * xp,
                int const * yp,
                int np,
                int const * xp,
                int const * yp,
                int np,
-               LColor::color = LColor::foreground,
+               LColor_color,
                line_style = line_solid,
                line_width = line_thin) = 0;
 
        /// draw a rectangle
                line_style = line_solid,
                line_width = line_thin) = 0;
 
        /// draw a rectangle
-       virtual Painter & rectangle(
+       virtual void rectangle(
                int x, int y,
                int w, int h,
                int x, int y,
                int w, int h,
-               LColor::color = LColor::foreground,
+               LColor_color,
                line_style = line_solid,
                line_width = line_thin) = 0;
 
        /// draw a filled rectangle
                line_style = line_solid,
                line_width = line_thin) = 0;
 
        /// draw a filled rectangle
-       virtual Painter & fillRectangle(
+       virtual void fillRectangle(
                int x, int y,
                int w, int h,
                int x, int y,
                int w, int h,
-               LColor::color) = 0;
-
-       /// draw a filled (irregular) polygon
-       virtual Painter & fillPolygon(
-               int const * xp,
-               int const * yp,
-               int np,
-               LColor::color = LColor::foreground) = 0;
+               LColor_color) = 0;
 
        /// draw an arc
 
        /// draw an arc
-       virtual Painter & arc(
+       virtual void arc(
                int x, int y,
                unsigned int w, unsigned int h,
                int a1, int a2,
                int x, int y,
                unsigned int w, unsigned int h,
                int a1, int a2,
-               LColor::color = LColor::foreground) = 0;
+               LColor_color) = 0;
 
        /// draw a pixel
 
        /// draw a pixel
-       virtual Painter & point(
+       virtual void point(
                int x, int y,
                int x, int y,
-               LColor::color = LColor::foreground) = 0;
+               LColor_color) = 0;
 
        /// draw a filled rectangle with the shape of a 3D button
 
        /// draw a filled rectangle with the shape of a 3D button
-       virtual Painter & button(int x, int y,
-               int w, int h);
+       virtual void button(int x, int y,
+               int w, int h, bool mouseHover);
 
        /// draw an image from the image cache
 
        /// draw an image from the image cache
-       virtual Painter & image(int x, int y,
+       virtual void image(int x, int y,
                int w, int h,
                int w, int h,
-               grfx::Image const & image) = 0;
+               graphics::Image const & image) = 0;
 
        /// draw a string at position x, y (y is the baseline)
 
        /// draw a string at position x, y (y is the baseline)
-       virtual Painter & text(int x, int y,
-               string const & str, LyXFont const & f) = 0;
-
        /**
        /**
-        * Draw a string at position x, y (y is the baseline)
-        * This is just for fast drawing
-        */
-       virtual Painter & text(int x, int y,
-               char const * str, size_t l,
-               LyXFont const & f) = 0;
+       * \return the width of the drawn text.
+       */
+       virtual int text(int x, int y,
+               docstring const & str, LyXFont const & f) = 0;
+
+       void setDrawingEnabled(bool drawing_enabled = true)
+       { drawing_enabled_ = drawing_enabled; }
 
        /// draw a char at position x, y (y is the baseline)
 
        /// draw a char at position x, y (y is the baseline)
-       virtual Painter & text(int x, int y,
-               char c, LyXFont const & f) = 0;
+       /**
+       * \return the width of the drawn text.
+       */
+       virtual int text(int x, int y, char_type c, LyXFont const & f) = 0;
 
        /**
         * Draw a string and enclose it inside a rectangle. If
 
        /**
         * Draw a string and enclose it inside a rectangle. If
@@ -159,24 +155,41 @@ public:
         * the given color. If frame is specified, a thin frame is drawn
         * around the text with the given color.
         */
         * the given color. If frame is specified, a thin frame is drawn
         * around the text with the given color.
         */
-       Painter & rectText(int x, int baseline,
-               string const & string,
+       void rectText(int x, int baseline,
+               docstring const & str,
                LyXFont const & font,
                LyXFont const & font,
-               LColor::color back = LColor::none,
-               LColor::color frame = LColor::none);
+               LColor_color back,
+               LColor_color frame);
 
        /// draw a string and enclose it inside a button frame
 
        /// draw a string and enclose it inside a button frame
-       Painter & buttonText(int x,
-               int baseline, string const & s,
-               LyXFont const & font);
+       void buttonText(int x, int baseline, docstring const & s,
+               LyXFont const & font, bool mouseHover);
+
+       /// draw a character of a preedit string for cjk support.
+       int preeditText(int x, int y,
+               char_type c, LyXFont const & f, preedit_style style);
 
 protected:
        /// check the font, and if set, draw an underline
        void underline(LyXFont const & f,
                int x, int y, int width);
 
 
 protected:
        /// check the font, and if set, draw an underline
        void underline(LyXFont const & f,
                int x, int y, int width);
 
+       /// check the font, and if set, draw an dashed underline
+       void dashedUnderline(LyXFont const & f,
+               int x, int y, int width);
+
        /// draw a bevelled button border
        /// draw a bevelled button border
-       Painter & buttonFrame(int x, int y, int w, int h);
+       void buttonFrame(int x, int y, int w, int h);
+
+       /// Indicate wether real screen drawing shall be done or not.
+       bool isDrawingEnabled() const { return drawing_enabled_; }
+
+private:
+       ///
+       bool drawing_enabled_;
 };
 
 };
 
+} // namespace frontend
+} // namespace lyx
+
 #endif // PAINTER_H
 #endif // PAINTER_H