Inkscape
Vector Graphics Editor
gradient-selector.h
Go to the documentation of this file.
1// SPDX-License-Identifier: GPL-2.0-or-later
5/* Authors:
6 * Lauris Kaplinski <lauris@kaplinski.com>
7 * bulia byak <buliabyak@users.sf.net>
8 * Jon A. Cruz <jon@joncruz.org>
9 *
10 * Copyright (C) 2001-2002 Lauris Kaplinski
11 * Copyright (C) 2001 Ximian, Inc.
12 * Copyright (C) 2010 Jon A. Cruz
13 *
14 * Released under GNU GPL v2+, read the file 'COPYING' for more information.
15 */
16
17#ifndef SEEN_GRADIENT_SELECTOR_H
18#define SEEN_GRADIENT_SELECTOR_H
19
20#include <vector>
21#include <glibmm/refptr.h>
22#include <gtkmm/box.h>
23#include <gtkmm/treemodel.h>
24#include <sigc++/signal.h>
25
29
30class SPDocument;
31class SPGradient;
32
33namespace Gtk {
34class Button;
35class CellRendererPixbuf;
36class CellRendererText;
37class ListStore;
38class ScrolledWindow;
39class TreeView;
40} // namespace Gtk
41
42namespace Inkscape::UI::Widget {
43
44class GradientVectorSelector;
45
47 : public Gtk::Box
49{
50public:
51 class ModelColumns final : public Gtk::TreeModel::ColumnRecord {
52 public:
54 {
55 add(name);
57 add(color);
58 add(data);
59 add(pixbuf);
60 }
61 ~ModelColumns() override = default;
62
63 Gtk::TreeModelColumn<Glib::ustring> name;
64 Gtk::TreeModelColumn<unsigned long> color;
65 Gtk::TreeModelColumn<gint> refcount;
66 Gtk::TreeModelColumn<SPGradient *> data;
67 Gtk::TreeModelColumn<Glib::RefPtr<Gdk::Pixbuf>> pixbuf;
68 };
69
70private:
71 sigc::signal<void ()> _signal_grabbed;
72 sigc::signal<void ()> _signal_dragged;
73 sigc::signal<void ()> _signal_released;
74 sigc::signal<void (SPGradient *)> _signal_changed;
76
79
80 /* Vector selector */
82
83 /* Tree */
84 bool _checkForSelected(const Gtk::TreePath &path, const Gtk::TreeModel::iterator &iter, SPGradient *vector);
85 bool onKeyPressed(GtkEventControllerKey const * controller,
86 unsigned keyval, unsigned keycode, GdkModifierType state);
87 void onTreeSelection();
88 void onGradientRename(const Glib::ustring &path_string, const Glib::ustring &new_text);
89 void onTreeNameColClick();
92
93 Gtk::TreeView *_treeview;
94 Gtk::ScrolledWindow *_scrolled_window;
96 Glib::RefPtr<Gtk::ListStore> _store;
97 Gtk::CellRendererPixbuf *_icon_renderer;
98 Gtk::CellRendererText *_text_renderer;
99
100 /* Editing buttons */
105
107
108 std::vector<Gtk::Widget *> _nonsolid;
109 std::vector<Gtk::Widget *> _swatch_widgets;
110
111 void selectGradientInTree(SPGradient *vector);
112 void moveSelection(int amount, bool down = true, bool toEnd = false);
113
114 void style_button(Gtk::Button *btn, char const *iconName);
115 void check_del_button();
116
117 // Signal handlers
118 void add_vector_clicked();
119 void edit_vector_clicked();
122 void vector_set(SPGradient *gr);
123
124public:
127
128 void show_edit_button(bool show);
129 void set_name_col_size(int min_width);
130 void set_gradient_size(int width, int height);
131
132 inline decltype(_signal_changed) signal_changed() const { return _signal_changed; }
133 inline decltype(_signal_grabbed) signal_grabbed() const { return _signal_grabbed; }
134 inline decltype(_signal_dragged) signal_dragged() const { return _signal_dragged; }
135 inline decltype(_signal_released) signal_released() const { return _signal_released; }
136
137 void setGradient(SPGradient* gradient) override { /* no op */ }
138 SPGradient *getVector() override;
139 void setVector(SPDocument *doc, SPGradient *vector) override;
140 void setMode(SelectorMode mode) override;
141 void setUnits(SPGradientUnits units) override;
142 SPGradientUnits getUnits() override;
143 void setSpread(SPGradientSpread spread) override;
144 SPGradientSpread getSpread() override;
145};
146
147} // namespace Inkscape::UI::Widget
148
149#endif // SEEN_GRADIENT_SELECTOR_H
150
151/*
152 Local Variables:
153 mode:c++
154 c-file-style:"stroustrup"
155 c-file-offsets:((innamespace . 0)(inline-open . 0)(case-label . +))
156 indent-tabs-mode:nil
157 fill-column:99
158 End:
159*/
160// vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=8:softtabstop=4 :
Gtk::TreeModelColumn< Glib::ustring > name
Gtk::TreeModelColumn< unsigned long > color
Gtk::TreeModelColumn< Glib::RefPtr< Gdk::Pixbuf > > pixbuf
bool onKeyPressed(GtkEventControllerKey const *controller, unsigned keyval, unsigned keycode, GdkModifierType state)
decltype(_signal_grabbed) signal_grabbed() const
void onGradientRename(const Glib::ustring &path_string, const Glib::ustring &new_text)
Gtk::CellRendererPixbuf * _icon_renderer
void setSpread(SPGradientSpread spread) override
decltype(_signal_released) signal_released() const
void setVector(SPDocument *doc, SPGradient *vector) override
bool _checkForSelected(const Gtk::TreePath &path, const Gtk::TreeModel::iterator &iter, SPGradient *vector)
void setUnits(SPGradientUnits units) override
void set_gradient_size(int width, int height)
void moveSelection(int amount, bool down=true, bool toEnd=false)
std::vector< Gtk::Widget * > _nonsolid
std::vector< Gtk::Widget * > _swatch_widgets
void setMode(SelectorMode mode) override
void setGradient(SPGradient *gradient) override
decltype(_signal_changed) signal_changed() const
Glib::RefPtr< Gtk::ListStore > _store
sigc::signal< void(SPGradient *)> _signal_changed
void selectGradientInTree(SPGradient *vector)
void style_button(Gtk::Button *btn, char const *iconName)
decltype(_signal_dragged) signal_dragged() const
Typed SVG document implementation.
Definition: document.h:106
Gradient.
Definition: sp-gradient.h:86
Definition: desktop.h:51
Button
helper to stop accidents on int vs gtkmm3's weak=typed enums, & looks nicer!
Definition: controller.h:70
Custom widgets.
Definition: desktop.h:127
static constexpr int height
static void add(Gtk::Box &box, PackType const pack_type, Gtk::Widget &child)
Definition: pack.cpp:94
int mode
Definition: parametrics.cpp:20
TODO: insert short description here.
SPGradientSpread
TODO: insert short description here.
SPGradientUnits
double width