summaryrefslogtreecommitdiffstats
path: root/src/ui/tool
diff options
context:
space:
mode:
authorThomas Holder <thomas@thomas-holder.de>2018-09-12 14:43:47 +0000
committerThomas Holder <thomas@thomas-holder.de>2018-09-12 14:43:47 +0000
commit1fa0c72b664afa4803dffd463ed11ce01632ab76 (patch)
treec1f746d4e8f7a5d65541cf6c05d3cdc79b3f9c10 /src/ui/tool
parentFix preferences crash (diff)
downloadinkscape-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.cpp8
-rw-r--r--src/ui/tool/multi-path-manipulator.cpp4
-rw-r--r--src/ui/tool/path-manipulator.cpp6
-rw-r--r--src/ui/tool/transform-handle-set.cpp27
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