Code

Refactoring of 3D box tool, mainly to avoid unnecessary creation of perspectives.
[inkscape.git] / src / widgets / paint-selector.h
1 #ifndef __SP_PAINT_SELECTOR_H__
2 #define __SP_PAINT_SELECTOR_H__
4 /** \file
5  * Generic paint selector widget
6  *
7  * Copyright (C) Lauris 2002
8  *
9  */
11 #include <glib.h>
12 #include "sp-gradient-spread.h"
13 #include "sp-gradient-units.h"
14 class SPGradient;
16 #define SP_TYPE_PAINT_SELECTOR (sp_paint_selector_get_type ())
17 #define SP_PAINT_SELECTOR(o) (GTK_CHECK_CAST ((o), SP_TYPE_PAINT_SELECTOR, SPPaintSelector))
18 #define SP_PAINT_SELECTOR_CLASS(k) (GTK_CHECK_CLASS_CAST ((k), SP_TYPE_PAINT_SELECTOR, SPPaintSelectorClass))
19 #define SP_IS_PAINT_SELECTOR(o) (GTK_CHECK_TYPE ((o), SP_TYPE_PAINT_SELECTOR))
20 #define SP_IS_PAINT_SELECTOR_CLASS(k) (GTK_CHECK_CLASS_TYPE ((k), SP_TYPE_PAINT_SELECTOR))
22 #include <gtk/gtkvbox.h>
24 #include "../forward.h"
25 #include <color.h>
26 #include <libnr/nr-forward.h>
28 typedef enum {
29         SP_PAINT_SELECTOR_MODE_EMPTY,
30         SP_PAINT_SELECTOR_MODE_MULTIPLE,
31         SP_PAINT_SELECTOR_MODE_NONE,
32         SP_PAINT_SELECTOR_MODE_COLOR_RGB,
33         SP_PAINT_SELECTOR_MODE_COLOR_CMYK,
34         SP_PAINT_SELECTOR_MODE_GRADIENT_LINEAR,
35     SP_PAINT_SELECTOR_MODE_GRADIENT_RADIAL,
36     SP_PAINT_SELECTOR_MODE_PATTERN,
37     SP_PAINT_SELECTOR_MODE_UNSET
38 } SPPaintSelectorMode;
40 typedef enum {
41         SP_PAINT_SELECTOR_FILLRULE_NONZERO,
42         SP_PAINT_SELECTOR_FILLRULE_EVENODD
43 } SPPaintSelectorFillRule;
45 /// Generic paint selector widget
46 struct SPPaintSelector {
47         GtkVBox vbox;
49         guint update : 1;
51         SPPaintSelectorMode mode;
53         GtkWidget *style;
54         GtkWidget *none, *solid, *gradient, *radial, *pattern, *unset;
56         GtkWidget *fillrulebox;
57         GtkWidget *evenodd, *nonzero;
59         GtkWidget *frame, *selector;
61         SPColor color;
62         float alpha;
63 };
65 /// The SPPaintSelector vtable
66 struct SPPaintSelectorClass {
67         GtkVBoxClass parent_class;
69         void (* mode_changed) (SPPaintSelector *psel, SPPaintSelectorMode mode);
71         void (* grabbed) (SPPaintSelector *psel);
72         void (* dragged) (SPPaintSelector *psel);
73         void (* released) (SPPaintSelector *psel);
74         void (* changed) (SPPaintSelector *psel);
75         void (* fillrule_changed) (SPPaintSelector *psel, SPPaintSelectorFillRule fillrule);
76 };
78 GtkType sp_paint_selector_get_type (void);
80 GtkWidget *sp_paint_selector_new (bool is_fill);
82 void sp_paint_selector_set_mode (SPPaintSelector *psel, SPPaintSelectorMode mode);
83 void sp_paint_selector_set_fillrule (SPPaintSelector *psel, SPPaintSelectorFillRule fillrule);
85 void sp_paint_selector_set_color_alpha (SPPaintSelector *psel, const SPColor *color, float alpha);
87 void sp_paint_selector_set_gradient_linear (SPPaintSelector *psel, SPGradient *vector);
89 void sp_paint_selector_set_gradient_radial (SPPaintSelector *psel, SPGradient *vector);
91 void sp_paint_selector_set_gradient_properties (SPPaintSelector *psel, SPGradientUnits units, SPGradientSpread spread);
92 void sp_paint_selector_get_gradient_properties (SPPaintSelector *psel, SPGradientUnits *units, SPGradientSpread *spread);
94 void sp_gradient_selector_attrs_to_gradient (SPGradient *gr, SPPaintSelector *psel);
96 void sp_paint_selector_get_color_alpha (SPPaintSelector *psel, SPColor *color, gfloat *alpha);
98 SPGradient *sp_paint_selector_get_gradient_vector (SPPaintSelector *psel);
100 void sp_paint_selector_system_color_set (SPPaintSelector *psel, const SPColor *color, float opacity);
102 SPPattern * sp_paint_selector_get_pattern (SPPaintSelector *psel);
104 void sp_update_pattern_list ( SPPaintSelector *psel, SPPattern *pat);
106 void sp_paint_selector_set_flat_color (SPPaintSelector *psel, SPDesktop *desktop, const gchar *color_property, const gchar *opacity_property);
108 SPPaintSelectorMode sp_style_determine_paint_selector_mode (SPStyle *style, bool isfill);
110 #endif