X-Git-Url: https://git.tokkee.org/?a=blobdiff_plain;f=src%2Fextension%2Finternal%2Fcairo-renderer.cpp;h=f13e26abb04a1a7c146dfc5132f456f5a51358b3;hb=3955580a5a68a873b098921626f5b9d841b964ec;hp=1d103fed27cadb980ebbdd3c54c41b8a066c153b;hpb=cd54e98d4b5cfdfe4c5c064892ba432e197c8431;p=inkscape.git diff --git a/src/extension/internal/cairo-renderer.cpp b/src/extension/internal/cairo-renderer.cpp index 1d103fed2..f13e26abb 100644 --- a/src/extension/internal/cairo-renderer.cpp +++ b/src/extension/internal/cairo-renderer.cpp @@ -133,7 +133,7 @@ CairoRenderer::createContext(void) // create initial render state CairoRenderState *state = new_context->_createState(); - nr_matrix_set_identity(&state->transform); + state->transform.set_identity(); new_context->_state_stack = g_slist_prepend(new_context->_state_stack, state); new_context->_state = state; @@ -226,12 +226,11 @@ static void sp_group_render(SPItem *item, CairoRenderContext *ctx) static void sp_use_render(SPItem *item, CairoRenderContext *ctx) { bool translated = false; - NRMatrix tp; SPUse *use = SP_USE(item); CairoRenderer *renderer = ctx->getRenderer(); if ((use->x._set && use->x.computed != 0) || (use->y._set && use->y.computed != 0)) { - nr_matrix_set_translate(&tp, use->x.computed, use->y.computed); + NR::Matrix tp(NR::translate(use->x.computed, use->y.computed)); ctx->pushState(); ctx->transform(&tp); translated = true; @@ -261,7 +260,6 @@ static void sp_flowtext_render(SPItem *item, CairoRenderContext *ctx) static void sp_image_render(SPItem *item, CairoRenderContext *ctx) { SPImage *image; - NRMatrix tp, s, t; guchar *px; int w, h, rs; @@ -289,9 +287,9 @@ static void sp_image_render(SPItem *item, CairoRenderContext *ctx) ctx->addClippingRect(image->x.computed, image->y.computed, image->width.computed, image->height.computed); } - nr_matrix_set_translate (&tp, x, y); - nr_matrix_set_scale (&s, width / (double)w, height / (double)h); - nr_matrix_multiply (&t, &s, &tp); + NR::translate tp(x, y); + NR::scale s(width / (double)w, height / (double)h); + NR::Matrix t(s * tp); ctx->renderImage (px, w, h, rs, &t, SP_OBJECT_STYLE (item)); } @@ -308,7 +306,7 @@ static void sp_symbol_render(SPItem *item, CairoRenderContext *ctx) // apply viewbox if set if (0 /*symbol->viewBox_set*/) { - NRMatrix vb2user; + NR::Matrix vb2user; double x, y, width, height; double view_width, view_height; x = 0.0; @@ -323,7 +321,7 @@ static void sp_symbol_render(SPItem *item, CairoRenderContext *ctx) &x, &y,&width, &height); // [itemTransform *] translate(x, y) * scale(w/vw, h/vh) * translate(-vx, -vy); - nr_matrix_set_identity(&vb2user); + vb2user.set_identity(); vb2user[0] = width / view_width; vb2user[3] = height / view_height; vb2user[4] = x - symbol->viewBox.x0 * vb2user[0]; @@ -346,7 +344,7 @@ static void sp_root_render(SPItem *item, CairoRenderContext *ctx) ctx->pushState(); renderer->setStateForItem(ctx, item); - ctx->transform(root->c2p); + ctx->transform(&root->c2p); sp_group_render(item, ctx); ctx->popState(); } @@ -448,10 +446,10 @@ static void sp_asbitmap_render(SPItem *item, CairoRenderContext *ctx) unsigned int w = gdk_pixbuf_get_width(pb); unsigned int h = gdk_pixbuf_get_height(pb); unsigned int rs = gdk_pixbuf_get_rowstride(pb); - NRMatrix matrix; + NR::Matrix matrix; matrix = t; //matrix = ((NR::Matrix)ctx->getCurrentState()->transform).inverse(); - //nr_matrix_set_identity(&matrix); + //matrix.set_identity(); ctx->renderImage (px, w, h, rs, &matrix, SP_OBJECT_STYLE (item)); /* @@ -556,7 +554,7 @@ CairoRenderer::renderItem(CairoRenderContext *ctx, SPItem *item) state->merge_opacity = FALSE; ctx->pushLayer(); } - ctx->transform(item->transform); + ctx->transform(&item->transform); sp_item_invoke_render(item, ctx); if (state->need_layer) @@ -614,15 +612,14 @@ CairoRenderer::applyClipPath(CairoRenderContext *ctx, SPClipPath const *cp) CairoRenderContext::CairoRenderMode saved_mode = ctx->getRenderMode(); ctx->setRenderMode(CairoRenderContext::RENDER_MODE_CLIP); - NRMatrix saved_ctm; + NR::Matrix saved_ctm; if (cp->clipPathUnits == SP_CONTENT_UNITS_OBJECTBOUNDINGBOX) { - NRMatrix t; //SP_PRINT_DRECT("clipd", cp->display->bbox); NRRect clip_bbox(cp->display->bbox); - nr_matrix_set_scale(&t, clip_bbox.x1 - clip_bbox.x0, clip_bbox.y1 - clip_bbox.y0); - t.c[4] = clip_bbox.x0; - t.c[5] = clip_bbox.y0; - nr_matrix_multiply(&t, &t, &ctx->getCurrentState()->transform); + NR::Matrix t(NR::scale(clip_bbox.x1 - clip_bbox.x0, clip_bbox.y1 - clip_bbox.y0)); + t[4] = clip_bbox.x0; + t[5] = clip_bbox.y0; + t *= ctx->getCurrentState()->transform; ctx->getTransform(&saved_ctm); ctx->setTransform(&t); } @@ -660,11 +657,10 @@ CairoRenderer::applyMask(CairoRenderContext *ctx, SPMask const *mask) NRRect mask_bbox(mask->display->bbox); // TODO: should the bbox be transformed if maskUnits != userSpaceOnUse ? if (mask->maskContentUnits == SP_CONTENT_UNITS_OBJECTBOUNDINGBOX) { - NRMatrix t; - nr_matrix_set_scale(&t, mask_bbox.x1 - mask_bbox.x0, mask_bbox.y1 - mask_bbox.y0); - t.c[4] = mask_bbox.x0; - t.c[5] = mask_bbox.y0; - nr_matrix_multiply(&t, &t, &ctx->getCurrentState()->transform); + NR::Matrix t(NR::scale(mask_bbox.x1 - mask_bbox.x0, mask_bbox.y1 - mask_bbox.y0)); + t[4] = mask_bbox.x0; + t[5] = mask_bbox.y0; + t *= ctx->getCurrentState()->transform; ctx->setTransform(&t); }