Code

Use subdirectories with icon sizes.
[inkscape.git] / src / widgets / paint-selector.h
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>
18 #include "fill-or-stroke.h"
19 #include "sp-gradient-spread.h"
20 #include "sp-gradient-units.h"
22 class SPGradient;
24 #define SP_TYPE_PAINT_SELECTOR (sp_paint_selector_get_type ())
25 #define SP_PAINT_SELECTOR(o) (GTK_CHECK_CAST ((o), SP_TYPE_PAINT_SELECTOR, SPPaintSelector))
26 #define SP_PAINT_SELECTOR_CLASS(k) (GTK_CHECK_CLASS_CAST ((k), SP_TYPE_PAINT_SELECTOR, SPPaintSelectorClass))
27 #define SP_IS_PAINT_SELECTOR(o) (GTK_CHECK_TYPE ((o), SP_TYPE_PAINT_SELECTOR))
28 #define SP_IS_PAINT_SELECTOR_CLASS(k) (GTK_CHECK_CLASS_TYPE ((k), SP_TYPE_PAINT_SELECTOR))
30 #include <gtk/gtkvbox.h>
32 #include "../forward.h"
33 #include <color.h>
34 #include <libnr/nr-forward.h>
37 /// Generic paint selector widget
38 struct SPPaintSelector {
39     GtkVBox vbox;
41     enum Mode {
42         MODE_EMPTY,
43         MODE_MULTIPLE,
44         MODE_NONE,
45         MODE_COLOR_RGB,
46         MODE_COLOR_CMYK,
47         MODE_GRADIENT_LINEAR,
48         MODE_GRADIENT_RADIAL,
49         MODE_PATTERN,
50         MODE_SWATCH,
51         MODE_UNSET
52     } ;
54     enum FillRule {
55         FILLRULE_NONZERO,
56         FILLRULE_EVENODD
57     } ;
59     guint update : 1;
61     Mode mode;
63     GtkWidget *style;
64     GtkWidget *none;
65     GtkWidget *solid;
66     GtkWidget *gradient;
67     GtkWidget *radial;
68     GtkWidget *pattern;
69     GtkWidget *swatch;
70     GtkWidget *unset;
72     GtkWidget *fillrulebox;
73     GtkWidget *evenodd, *nonzero;
75     GtkWidget *frame, *selector;
77     SPColor color;
78     float alpha;
80     static Mode getModeForStyle(SPStyle const & style, FillOrStroke kind);
82     void setMode( Mode mode );
83     void setFillrule( FillRule fillrule );
85     void setColorAlpha( SPColor const &color, float alpha );
86     void getColorAlpha( SPColor &color, gfloat &alpha ) const;
88     void setGradientLinear( SPGradient *vector );
89     void setGradientRadial( SPGradient *vector );
90     void setSwatch( SPGradient *vector );
92     void setGradientProperties( SPGradientUnits units, SPGradientSpread spread );
93     void getGradientProperties( SPGradientUnits &units, SPGradientSpread &spread ) const;
95     void pushAttrsToGradient( SPGradient *gr ) const;
96     SPGradient *getGradientVector();
97     SPPattern * getPattern();
98     void updatePatternList( SPPattern *pat );
100     // TODO move this elsewhere:
101     void setFlatColor( SPDesktop *desktop, const gchar *color_property, const gchar *opacity_property );
102 };
104 /// The SPPaintSelector vtable
105 struct SPPaintSelectorClass {
106     GtkVBoxClass parent_class;
108     void (* mode_changed) (SPPaintSelector *psel, SPPaintSelector::Mode mode);
110     void (* grabbed) (SPPaintSelector *psel);
111     void (* dragged) (SPPaintSelector *psel);
112     void (* released) (SPPaintSelector *psel);
113     void (* changed) (SPPaintSelector *psel);
114     void (* fillrule_changed) (SPPaintSelector *psel, SPPaintSelector::FillRule fillrule);
115 };
117 GtkType sp_paint_selector_get_type (void);
119 SPPaintSelector *sp_paint_selector_new(FillOrStroke kind);
123 #endif // SEEN_SP_PAINT_SELECTOR_H
125 /*
126   Local Variables:
127   mode:c++
128   c-file-style:"stroustrup"
129   c-file-offsets:((innamespace . 0)(inline-open . 0)(case-label . +))
130   indent-tabs-mode:nil
131   fill-column:99
132   End:
133 */
134 // vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=8:softtabstop=4:fileencoding=utf-8:textwidth=99 :