Rapicorn - Experimental UI Toolkit - Source Code
13.07.0
|
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__ */