From 1fa0c72b664afa4803dffd463ed11ce01632ab76 Mon Sep 17 00:00:00 2001 From: Thomas Holder Date: Wed, 12 Sep 2018 16:43:47 +0200 Subject: 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 --- src/helper/png-write.cpp | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) (limited to 'src/helper/png-write.cpp') diff --git a/src/helper/png-write.cpp b/src/helper/png-write.cpp index 92fdc3648..fe5412c4e 100644 --- a/src/helper/png-write.cpp +++ b/src/helper/png-write.cpp @@ -31,6 +31,8 @@ #include "rdf.h" #include "util/units.h" +#include "inkscape.h" + #include "object/sp-item.h" #include "object/sp-root.h" #include "object/sp-defs.h" @@ -425,8 +427,13 @@ ExportResult sp_export_png_file(SPDocument *doc, gchar const *filename, doc->ensureUpToDate(); + Geom::Affine dt2doc; + if (SP_ACTIVE_DESKTOP) { + dt2doc = SP_ACTIVE_DESKTOP->dt2doc(); + } + /* Calculate translation by transforming to document coordinates (flipping Y)*/ - Geom::Point translation = Geom::Point(-area[Geom::X][0], area[Geom::Y][1] - doc->getHeight().value("px")); + Geom::Point translation = -(area * dt2doc).min(); /* This calculation is only valid when assumed that (x0,y0)= area.corner(0) and (x1,y1) = area.corner(2) * 1) a[0] * x0 + a[2] * y1 + a[4] = 0.0 -- cgit v1.2.3