summaryrefslogtreecommitdiffstats
path: root/src/knot-holder-entity.cpp
diff options
context:
space:
mode:
authorMarc Jeanmougin <marc.jeanmougin@telecom-paristech.fr>2018-04-28 09:59:33 +0000
committerMarc Jeanmougin <marc.jeanmougin@telecom-paristech.fr>2018-04-28 09:59:33 +0000
commit2a37d214a84b9dad43f447a09a65846d07e96f44 (patch)
tree843b2ce041124c0dde7b548205ec626e483769b9 /src/knot-holder-entity.cpp
parentFix bug when converting to paths cliped and masked LPE elemets (diff)
downloadinkscape-2a37d214a84b9dad43f447a09a65846d07e96f44.tar.gz
inkscape-2a37d214a84b9dad43f447a09a65846d07e96f44.zip
Allow FER edition on canvas
Diffstat (limited to 'src/knot-holder-entity.cpp')
-rw-r--r--src/knot-holder-entity.cpp52
1 files changed, 52 insertions, 0 deletions
diff --git a/src/knot-holder-entity.cpp b/src/knot-holder-entity.cpp
index 1f5eb872f..38ae9f92d 100644
--- a/src/knot-holder-entity.cpp
+++ b/src/knot-holder-entity.cpp
@@ -282,6 +282,58 @@ PatternKnotHolderEntityScale::knot_get() const
return delta;
}
+/* Filter manipulation */
+void FilterKnotHolderEntity::knot_set(Geom::Point const &p, Geom::Point const &origin, unsigned int state)
+{
+ // FIXME: this snapping should be done together with knowing whether control was pressed. If GDK_CONTROL_MASK, then constrained snapping should be used.
+ Geom::Point p_snapped = snap_knot_position(p, state);
+
+ if ( state & GDK_CONTROL_MASK ) {
+ if (fabs((p - origin)[Geom::X]) > fabs((p - origin)[Geom::Y])) {
+ p_snapped[Geom::Y] = origin[Geom::Y];
+ } else {
+ p_snapped[Geom::X] = origin[Geom::X];
+ }
+ }
+
+ if (state) {
+ SPFilter *filter = (item->style && item->style->filter.href) ? dynamic_cast<SPFilter *>(item->style->getFilter()) : NULL;
+ if(!filter) return;
+ Geom::OptRect orig_bbox = item->visualBounds();
+ Geom::Rect *new_bbox = _topleft ? new Geom::Rect(p,orig_bbox->max()) : new Geom::Rect(orig_bbox->min(), p);
+ if(_topleft) {
+ float x_a = filter->width.computed;
+ float y_a = filter->height.computed;
+ filter->height.scale(new_bbox->height()/orig_bbox->height());
+ filter->width.scale(new_bbox->width()/orig_bbox->width());
+ float x_b = filter->width.computed;
+ float y_b = filter->height.computed;
+ filter->x.set(filter->x.unit, filter->x.computed + x_a - x_b);
+ filter->y.set(filter->y.unit, filter->y.computed + y_a - y_b);
+ } else {
+ filter->height.scale(new_bbox->height()/orig_bbox->height());
+ filter->width.scale(new_bbox->width()/orig_bbox->width());
+ }
+ filter->requestDisplayUpdate(SP_OBJECT_MODIFIED_FLAG);
+
+ //filter->
+
+ //item-> //adjust FER
+ }
+
+ item->requestDisplayUpdate(SP_OBJECT_MODIFIED_FLAG);
+
+}
+
+Geom::Point FilterKnotHolderEntity::knot_get() const
+{
+ SPFilter *filter = (item->style && item->style->filter.href) ? dynamic_cast<SPFilter *>(item->style->getFilter()) : NULL;
+ if(!filter) return Geom::Point(Geom::infinity(), Geom::infinity());
+ Geom::OptRect r = item->visualBounds();
+ if (_topleft) return Geom::Point(r->min());
+ else return Geom::Point(r->max());
+}
+
/*
Local Variables:
mode:c++