Code

No more NRMatrix or NRPoint.
[inkscape.git] / src / extension / internal / cairo-renderer.cpp
index 1d103fed27cadb980ebbdd3c54c41b8a066c153b..f13e26abb04a1a7c146dfc5132f456f5a51358b3 100644 (file)
@@ -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);
     }