1 #ifndef SEEN_SP_PAINT_SELECTOR_H
2 #define SEEN_SP_PAINT_SELECTOR_H
4 /** \file
5 * Generic paint selector widget
6 *
7 * Authors:
8 * Lauris
9 * Jon A. Cruz <jon@joncruz.org>
10 *
11 * Copyright (C) Lauris 2002
12 * Copyright (C) 2010 Authors
13 *
14 */
16 #include <glib.h>
17 #include "sp-gradient-spread.h"
18 #include "sp-gradient-units.h"
20 class SPGradient;
22 #define SP_TYPE_PAINT_SELECTOR (sp_paint_selector_get_type ())
23 #define SP_PAINT_SELECTOR(o) (GTK_CHECK_CAST ((o), SP_TYPE_PAINT_SELECTOR, SPPaintSelector))
24 #define SP_PAINT_SELECTOR_CLASS(k) (GTK_CHECK_CLASS_CAST ((k), SP_TYPE_PAINT_SELECTOR, SPPaintSelectorClass))
25 #define SP_IS_PAINT_SELECTOR(o) (GTK_CHECK_TYPE ((o), SP_TYPE_PAINT_SELECTOR))
26 #define SP_IS_PAINT_SELECTOR_CLASS(k) (GTK_CHECK_CLASS_TYPE ((k), SP_TYPE_PAINT_SELECTOR))
28 #include <gtk/gtkvbox.h>
30 #include "../forward.h"
31 #include <color.h>
32 #include <libnr/nr-forward.h>
34 typedef enum {
35 SP_PAINT_SELECTOR_MODE_EMPTY,
36 SP_PAINT_SELECTOR_MODE_MULTIPLE,
37 SP_PAINT_SELECTOR_MODE_NONE,
38 SP_PAINT_SELECTOR_MODE_COLOR_RGB,
39 SP_PAINT_SELECTOR_MODE_COLOR_CMYK,
40 SP_PAINT_SELECTOR_MODE_GRADIENT_LINEAR,
41 SP_PAINT_SELECTOR_MODE_GRADIENT_RADIAL,
42 SP_PAINT_SELECTOR_MODE_PATTERN,
43 SP_PAINT_SELECTOR_MODE_SWATCH,
44 SP_PAINT_SELECTOR_MODE_UNSET
45 } SPPaintSelectorMode;
47 typedef enum {
48 SP_PAINT_SELECTOR_FILLRULE_NONZERO,
49 SP_PAINT_SELECTOR_FILLRULE_EVENODD
50 } SPPaintSelectorFillRule;
52 /// Generic paint selector widget
53 struct SPPaintSelector {
54 GtkVBox vbox;
56 guint update : 1;
58 SPPaintSelectorMode mode;
60 GtkWidget *style;
61 GtkWidget *none;
62 GtkWidget *solid;
63 GtkWidget *gradient;
64 GtkWidget *radial;
65 GtkWidget *pattern;
66 GtkWidget *swatch;
67 GtkWidget *unset;
69 GtkWidget *fillrulebox;
70 GtkWidget *evenodd, *nonzero;
72 GtkWidget *frame, *selector;
74 SPColor color;
75 float alpha;
78 void setMode( SPPaintSelectorMode mode );
79 void setFillrule( SPPaintSelectorFillRule fillrule );
81 void setColorAlpha( SPColor const &color, float alpha );
82 void getColorAlpha( SPColor &color, gfloat &alpha ) const;
84 void setGradientLinear( SPGradient *vector );
85 void setGradientRadial( SPGradient *vector );
86 void setSwatch( SPGradient *vector );
88 void setGradientProperties( SPGradientUnits units, SPGradientSpread spread );
89 void getGradientProperties( SPGradientUnits &units, SPGradientSpread &spread ) const;
91 void pushAttrsToGradient( SPGradient *gr ) const;
92 SPGradient *getGradientVector();
93 SPPattern * getPattern();
94 void updatePatternList( SPPattern *pat );
96 // TODO move this elsewhere:
97 void setFlatColor( SPDesktop *desktop, const gchar *color_property, const gchar *opacity_property );
98 };
100 /// The SPPaintSelector vtable
101 struct SPPaintSelectorClass {
102 GtkVBoxClass parent_class;
104 void (* mode_changed) (SPPaintSelector *psel, SPPaintSelectorMode mode);
106 void (* grabbed) (SPPaintSelector *psel);
107 void (* dragged) (SPPaintSelector *psel);
108 void (* released) (SPPaintSelector *psel);
109 void (* changed) (SPPaintSelector *psel);
110 void (* fillrule_changed) (SPPaintSelector *psel, SPPaintSelectorFillRule fillrule);
111 };
113 GtkType sp_paint_selector_get_type (void);
115 GtkWidget *sp_paint_selector_new (bool is_fill);
119 SPPaintSelectorMode sp_style_determine_paint_selector_mode (SPStyle *style, bool isfill);
121 #endif // SEEN_SP_PAINT_SELECTOR_H
123 /*
124 Local Variables:
125 mode:c++
126 c-file-style:"stroustrup"
127 c-file-offsets:((innamespace . 0)(inline-open . 0)(case-label . +))
128 indent-tabs-mode:nil
129 fill-column:99
130 End:
131 */
132 // vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=8:softtabstop=4:encoding=utf-8:textwidth=99 :