Inkscape
Vector Graphics Editor
Loading...
Searching...
No Matches
paint-selector.h
Go to the documentation of this file.
1// SPDX-License-Identifier: GPL-2.0-or-later
/*
5 * Authors:
6 * Lauris Kaplinski
7 * bulia byak <buliabyak@users.sf.net>
8 * John Cliff <simarilius@yahoo.com>
9 * Jon A. Cruz <jon@joncruz.org>
10 * Abhishek Sharma
11 *
12 * Copyright (C) 2018 Authors
13 * Released under GNU GPL v2+, read the file 'COPYING' for more information.
14 */
15
16#ifndef SEEN_SP_PAINT_SELECTOR_H
17#define SEEN_SP_PAINT_SELECTOR_H
18
19#include <memory>
20#include <optional>
21#include <2geom/forward.h>
22#include <gtkmm/box.h>
23
24#include "colors/color-set.h"
25#include "fill-or-stroke.h"
31
32class SPGradient;
35#ifdef WITH_MESH
36class SPMeshGradient;
37#endif
38class SPDesktop;
39class SPPattern;
40class SPStyle;
41
42namespace Gtk {
43class Label;
44class ToggleButton;
45} // namespace Gtk
46
47namespace Inkscape::UI::Widget {
48
49class FillRuleRadioButton;
50class GradientEditor;
51class PatternEditor;
52class StyleToggleButton;
53
57class PaintSelector : public Gtk::Box {
58 public:
74
76
77 private:
78 bool _update = false;
79
81
82 Gtk::Box *_style;
83 StyleToggleButton *_none = nullptr;
84 StyleToggleButton *_solid;
85 StyleToggleButton *_gradient;
86 StyleToggleButton *_radial;
87#ifdef WITH_MESH
88 StyleToggleButton *_mesh;
89#endif
90 StyleToggleButton *_pattern;
91 StyleToggleButton *_swatch;
92 StyleToggleButton *_unset;
93
94 Gtk::Box *_fillrulebox;
95 FillRuleRadioButton *_evenodd;
96 FillRuleRadioButton *_nonzero;
97
98 Gtk::Box *_frame;
99
100 Gtk::Box *_selector_solid_color = nullptr;
102 Gtk::Box *_selector_mesh = nullptr;
105
106 Gtk::Label *_label;
107 GtkWidget *_patternmenu = nullptr;
109#ifdef WITH_MESH
110 GtkWidget *_meshmenu = nullptr;
111 bool _meshmenu_update = false;
112#endif
113
114 std::shared_ptr<Colors::ColorSet> _selected_colors;
115 bool _updating_color = false;
116
117 static gboolean isSeparator(GtkTreeModel *model, GtkTreeIter *iter, gpointer data);
118
119 private:
120 sigc::signal<void (FillRule)> _signal_fillrule_changed;
121 sigc::signal<void ()> _signal_dragged;
122 sigc::signal<void (Mode, bool)> _signal_mode_changed;
123 sigc::signal<void ()> _signal_grabbed;
124 sigc::signal<void ()> _signal_released;
125 sigc::signal<void ()> _signal_changed;
126 sigc::signal<void (SPStop*)> _signal_stop_selected;
127 sigc::signal<void ()> _signal_edit_pattern;
128
129 StyleToggleButton *style_button_add(gchar const *px, PaintSelector::Mode mode, gchar const *tip);
130 void style_button_toggled(StyleToggleButton *tb);
131 void fillrule_toggled(FillRuleRadioButton *tb);
135 void set_mode_empty();
136 void set_style_buttons(Gtk::ToggleButton *active);
137 void set_mode_multiple();
138 void set_mode_none();
140 void clear_frame();
141 void set_mode_unset();
142 void set_mode_color();
144#ifdef WITH_MESH
146#endif
150 void set_mode_ex(Mode mode, bool switch_style);
151
152 void gradient_grabbed();
153 void gradient_dragged();
154 void gradient_released();
156
157 static void mesh_change(GtkWidget *widget, PaintSelector *psel);
158 static void mesh_destroy(GtkWidget *widget, PaintSelector *psel);
159
160 static void pattern_change(GtkWidget *widget, PaintSelector *psel);
161 static void pattern_destroy(GtkWidget *widget, PaintSelector *psel);
162
163 public:
164 PaintSelector(FillOrStroke kind, std::shared_ptr<Colors::ColorSet> colors);
165
167 inline decltype(_signal_dragged) signal_dragged() const { return _signal_dragged; }
169 inline decltype(_signal_grabbed) signal_grabbed() const { return _signal_grabbed; }
170 inline decltype(_signal_released) signal_released() const { return _signal_released; }
171 inline decltype(_signal_changed) signal_changed() const { return _signal_changed; }
174
175 void setMode(Mode mode);
176 static Mode getModeForStyle(SPStyle const &style, FillOrStroke kind);
177 void setFillrule(FillRule fillrule);
178 void setSwatch(SPGradient *vector);
179 void setGradientLinear(SPGradient *vector, SPLinearGradient* gradient, SPStop* selected);
180 void setGradientRadial(SPGradient *vector, SPRadialGradient* gradient, SPStop* selected);
181#ifdef WITH_MESH
182 void setGradientMesh(SPMeshGradient *array);
183#endif
185 void getGradientProperties(SPGradientUnits &units, SPGradientSpread &spread) const;
186
187#ifdef WITH_MESH
190#endif
191
192 void updatePatternList(SPPattern *pat);
193 inline decltype(_mode) get_mode() const { return _mode; }
194
196 void pushAttrsToGradient(SPGradient *gr) const;
198 std::optional<Colors::Color> get_pattern_color();
202 Glib::ustring get_pattern_label();
204};
205
206enum {
212 COMBO_N_COLS = 4
214
215} // namespace Inkscape::UI::Widget
216
217#endif // SEEN_SP_PAINT_SELECTOR_H
218
219/*
220 Local Variables:
221 mode:c++
222 c-file-style:"stroustrup"
223 c-file-offsets:((innamespace . 0)(inline-open . 0)(case-label . +))
224 indent-tabs-mode:nil
225 fill-column:99
226 End:
227*/
228// vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=8:softtabstop=4:fileencoding=utf-8:textwidth=99 :
FillRule
Definition LivarotDefs.h:68
3x3 matrix representing an affine transformation.
Definition affine.h:70
Two-dimensional point that doubles as a vector.
Definition point.h:66
Scaling from the origin.
Definition transforms.h:150
Generic paint selector widget.
void setGradientRadial(SPGradient *vector, SPRadialGradient *gradient, SPStop *selected)
sigc::signal< void()> _signal_released
void updateMeshList(SPMeshGradient *pat)
std::shared_ptr< Colors::ColorSet > _selected_colors
void style_button_toggled(StyleToggleButton *tb)
sigc::signal< void(SPStop *)> _signal_stop_selected
void set_mode_hatch(PaintSelector::Mode mode)
void set_mode_pattern(PaintSelector::Mode mode)
void setGradientLinear(SPGradient *vector, SPLinearGradient *gradient, SPStop *selected)
sigc::signal< void()> _signal_grabbed
GradientSelectorInterface * getGradientFromData() const
void set_mode_ex(Mode mode, bool switch_style)
void set_mode_swatch(PaintSelector::Mode mode)
sigc::signal< void()> _signal_dragged
decltype(_signal_edit_pattern) signal_edit_pattern() const
decltype(_signal_grabbed) signal_grabbed() const
void setGradientProperties(SPGradientUnits units, SPGradientSpread spread)
void set_style_buttons(Gtk::ToggleButton *active)
decltype(_signal_stop_selected) signal_stop_selected() const
static gboolean isSeparator(GtkTreeModel *model, GtkTreeIter *iter, gpointer data)
void fillrule_toggled(FillRuleRadioButton *tb)
sigc::signal< void()> _signal_changed
void set_mode_gradient(PaintSelector::Mode mode)
std::optional< Colors::Color > get_pattern_color()
decltype(_signal_mode_changed) signal_mode_changed() const
decltype(_signal_released) signal_released() const
void set_mode_mesh(PaintSelector::Mode mode)
void setGradientMesh(SPMeshGradient *array)
void getGradientProperties(SPGradientUnits &units, SPGradientSpread &spread) const
sigc::signal< void(Mode, bool)> _signal_mode_changed
decltype(_signal_dragged) signal_dragged() const
decltype(_signal_fillrule_changed) signal_fillrule_changed() const
StyleToggleButton * style_button_add(gchar const *px, PaintSelector::Mode mode, gchar const *tip)
sigc::signal< void(FillRule)> _signal_fillrule_changed
sigc::signal< void()> _signal_edit_pattern
static void pattern_change(GtkWidget *widget, PaintSelector *psel)
decltype(_signal_changed) signal_changed() const
static void mesh_change(GtkWidget *widget, PaintSelector *psel)
void pushAttrsToGradient(SPGradient *gr) const
static void mesh_destroy(GtkWidget *widget, PaintSelector *psel)
static Mode getModeForStyle(SPStyle const &style, FillOrStroke kind)
static void pattern_destroy(GtkWidget *widget, PaintSelector *psel)
To do: update description of desktop.
Definition desktop.h:149
Gradient.
Definition sp-gradient.h:86
Linear gradient.
Mesh gradient.
Radial gradient.
Gradient stop.
Definition sp-stop.h:31
An SVG style object.
Definition style.h:45
A set of colors which can be modified together used for color pickers.
Definition of the FillOrStroke enum.
Contains forward declarations of 2geom types.
Gradient vector and position widget.
Definition desktop.h:50
Custom widgets.
Definition desktop.h:126
int mode
TODO: insert short description here.
SPGradientSpread
TODO: insert short description here.
SPGradientUnits
static const Point data[]
TODO: insert short description here.