diff options
| author | Marc Jeanmougin <marc.jeanmougin@telecom-paristech.fr> | 2018-04-28 09:59:33 +0000 |
|---|---|---|
| committer | Marc Jeanmougin <marc.jeanmougin@telecom-paristech.fr> | 2018-04-28 09:59:33 +0000 |
| commit | 2a37d214a84b9dad43f447a09a65846d07e96f44 (patch) | |
| tree | 843b2ce041124c0dde7b548205ec626e483769b9 /src/knot-holder-entity.cpp | |
| parent | Fix bug when converting to paths cliped and masked LPE elemets (diff) | |
| download | inkscape-2a37d214a84b9dad43f447a09a65846d07e96f44.tar.gz inkscape-2a37d214a84b9dad43f447a09a65846d07e96f44.zip | |
Allow FER edition on canvas
Diffstat (limited to '')
| -rw-r--r-- | src/knot-holder-entity.cpp | 52 |
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++ |
