9
9
#include "live_effects/parameter/vector.h"
10
#include "sp-lpe-item.h"
11
#include "knotholder.h"
11
12
#include "svg/svg.h"
12
13
#include "svg/stringstream.h"
14
#include <2geom/coord.h>
16
// needed for on-canvas editting:
16
19
namespace Inkscape {
18
21
namespace LivePathEffect {
22
VectorParam<double>::readsvg(const gchar * str)
24
double newx = Geom::infinity();
25
sp_svg_number_read_d(str, &newx);
31
VectorParam<float>::readsvg(const gchar * str)
33
float newx = Geom::infinity();
34
sp_svg_number_read_f(str, &newx);
23
VectorParam::VectorParam( const Glib::ustring& label, const Glib::ustring& tip,
24
const Glib::ustring& key, Inkscape::UI::Widget::Registry* wr,
25
Effect* effect, Geom::Point default_vector)
26
: Parameter(label, tip, key, wr, effect),
27
defvalue(default_vector),
29
vector(default_vector)
31
vec_knot_shape = SP_KNOT_SHAPE_DIAMOND;
32
vec_knot_mode = SP_KNOT_MODE_XOR;
33
vec_knot_color = 0xffffb500;
34
ori_knot_shape = SP_KNOT_SHAPE_CIRCLE;
35
ori_knot_mode = SP_KNOT_MODE_XOR;
36
ori_knot_color = 0xffffb500;
39
VectorParam::~VectorParam()
45
VectorParam::param_set_default()
47
setOrigin(Geom::Point(0.,0.));
52
VectorParam::param_readSVGValue(const gchar * strvalue)
54
gchar ** strarray = g_strsplit(strvalue, ",", 4);
57
while (strarray[i] && i < 4) {
58
if (sp_svg_number_read_d(strarray[i], &val[i]) != 0) {
64
g_strfreev (strarray);
66
setOrigin( Geom::Point(val[0], val[1]) );
67
setVector( Geom::Point(val[2], val[3]) );
74
VectorParam::param_getSVGValue() const
76
Inkscape::SVGOStringStream os;
77
os << origin << " , " << vector;
78
gchar * str = g_strdup(os.str().c_str());
83
VectorParam::param_newWidget(Gtk::Tooltips * /*tooltips*/)
86
Inkscape::UI::Widget::RegisteredTransformedPoint * pointwdg = Gtk::manage(
87
new Inkscape::UI::Widget::RegisteredTransformedPoint( param_label,
91
param_effect->getRepr(),
92
param_effect->getSPDoc() ) );
93
// TODO: fix to get correct desktop (don't use SP_ACTIVE_DESKTOP)
94
SPDesktop *desktop = SP_ACTIVE_DESKTOP;
95
Geom::Matrix transf = desktop->doc2dt();
96
pointwdg->setTransform(transf);
97
pointwdg->setValue( *this );
98
pointwdg->clearProgrammatically();
99
pointwdg->set_undo_parameters(SP_VERB_DIALOG_LIVE_PATH_EFFECT, _("Change point parameter"));
101
Gtk::HBox * hbox = Gtk::manage( new Gtk::HBox() );
102
static_cast<Gtk::HBox*>(hbox)->pack_start(*pointwdg, true, true);
103
static_cast<Gtk::HBox*>(hbox)->show_all_children();
105
return dynamic_cast<Gtk::Widget *> (hbox);
110
VectorParam::set_and_write_new_values(Geom::Point const &new_origin, Geom::Point const &new_vector)
112
setValues(new_origin, new_vector);
113
gchar * str = param_getSVGValue();
114
param_write_to_repr(str);
119
VectorParam::param_transform_multiply(Geom::Matrix const& postmul, bool /*set*/)
121
set_and_write_new_values( origin * postmul, vector * postmul );
126
VectorParam::set_vector_oncanvas_looks(SPKnotShapeType shape, SPKnotModeType mode, guint32 color)
128
vec_knot_shape = shape;
129
vec_knot_mode = mode;
130
vec_knot_color = color;
134
VectorParam::set_origin_oncanvas_looks(SPKnotShapeType shape, SPKnotModeType mode, guint32 color)
136
ori_knot_shape = shape;
137
ori_knot_mode = mode;
138
ori_knot_color = color;
141
class VectorParamKnotHolderEntity_Origin : public LPEKnotHolderEntity {
143
VectorParamKnotHolderEntity_Origin(VectorParam *p) : param(p) { }
144
virtual ~VectorParamKnotHolderEntity_Origin() {}
146
virtual void knot_set(Geom::Point const &p, Geom::Point const &/*origin*/, guint /*state*/) {
147
Geom::Point const s = snap_knot_position(p);
149
sp_lpe_item_update_patheffect(SP_LPE_ITEM(item), false, false);
151
virtual Geom::Point knot_get(){
152
return param->origin;
154
virtual void knot_click(guint /*state*/){
155
g_print ("This is the origin handle associated to parameter '%s'\n", param->param_key.c_str());
162
class VectorParamKnotHolderEntity_Vector : public LPEKnotHolderEntity {
164
VectorParamKnotHolderEntity_Vector(VectorParam *p) : param(p) { }
165
virtual ~VectorParamKnotHolderEntity_Vector() {}
167
virtual void knot_set(Geom::Point const &p, Geom::Point const &/*origin*/, guint state) {
168
Geom::Point const s = p - param->origin;
169
/// @todo implement angle snapping when holding CTRL
171
sp_lpe_item_update_patheffect(SP_LPE_ITEM(item), false, false);
173
virtual Geom::Point knot_get(){
174
return param->origin + param->vector;
176
virtual void knot_click(guint /*state*/){
177
g_print ("This is the vector handle associated to parameter '%s'\n", param->param_key.c_str());
185
VectorParam::addKnotHolderEntities(KnotHolder *knotholder, SPDesktop *desktop, SPItem *item)
187
VectorParamKnotHolderEntity_Origin *origin_e = new VectorParamKnotHolderEntity_Origin(this);
188
origin_e->create(desktop, item, knotholder, handleTip(), ori_knot_shape, ori_knot_mode, ori_knot_color);
189
knotholder->add(origin_e);
191
VectorParamKnotHolderEntity_Vector *vector_e = new VectorParamKnotHolderEntity_Vector(this);
192
vector_e->create(desktop, item, knotholder, handleTip(), vec_knot_shape, vec_knot_mode, vec_knot_color);
193
knotholder->add(vector_e);
38
196
} /* namespace LivePathEffect */