From f35bb1f74a0ffeb5c6477a25e3c4cde87a97bcf1 Mon Sep 17 00:00:00 2001 From: Adrian Boguszewski Date: Thu, 28 Jul 2016 12:06:06 +0200 Subject: Removed unused includes, decrease compilation time (bzr r15025) --- src/ui/object-edit.cpp | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) (limited to 'src/ui/object-edit.cpp') diff --git a/src/ui/object-edit.cpp b/src/ui/object-edit.cpp index 459acf002..90676dc5f 100644 --- a/src/ui/object-edit.cpp +++ b/src/ui/object-edit.cpp @@ -12,11 +12,9 @@ */ #ifdef HAVE_CONFIG_H -# include "config.h" +#include #endif - - #include "sp-item.h" #include "sp-rect.h" #include "box3d.h" @@ -32,12 +30,10 @@ #include "sp-namedview.h" #include "live_effects/effect.h" #include "sp-pattern.h" -#include "sp-path.h" #include #include "ui/object-edit.h" -#include "xml/repr.h" -#include <2geom/math-utils.h> #include "knot-holder-entity.h" +#include #define sp_round(v,m) (((v) < 0.0) ? ((ceil((v) / (m) - 0.5)) * (m)) : ((floor((v) / (m) + 0.5)) * (m))) -- cgit v1.2.3 From 43b49e325db73cc19b1731db6c69545664ee8fbe Mon Sep 17 00:00:00 2001 From: Adrian Boguszewski Date: Thu, 28 Jul 2016 13:26:17 +0200 Subject: Reverted changes to r15024 after many building problems (bzr r15027) --- src/ui/object-edit.cpp | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) (limited to 'src/ui/object-edit.cpp') diff --git a/src/ui/object-edit.cpp b/src/ui/object-edit.cpp index 90676dc5f..459acf002 100644 --- a/src/ui/object-edit.cpp +++ b/src/ui/object-edit.cpp @@ -12,9 +12,11 @@ */ #ifdef HAVE_CONFIG_H -#include +# include "config.h" #endif + + #include "sp-item.h" #include "sp-rect.h" #include "box3d.h" @@ -30,10 +32,12 @@ #include "sp-namedview.h" #include "live_effects/effect.h" #include "sp-pattern.h" +#include "sp-path.h" #include #include "ui/object-edit.h" +#include "xml/repr.h" +#include <2geom/math-utils.h> #include "knot-holder-entity.h" -#include #define sp_round(v,m) (((v) < 0.0) ? ((ceil((v) / (m) - 0.5)) * (m)) : ((floor((v) / (m) + 0.5)) * (m))) -- cgit v1.2.3 From 35830f456cadaecf8b8e3944e3031a1a93f6cb41 Mon Sep 17 00:00:00 2001 From: Adrian Boguszewski Date: Wed, 3 Aug 2016 15:29:38 +0200 Subject: Removed unused includes, decreased compilation time. Once again (bzr r15034) --- src/ui/object-edit.cpp | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) (limited to 'src/ui/object-edit.cpp') diff --git a/src/ui/object-edit.cpp b/src/ui/object-edit.cpp index 459acf002..ddf770f59 100644 --- a/src/ui/object-edit.cpp +++ b/src/ui/object-edit.cpp @@ -12,11 +12,9 @@ */ #ifdef HAVE_CONFIG_H -# include "config.h" +#include #endif - - #include "sp-item.h" #include "sp-rect.h" #include "box3d.h" @@ -32,11 +30,8 @@ #include "sp-namedview.h" #include "live_effects/effect.h" #include "sp-pattern.h" -#include "sp-path.h" #include #include "ui/object-edit.h" -#include "xml/repr.h" -#include <2geom/math-utils.h> #include "knot-holder-entity.h" #define sp_round(v,m) (((v) < 0.0) ? ((ceil((v) / (m) - 0.5)) * (m)) : ((floor((v) / (m) + 0.5)) * (m))) -- cgit v1.2.3 From 80cd661e8fc8ee72c5e77608961fd392c5b11d4a Mon Sep 17 00:00:00 2001 From: Martin Owens Date: Mon, 15 Aug 2016 23:52:21 -0400 Subject: Add Shift+drag to arc start and end knots, holding shift will now move both knots together, maintaining the arc's size. Adjusted buffer for closed/open auto flipping. (bzr r15061) --- src/ui/object-edit.cpp | 35 +++++++++++++++++++++++++---------- 1 file changed, 25 insertions(+), 10 deletions(-) (limited to 'src/ui/object-edit.cpp') diff --git a/src/ui/object-edit.cpp b/src/ui/object-edit.cpp index ddf770f59..2763e6c4b 100644 --- a/src/ui/object-edit.cpp +++ b/src/ui/object-edit.cpp @@ -795,8 +795,11 @@ sp_genericellipse_side(SPGenericEllipse *ellipse, Geom::Point const &p) gdouble dy = (p[Geom::Y] - ellipse->cy.computed) / ellipse->ry.computed; gdouble s = dx * dx + dy * dy; - if (s < 1.0) return 1; - if (s > 1.0) return -1; + // We add a bit of a buffer, so there's a decent chance the user will + // be able to adjust the arc without the closed status flipping between + // open and closed during micro mouse movements. + if (s < 0.75) return 1; + if (s > 1.25) return -1; return 0; } @@ -808,16 +811,21 @@ ArcKnotHolderEntityStart::knot_set(Geom::Point const &p, Geom::Point const &/*or SPGenericEllipse *arc = dynamic_cast(item); g_assert(arc != NULL); - arc->setClosed(sp_genericellipse_side(arc, p) == -1); + gint side = sp_genericellipse_side(arc, p); + if(side != 0) { arc->setClosed(side == -1); } Geom::Point delta = p - Geom::Point(arc->cx.computed, arc->cy.computed); Geom::Scale sc(arc->rx.computed, arc->ry.computed); - arc->start = atan2(delta * sc.inverse()); + double offset = arc->start - atan2(delta * sc.inverse()); + arc->start -= offset; if ((state & GDK_CONTROL_MASK) && snaps) { arc->start = sp_round(arc->start, M_PI / snaps); } + if (state & GDK_SHIFT_MASK) { + arc->end -= offset; + } arc->normalize(); arc->requestDisplayUpdate(SP_OBJECT_MODIFIED_FLAG); @@ -852,16 +860,21 @@ ArcKnotHolderEntityEnd::knot_set(Geom::Point const &p, Geom::Point const &/*orig SPGenericEllipse *arc = dynamic_cast(item); g_assert(arc != NULL); - arc->setClosed(sp_genericellipse_side(arc, p) == -1); + gint side = sp_genericellipse_side(arc, p); + if(side != 0) { arc->setClosed(side == -1); } Geom::Point delta = p - Geom::Point(arc->cx.computed, arc->cy.computed); Geom::Scale sc(arc->rx.computed, arc->ry.computed); - arc->end = atan2(delta * sc.inverse()); + double offset = arc->end - atan2(delta * sc.inverse()); + arc->end -= offset; if ((state & GDK_CONTROL_MASK) && snaps) { arc->end = sp_round(arc->end, M_PI/snaps); } + if (state & GDK_SHIFT_MASK) { + arc->start -= offset; + } arc->normalize(); arc->requestDisplayUpdate(SP_OBJECT_MODIFIED_FLAG); @@ -983,13 +996,15 @@ ArcKnotHolder::ArcKnotHolder(SPDesktop *desktop, SPItem *item, SPKnotHolderRelea SP_KNOT_SHAPE_SQUARE, SP_KNOT_MODE_XOR); entity_start->create(desktop, item, this, Inkscape::CTRL_TYPE_ROTATE, - _("Position the start point of the arc or segment; with Ctrl " - "to snap angle; drag inside the ellipse for arc, outside for segment"), + _("Position the start point of the arc or segment; with Shift to move " + "with end point; with Ctrl to snap angle; drag inside the " + "ellipse for arc, outside for segment"), SP_KNOT_SHAPE_CIRCLE, SP_KNOT_MODE_XOR); entity_end->create(desktop, item, this, Inkscape::CTRL_TYPE_ROTATE, - _("Position the end point of the arc or segment; with Ctrl to snap angle; " - "drag inside the ellipse for arc, outside for segment"), + _("Position the end point of the arc or segment; with Shift to move " + "with start point; with Ctrl to snap angle; drag inside the " + "ellipse for arc, outside for segment"), SP_KNOT_SHAPE_CIRCLE, SP_KNOT_MODE_XOR); entity.push_back(entity_rx); -- cgit v1.2.3 From 952eb10b1e00f0e4abfbf8dd23fcb3935019f098 Mon Sep 17 00:00:00 2001 From: Jabiertxof Date: Mon, 19 Dec 2016 21:54:42 +0100 Subject: Remove some ocurrences of desktop in knot functions (bzr r15337) --- src/ui/object-edit.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src/ui/object-edit.cpp') diff --git a/src/ui/object-edit.cpp b/src/ui/object-edit.cpp index 2763e6c4b..cf2c03396 100644 --- a/src/ui/object-edit.cpp +++ b/src/ui/object-edit.cpp @@ -43,7 +43,7 @@ static KnotHolder *sp_lpe_knot_holder(SPLPEItem *item, SPDesktop *desktop) KnotHolder *knot_holder = new KnotHolder(desktop, item, NULL); Inkscape::LivePathEffect::Effect *effect = item->getCurrentLPE(); - effect->addHandles(knot_holder, desktop, item); + effect->addHandles(knot_holder, item); return knot_holder; } -- cgit v1.2.3 From c35eeadff685fb93343ee334ec6da857c95c8288 Mon Sep 17 00:00:00 2001 From: Tavmjong Bah Date: Thu, 2 Mar 2017 14:08:17 +0100 Subject: Implement arc "chord" type. (Matches Krita "chord" arc type.) (bzr r15561) --- src/ui/object-edit.cpp | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) (limited to 'src/ui/object-edit.cpp') diff --git a/src/ui/object-edit.cpp b/src/ui/object-edit.cpp index cf2c03396..b11a61710 100644 --- a/src/ui/object-edit.cpp +++ b/src/ui/object-edit.cpp @@ -812,7 +812,9 @@ ArcKnotHolderEntityStart::knot_set(Geom::Point const &p, Geom::Point const &/*or g_assert(arc != NULL); gint side = sp_genericellipse_side(arc, p); - if(side != 0) { arc->setClosed(side == -1); } + if(side != 0) { arc->setArcType( (side == -1) ? + SP_GENERIC_ELLIPSE_ARC_TYPE_SLICE : + SP_GENERIC_ELLIPSE_ARC_TYPE_ARC); } Geom::Point delta = p - Geom::Point(arc->cx.computed, arc->cy.computed); Geom::Scale sc(arc->rx.computed, arc->ry.computed); @@ -861,7 +863,9 @@ ArcKnotHolderEntityEnd::knot_set(Geom::Point const &p, Geom::Point const &/*orig g_assert(arc != NULL); gint side = sp_genericellipse_side(arc, p); - if(side != 0) { arc->setClosed(side == -1); } + if(side != 0) { arc->setArcType( (side == -1) ? + SP_GENERIC_ELLIPSE_ARC_TYPE_SLICE : + SP_GENERIC_ELLIPSE_ARC_TYPE_ARC); } Geom::Point delta = p - Geom::Point(arc->cx.computed, arc->cy.computed); Geom::Scale sc(arc->rx.computed, arc->ry.computed); -- cgit v1.2.3 From ad40881b1d7b1e1093fce11e49222b21723608b5 Mon Sep 17 00:00:00 2001 From: Antonio Ospite Date: Thu, 13 Apr 2017 22:28:27 +0200 Subject: Ellipses in Inkscape are defined by the center and the radius, but the user cannot easily control the position of the center. Show a control point for the center so it's easier to move the shape around and snap it by its center. Fixed bugs: - https://launchpad.net/bugs/481506 (bzr r15620) --- src/ui/object-edit.cpp | 36 ++++++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) (limited to 'src/ui/object-edit.cpp') diff --git a/src/ui/object-edit.cpp b/src/ui/object-edit.cpp index b11a61710..b76e97c15 100644 --- a/src/ui/object-edit.cpp +++ b/src/ui/object-edit.cpp @@ -782,6 +782,12 @@ public: virtual void knot_click(unsigned int state); }; +class ArcKnotHolderEntityCenter : public KnotHolderEntity { +public: + virtual Geom::Point knot_get() const; + virtual void knot_set(Geom::Point const &p, Geom::Point const &origin, unsigned int state); +}; + /* * return values: * 1 : inside @@ -983,6 +989,30 @@ ArcKnotHolderEntityRY::knot_click(unsigned int state) } } +void +ArcKnotHolderEntityCenter::knot_set(Geom::Point const &p, Geom::Point const &/*origin*/, unsigned int state) +{ + SPGenericEllipse *ge = dynamic_cast(item); + g_assert(ge != NULL); + + Geom::Point const s = snap_knot_position(p, state); + + ge->cx = s[Geom::X]; + ge->cy = s[Geom::Y]; + + item->requestDisplayUpdate(SP_OBJECT_MODIFIED_FLAG); +} + +Geom::Point +ArcKnotHolderEntityCenter::knot_get() const +{ + SPGenericEllipse const *ge = dynamic_cast(item); + g_assert(ge != NULL); + + return Geom::Point(ge->cx.computed, ge->cy.computed); +} + + ArcKnotHolder::ArcKnotHolder(SPDesktop *desktop, SPItem *item, SPKnotHolderReleasedFunc relhandler) : KnotHolder(desktop, item, relhandler) { @@ -990,6 +1020,7 @@ ArcKnotHolder::ArcKnotHolder(SPDesktop *desktop, SPItem *item, SPKnotHolderRelea ArcKnotHolderEntityRY *entity_ry = new ArcKnotHolderEntityRY(); ArcKnotHolderEntityStart *entity_start = new ArcKnotHolderEntityStart(); ArcKnotHolderEntityEnd *entity_end = new ArcKnotHolderEntityEnd(); + ArcKnotHolderEntityCenter *entity_center = new ArcKnotHolderEntityCenter(); entity_rx->create(desktop, item, this, Inkscape::CTRL_TYPE_SIZER, _("Adjust ellipse width, with Ctrl to make circle"), @@ -1011,10 +1042,15 @@ ArcKnotHolder::ArcKnotHolder(SPDesktop *desktop, SPItem *item, SPKnotHolderRelea "ellipse for arc, outside for segment"), SP_KNOT_SHAPE_CIRCLE, SP_KNOT_MODE_XOR); + entity_center->create(desktop, item, this, Inkscape::CTRL_TYPE_POINT, + _("Move the ellipse"), + SP_KNOT_SHAPE_CROSS); + entity.push_back(entity_rx); entity.push_back(entity_ry); entity.push_back(entity_start); entity.push_back(entity_end); + entity.push_back(entity_center); add_pattern_knotholder(); } -- cgit v1.2.3 From bd5644d34e87bf7f402beee7dac7cc1d0c4510f5 Mon Sep 17 00:00:00 2001 From: ospite <> Date: Tue, 2 May 2017 21:27:27 +0200 Subject: Add control point at center of stars Fixed bugs: - https://launchpad.net/bugs/481506 (bzr r15659) --- src/ui/object-edit.cpp | 34 ++++++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) (limited to 'src/ui/object-edit.cpp') diff --git a/src/ui/object-edit.cpp b/src/ui/object-edit.cpp index b76e97c15..c1d85a896 100644 --- a/src/ui/object-edit.cpp +++ b/src/ui/object-edit.cpp @@ -1071,6 +1071,12 @@ public: virtual void knot_click(unsigned int state); }; +class StarKnotHolderEntityCenter : public KnotHolderEntity { +public: + virtual Geom::Point knot_get() const; + virtual void knot_set(Geom::Point const &p, Geom::Point const &origin, unsigned int state); +}; + void StarKnotHolderEntity1::knot_set(Geom::Point const &p, Geom::Point const &/*origin*/, unsigned int state) { @@ -1128,6 +1134,17 @@ StarKnotHolderEntity2::knot_set(Geom::Point const &p, Geom::Point const &/*origi } } +void +StarKnotHolderEntityCenter::knot_set(Geom::Point const &p, Geom::Point const &/*origin*/, unsigned int state) +{ + SPStar *star = dynamic_cast(item); + g_assert(star != NULL); + + star->center = snap_knot_position(p, state); + + item->requestDisplayUpdate(SP_OBJECT_MODIFIED_FLAG); +} + Geom::Point StarKnotHolderEntity1::knot_get() const { @@ -1151,6 +1168,17 @@ StarKnotHolderEntity2::knot_get() const return sp_star_get_xy(star, SP_STAR_POINT_KNOT2, 0); } +Geom::Point +StarKnotHolderEntityCenter::knot_get() const +{ + g_assert(item != NULL); + + SPStar const *star = dynamic_cast(item); + g_assert(star != NULL); + + return star->center; +} + static void sp_star_knot_click(SPItem *item, unsigned int state) { @@ -1202,6 +1230,12 @@ StarKnotHolder::StarKnotHolder(SPDesktop *desktop, SPItem *item, SPKnotHolderRel entity.push_back(entity2); } + StarKnotHolderEntityCenter *entity_center = new StarKnotHolderEntityCenter(); + entity_center->create(desktop, item, this, Inkscape::CTRL_TYPE_POINT, + _("Move the star"), + SP_KNOT_SHAPE_CROSS); + entity.push_back(entity_center); + add_pattern_knotholder(); } -- cgit v1.2.3