From 7f81932011c4ad87db74d62a2843949f4a5a3ffe Mon Sep 17 00:00:00 2001 From: "Johan B. C. Engelen" Date: Sun, 1 May 2011 16:27:28 +0200 Subject: Fix crashes on empty marker definitions. Fixed bugs: - https://launchpad.net/bugs/774834 (bzr r10195) --- src/extension/internal/cairo-renderer.cpp | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) (limited to 'src/extension/internal/cairo-renderer.cpp') diff --git a/src/extension/internal/cairo-renderer.cpp b/src/extension/internal/cairo-renderer.cpp index dbda82c28..c7c9d3a61 100644 --- a/src/extension/internal/cairo-renderer.cpp +++ b/src/extension/internal/cairo-renderer.cpp @@ -170,11 +170,13 @@ static void sp_shape_render_invoke_marker_rendering(SPMarker* marker, Geom::Affi if (render) { SPItem* marker_item = sp_item_first_item_child(marker); - tr = (Geom::Affine)marker_item->transform * (Geom::Affine)marker->c2p * tr; - Geom::Affine old_tr = marker_item->transform; - marker_item->transform = tr; - ctx->getRenderer()->renderItem (ctx, marker_item); - marker_item->transform = old_tr; + if (marker_item) { + tr = (Geom::Affine)marker_item->transform * (Geom::Affine)marker->c2p * tr; + Geom::Affine old_tr = marker_item->transform; + marker_item->transform = tr; + ctx->getRenderer()->renderItem (ctx, marker_item); + marker_item->transform = old_tr; + } } } -- cgit v1.2.3 From b4a47c1fac39951baab9c209bcdae5914ff4bb3a Mon Sep 17 00:00:00 2001 From: Adib Taraben Date: Thu, 5 May 2011 23:42:21 +0200 Subject: symbol rendering fix for bug:705345 (bzr r10196.1.1) --- src/extension/internal/cairo-renderer.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'src/extension/internal/cairo-renderer.cpp') diff --git a/src/extension/internal/cairo-renderer.cpp b/src/extension/internal/cairo-renderer.cpp index c7c9d3a61..f5504d755 100644 --- a/src/extension/internal/cairo-renderer.cpp +++ b/src/extension/internal/cairo-renderer.cpp @@ -544,6 +544,9 @@ static void sp_item_invoke_render(SPItem *item, CairoRenderContext *ctx) if (SP_IS_ROOT(item)) { TRACE(("root\n")); return sp_root_render(item, ctx); + } else if (SP_IS_SYMBOL(item)) { + TRACE(("symbol\n")); + return sp_symbol_render(item, ctx); } else if (SP_IS_GROUP(item)) { TRACE(("group\n")); return sp_group_render(item, ctx); @@ -554,9 +557,6 @@ static void sp_item_invoke_render(SPItem *item, CairoRenderContext *ctx) TRACE(("use begin---\n")); sp_use_render(item, ctx); TRACE(("---use end\n")); - } else if (SP_IS_SYMBOL(item)) { - TRACE(("symbol\n")); - return sp_symbol_render(item, ctx); } else if (SP_IS_TEXT(item)) { TRACE(("text\n")); return sp_text_render(item, ctx); -- cgit v1.2.3 From 3638efba5bec8a6afc9211aa6bbe289767d20b38 Mon Sep 17 00:00:00 2001 From: "Jon A. Cruz" Date: Fri, 3 Jun 2011 19:45:55 -0700 Subject: Removed outdated/unsafe SP_DOCUMENT_DEFS macro and reduced usage of SP_ROOT() gtk type function/macro. (bzr r10254) --- src/extension/internal/cairo-renderer.cpp | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) (limited to 'src/extension/internal/cairo-renderer.cpp') diff --git a/src/extension/internal/cairo-renderer.cpp b/src/extension/internal/cairo-renderer.cpp index f5504d755..bbafd7e94 100644 --- a/src/extension/internal/cairo-renderer.cpp +++ b/src/extension/internal/cairo-renderer.cpp @@ -420,19 +420,18 @@ static void sp_symbol_render(SPItem *item, CairoRenderContext *ctx) ctx->popState(); } -static void sp_root_render(SPItem *item, CairoRenderContext *ctx) +static void sp_root_render(SPRoot *root, CairoRenderContext *ctx) { - SPRoot *root = SP_ROOT(item); CairoRenderer *renderer = ctx->getRenderer(); - if (!ctx->getCurrentState()->has_overflow && item->parent) + if (!ctx->getCurrentState()->has_overflow && root->parent) ctx->addClippingRect(root->x.computed, root->y.computed, root->width.computed, root->height.computed); ctx->pushState(); - renderer->setStateForItem(ctx, item); + renderer->setStateForItem(ctx, root); Geom::Affine tempmat (root->c2p); ctx->transform(&tempmat); - sp_group_render(item, ctx); + sp_group_render(root, ctx); ctx->popState(); } @@ -543,7 +542,7 @@ static void sp_item_invoke_render(SPItem *item, CairoRenderContext *ctx) if (SP_IS_ROOT(item)) { TRACE(("root\n")); - return sp_root_render(item, ctx); + return sp_root_render(SP_ROOT(item), ctx); } else if (SP_IS_SYMBOL(item)) { TRACE(("symbol\n")); return sp_symbol_render(item, ctx); -- cgit v1.2.3 From aa7a997188b7f69017897a93bd153048df6b1dbc Mon Sep 17 00:00:00 2001 From: Krzysztof Kosi??ski Date: Wed, 6 Jul 2011 22:59:33 +0200 Subject: Fix mixed up colors when exporting images with bitmaps to PDF and other Cairo formats. Fixes LP #804311 Fixed bugs: - https://launchpad.net/bugs/804311 (bzr r10421) --- src/extension/internal/cairo-renderer.cpp | 16 ++++++---------- 1 file changed, 6 insertions(+), 10 deletions(-) (limited to 'src/extension/internal/cairo-renderer.cpp') diff --git a/src/extension/internal/cairo-renderer.cpp b/src/extension/internal/cairo-renderer.cpp index bbafd7e94..6118a7ae9 100644 --- a/src/extension/internal/cairo-renderer.cpp +++ b/src/extension/internal/cairo-renderer.cpp @@ -41,6 +41,7 @@ #include "display/nr-arena-group.h" #include "display/curve.h" #include "display/canvas-bpath.h" +#include "display/cairo-utils.h" #include "sp-item.h" #include "sp-item-group.h" #include "style.h" @@ -345,18 +346,15 @@ static void sp_flowtext_render(SPItem *item, CairoRenderContext *ctx) static void sp_image_render(SPItem *item, CairoRenderContext *ctx) { SPImage *image; - guchar *px; - int w, h, rs; + int w, h; image = SP_IMAGE (item); if (!image->pixbuf) return; if ((image->width.computed <= 0.0) || (image->height.computed <= 0.0)) return; - px = gdk_pixbuf_get_pixels (image->pixbuf); w = gdk_pixbuf_get_width (image->pixbuf); h = gdk_pixbuf_get_height (image->pixbuf); - rs = gdk_pixbuf_get_rowstride (image->pixbuf); double x = image->x.computed; double y = image->y.computed; @@ -376,7 +374,7 @@ static void sp_image_render(SPItem *item, CairoRenderContext *ctx) Geom::Scale s(width / (double)w, height / (double)h); Geom::Affine t(s * tp); - ctx->renderImage (px, w, h, rs, &t, item->style); + ctx->renderImage (image->pixbuf, &t, item->style); } static void sp_symbol_render(SPItem *item, CairoRenderContext *ctx) @@ -516,11 +514,9 @@ static void sp_asbitmap_render(SPItem *item, CairoRenderContext *ctx) if (pb) { TEST(gdk_pixbuf_save( pb, "bitmap.png", "png", NULL, NULL )); - unsigned char *px = gdk_pixbuf_get_pixels (pb); - unsigned int w = gdk_pixbuf_get_width(pb); - unsigned int h = gdk_pixbuf_get_height(pb); - unsigned int rs = gdk_pixbuf_get_rowstride(pb); - ctx->renderImage(px, w, h, rs, &t, item->style); + // TODO this is stupid - we just converted to pixbuf format when generating the bitmap! + convert_pixbuf_normal_to_argb32(pb); + ctx->renderImage(pb, &t, item->style); gdk_pixbuf_unref(pb); pb = 0; } -- cgit v1.2.3 From 6973283a77d7becd6a5a1bd7396206c6840ca785 Mon Sep 17 00:00:00 2001 From: Krzysztof Kosi??ski Date: Wed, 13 Jul 2011 23:43:55 +0200 Subject: Fix crashes in print preview Fixed bugs: - https://launchpad.net/bugs/806105 (bzr r10450) --- src/extension/internal/cairo-renderer.cpp | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) (limited to 'src/extension/internal/cairo-renderer.cpp') diff --git a/src/extension/internal/cairo-renderer.cpp b/src/extension/internal/cairo-renderer.cpp index 6118a7ae9..1e550f7d1 100644 --- a/src/extension/internal/cairo-renderer.cpp +++ b/src/extension/internal/cairo-renderer.cpp @@ -475,9 +475,11 @@ static void sp_asbitmap_render(SPItem *item, CairoRenderContext *ctx) } // The width and height of the bitmap in pixels - unsigned width = (unsigned) floor ((bbox->max()[Geom::X] - bbox->min()[Geom::X]) * (res / PX_PER_IN)); - unsigned height =(unsigned) floor ((bbox->max()[Geom::Y] - bbox->min()[Geom::Y]) * (res / PX_PER_IN)); - + unsigned width = ceil((bbox->max()[Geom::X] - bbox->min()[Geom::X]) * (res / PX_PER_IN)); + unsigned height = ceil((bbox->max()[Geom::Y] - bbox->min()[Geom::Y]) * (res / PX_PER_IN)); + + if (width == 0 || height == 0) return; + // Scale to exactly fit integer bitmap inside bounding box double scale_x = (bbox->max()[Geom::X] - bbox->min()[Geom::X]) / width; double scale_y = (bbox->max()[Geom::Y] - bbox->min()[Geom::Y]) / height; -- cgit v1.2.3 From 2be2cf32db0668dc64512a98f6c2394152bd10cc Mon Sep 17 00:00:00 2001 From: "Jon A. Cruz" Date: Sat, 16 Jul 2011 00:42:39 -0700 Subject: Cleanup of oudated/redundant SP_ITEM() macro use. (bzr r10461) --- src/extension/internal/cairo-renderer.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src/extension/internal/cairo-renderer.cpp') diff --git a/src/extension/internal/cairo-renderer.cpp b/src/extension/internal/cairo-renderer.cpp index 1e550f7d1..3b16df96c 100644 --- a/src/extension/internal/cairo-renderer.cpp +++ b/src/extension/internal/cairo-renderer.cpp @@ -624,7 +624,7 @@ CairoRenderer::setupDocument(CairoRenderContext *ctx, SPDocument *doc, bool page g_assert( ctx != NULL ); if (!base) { - base = SP_ITEM(doc->getRoot()); + base = doc->getRoot(); } NRRect d; -- cgit v1.2.3 From eed6e9c2c229b10911a23976c47da79fc70a5b87 Mon Sep 17 00:00:00 2001 From: "Johan B. C. Engelen" Date: Sun, 17 Jul 2011 21:47:09 +0200 Subject: - rename SPItem::i2d_affine to i2dt_affine, to clarify that it is item-to-desktop, not item-to-document. This should make it easier to spot bugs. - tag some instances where the document-to-desktop transform has been hardcoded (bzr r10466) --- src/extension/internal/cairo-renderer.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'src/extension/internal/cairo-renderer.cpp') diff --git a/src/extension/internal/cairo-renderer.cpp b/src/extension/internal/cairo-renderer.cpp index 3b16df96c..7eb7881dc 100644 --- a/src/extension/internal/cairo-renderer.cpp +++ b/src/extension/internal/cairo-renderer.cpp @@ -454,7 +454,7 @@ static void sp_asbitmap_render(SPItem *item, CairoRenderContext *ctx) // Get the bounding box of the selection in document coordinates. Geom::OptRect bbox = - item->getBounds(item->i2d_affine(), SPItem::RENDERING_BBOX); + item->getBounds(item->i2dt_affine(), SPItem::RENDERING_BBOX); // no bbox, e.g. empty group if (!bbox) { @@ -502,7 +502,7 @@ static void sp_asbitmap_render(SPItem *item, CairoRenderContext *ctx) (Geom::Affine)(Geom::Translate (shift_x, shift_y)); // ctx matrix already includes item transformation. We must substract. - Geom::Affine t_item = item->i2d_affine (); + Geom::Affine t_item = item->i2dt_affine (); Geom::Affine t = t_on_document * t_item.inverse(); // Do the export @@ -633,7 +633,7 @@ CairoRenderer::setupDocument(CairoRenderContext *ctx, SPDocument *doc, bool page d.x1 = doc->getWidth(); d.y1 = doc->getHeight(); } else { - base->invoke_bbox( &d, base->i2d_affine(), TRUE, SPItem::RENDERING_BBOX); + base->invoke_bbox( &d, base->i2dt_affine(), TRUE, SPItem::RENDERING_BBOX); } if (ctx->_vector_based_target) { -- cgit v1.2.3 From 4dd33aa4d5c57706c7f64f63391174954160a308 Mon Sep 17 00:00:00 2001 From: Krzysztof Kosi??ski Date: Sat, 6 Aug 2011 14:18:32 +0200 Subject: Rewrite NRArenaItem hierarchy into C++ (bzr r10347.1.21) --- src/extension/internal/cairo-renderer.cpp | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) (limited to 'src/extension/internal/cairo-renderer.cpp') diff --git a/src/extension/internal/cairo-renderer.cpp b/src/extension/internal/cairo-renderer.cpp index 7eb7881dc..76fc5073f 100644 --- a/src/extension/internal/cairo-renderer.cpp +++ b/src/extension/internal/cairo-renderer.cpp @@ -37,8 +37,7 @@ #include #include "display/nr-arena.h" -#include "display/nr-arena-item.h" -#include "display/nr-arena-group.h" +#include "display/display-forward.h" #include "display/curve.h" #include "display/canvas-bpath.h" #include "display/cairo-utils.h" @@ -88,14 +87,14 @@ struct SPClipPathView { SPClipPathView *next; unsigned int key; - NRArenaItem *arenaitem; + Inkscape::DrawingItem *arenaitem; NRRect bbox; }; struct SPMaskView { SPMaskView *next; unsigned int key; - NRArenaItem *arenaitem; + Inkscape::DrawingItem *arenaitem; NRRect bbox; }; -- cgit v1.2.3 From 75976ea07dba9b97186667524d0a76603de416af Mon Sep 17 00:00:00 2001 From: Krzysztof Kosi??ski Date: Sun, 7 Aug 2011 12:53:12 +0200 Subject: Rewrite NRArena -> Inkscape::Drawing. Call render and update methods on the Drawing rather than on the root DrawingItem. (bzr r10347.1.25) --- src/extension/internal/cairo-renderer.cpp | 1 - 1 file changed, 1 deletion(-) (limited to 'src/extension/internal/cairo-renderer.cpp') diff --git a/src/extension/internal/cairo-renderer.cpp b/src/extension/internal/cairo-renderer.cpp index 76fc5073f..5e7fb991a 100644 --- a/src/extension/internal/cairo-renderer.cpp +++ b/src/extension/internal/cairo-renderer.cpp @@ -36,7 +36,6 @@ #include #include -#include "display/nr-arena.h" #include "display/display-forward.h" #include "display/curve.h" #include "display/canvas-bpath.h" -- cgit v1.2.3 From 72cc39b9f0b340548f395c7f61ca9662b34aea09 Mon Sep 17 00:00:00 2001 From: Krzysztof Kosi??ski Date: Sat, 27 Aug 2011 11:04:37 +0200 Subject: Refactor SPItem bounding box methods: remove NRRect usage and make code using them more obvious. Fix filter region computation. (bzr r10582.1.1) --- src/extension/internal/cairo-renderer.cpp | 86 ++++++++++++++----------------- 1 file changed, 38 insertions(+), 48 deletions(-) (limited to 'src/extension/internal/cairo-renderer.cpp') diff --git a/src/extension/internal/cairo-renderer.cpp b/src/extension/internal/cairo-renderer.cpp index 5e7fb991a..adfa0421d 100644 --- a/src/extension/internal/cairo-renderer.cpp +++ b/src/extension/internal/cairo-renderer.cpp @@ -181,15 +181,13 @@ static void sp_shape_render_invoke_marker_rendering(SPMarker* marker, Geom::Affi static void sp_shape_render (SPItem *item, CairoRenderContext *ctx) { - NRRect pbox; - SPShape *shape = SP_SHAPE(item); if (!shape->curve) { return; } - item->invoke_bbox( &pbox, Geom::identity(), TRUE); + Geom::OptRect pbox = item->geometricBounds(); SPStyle* style = item->style; @@ -198,7 +196,7 @@ static void sp_shape_render (SPItem *item, CairoRenderContext *ctx) return; } - ctx->renderPathVector(pathv, style, &pbox); + ctx->renderPathVector(pathv, style, pbox); // START marker for (int i = 0; i < 2; i++) { // SP_MARKER_LOC and SP_MARKER_LOC_START @@ -316,7 +314,7 @@ static void sp_use_render(SPItem *item, CairoRenderContext *ctx) if ((use->x._set && use->x.computed != 0) || (use->y._set && use->y.computed != 0)) { Geom::Affine tp(Geom::Translate(use->x.computed, use->y.computed)); ctx->pushState(); - ctx->transform(&tp); + ctx->transform(tp); translated = true; } @@ -372,7 +370,7 @@ static void sp_image_render(SPItem *item, CairoRenderContext *ctx) Geom::Scale s(width / (double)w, height / (double)h); Geom::Affine t(s * tp); - ctx->renderImage (image->pixbuf, &t, item->style); + ctx->renderImage (image->pixbuf, t, item->style); } static void sp_symbol_render(SPItem *item, CairoRenderContext *ctx) @@ -384,7 +382,7 @@ static void sp_symbol_render(SPItem *item, CairoRenderContext *ctx) /* Cloned is actually renderable */ ctx->pushState(); - ctx->transform(&symbol->c2p); + ctx->transform(symbol->c2p); // apply viewbox if set if (0 /*symbol->viewBox_set*/) { @@ -409,7 +407,7 @@ static void sp_symbol_render(SPItem *item, CairoRenderContext *ctx) vb2user[4] = x - symbol->viewBox.x0 * vb2user[0]; vb2user[5] = y - symbol->viewBox.y0 * vb2user[3]; - ctx->transform(&vb2user); + ctx->transform(vb2user); } sp_group_render(item, ctx); @@ -425,8 +423,7 @@ static void sp_root_render(SPRoot *root, CairoRenderContext *ctx) ctx->pushState(); renderer->setStateForItem(ctx, root); - Geom::Affine tempmat (root->c2p); - ctx->transform(&tempmat); + ctx->transform(root->c2p); sp_group_render(root, ctx); ctx->popState(); } @@ -450,9 +447,8 @@ static void sp_asbitmap_render(SPItem *item, CairoRenderContext *ctx) } TRACE(("sp_asbitmap_render: resolution: %f\n", res )); - // Get the bounding box of the selection in document coordinates. - Geom::OptRect bbox = - item->getBounds(item->i2dt_affine(), SPItem::RENDERING_BBOX); + // Get the bounding box of the selection in desktop coordinates. + Geom::OptRect bbox = item->desktopVisualBounds(); // no bbox, e.g. empty group if (!bbox) { @@ -460,12 +456,7 @@ static void sp_asbitmap_render(SPItem *item, CairoRenderContext *ctx) } Geom::Rect docrect(Geom::Rect(Geom::Point(0, 0), item->document->getDimensions())); - Geom::Rect bboxrect(Geom::Rect(Geom::Point(bbox->min()[Geom::X], bbox->min()[Geom::Y]), Geom::Point(bbox->max()[Geom::X], bbox->max()[Geom::Y]))); - - Geom::OptRect _bbox = Geom::intersect(docrect, bboxrect); - - // assign the object dimension clipped on the document, no need to draw on area not on canvas - bbox = _bbox; + bbox &= docrect; // no bbox, e.g. empty group if (!bbox) { @@ -473,14 +464,14 @@ static void sp_asbitmap_render(SPItem *item, CairoRenderContext *ctx) } // The width and height of the bitmap in pixels - unsigned width = ceil((bbox->max()[Geom::X] - bbox->min()[Geom::X]) * (res / PX_PER_IN)); - unsigned height = ceil((bbox->max()[Geom::Y] - bbox->min()[Geom::Y]) * (res / PX_PER_IN)); + unsigned width = ceil(bbox->width() * (res / PX_PER_IN)); + unsigned height = ceil(bbox->height() * (res / PX_PER_IN)); if (width == 0 || height == 0) return; // Scale to exactly fit integer bitmap inside bounding box - double scale_x = (bbox->max()[Geom::X] - bbox->min()[Geom::X]) / width; - double scale_y = (bbox->max()[Geom::Y] - bbox->min()[Geom::Y]) / height; + double scale_x = bbox->width() / width; + double scale_y = bbox->height() / height; // Location of bounding box in document coordinates. double shift_x = bbox->min()[Geom::X]; @@ -516,7 +507,7 @@ static void sp_asbitmap_render(SPItem *item, CairoRenderContext *ctx) TEST(gdk_pixbuf_save( pb, "bitmap.png", "png", NULL, NULL )); // TODO this is stupid - we just converted to pixbuf format when generating the bitmap! convert_pixbuf_normal_to_argb32(pb); - ctx->renderImage(pb, &t, item->style); + ctx->renderImage(pb, t, item->style); gdk_pixbuf_unref(pb); pb = 0; } @@ -604,8 +595,7 @@ void CairoRenderer::renderItem(CairoRenderContext *ctx, SPItem *item) state->merge_opacity = FALSE; ctx->pushLayer(); } - Geom::Affine tempmat (item->transform); - ctx->transform(&tempmat); + ctx->transform(item->transform); sp_item_invoke_render(item, ctx); if (state->need_layer) @@ -625,25 +615,25 @@ CairoRenderer::setupDocument(CairoRenderContext *ctx, SPDocument *doc, bool page base = doc->getRoot(); } - NRRect d; + Geom::Rect d; if (pageBoundingBox) { - d.x0 = d.y0 = 0; - d.x1 = doc->getWidth(); - d.y1 = doc->getHeight(); + d = Geom::Rect::from_xywh(Geom::Point(0,0), doc->getDimensions()); } else { - base->invoke_bbox( &d, base->i2dt_affine(), TRUE, SPItem::RENDERING_BBOX); + Geom::OptRect bbox = base->desktopVisualBounds(); + if (!bbox) { + g_message("CairoRenderer: empty bounding box."); + return false; + } + d = *bbox; } if (ctx->_vector_based_target) { // convert from px to pt - d.x0 *= PT_PER_PX; - d.x1 *= PT_PER_PX; - d.y0 *= PT_PER_PX; - d.y1 *= PT_PER_PX; + d *= Geom::Scale(PT_PER_PX); } - ctx->_width = d.x1-d.x0; - ctx->_height = d.y1-d.y0; + ctx->_width = d.width(); + ctx->_height = d.height(); TRACE(("setupDocument: %f x %f\n", ctx->_width, ctx->_height)); @@ -655,11 +645,12 @@ CairoRenderer::setupDocument(CairoRenderContext *ctx, SPDocument *doc, bool page if (ctx->_vector_based_target) high *= PT_PER_PX; - Geom::Affine 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))); - ctx->transform(&tp); + /// @fixme hardcoded dt2doc transform? + Geom::Affine tp(Geom::Translate(-d.left() * (ctx->_vector_based_target ? PX_PER_PT : 1.0), + (d.bottom() - high) * (ctx->_vector_based_target ? PX_PER_PT : 1.0))); + ctx->transform(tp); } - + return ret; } @@ -685,8 +676,8 @@ CairoRenderer::applyClipPath(CairoRenderContext *ctx, SPClipPath const *cp) t[4] = clip_bbox.x0; t[5] = clip_bbox.y0; t *= ctx->getCurrentState()->transform; - ctx->getTransform(&saved_ctm); - ctx->setTransform(&t); + saved_ctm = ctx->getTransform(); + ctx->setTransform(t); } TRACE(("BEGIN clip\n")); @@ -696,12 +687,11 @@ CairoRenderer::applyClipPath(CairoRenderContext *ctx, SPClipPath const *cp) SPItem const *item = SP_ITEM(child); // combine transform of the item in clippath and the item using clippath: - Geom::Affine tempmat (item->transform); - tempmat = tempmat * (ctx->getCurrentState()->item_transform); + Geom::Affine tempmat = item->transform * ctx->getCurrentState()->item_transform; // render this item in clippath ctx->pushState(); - ctx->transform(&tempmat); + ctx->transform(tempmat); setStateForItem(ctx, item); // TODO fix this call to accept const items sp_item_invoke_render(const_cast(item), ctx); @@ -716,7 +706,7 @@ CairoRenderer::applyClipPath(CairoRenderContext *ctx, SPClipPath const *cp) cairo_clip(ctx->_cr); if (cp->clipPathUnits == SP_CONTENT_UNITS_OBJECTBOUNDINGBOX) - ctx->setTransform(&saved_ctm); + ctx->setTransform(saved_ctm); ctx->setRenderMode(saved_mode); } @@ -738,7 +728,7 @@ CairoRenderer::applyMask(CairoRenderContext *ctx, SPMask const *mask) t[4] = mask_bbox.x0; t[5] = mask_bbox.y0; t *= ctx->getCurrentState()->transform; - ctx->setTransform(&t); + ctx->setTransform(t); } // Clip mask contents... but... -- cgit v1.2.3 From 24526cceccb4ed103a6324756476c64efb3fb5dd Mon Sep 17 00:00:00 2001 From: Krzysztof Kosi??ski Date: Sat, 27 Aug 2011 16:58:22 +0200 Subject: Remove all NRRect use. (bzr r10582.1.5) --- src/extension/internal/cairo-renderer.cpp | 36 ++++++++++++++++--------------- 1 file changed, 19 insertions(+), 17 deletions(-) (limited to 'src/extension/internal/cairo-renderer.cpp') diff --git a/src/extension/internal/cairo-renderer.cpp b/src/extension/internal/cairo-renderer.cpp index adfa0421d..3a2cea3c1 100644 --- a/src/extension/internal/cairo-renderer.cpp +++ b/src/extension/internal/cairo-renderer.cpp @@ -87,14 +87,14 @@ struct SPClipPathView { SPClipPathView *next; unsigned int key; Inkscape::DrawingItem *arenaitem; - NRRect bbox; + Geom::OptRect bbox; }; struct SPMaskView { SPMaskView *next; unsigned int key; Inkscape::DrawingItem *arenaitem; - NRRect bbox; + Geom::OptRect bbox; }; namespace Inkscape { @@ -394,8 +394,8 @@ static void sp_symbol_render(SPItem *item, CairoRenderContext *ctx) width = 1.0; height = 1.0; - view_width = symbol->viewBox.x1 - symbol->viewBox.x0; - view_height = symbol->viewBox.y1 - symbol->viewBox.y0; + view_width = symbol->viewBox.width(); + view_height = symbol->viewBox.height(); calculatePreserveAspectRatio(symbol->aspect_align, symbol->aspect_clip, view_width, view_height, &x, &y,&width, &height); @@ -404,8 +404,8 @@ static void sp_symbol_render(SPItem *item, CairoRenderContext *ctx) vb2user = Geom::identity(); vb2user[0] = width / view_width; vb2user[3] = height / view_height; - vb2user[4] = x - symbol->viewBox.x0 * vb2user[0]; - vb2user[5] = y - symbol->viewBox.y0 * vb2user[3]; + vb2user[4] = x - symbol->viewBox.left() * vb2user[0]; + vb2user[5] = y - symbol->viewBox.top() * vb2user[3]; ctx->transform(vb2user); } @@ -668,13 +668,14 @@ CairoRenderer::applyClipPath(CairoRenderContext *ctx, SPClipPath const *cp) CairoRenderContext::CairoRenderMode saved_mode = ctx->getRenderMode(); ctx->setRenderMode(CairoRenderContext::RENDER_MODE_CLIP); + // FIXME: the access to the first clippath view to obtain the bbox is completely bogus Geom::Affine saved_ctm; - if (cp->clipPathUnits == SP_CONTENT_UNITS_OBJECTBOUNDINGBOX) { + if (cp->clipPathUnits == SP_CONTENT_UNITS_OBJECTBOUNDINGBOX && cp->display->bbox) { //SP_PRINT_DRECT("clipd", cp->display->bbox); - NRRect clip_bbox(cp->display->bbox); - Geom::Affine t(Geom::Scale(clip_bbox.x1 - clip_bbox.x0, clip_bbox.y1 - clip_bbox.y0)); - t[4] = clip_bbox.x0; - t[5] = clip_bbox.y0; + Geom::Rect clip_bbox = *cp->display->bbox; + Geom::Affine t(Geom::Scale(clip_bbox.dimensions())); + t[4] = clip_bbox.left(); + t[5] = clip_bbox.top(); t *= ctx->getCurrentState()->transform; saved_ctm = ctx->getTransform(); ctx->setTransform(t); @@ -720,13 +721,14 @@ CairoRenderer::applyMask(CairoRenderContext *ctx, SPMask const *mask) if (mask == NULL) return; - //SP_PRINT_DRECT("maskd", &mask->display->bbox); - NRRect mask_bbox(mask->display->bbox); + // FIXME: the access to the first mask view to obtain the bbox is completely bogus // TODO: should the bbox be transformed if maskUnits != userSpaceOnUse ? - if (mask->maskContentUnits == SP_CONTENT_UNITS_OBJECTBOUNDINGBOX) { - Geom::Affine t(Geom::Scale(mask_bbox.x1 - mask_bbox.x0, mask_bbox.y1 - mask_bbox.y0)); - t[4] = mask_bbox.x0; - t[5] = mask_bbox.y0; + if (mask->maskContentUnits == SP_CONTENT_UNITS_OBJECTBOUNDINGBOX && mask->display->bbox) { + //SP_PRINT_DRECT("maskd", &mask->display->bbox); + Geom::Rect mask_bbox = *mask->display->bbox; + Geom::Affine t(Geom::Scale(mask_bbox.dimensions())); + t[4] = mask_bbox.left(); + t[5] = mask_bbox.top(); t *= ctx->getCurrentState()->transform; ctx->setTransform(t); } -- cgit v1.2.3 From d6af1140ee108cc7d7fb6e0ba89ff7e30bb7ad3a Mon Sep 17 00:00:00 2001 From: Krzysztof Kosi??ski Date: Sat, 27 Aug 2011 18:05:32 +0200 Subject: Completely remove NRRect, NRRectL, in-svg-plane.h (bzr r10582.1.6) --- src/extension/internal/cairo-renderer.cpp | 1 - 1 file changed, 1 deletion(-) (limited to 'src/extension/internal/cairo-renderer.cpp') diff --git a/src/extension/internal/cairo-renderer.cpp b/src/extension/internal/cairo-renderer.cpp index 3a2cea3c1..3b6c26113 100644 --- a/src/extension/internal/cairo-renderer.cpp +++ b/src/extension/internal/cairo-renderer.cpp @@ -28,7 +28,6 @@ #include #include -#include "libnr/nr-rect.h" #include "libnrtype/Layout-TNG.h" #include <2geom/transforms.h> #include <2geom/pathvector.h> -- cgit v1.2.3 From c0f82d2110bcb8226efbe8435b76dcc6e0e48f70 Mon Sep 17 00:00:00 2001 From: "Jon A. Cruz" Date: Tue, 4 Oct 2011 12:04:58 -0700 Subject: Cleaned up display-forward.h, including many redundant usages. (bzr r10666) --- src/extension/internal/cairo-renderer.cpp | 1 - 1 file changed, 1 deletion(-) (limited to 'src/extension/internal/cairo-renderer.cpp') diff --git a/src/extension/internal/cairo-renderer.cpp b/src/extension/internal/cairo-renderer.cpp index 3b6c26113..6c77005fe 100644 --- a/src/extension/internal/cairo-renderer.cpp +++ b/src/extension/internal/cairo-renderer.cpp @@ -35,7 +35,6 @@ #include #include -#include "display/display-forward.h" #include "display/curve.h" #include "display/canvas-bpath.h" #include "display/cairo-utils.h" -- cgit v1.2.3 From 4e51446f417ad82d2cdac758d0c5ce908ff88038 Mon Sep 17 00:00:00 2001 From: Alex Valavanis Date: Thu, 8 Dec 2011 11:53:54 +0000 Subject: Switch to top-level glib headers. Thanks to DimStar for patch Fixed bugs: - https://launchpad.net/bugs/898538 (bzr r10762) --- src/extension/internal/cairo-renderer.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src/extension/internal/cairo-renderer.cpp') diff --git a/src/extension/internal/cairo-renderer.cpp b/src/extension/internal/cairo-renderer.cpp index 6c77005fe..42c60f52c 100644 --- a/src/extension/internal/cairo-renderer.cpp +++ b/src/extension/internal/cairo-renderer.cpp @@ -32,7 +32,7 @@ #include <2geom/transforms.h> #include <2geom/pathvector.h> -#include +#include #include #include "display/curve.h" -- cgit v1.2.3