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/extension | |
| 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/extension')
| -rw-r--r-- | src/extension/internal/cairo-renderer.cpp | 16 | ||||
| -rw-r--r-- | src/extension/internal/grid.cpp | 4 | ||||
| -rw-r--r-- | src/extension/internal/latex-text-renderer.cpp | 5 |
3 files changed, 11 insertions, 14 deletions
diff --git a/src/extension/internal/cairo-renderer.cpp b/src/extension/internal/cairo-renderer.cpp index e390c5314..32f42c3ce 100644 --- a/src/extension/internal/cairo-renderer.cpp +++ b/src/extension/internal/cairo-renderer.cpp @@ -663,7 +663,7 @@ CairoRenderer::setupDocument(CairoRenderContext *ctx, SPDocument *doc, bool page if (pageBoundingBox) { d = Geom::Rect::from_xywh(Geom::Point(0,0), doc->getDimensions()); } else { - Geom::OptRect bbox = base->desktopVisualBounds(); + Geom::OptRect bbox = base->documentVisualBounds(); if (!bbox) { g_message("CairoRenderer: empty bounding box."); return false; @@ -672,13 +672,14 @@ CairoRenderer::setupDocument(CairoRenderContext *ctx, SPDocument *doc, bool page } d.expandBy(bleedmargin_px); + double px_to_ctx_units = 1.0; if (ctx->_vector_based_target) { // convert from px to pt - d *= Geom::Scale(Inkscape::Util::Quantity::convert(1, "px", "pt")); + px_to_ctx_units = Inkscape::Util::Quantity::convert(1, "px", "pt"); } - ctx->_width = d.width(); - ctx->_height = d.height(); + ctx->_width = d.width() * px_to_ctx_units; + ctx->_height = d.height() * px_to_ctx_units; TRACE(("setupDocument: %f x %f\n", ctx->_width, ctx->_height)); @@ -690,13 +691,8 @@ CairoRenderer::setupDocument(CairoRenderContext *ctx, SPDocument *doc, bool page Geom::Affine tp( Geom::Translate( bleedmargin_px, bleedmargin_px ) ); ctx->transform(tp); } else { - double high = doc->getHeight().value("px"); - if (ctx->_vector_based_target) - high = Inkscape::Util::Quantity::convert(high, "px", "pt"); - // this transform translates the export drawing to a virtual page (0,0)-(width,height) - Geom::Affine tp(Geom::Translate(-d.left() * (ctx->_vector_based_target ? Inkscape::Util::Quantity::convert(1, "pt", "px") : 1.0), - (d.bottom() - high) * (ctx->_vector_based_target ? Inkscape::Util::Quantity::convert(1, "pt", "px") : 1.0))); + Geom::Affine tp(Geom::Translate(-d.min())); ctx->transform(tp); } } diff --git a/src/extension/internal/grid.cpp b/src/extension/internal/grid.cpp index 9e05ecd29..82531e009 100644 --- a/src/extension/internal/grid.cpp +++ b/src/extension/internal/grid.cpp @@ -100,9 +100,7 @@ Grid::effect (Inkscape::Extension::Effect *module, Inkscape::UI::View::View *doc bounding_area = *bounds; } - gdouble doc_height = (document->doc())->getHeight().value("px"); - Geom::Rect temprec = Geom::Rect(Geom::Point(bounding_area.min()[Geom::X], doc_height - bounding_area.min()[Geom::Y]), - Geom::Point(bounding_area.max()[Geom::X], doc_height - bounding_area.max()[Geom::Y])); + Geom::Rect temprec = bounding_area * static_cast<SPDesktop *>(document)->doc2dt(); bounding_area = temprec; } diff --git a/src/extension/internal/latex-text-renderer.cpp b/src/extension/internal/latex-text-renderer.cpp index f346a304a..c78471080 100644 --- a/src/extension/internal/latex-text-renderer.cpp +++ b/src/extension/internal/latex-text-renderer.cpp @@ -45,6 +45,7 @@ #include "extension/output.h" #include "extension/system.h" +#include "inkscape.h" #include "inkscape-version.h" #include "io/sys.h" #include "document.h" @@ -680,7 +681,9 @@ LaTeXTextRenderer::setupDocument(SPDocument *doc, bool pageBoundingBox, float bl } // flip y-axis - push_transform( Geom::Scale(1,-1) * Geom::Translate(0, doc->getHeight().value("px")) ); /// @fixme hardcoded desktop transform! + if (SP_ACTIVE_DESKTOP) { + push_transform( SP_ACTIVE_DESKTOP->doc2dt() ); + } // write the info to LaTeX Inkscape::SVGOStringStream os; |
