diff options
| author | Thomas Holder <thomas@thomas-holder.de> | 2018-09-12 14:43:47 +0000 |
|---|---|---|
| committer | Thomas Holder <thomas@thomas-holder.de> | 2018-09-12 14:43:47 +0000 |
| commit | 1fa0c72b664afa4803dffd463ed11ce01632ab76 (patch) | |
| tree | c1f746d4e8f7a5d65541cf6c05d3cdc79b3f9c10 /src/ui/tool | |
| parent | Fix preferences crash (diff) | |
| download | inkscape-1fa0c72b664afa4803dffd463ed11ce01632ab76.tar.gz inkscape-1fa0c72b664afa4803dffd463ed11ce01632ab76.zip | |
New option to invert y-axis
Replaces all hard coded or implicit desktop coordinate usage with
doc2dt multiplication.
New global preference: Interface > Origin at upper left
https://bugs.launchpad.net/inkscape/+bug/170049
Diffstat (limited to 'src/ui/tool')
| -rw-r--r-- | src/ui/tool/control-point-selection.cpp | 8 | ||||
| -rw-r--r-- | src/ui/tool/multi-path-manipulator.cpp | 4 | ||||
| -rw-r--r-- | src/ui/tool/path-manipulator.cpp | 6 | ||||
| -rw-r--r-- | src/ui/tool/transform-handle-set.cpp | 27 |
4 files changed, 23 insertions, 22 deletions
diff --git a/src/ui/tool/control-point-selection.cpp b/src/ui/tool/control-point-selection.cpp index 8f7a1761b..27105b8cf 100644 --- a/src/ui/tool/control-point-selection.cpp +++ b/src/ui/tool/control-point-selection.cpp @@ -662,11 +662,11 @@ bool ControlPointSelection::event(Inkscape::UI::Tools::ToolBase * /*event_contex case GDK_KEY_Up: case GDK_KEY_KP_Up: case GDK_KEY_KP_8: - return _keyboardMove(event->key, Geom::Point(0, 1)); + return _keyboardMove(event->key, Geom::Point(0, -_desktop->yaxisdir())); case GDK_KEY_Down: case GDK_KEY_KP_Down: case GDK_KEY_KP_2: - return _keyboardMove(event->key, Geom::Point(0, -1)); + return _keyboardMove(event->key, Geom::Point(0, _desktop->yaxisdir())); case GDK_KEY_Right: case GDK_KEY_KP_Right: case GDK_KEY_KP_6: @@ -678,9 +678,9 @@ bool ControlPointSelection::event(Inkscape::UI::Tools::ToolBase * /*event_contex // rotates case GDK_KEY_bracketleft: - return _keyboardRotate(event->key, 1); + return _keyboardRotate(event->key, -_desktop->yaxisdir()); case GDK_KEY_bracketright: - return _keyboardRotate(event->key, -1); + return _keyboardRotate(event->key, _desktop->yaxisdir()); // scaling case GDK_KEY_less: diff --git a/src/ui/tool/multi-path-manipulator.cpp b/src/ui/tool/multi-path-manipulator.cpp index b80a1e675..dd700d9b3 100644 --- a/src/ui/tool/multi-path-manipulator.cpp +++ b/src/ui/tool/multi-path-manipulator.cpp @@ -595,11 +595,11 @@ bool MultiPathManipulator::event(Inkscape::UI::Tools::ToolBase *event_context, G // rotation case GDK_KEY_bracketleft: case GDK_KEY_braceleft: - pm.rotateHandle(n, which, 1, one_pixel); + pm.rotateHandle(n, which, -_desktop->yaxisdir(), one_pixel); break; case GDK_KEY_bracketright: case GDK_KEY_braceright: - pm.rotateHandle(n, which, -1, one_pixel); + pm.rotateHandle(n, which, _desktop->yaxisdir(), one_pixel); break; // adjust length case GDK_KEY_period: diff --git a/src/ui/tool/path-manipulator.cpp b/src/ui/tool/path-manipulator.cpp index 2369a75d4..a00f065d8 100644 --- a/src/ui/tool/path-manipulator.cpp +++ b/src/ui/tool/path-manipulator.cpp @@ -1445,16 +1445,14 @@ void PathManipulator::_updateOutline() // linear segment that starts at the time value of 0.5 and extends for 10 pixels // at an angle 150 degrees from the unit tangent. This creates the appearance // of little 'harpoons' that show the direction of the subpaths. + auto rot_scale_w2d = Geom::Rotate(210.0 / 180.0 * M_PI) * Geom::Scale(10.0) * _desktop->w2d(); Geom::PathVector arrows; for (Geom::PathVector::iterator i = pv.begin(); i != pv.end(); ++i) { Geom::Path &path = *i; for (Geom::Path::iterator j = path.begin(); j != path.end_default(); ++j) { Geom::Point at = j->pointAt(0.5); Geom::Point ut = j->unitTangentAt(0.5); - // rotate the point - ut *= Geom::Rotate(150.0 / 180.0 * M_PI); - Geom::Point arrow_end = _desktop->w2d( - _desktop->d2w(at) + Geom::unit_vector(_desktop->d2w(ut)) * 10.0); + Geom::Point arrow_end = at + (Geom::unit_vector(_desktop->d2w(ut)) * rot_scale_w2d); Geom::Path arrow(at); arrow.appendNew<Geom::LineSegment>(arrow_end); diff --git a/src/ui/tool/transform-handle-set.cpp b/src/ui/tool/transform-handle-set.cpp index 382654dad..b0da4f026 100644 --- a/src/ui/tool/transform-handle-set.cpp +++ b/src/ui/tool/transform-handle-set.cpp @@ -243,8 +243,8 @@ double ScaleHandle::_last_scale_y = 1.0; class ScaleCornerHandle : public ScaleHandle { public: - ScaleCornerHandle(TransformHandleSet &th, unsigned corner) : - ScaleHandle(th, corner_to_anchor(corner), _corner_to_pixbuf(corner)), + ScaleCornerHandle(TransformHandleSet &th, unsigned corner, unsigned d_corner) : + ScaleHandle(th, corner_to_anchor(d_corner), _corner_to_pixbuf(d_corner)), _corner(corner) {} @@ -330,8 +330,8 @@ private: */ class ScaleSideHandle : public ScaleHandle { public: - ScaleSideHandle(TransformHandleSet &th, unsigned side) - : ScaleHandle(th, side_to_anchor(side), _side_to_pixbuf(side)) + ScaleSideHandle(TransformHandleSet &th, unsigned side, unsigned d_side) + : ScaleHandle(th, side_to_anchor(d_side), _side_to_pixbuf(side)) , _side(side) {} protected: @@ -409,8 +409,8 @@ private: */ class RotateHandle : public TransformHandle { public: - RotateHandle(TransformHandleSet &th, unsigned corner) - : TransformHandle(th, corner_to_anchor(corner), _corner_to_pixbuf(corner)) + RotateHandle(TransformHandleSet &th, unsigned corner, unsigned d_corner) + : TransformHandle(th, corner_to_anchor(d_corner), _corner_to_pixbuf(d_corner)) , _corner(corner) {} protected: @@ -491,8 +491,8 @@ double RotateHandle::_last_angle = 0; class SkewHandle : public TransformHandle { public: - SkewHandle(TransformHandleSet &th, unsigned side) - : TransformHandle(th, side_to_anchor(side), _side_to_pixbuf(side)) + SkewHandle(TransformHandleSet &th, unsigned side, unsigned d_side) + : TransformHandle(th, side_to_anchor(d_side), _side_to_pixbuf(side)) , _side(side) {} @@ -707,11 +707,14 @@ TransformHandleSet::TransformHandleSet(SPDesktop *d, SPCanvasGroup *th_group) sp_canvas_item_hide(_trans_outline); _trans_outline->setDashed(true); + bool y_inverted = !d->is_yaxisdown(); for (unsigned i = 0; i < 4; ++i) { - _scale_corners[i] = new ScaleCornerHandle(*this, i); - _scale_sides[i] = new ScaleSideHandle(*this, i); - _rot_corners[i] = new RotateHandle(*this, i); - _skew_sides[i] = new SkewHandle(*this, i); + unsigned d_c = y_inverted ? i : 3 - i; + unsigned d_s = y_inverted ? i : 6 - i; + _scale_corners[i] = new ScaleCornerHandle(*this, i, d_c); + _scale_sides[i] = new ScaleSideHandle(*this, i, d_s); + _rot_corners[i] = new RotateHandle(*this, i, d_c); + _skew_sides[i] = new SkewHandle(*this, i, d_s); } _center = new RotationCenter(*this); // when transforming, update rotation center position |
