From 83f36efa18ecbf1aa71205f04ea6960dcbf49158 Mon Sep 17 00:00:00 2001 From: Krzysztof Kosi??ski Date: Sun, 4 Apr 2010 23:43:36 +0200 Subject: Merge PDF rendering fix (bzr r9281.1.11) --- src/extension/internal/cairo-renderer.cpp | 6 +----- src/extension/internal/latex-text-renderer.cpp | 3 ++- 2 files changed, 3 insertions(+), 6 deletions(-) diff --git a/src/extension/internal/cairo-renderer.cpp b/src/extension/internal/cairo-renderer.cpp index 6e4bb3b7e..52f070591 100644 --- a/src/extension/internal/cairo-renderer.cpp +++ b/src/extension/internal/cairo-renderer.cpp @@ -631,12 +631,8 @@ CairoRenderer::setupDocument(CairoRenderContext *ctx, SPDocument *doc, bool page if (ret && !pageBoundingBox) { - double high = sp_document_height(doc); - if (ctx->_vector_based_target) - high *= PT_PER_PX; - Geom::Matrix tp(Geom::Translate(-d.x0 * (ctx->_vector_based_target ? PX_PER_PT : 1.0), - (d.y1 - high) * (ctx->_vector_based_target ? PX_PER_PT : 1.0))); + -d.y0 * (ctx->_vector_based_target ? PX_PER_PT : 1.0))); ctx->transform(&tp); } diff --git a/src/extension/internal/latex-text-renderer.cpp b/src/extension/internal/latex-text-renderer.cpp index 28bba1beb..1fdf1d7fd 100644 --- a/src/extension/internal/latex-text-renderer.cpp +++ b/src/extension/internal/latex-text-renderer.cpp @@ -501,7 +501,8 @@ LaTeXTextRenderer::setupDocument(SPDocument *doc, bool pageBoundingBox, SPItem * if (!pageBoundingBox) { - push_transform( Geom::Translate( - d->min() ) ); + Geom::Translate t(-d->min()[Geom::X], d->max()[Geom::Y] - sp_document_height(doc)); + push_transform( t ); } // flip y-axis -- cgit v1.2.3 From 4bfe9e6856f66825a0bf139e9744e2bc290918ae Mon Sep 17 00:00:00 2001 From: Krzysztof Kosi??ski Date: Sun, 4 Apr 2010 23:45:07 +0200 Subject: Coords: fix SPDesktop::point() method (bzr r9281.1.12) --- src/desktop.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/desktop.cpp b/src/desktop.cpp index 1953ae2a6..6690e0af1 100644 --- a/src/desktop.cpp +++ b/src/desktop.cpp @@ -724,8 +724,8 @@ SPDesktop::point() const if (p[Geom::X] >= r0[Geom::X] && p[Geom::X] <= r1[Geom::X] && - p[Geom::Y] >= r1[Geom::Y] && - p[Geom::Y] <= r0[Geom::Y]) + p[Geom::Y] >= r0[Geom::Y] && + p[Geom::Y] <= r1[Geom::Y]) { return p; } else { -- cgit v1.2.3 From 6581883407e2b12ac0926cf5eaf9a971742df20c Mon Sep 17 00:00:00 2001 From: Krzysztof Kosi??ski Date: Mon, 5 Apr 2010 00:16:13 +0200 Subject: Coords: fix initial cursor position in the text tool (bzr r9281.1.13) --- src/text-context.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/text-context.cpp b/src/text-context.cpp index 4f89bd1e1..984876f78 100644 --- a/src/text-context.cpp +++ b/src/text-context.cpp @@ -684,7 +684,7 @@ sp_text_context_root_handler(SPEventContext *const event_context, GdkEvent *cons // Cursor height is defined by the new text object's font size; it needs to be set // articifically here, for the text object does not exist yet: double cursor_height = sp_desktop_get_font_size_tool(desktop); - sp_ctrlline_set_coords(SP_CTRLLINE(tc->cursor), dtp, dtp + Geom::Point(0, cursor_height)); + sp_ctrlline_set_coords(SP_CTRLLINE(tc->cursor), dtp, dtp - Geom::Point(0, cursor_height)); event_context->_message_context->set(Inkscape::NORMAL_MESSAGE, _("Type text; Enter to start new line.")); // FIXME:: this is a copy of a string from _update_cursor below, do not desync event_context->within_tolerance = false; -- cgit v1.2.3 From a03fbcd36d55eb8e79dd7fef5ee9d67365f471cf Mon Sep 17 00:00:00 2001 From: Krzysztof Kosi??ski Date: Mon, 5 Apr 2010 01:26:13 +0200 Subject: Coords: fix guidelines (bzr r9281.1.14) --- src/document.cpp | 2 +- src/sp-guide.cpp | 6 ++++-- src/sp-object-repr.cpp | 17 +++++++++-------- src/sp-object-repr.h | 2 +- 4 files changed, 15 insertions(+), 12 deletions(-) diff --git a/src/document.cpp b/src/document.cpp index f137ba60d..aeafaf1f9 100644 --- a/src/document.cpp +++ b/src/document.cpp @@ -327,7 +327,7 @@ sp_document_create(Inkscape::XML::Document *rdoc, document->base = NULL; document->name = g_strdup(name); - document->root = sp_object_repr_build_tree(document, rroot); + sp_object_repr_build_tree(document, rroot); /* fixme: Not sure about this, but lets assume ::build updates */ rroot->setAttribute("inkscape:version", Inkscape::version_string); diff --git a/src/sp-guide.cpp b/src/sp-guide.cpp index f5edf7d97..def039937 100644 --- a/src/sp-guide.cpp +++ b/src/sp-guide.cpp @@ -217,12 +217,14 @@ static void sp_guide_set(SPObject *object, unsigned int key, const gchar *value) success += sp_svg_number_read_d(strarray[1], &newy); g_strfreev (strarray); if (success == 2) { - guide->point_on_line = Geom::Point(newx, newy); + // Desktop coords fix + guide->point_on_line = Geom::Point(newx, sp_document_height(guide->document) - newy); } else if (success == 1) { // before 0.46 style guideline definition. const gchar *attr = SP_OBJECT_REPR(object)->attribute("orientation"); if (attr && !strcmp(attr, "horizontal")) { - guide->point_on_line = Geom::Point(0, newx); + // Desktop coords fix + guide->point_on_line = Geom::Point(0, sp_document_height(guide->document) - newx); } else { guide->point_on_line = Geom::Point(newx, 0); } diff --git a/src/sp-object-repr.cpp b/src/sp-object-repr.cpp index 62143e3ab..e32819746 100644 --- a/src/sp-object-repr.cpp +++ b/src/sp-object-repr.cpp @@ -91,9 +91,9 @@ static unsigned const N_NAME_TYPES = SODIPODI_TYPE + 1; static GType name_to_gtype(NameType name_type, gchar const *name); /** - * Construct an SPRoot and all its descendents from the given repr. + * Construct an SPRoot and all its descendents from the given XML representation. */ -SPObject * +void sp_object_repr_build_tree(SPDocument *document, Inkscape::XML::Node *repr) { g_assert(document != NULL); @@ -103,13 +103,14 @@ sp_object_repr_build_tree(SPDocument *document, Inkscape::XML::Node *repr) g_assert(name != NULL); GType const type = name_to_gtype(REPR_NAME, name); g_assert(g_type_is_a(type, SP_TYPE_ROOT)); - gpointer newobj = g_object_new(type, 0); - g_assert(newobj != NULL); - SPObject *const object = SP_OBJECT(newobj); - g_assert(object != NULL); - sp_object_invoke_build(object, document, repr, FALSE); - return object; + // create and assign root + SPObject *root = SP_OBJECT(g_object_new(type, 0)); + g_assert(root != NULL); + document->root = root; + + // recursively create SP tree elements + sp_object_invoke_build(root, document, repr, FALSE); } GType diff --git a/src/sp-object-repr.h b/src/sp-object-repr.h index f3a80f83c..43aead41e 100644 --- a/src/sp-object-repr.h +++ b/src/sp-object-repr.h @@ -21,7 +21,7 @@ class Node; } -SPObject *sp_object_repr_build_tree (SPDocument *document, Inkscape::XML::Node *repr); +void sp_object_repr_build_tree (SPDocument *document, Inkscape::XML::Node *repr); GType sp_repr_type_lookup (Inkscape::XML::Node *repr); -- cgit v1.2.3