fix crash when copy'ing latent plugins
[ardour.git] / libs / clearlooks-newer / cairo-support.h
1 /* Helpful functions when dealing with cairo in gtk engines */
2
3 #include <gtk/gtk.h>
4 #include <math.h>
5
6 typedef struct
7 {
8         gdouble r;
9         gdouble g;
10         gdouble b;
11         gdouble a;
12 } CairoColor;
13
14 typedef struct
15 {
16         CairoColor bg[5];
17         CairoColor fg[5];
18
19         CairoColor dark[5];
20         CairoColor light[5];
21         CairoColor mid[5];
22
23         CairoColor base[5];
24         CairoColor text[5];
25         CairoColor text_aa[5];
26
27         CairoColor black;
28         CairoColor white;
29 } CairoColorCube;
30
31 typedef enum
32 {
33         CR_CORNER_NONE        = 0,
34         CR_CORNER_TOPLEFT     = 1,
35         CR_CORNER_TOPRIGHT    = 2,
36         CR_CORNER_BOTTOMLEFT  = 4,
37         CR_CORNER_BOTTOMRIGHT = 8,
38         CR_CORNER_ALL         = 15
39 } CairoCorners;
40
41 typedef enum
42 {
43         CR_MIRROR_NONE       = 0,
44         CR_MIRROR_HORIZONTAL = 1 << 0,
45         CR_MIRROR_VERTICAL   = 1 << 1
46 } CairoMirror;
47
48 /*****************************/
49 /* Pattern Fills             */
50 /*****************************/
51 typedef enum {
52         GE_DIRECTION_VERTICAL,
53         GE_DIRECTION_HORIZONTAL,
54         GE_DIRECTION_BOTH,
55         GE_DIRECTION_NONE
56 } GeDirection;
57
58 #if  ((CAIRO_VERSION_MAJOR < 1) || ((CAIRO_VERSION_MAJOR == 1) && (CAIRO_VERSION_MINOR < 2)))
59 typedef enum _cairo_pattern_type {
60     CAIRO_PATTERN_TYPE_SOLID,
61     CAIRO_PATTERN_TYPE_SURFACE,
62     CAIRO_PATTERN_TYPE_LINEAR,
63     CAIRO_PATTERN_TYPE_RADIAL
64 } cairo_pattern_type_t;
65
66 #       define CAIRO_PATTERN_TYPE(pattern) pattern->type;
67 #else
68 #       define CAIRO_PATTERN_TYPE(pattern) cairo_pattern_get_type (pattern->handle);
69 #endif
70
71 typedef struct
72 {
73 #if  ((CAIRO_VERSION_MAJOR < 1) || ((CAIRO_VERSION_MAJOR == 1) && (CAIRO_VERSION_MINOR < 2)))
74         cairo_pattern_type_t type;
75 #endif
76         GeDirection scale;
77         GeDirection translate;
78
79         cairo_pattern_t *handle;
80         cairo_operator_t operator;
81 } CairoPattern;
82
83 GE_INTERNAL void ge_hsb_from_color (const CairoColor *color, gdouble *hue, gdouble *saturation, gdouble *brightness);
84 GE_INTERNAL void ge_color_from_hsb (gdouble hue, gdouble saturation, gdouble brightness, CairoColor *color);
85
86 GE_INTERNAL void ge_gdk_color_to_cairo (const GdkColor * gc, CairoColor * cc);
87 GE_INTERNAL void ge_cairo_color_to_gtk (const CairoColor *cc, GdkColor *c);
88 GE_INTERNAL void ge_gtk_style_to_cairo_color_cube (GtkStyle * style, CairoColorCube *cube);
89
90 GE_INTERNAL void ge_shade_color(const CairoColor *base, gdouble shade_ratio, CairoColor *composite);
91 GE_INTERNAL void ge_saturate_color (const CairoColor * base, gdouble saturate_level, CairoColor *composite);
92 GE_INTERNAL void ge_mix_color (const CairoColor *color1, const CairoColor *color2, gdouble mix_factor, CairoColor *composite);
93
94 GE_INTERNAL cairo_t * ge_gdk_drawable_to_cairo (GdkDrawable  *window, GdkRectangle *area);
95 GE_INTERNAL void ge_cairo_set_color (cairo_t *cr, const CairoColor *color);
96 GE_INTERNAL void ge_cairo_set_gdk_color_with_alpha (cairo_t *cr, const GdkColor *color, gdouble alpha);
97 GE_INTERNAL void ge_cairo_pattern_add_color_stop_color (cairo_pattern_t *pattern, gfloat offset, const CairoColor *color);
98 GE_INTERNAL void ge_cairo_pattern_add_color_stop_shade (cairo_pattern_t *pattern, gdouble offset, const CairoColor *color, gdouble shade);
99
100 GE_INTERNAL void ge_cairo_rounded_corner (cairo_t *cr, double x, double y, double radius, CairoCorners corner);
101 GE_INTERNAL void ge_cairo_rounded_rectangle (cairo_t *cr, double x, double y, double w, double h, double radius, CairoCorners corners);
102
103 GE_INTERNAL void ge_cairo_stroke_rectangle (cairo_t *cr, double x, double y, double w, double h);
104 GE_INTERNAL void ge_cairo_simple_border (cairo_t *cr, const CairoColor * tl, const CairoColor * br, gint x, gint y, gint width, gint height, gboolean topleft_overlap);
105
106 GE_INTERNAL void ge_cairo_line (cairo_t *cr, const CairoColor *color, gint x1, gint y1, gint x2, gint y2);
107 GE_INTERNAL void ge_cairo_polygon (cairo_t *cr, const CairoColor *color, GdkPoint *points, gint npoints);
108
109 GE_INTERNAL void ge_cairo_mirror (cairo_t *cr, CairoMirror mirror, gint *x, gint *y, gint *width, gint *height);
110 GE_INTERNAL void ge_cairo_exchange_axis (cairo_t *cr, gint *x, gint *y, gint *width, gint *height);
111
112 GE_INTERNAL void ge_cairo_pattern_fill(cairo_t *canvas, CairoPattern *pattern, gint x, gint y, gint width, gint height);
113
114 GE_INTERNAL CairoPattern *ge_cairo_color_pattern(CairoColor *base);
115 GE_INTERNAL CairoPattern *ge_cairo_pixbuf_pattern(GdkPixbuf *pixbuf);
116 GE_INTERNAL CairoPattern *ge_cairo_pixmap_pattern(GdkPixmap *pixmap);
117 GE_INTERNAL CairoPattern *ge_cairo_linear_shade_gradient_pattern(CairoColor *base, gdouble shade1, gdouble shade2, gboolean vertical);
118 GE_INTERNAL void ge_cairo_pattern_destroy(CairoPattern *pattern);