Inkscape
Vector Graphics Editor
Loading...
Searching...
No Matches
gradient-editor.h
Go to the documentation of this file.
1// SPDX-License-Identifier: GPL-2.0-or-later
13#ifndef SEEN_GRADIENT_EDITOR_H
14#define SEEN_GRADIENT_EDITOR_H
15
16#include <memory>
17#include <optional>
18#include <glibmm/refptr.h>
19#include <gtkmm/box.h>
20#include <gtkmm/treemodelcolumn.h>
21
22#include "colors/color-set.h"
23#include "object/sp-gradient.h"
24#include "object/sp-stop.h"
25#include "spin-scale.h"
26#include "gradient-with-stops.h"
29
30namespace Gtk {
31class Adjustment;
32class Builder;
33class Button;
34class Expander;
35class Grid;
36class Image;
37class ListStore;
38class SpinButton;
39class ToggleButton;
40class TreeRow;
41class TreeView;
42} // namespace Gtk
43
44namespace Inkscape::UI::Widget {
45
46class GradientSelector;
47class PopoverMenu;
48
49class GradientEditor final : public Gtk::Box, public GradientSelectorInterface {
50public:
51 GradientEditor(const char* prefs);
52 ~GradientEditor() noexcept final;
53
54private:
55 sigc::signal<void ()> _signal_grabbed;
56 sigc::signal<void ()> _signal_dragged;
57 sigc::signal<void ()> _signal_released;
58 sigc::signal<void (SPGradient*)> _signal_changed;
59
60public:
61 decltype(_signal_changed) signal_changed() const { return _signal_changed; }
62 decltype(_signal_grabbed) signal_grabbed() const { return _signal_grabbed; }
63 decltype(_signal_dragged) signal_dragged() const { return _signal_dragged; }
65
66 void setGradient(SPGradient *gradient) final;
67 SPGradient *getVector() final;
68 void setVector(SPDocument *doc, SPGradient *vector) final;
69 void setMode(SelectorMode mode) final;
70 void setUnits(SPGradientUnits units) final;
72 void setSpread(SPGradientSpread spread) final;
74 void selectStop(SPStop *selected) final;
75
76private:
77 void set_gradient(SPGradient* gradient);
78 void stop_selected();
79 void insert_stop_at(double offset);
80 void add_stop(int index);
82 void delete_stop(int index);
83 void show_stops(bool visible);
87 void reverse_gradient();
88 void turn_gradient(double angle, bool relative);
89 void set_stop_color(Colors::Color const &color);
90 std::optional<Gtk::TreeRow> current_stop();
91 SPStop* get_nth_stop(size_t index);
93 bool select_stop(size_t index);
94 void set_stop_offset(size_t index, double offset);
96 void fire_stop_selected(SPStop* stop);
97
98 Glib::RefPtr<Gtk::Builder> _builder;
100 std::shared_ptr<Colors::ColorSet> _colors;
101 std::unique_ptr<UI::Widget::PopoverMenu> _repeat_popover;
104 Glib::RefPtr<Gtk::ListStore> _stop_list_store;
105 Gtk::TreeModelColumnRecord _stop_columns;
106 Gtk::TreeModelColumn<SPStop*> _stopObj;
107 Gtk::TreeModelColumn<size_t> _stopIdx;
108 Gtk::TreeModelColumn<Glib::ustring> _stopID;
109 Gtk::TreeModelColumn<Glib::RefPtr<Gdk::Pixbuf>> _stop_color;
110 Gtk::TreeView& _stop_tree;
112 Glib::RefPtr<Gtk::Adjustment> _angle_adj;
114 Gtk::Button& _add_stop;
120 Gtk::ToggleButton& _linear_btn;
121 Gtk::ToggleButton& _radial_btn;
127 Glib::ustring _prefs;
128};
129
130} // namespace Inkscape::UI::Widget
131
132#endif // SEEN_GRADIENT_EDITOR_H
133
134/*
135 Local Variables:
136 mode:c++
137 c-file-style:"stroustrup"
138 c-file-offsets:((innamespace . 0)(inline-open . 0)(case-label . +))
139 indent-tabs-mode:nil
140 fill-column:99
141 End:
142*/
143// vim:filetype=cpp:expandtab:shiftwidth=4:tabstop=8:softtabstop=4:fileencoding=utf-8:textwidth=99:
Geom::IntRect visible
Definition canvas.cpp:154
Class to hold image data for raster images.
Definition cairo-utils.h:31
std::optional< Gtk::TreeRow > current_stop()
Glib::RefPtr< Gtk::Builder > _builder
void setMode(SelectorMode mode) final
std::shared_ptr< Colors::ColorSet > _colors
Gtk::TreeModelColumn< SPStop * > _stopObj
Glib::RefPtr< Gtk::Adjustment > _angle_adj
Gtk::TreeModelColumn< Glib::ustring > _stopID
decltype(_signal_grabbed) signal_grabbed() const
void setVector(SPDocument *doc, SPGradient *vector) final
void setSpread(SPGradientSpread spread) final
Gtk::TreeModelColumnRecord _stop_columns
decltype(_signal_changed) signal_changed() const
void setUnits(SPGradientUnits units) final
Gtk::TreeModelColumn< Glib::RefPtr< Gdk::Pixbuf > > _stop_color
void set_repeat_mode(SPGradientSpread mode)
Gtk::TreeModelColumn< size_t > _stopIdx
void selectStop(SPStop *selected) final
void turn_gradient(double angle, bool relative)
Glib::RefPtr< Gtk::ListStore > _stop_list_store
void set_repeat_icon(SPGradientSpread mode)
void setGradient(SPGradient *gradient) final
decltype(_signal_released) signal_released() const
sigc::signal< void(SPGradient *)> _signal_changed
void set_gradient(SPGradient *gradient)
decltype(_signal_dragged) signal_dragged() const
void set_stop_offset(size_t index, double offset)
void set_stop_color(Colors::Color const &color)
std::unique_ptr< UI::Widget::PopoverMenu > _repeat_popover
A replacement for GTK3ʼs Gtk::Menu, as removed in GTK4.
SpinButton widget, that allows entry of simple math expressions (also units, when linked with UnitMen...
Definition spinbutton.h:52
Typed SVG document implementation.
Definition document.h:101
Gradient.
Definition sp-gradient.h:86
Gradient stop.
Definition sp-stop.h:31
A set of colors which can be modified together used for color pickers.
Gradient image widget with stop handles.
double offset
Definition desktop.h:50
Custom widgets.
Definition desktop.h:126
STL namespace.
int mode
SPGradientSpread
SPGradientUnits
TODO: insert short description here.
Derived from and replaces SpinSlider.
int index