summaryrefslogtreecommitdiffstats
path: root/src/ui/tools
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/tools
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/tools')
-rw-r--r--src/ui/tools/calligraphic-tool.cpp1
-rw-r--r--src/ui/tools/flood-tool.cpp10
-rw-r--r--src/ui/tools/measure-tool.cpp7
-rw-r--r--src/ui/tools/select-tool.cpp11
-rw-r--r--src/ui/tools/spray-tool.cpp6
-rw-r--r--src/ui/tools/text-tool.cpp3
-rw-r--r--src/ui/tools/tweak-tool.cpp7
7 files changed, 31 insertions, 14 deletions
diff --git a/src/ui/tools/calligraphic-tool.cpp b/src/ui/tools/calligraphic-tool.cpp
index 50c5f413a..b4017e5e7 100644
--- a/src/ui/tools/calligraphic-tool.cpp
+++ b/src/ui/tools/calligraphic-tool.cpp
@@ -288,6 +288,7 @@ bool CalligraphicTool::apply(Geom::Point p) {
// 1b. fixed dc->angle (absolutely flat nib):
double const radians = ( (this->angle - 90) / 180.0 ) * M_PI;
Geom::Point ang1 = Geom::Point(-sin(radians), cos(radians));
+ ang1.y() *= -this->desktop->yaxisdir();
a1 = atan2(ang1);
}
diff --git a/src/ui/tools/flood-tool.cpp b/src/ui/tools/flood-tool.cpp
index 1d1930a4e..de57d4500 100644
--- a/src/ui/tools/flood-tool.cpp
+++ b/src/ui/tools/flood-tool.cpp
@@ -765,8 +765,8 @@ static void sp_flood_do_flood_fill(ToolBase *event_context, GdkEvent *event, boo
unsigned int width = (int)ceil(screen.width() * zoom_scale * padding);
unsigned int height = (int)ceil(screen.height() * zoom_scale * padding);
- Geom::Point origin(screen.min()[Geom::X],
- document->getHeight().value("px") - screen.height() - screen.min()[Geom::Y]);
+ Geom::Point origin = screen.corner(desktop->is_yaxisdown() ? 0 : 3)
+ * desktop->doc2dt();
origin[Geom::X] += (screen.width() * ((1 - padding) / 2));
origin[Geom::Y] += (screen.height() * ((1 - padding) / 2));
@@ -876,7 +876,11 @@ static void sp_flood_do_flood_fill(ToolBase *event_context, GdkEvent *event, boo
}
for (unsigned int i = 0; i < fill_points.size(); i++) {
- Geom::Point pw = Geom::Point(fill_points[i][Geom::X] / zoom_scale, document->getHeight().value("px") + (fill_points[i][Geom::Y] / zoom_scale)) * affine;
+ Geom::Point pw = fill_points[i]
+ * Geom::Scale(1. / zoom_scale)
+ * desktop->doc2dt().withoutTranslation()
+ * desktop->doc2dt()
+ * affine;
pw[Geom::X] = (int)MIN(width - 1, MAX(0, pw[Geom::X]));
pw[Geom::Y] = (int)MIN(height - 1, MAX(0, pw[Geom::Y]));
diff --git a/src/ui/tools/measure-tool.cpp b/src/ui/tools/measure-tool.cpp
index a305fa350..75335ce1a 100644
--- a/src/ui/tools/measure-tool.cpp
+++ b/src/ui/tools/measure-tool.cpp
@@ -862,6 +862,13 @@ void MeasureTool::setGuide(Geom::Point origin,double angle, const char *label)
if(!namedview) {
return;
}
+
+ // <sodipodi:guide> stores inverted y-axis coordinates
+ if (desktop->is_yaxisdown()) {
+ origin[Geom::Y] = doc->getHeight().value("px") - origin[Geom::Y];
+ angle *= -1.0;
+ }
+
origin *= affine;
//measure angle
Inkscape::XML::Node *guide;
diff --git a/src/ui/tools/select-tool.cpp b/src/ui/tools/select-tool.cpp
index 92ae7558b..6e8d631df 100644
--- a/src/ui/tools/select-tool.cpp
+++ b/src/ui/tools/select-tool.cpp
@@ -906,6 +906,7 @@ bool SelectTool::root_handler(GdkEvent* event) {
gdouble const nudge = prefs->getDoubleLimited("/options/nudgedistance/value", 2, 0, 1000, "px"); // in px
gdouble const offset = prefs->getDoubleLimited("/options/defaultscale/value", 2, 0, 1000, "px");
int const snaps = prefs->getInt("/options/rotationsnapsperpi/value", 12);
+ auto const y_dir = desktop->yaxisdir();
switch (get_latin_keyval (&event->key)) {
case GDK_KEY_Left: // move selection left
@@ -935,6 +936,7 @@ bool SelectTool::root_handler(GdkEvent* event) {
case GDK_KEY_KP_Up:
if (!MOD__CTRL(event)) { // not ctrl
gint mul = 1 + gobble_key_events(get_latin_keyval(&event->key), 0); // with any mask
+ mul *= -y_dir;
if (MOD__ALT(event)) { // alt
if (MOD__SHIFT(event)) {
@@ -981,6 +983,7 @@ bool SelectTool::root_handler(GdkEvent* event) {
case GDK_KEY_KP_Down:
if (!MOD__CTRL(event)) { // not ctrl
gint mul = 1 + gobble_key_events(get_latin_keyval(&event->key), 0); // with any mask
+ mul *= -y_dir;
if (MOD__ALT(event)) { // alt
if (MOD__SHIFT(event)) {
@@ -1038,9 +1041,9 @@ bool SelectTool::root_handler(GdkEvent* event) {
gint mul = 1 + gobble_key_events(get_latin_keyval(&event->key), 0); // with any mask
selection->rotateScreen(mul*1);
} else if (MOD__CTRL(event)) {
- selection->rotate(90);
+ selection->rotate(-90 * y_dir);
} else if (snaps) {
- selection->rotate(180.0/snaps);
+ selection->rotate(-180.0/snaps * y_dir);
}
ret = TRUE;
@@ -1051,9 +1054,9 @@ bool SelectTool::root_handler(GdkEvent* event) {
gint mul = 1 + gobble_key_events(get_latin_keyval(&event->key), 0); // with any mask
selection->rotateScreen(-1*mul);
} else if (MOD__CTRL(event)) {
- selection->rotate(-90);
+ selection->rotate(90 * y_dir);
} else if (snaps) {
- selection->rotate(-180.0/snaps);
+ selection->rotate(180.0/snaps * y_dir);
}
ret = TRUE;
diff --git a/src/ui/tools/spray-tool.cpp b/src/ui/tools/spray-tool.cpp
index c56bceda4..0cad1382e 100644
--- a/src/ui/tools/spray-tool.cpp
+++ b/src/ui/tools/spray-tool.cpp
@@ -969,7 +969,7 @@ static bool sp_spray_recursive(SPDesktop *desktop,
sp_spray_scale_rel(center,desktop, item_copied, Geom::Scale(scale));
sp_spray_rotate_rel(center,desktop,item_copied, Geom::Rotate(angle));
// Move the cursor p
- sp_item_move_rel(item_copied, Geom::Translate(move[Geom::X], -move[Geom::Y]));
+ sp_item_move_rel(item_copied, Geom::Translate(move * desktop->doc2dt().withoutTranslation()));
Inkscape::GC::release(copy);
if(picker){
sp_desktop_apply_css_recursive(item_copied, css, true);
@@ -1013,7 +1013,7 @@ static bool sp_spray_recursive(SPDesktop *desktop,
sp_spray_scale_rel(center, desktop, item_copied, Geom::Scale(_scale, _scale));
sp_spray_scale_rel(center, desktop, item_copied, Geom::Scale(scale, scale));
sp_spray_rotate_rel(center, desktop, item_copied, Geom::Rotate(angle));
- sp_item_move_rel(item_copied, Geom::Translate(move[Geom::X], -move[Geom::Y]));
+ sp_item_move_rel(item_copied, Geom::Translate(move * desktop->doc2dt().withoutTranslation()));
// Union and duplication
set->clear();
@@ -1101,7 +1101,7 @@ static bool sp_spray_recursive(SPDesktop *desktop,
sp_spray_scale_rel(center, desktop, item_copied, Geom::Scale(_scale, _scale));
sp_spray_scale_rel(center, desktop, item_copied, Geom::Scale(scale, scale));
sp_spray_rotate_rel(center, desktop, item_copied, Geom::Rotate(angle));
- sp_item_move_rel(item_copied, Geom::Translate(move[Geom::X], -move[Geom::Y]));
+ sp_item_move_rel(item_copied, Geom::Translate(move * desktop->doc2dt().withoutTranslation()));
if(picker){
sp_desktop_apply_css_recursive(item_copied, css, true);
}
diff --git a/src/ui/tools/text-tool.cpp b/src/ui/tools/text-tool.cpp
index 713d72a40..8542b1b6f 100644
--- a/src/ui/tools/text-tool.cpp
+++ b/src/ui/tools/text-tool.cpp
@@ -623,7 +623,8 @@ bool TextTool::root_handler(GdkEvent* event) {
// Cursor height is defined by the new text object's font size; it needs to be set
// artificially here, for the text object does not exist yet:
double cursor_height = sp_desktop_get_font_size_tool(desktop);
- this->cursor->setCoords(p1, p1 + Geom::Point(0, cursor_height));
+ auto const y_dir = desktop->yaxisdir();
+ this->cursor->setCoords(p1, p1 - Geom::Point(0, y_dir * cursor_height));
if (this->imc) {
GdkRectangle im_cursor;
Geom::Point const top_left = SP_EVENT_CONTEXT(this)->desktop->get_display_area().corner(3);
diff --git a/src/ui/tools/tweak-tool.cpp b/src/ui/tools/tweak-tool.cpp
index 060131b49..d0b8209f0 100644
--- a/src/ui/tools/tweak-tool.cpp
+++ b/src/ui/tools/tweak-tool.cpp
@@ -397,7 +397,7 @@ sp_tweak_dilate_recursive (Inkscape::Selection *selection, SPItem *item, Geom::P
if (a->contains(p)) x = 0;
if (x < 1) {
Geom::Point move = force * 0.5 * (cos(M_PI * x) + 1) * vector;
- sp_item_move_rel(item, Geom::Translate(move[Geom::X], -move[Geom::Y]));
+ sp_item_move_rel(item, Geom::Translate(move * selection->desktop()->doc2dt().withoutTranslation()));
did = true;
}
}
@@ -411,7 +411,7 @@ sp_tweak_dilate_recursive (Inkscape::Selection *selection, SPItem *item, Geom::P
if (x < 1) {
Geom::Point move = force * 0.5 * (cos(M_PI * x) + 1) *
(reverse? (a->midpoint() - p) : (p - a->midpoint()));
- sp_item_move_rel(item, Geom::Translate(move[Geom::X], -move[Geom::Y]));
+ sp_item_move_rel(item, Geom::Translate(move * selection->desktop()->doc2dt().withoutTranslation()));
did = true;
}
}
@@ -426,7 +426,7 @@ sp_tweak_dilate_recursive (Inkscape::Selection *selection, SPItem *item, Geom::P
if (a->contains(p)) x = 0;
if (x < 1) {
Geom::Point move = force * 0.5 * (cos(M_PI * x) + 1) * Geom::Point(cos(dp)*dr, sin(dp)*dr);
- sp_item_move_rel(item, Geom::Translate(move[Geom::X], -move[Geom::Y]));
+ sp_item_move_rel(item, Geom::Translate(move * selection->desktop()->doc2dt().withoutTranslation()));
did = true;
}
}
@@ -452,6 +452,7 @@ sp_tweak_dilate_recursive (Inkscape::Selection *selection, SPItem *item, Geom::P
if (a->contains(p)) x = 0;
if (x < 1) {
double angle = (reverse? force : -force) * 0.05 * (cos(M_PI * x) + 1) * M_PI;
+ angle *= -selection->desktop()->yaxisdir();
sp_item_rotate_rel(item, Geom::Rotate(angle));
did = true;
}