Inkscape
Vector Graphics Editor
Loading...
Searching...
No Matches
parameter.h
Go to the documentation of this file.
1// SPDX-License-Identifier: GPL-2.0-or-later
2/*
3 * Inkscape::LivePathEffectParameters
4 *
5 * Copyright (C) Johan Engelen 2007 <j.b.c.engelen@utwente.nl>
6 *
7 * Released under GNU GPL v2+, read the file 'COPYING' for more information.
8 */
9
10#ifndef INKSCAPE_LIVEPATHEFFECT_PARAMETER_H
11#define INKSCAPE_LIVEPATHEFFECT_PARAMETER_H
12
13#include <vector>
14#include <2geom/forward.h>
15#include <2geom/pathvector.h>
16#include <glibmm/ustring.h>
17
18#include <sigc++/scoped_connection.h>
21
22// In gtk2, this wasn't an issue; we could toss around
23// G_MAXDOUBLE and not worry about size allocations. But
24// in gtk3, it is an issue: it allocates widget size for the maxmium
25// value you pass to it, leading to some insane lengths.
26// If you need this to be more, please be conservative about it.
27inline constexpr double SCALARPARAM_G_MAXDOUBLE =
28 10000000000.0; // TODO fixme: using an arbitrary large number as a magic value seems fragile.
29
30class KnotHolder;
31class SPLPEItem;
32class SPDesktop;
33class SPItem;
34
35namespace Gtk {
36class Widget;
37} // namespace Gtk
38
39namespace Inkscape {
40
41namespace Display {
42class TemporaryItem;
43} // namespace Display
44
45namespace NodePath {
46class Path;
47} // namespace NodePath
48
49namespace UI::Widget {
50class Registry;
51} // namespace UI::Widget
52
53namespace LivePathEffect {
54
55class Effect;
56
57class Parameter {
58public:
59 Parameter(Glib::ustring label, Glib::ustring tip, Glib::ustring key, Inkscape::UI::Widget::Registry *wr,
60 Effect *effect);
61 virtual ~Parameter();
62
63 Parameter(const Parameter &) = delete;
64 Parameter &operator=(const Parameter &) = delete;
65
66 virtual bool param_readSVGValue(char const *strvalue) = 0; // returns true if new value is valid / accepted.
67 virtual Glib::ustring param_getSVGValue() const = 0;
68 virtual Glib::ustring param_getDefaultSVGValue() const = 0;
69 virtual void param_widget_is_visible(bool is_visible) { widget_is_visible = is_visible; }
70 virtual void param_widget_is_enabled(bool is_enabled) { widget_is_enabled = is_enabled; }
71 void write_to_SVG();
72 void read_from_SVG();
73 void setUpdating(bool updating) { _updating = updating; }
74 bool getUpdating() const { return _updating; }
75 virtual void param_set_default() = 0;
76 virtual void param_update_default(char const *default_value) = 0;
77 // This creates a new, Gtk::manage()d widget
78 virtual Gtk::Widget *param_newWidget() = 0;
79
80 // FIXME: Should return a const reference, then callers need not check for nullptr.
81 Glib::ustring const *param_getTooltip() const { return &param_tooltip; };
82
83 // overload these for your particular parameter to make it provide knotholder handles or canvas helperpaths
84 virtual bool providesKnotHolderEntities() const { return false; }
85 virtual void addKnotHolderEntities(KnotHolder * /*knotholder*/, SPItem * /*item*/){};
86 virtual void addCanvasIndicators(SPLPEItem const * /*lpeitem*/, std::vector<Geom::PathVector> & /*hp_vec*/){};
87
88 virtual void param_editOncanvas(SPItem * /*item*/, SPDesktop * /*dt*/){};
89 virtual void param_setup_nodepath(Inkscape::NodePath::Path * /*np*/){};
90
91 virtual void param_transform_multiply(Geom::Affine const & /*postmul*/, bool set){};
92 virtual std::vector<SPObject *> param_get_satellites();
93 void param_higlight(bool highlight);
94 sigc::scoped_connection selection_changed_connection;
96 void update_satellites();
97 Glib::ustring param_key;
98 Glib::ustring param_tooltip;
100 Glib::ustring param_label;
101 EffectType effectType() const;
102 // force all LPE params has overrided method
103 virtual ParamType paramType() const = 0;
108
109protected:
110 bool _updating = false;
113 void param_write_to_repr(const char *svgd);
114};
115
116
117class ScalarParam : public Parameter {
118 public:
119 ScalarParam(const Glib::ustring &label, const Glib::ustring &tip, const Glib::ustring &key,
120 Inkscape::UI::Widget::Registry *wr, Effect *effect, double default_value = 1.0);
121
122 ScalarParam(const ScalarParam &) = delete;
124
125 bool param_readSVGValue(char const *strvalue) override;
126 Glib::ustring param_getSVGValue() const override;
127 Glib::ustring param_getDefaultSVGValue() const override;
128 void param_transform_multiply(Geom::Affine const &postmul, bool set) override;
129
130 void param_set_default() override;
131 void param_update_default(double default_value);
132 void param_update_default(char const *default_value) override;
133 void param_set_value(double val);
134 void param_make_integer(bool yes = true);
135 void param_set_range(double min, double max);
136 void param_set_digits(unsigned digits);
137 void param_set_increments(double step, double page);
139 void param_set_width_chars(int width_chars);
140 void addSlider(bool add_slider_widget) { add_slider = add_slider_widget; };
141 double param_get_max() { return max; };
142 double param_get_min() { return min; };
143 void param_set_undo(bool set_undo);
144 Gtk::Widget *param_newWidget() override;
145 ParamType paramType() const override { return ParamType::SCALAR; };
146 inline operator double() const { return value; };
147
148protected:
149 double value;
150 double min;
151 double max;
153 double defvalue;
154 unsigned digits;
155 double inc_step;
156 double inc_page;
161};
162
163} // namespace LivePathEffect
164
165} // namespace Inkscape
166
167#endif // INKSCAPE_LIVEPATHEFFECT_PARAMETER_H
168
169/*
170 Local Variables:
171 mode:c++
172 c-file-style:"stroustrup"
173 c-file-offsets:((innamespace . 0)(inline-open . 0)(case-label . +))
174 indent-tabs-mode:nil
175 fill-column:99
176 End:
177*/
178// vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=8:softtabstop=4:fileencoding=utf-8:textwidth=99 :
uint64_t page
Definition canvas.cpp:171
3x3 matrix representing an affine transformation.
Definition affine.h:70
Provides a class to put a canvasitem temporarily on-canvas.
Glib::ustring const * param_getTooltip() const
Definition parameter.h:81
virtual void param_editOncanvas(SPItem *, SPDesktop *)
Definition parameter.h:88
Parameter(const Parameter &)=delete
virtual void param_widget_is_visible(bool is_visible)
Definition parameter.h:69
virtual bool param_readSVGValue(char const *strvalue)=0
Inkscape::Display::TemporaryItem * ownerlocator
Definition parameter.h:111
Inkscape::UI::Widget::Registry * param_wr
Definition parameter.h:99
virtual ParamType paramType() const =0
virtual void param_update_default(char const *default_value)=0
void setUpdating(bool updating)
Definition parameter.h:73
Parameter & operator=(const Parameter &)=delete
virtual void param_transform_multiply(Geom::Affine const &, bool set)
Definition parameter.h:91
virtual bool providesKnotHolderEntities() const
Definition parameter.h:84
sigc::scoped_connection selection_changed_connection
Definition parameter.h:94
virtual Gtk::Widget * param_newWidget()=0
void param_write_to_repr(const char *svgd)
Definition parameter.cpp:52
virtual std::vector< SPObject * > param_get_satellites()
virtual Glib::ustring param_getDefaultSVGValue() const =0
virtual void param_widget_is_enabled(bool is_enabled)
Definition parameter.h:70
virtual void addKnotHolderEntities(KnotHolder *, SPItem *)
Definition parameter.h:85
void change_selection(Inkscape::Selection *selection)
virtual void addCanvasIndicators(SPLPEItem const *, std::vector< Geom::PathVector > &)
Definition parameter.h:86
virtual void param_setup_nodepath(Inkscape::NodePath::Path *)
Definition parameter.h:89
virtual Glib::ustring param_getSVGValue() const =0
void param_higlight(bool highlight)
Definition parameter.cpp:83
void param_set_digits(unsigned digits)
ScalarParam(const ScalarParam &)=delete
ParamType paramType() const override
Definition parameter.h:145
void param_transform_multiply(Geom::Affine const &postmul, bool set) override
ScalarParam & operator=(const ScalarParam &)=delete
void param_set_range(double min, double max)
bool param_readSVGValue(char const *strvalue) override
void param_set_increments(double step, double page)
void param_update_default(double default_value)
Glib::ustring param_getDefaultSVGValue() const override
void addSlider(bool add_slider_widget)
Definition parameter.h:140
void param_set_width_chars(int width_chars)
Gtk::Widget * param_newWidget() override
Glib::ustring param_getSVGValue() const override
The set of selected SPObjects for a given document and layer model.
Definition selection.h:80
Path and its polyline approximation.
Definition Path.h:93
To do: update description of desktop.
Definition desktop.h:149
Base class for visual SVG elements.
Definition sp-item.h:109
Contains forward declarations of 2geom types.
constexpr double SCALARPARAM_G_MAXDOUBLE
Definition parameter.h:27
Glib::ustring label
Definition desktop.h:50
Helper class to stream background task notifications as a series of messages.
static cairo_user_data_key_t key
PathVector - a sequence of subpaths.