Rapicorn - Experimental UI Toolkit - Source Code  13.07.0
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Defines
cairocontext.hh
Go to the documentation of this file.
00001  // Licensed GNU LGPL v3 or later: http://www.gnu.org/licenses/lgpl.html
00002 #ifndef __RAPICORN_CAIRO_CONTEXT_HH__
00003 #define __RAPICORN_CAIRO_CONTEXT_HH__
00004 
00005 #include <ui/painter.hh>
00006 #include <ui/primitives.hh>
00007 
00008 namespace Rapicorn {
00009 
00010 class CairoContext {
00011 #ifndef CAIRO_H
00012   typedef struct _cairo cairo_t;
00013 #endif
00014   void          set_cairo               (cairo_t *n_cr);
00015 protected:
00016   cairo_t      *cr;
00017   explicit      CairoContext            ();
00018 public:
00019   virtual      ~CairoContext            ();
00020   /* enums & constants */
00021   typedef enum {
00022     CAIRO_ANTIALIAS_NONE,
00023     CAIRO_ANTIALIAS_DEFAULT,
00024     CAIRO_ANTIALIAS_GRAY,
00025     CAIRO_ANTIALIAS_SUBPIXEL,
00026     NONE                        = CAIRO_ANTIALIAS_NONE,
00027     DEFAULT                     = CAIRO_ANTIALIAS_NONE,
00028     GRAY                        = CAIRO_ANTIALIAS_GRAY,
00029     SUBPIXEL                    = CAIRO_ANTIALIAS_SUBPIXEL,
00030   } Antialias;
00031   typedef enum {
00032     CAIRO_FILL_RULE_WINDING,
00033     CAIRO_FILL_RULE_EVEN_ODD,
00034     WINDING                     = CAIRO_FILL_RULE_WINDING,
00035     EVEN_ODD                    = CAIRO_FILL_RULE_EVEN_ODD,
00036   } FillRule;
00037   typedef enum {
00038     CAIRO_LINE_CAP_BUTT,
00039     CAIRO_LINE_CAP_ROUND,
00040     CAIRO_LINE_CAP_SQUARE,
00041     BUTT                        = CAIRO_LINE_CAP_BUTT,
00042     // ROUND                    = CAIRO_LINE_CAP_ROUND,
00043     SQUARE                      = CAIRO_LINE_CAP_SQUARE,
00044   } LineCap;
00045   typedef enum {
00046     CAIRO_LINE_JOIN_MITER,
00047     CAIRO_LINE_JOIN_ROUND,
00048     CAIRO_LINE_JOIN_BEVEL,
00049     MITER                       = CAIRO_LINE_JOIN_MITER,
00050     // ROUND                    = CAIRO_LINE_JOIN_ROUND,
00051     BEVEL                       = CAIRO_LINE_JOIN_BEVEL,
00052   } LineJoin;
00053   typedef enum { ROUND } _Round; /* conflicting enums */
00054   void          save                    ();
00055   void          restore                 ();
00056   void          set_tolerance           (double    tolerance);
00057   void          set_antialias           (Antialias antialias = CAIRO_ANTIALIAS_DEFAULT);
00058   void          set_fill_rule           (FillRule  fill_rule);
00059   void          set_line_width          (double    width);
00060   void          set_line_cap            (LineCap   line_cap);
00061   void          set_line_cap            (_Round    round)       { set_line_cap (CAIRO_LINE_CAP_ROUND); }
00062   void          set_line_join           (LineJoin  line_join);
00063   void          set_line_join           (_Round    round)       { set_line_join (CAIRO_LINE_JOIN_ROUND); }
00064   void          set_miter_limit         (double    limit);
00065   void          set_dash                (double   *dashes,
00066                                          int       num_dashes,
00067                                          double    offset);
00068   void          set_source_color        (Color     color);
00069   void          translate               (double x,  double y);
00070   void          new_path                ();
00071   void          move_to                 (double x,  double y);
00072   void          line_to                 (double x,  double y);
00073   void          rel_move_to             (double x,  double y);
00074   void          rel_line_to             (double x,  double y);
00075   void          rectangle               (double x, double y, double width, double height);
00076   void          curve_to                (double x1, double y1,
00077                                          double x2, double y2,
00078                                          double x3, double y3);
00079   void          arc                     (double xc, double yc, double radius,
00080                                          double angle1, double angle2);
00081   void          arc_negative            (double xc, double yc, double radius,
00082                                          double angle1, double angle2);
00083   void          close_path              ();
00084   void          paint                   ();
00085   void          stroke                  ();
00086   void          stroke_preserve         ();
00087   void          fill                    ();
00088   void          fill_preserve           ();
00089   static CairoContext*
00090   cairo_context_from_plane (Plane &plane);
00091 };
00092 
00093 class CairoPainter : virtual public Painter {
00094   CairoContext &cc;
00095 public:
00096   explicit      CairoPainter            (Plane &plane);
00097   virtual       ~CairoPainter           ();
00098   void          draw_arrow              (double x, double y, double width, double height, Color c, double angle);
00099   void          draw_dir_arrow          (double x, double y, double width, double height, Color c, DirType dir);
00100   void          draw_dot                (double x, double y, double width, double height, Color c1, Color c2, FrameType frame);
00101 };
00102 
00103 } // Rapicorn
00104 
00105 #endif  /* __RAPICORN_CAIRO_CONTEXT_HH__ */
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Defines