From 5db2b5e8aa1f645c25d41cc4fedf98d5ce41ebbe Mon Sep 17 00:00:00 2001 From: Krzysztof Kosi??ski Date: Tue, 29 Jun 2010 22:01:17 +0200 Subject: Bitmap image rendering (bzr r9508.1.6) --- src/sp-image.cpp | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) (limited to 'src/sp-image.cpp') diff --git a/src/sp-image.cpp b/src/sp-image.cpp index 68bafdeab..106d03149 100644 --- a/src/sp-image.cpp +++ b/src/sp-image.cpp @@ -1155,6 +1155,8 @@ sp_image_show (SPItem *item, NRArena *arena, unsigned int /*key*/, unsigned int NRArenaItem *ai = NRArenaImage::create(arena); if (image->pixbuf) { + nr_arena_image_set_pixbuf(NR_ARENA_IMAGE(ai), image->pixbuf); +#if 0 int pixskip = gdk_pixbuf_get_n_channels(image->pixbuf) * gdk_pixbuf_get_bits_per_sample(image->pixbuf) / 8; int rs = gdk_pixbuf_get_rowstride(image->pixbuf); nr_arena_image_set_style(NR_ARENA_IMAGE(ai), SP_OBJECT_STYLE(SP_OBJECT(item))); @@ -1171,14 +1173,17 @@ sp_image_show (SPItem *item, NRArena *arena, unsigned int /*key*/, unsigned int image->trimheight, rs); } +#endif } else { - nr_arena_image_set_pixels(NR_ARENA_IMAGE(ai), NULL, 0, 0, 0); + nr_arena_image_set_pixbuf(NR_ARENA_IMAGE(ai), NULL); } - if (image->aspect_align == SP_ASPECT_NONE) { + + // TODO: reenable preserveAspectRatio + //if (image->aspect_align == SP_ASPECT_NONE) { nr_arena_image_set_geometry(NR_ARENA_IMAGE(ai), image->x.computed, image->y.computed, image->width.computed, image->height.computed); - } else { // preserveAspectRatio - nr_arena_image_set_geometry(NR_ARENA_IMAGE(ai), image->viewx, image->viewy, image->viewwidth, image->viewheight); - } + //} else { // preserveAspectRatio + // nr_arena_image_set_geometry(NR_ARENA_IMAGE(ai), image->viewx, image->viewy, image->viewwidth, image->viewheight); + //} return ai; } -- cgit v1.2.3 From 55f7e59c13b6fb502a0cfbbe811f2f3f90cc6f80 Mon Sep 17 00:00:00 2001 From: Krzysztof Kosi??ski Date: Tue, 29 Jun 2010 23:05:56 +0200 Subject: Fix icons (bzr r9508.1.7) --- src/sp-image.cpp | 16 ++++++---------- 1 file changed, 6 insertions(+), 10 deletions(-) (limited to 'src/sp-image.cpp') diff --git a/src/sp-image.cpp b/src/sp-image.cpp index 106d03149..32ba3f021 100644 --- a/src/sp-image.cpp +++ b/src/sp-image.cpp @@ -1311,19 +1311,15 @@ sp_image_update_canvas_image (SPImage *image) } for (SPItemView *v = item->display; v != NULL; v = v->next) { - int pixskip = gdk_pixbuf_get_n_channels(image->pixbuf) * gdk_pixbuf_get_bits_per_sample(image->pixbuf) / 8; - int rs = gdk_pixbuf_get_rowstride(image->pixbuf); nr_arena_image_set_style(NR_ARENA_IMAGE(v->arenaitem), SP_OBJECT_STYLE(SP_OBJECT(image))); - if (image->aspect_align == SP_ASPECT_NONE) { - nr_arena_image_set_pixels(NR_ARENA_IMAGE(v->arenaitem), - gdk_pixbuf_get_pixels(image->pixbuf), - gdk_pixbuf_get_width(image->pixbuf), - gdk_pixbuf_get_height(image->pixbuf), - rs); + // TODO: reenable preserveAspectRatio + //if (image->aspect_align == SP_ASPECT_NONE) { + nr_arena_image_set_pixbuf(NR_ARENA_IMAGE(v->arenaitem), + image->pixbuf); nr_arena_image_set_geometry(NR_ARENA_IMAGE(v->arenaitem), image->x.computed, image->y.computed, image->width.computed, image->height.computed); - } else { // preserveAspectRatio + /*} else { // preserveAspectRatio nr_arena_image_set_pixels(NR_ARENA_IMAGE(v->arenaitem), gdk_pixbuf_get_pixels(image->pixbuf) + image->trimx*pixskip + image->trimy*rs, image->trimwidth, @@ -1332,7 +1328,7 @@ sp_image_update_canvas_image (SPImage *image) nr_arena_image_set_geometry(NR_ARENA_IMAGE(v->arenaitem), image->viewx, image->viewy, image->viewwidth, image->viewheight); - } + }*/ } } -- cgit v1.2.3 From 4b9f09e52f05a19f93546c075c7a3fb7be322ed7 Mon Sep 17 00:00:00 2001 From: Krzysztof Kosi??ski Date: Tue, 3 Aug 2010 04:05:53 +0200 Subject: Handle preserveAspectRatio for images (bzr r9508.1.41) --- src/sp-image.cpp | 189 +++++++++++++++++++++---------------------------------- 1 file changed, 72 insertions(+), 117 deletions(-) (limited to 'src/sp-image.cpp') diff --git a/src/sp-image.cpp b/src/sp-image.cpp index 32ba3f021..b383512f5 100644 --- a/src/sp-image.cpp +++ b/src/sp-image.cpp @@ -19,6 +19,7 @@ #include #include +#include #include #include #include @@ -94,6 +95,7 @@ static void sp_image_set_curve(SPImage *image); static GdkPixbuf *sp_image_repr_read_image( time_t& modTime, gchar*& pixPath, const gchar *href, const gchar *absref, const gchar *base ); static GdkPixbuf *sp_image_pixbuf_force_rgba (GdkPixbuf * pixbuf); +static void sp_image_update_arenaitem (SPImage *img, NRArenaImage *ai); static void sp_image_update_canvas_image (SPImage *image); static GdkPixbuf * sp_image_repr_read_dataURI (const gchar * uri_data); static GdkPixbuf * sp_image_repr_read_b64 (const gchar * uri_data); @@ -609,15 +611,9 @@ static void sp_image_init( SPImage *image ) image->width.unset(); image->height.unset(); image->aspect_align = SP_ASPECT_NONE; - - image->trimx = 0; - image->trimy = 0; - image->trimwidth = 0; - image->trimheight = 0; - image->viewx = 0; - image->viewy = 0; - image->viewwidth = 0; - image->viewheight = 0; + image->clipbox = Geom::Rect(); + image->sx = image->sy = 1.0; + image->ox = image->oy = 0.0; image->curve = NULL; @@ -924,13 +920,33 @@ sp_image_update (SPObject *object, SPCtx *ctx, unsigned int flags) } } } + + if (image->pixbuf) { + /* fixme: We are slightly violating spec here (Lauris) */ + if (!image->width._set) { + image->width.computed = gdk_pixbuf_get_width(image->pixbuf); + } + if (!image->height._set) { + image->height.computed = gdk_pixbuf_get_height(image->pixbuf); + } + } + + Geom::Point p(image->x.computed, image->y.computed); + Geom::Point wh(image->width.computed, image->height.computed); + image->clipbox = Geom::Rect(p, p + wh); + + image->ox = image->x.computed; + image->oy = image->y.computed; + + int pixwidth = gdk_pixbuf_get_width (image->pixbuf); + int pixheight = gdk_pixbuf_get_height (image->pixbuf); + + image->sx = image->width.computed / pixwidth; + image->sy = image->height.computed / pixheight; + // preserveAspectRatio calculate bounds / clipping rectangle -- EAF if (image->pixbuf && (image->aspect_align != SP_ASPECT_NONE)) { - int imagewidth, imageheight; - double x,y; - - imagewidth = gdk_pixbuf_get_width (image->pixbuf); - imageheight = gdk_pixbuf_get_height (image->pixbuf); + double x, y; switch (image->aspect_align) { case SP_ASPECT_XMIN_YMIN: @@ -976,43 +992,19 @@ sp_image_update (SPObject *object, SPCtx *ctx, unsigned int flags) } if (image->aspect_clip == SP_ASPECT_SLICE) { - image->viewx = image->x.computed; - image->viewy = image->y.computed; - image->viewwidth = image->width.computed; - image->viewheight = image->height.computed; - if ((imagewidth*image->height.computed)>(image->width.computed*imageheight)) { - // Pixels aspect is wider than bounding box - image->trimheight = imageheight; - image->trimwidth = static_cast(static_cast(imageheight) * image->width.computed / image->height.computed); - image->trimy = 0; - image->trimx = static_cast(static_cast(imagewidth - image->trimwidth) * x); - } else { - // Pixels aspect is taller than bounding box - image->trimwidth = imagewidth; - image->trimheight = static_cast(static_cast(imagewidth) * image->height.computed / image->width.computed); - image->trimx = 0; - image->trimy = static_cast(static_cast(imageheight - image->trimheight) * y); - } + double scale = std::max(image->sx, image->sy); + image->sx = scale; + image->sy = scale; } else { - // Otherwise, assume SP_ASPECT_MEET - image->trimx = 0; - image->trimy = 0; - image->trimwidth = imagewidth; - image->trimheight = imageheight; - if ((imagewidth*image->height.computed)>(image->width.computed*imageheight)) { - // Pixels aspect is wider than bounding boz - image->viewwidth = image->width.computed; - image->viewheight = image->viewwidth * imageheight / imagewidth; - image->viewx=image->x.computed; - image->viewy=(image->height.computed - image->viewheight) * y + image->y.computed; - } else { - // Pixels aspect is taller than bounding box - image->viewheight = image->height.computed; - image->viewwidth = image->viewheight * imagewidth / imageheight; - image->viewy=image->y.computed; - image->viewx=(image->width.computed - image->viewwidth) * x + image->x.computed; - } + double scale = std::min(image->sx, image->sy); + image->sx = scale; + image->sy = scale; } + + double vw = pixwidth * image->sx; + double vh = pixheight * image->sy; + image->ox += x * (image->width.computed - vw); + image->oy += y * (image->height.computed - vh); } sp_image_update_canvas_image ((SPImage *) object); } @@ -1100,26 +1092,35 @@ sp_image_print (SPItem *item, SPPrintContext *ctx) int rs = gdk_pixbuf_get_rowstride(image->pixbuf); int pixskip = gdk_pixbuf_get_n_channels(image->pixbuf) * gdk_pixbuf_get_bits_per_sample(image->pixbuf) / 8; - Geom::Matrix t; if (image->aspect_align == SP_ASPECT_NONE) { - /* fixme: (Lauris) */ + Geom::Matrix t; Geom::Translate tp(image->x.computed, image->y.computed); Geom::Scale s(image->width.computed, -image->height.computed); Geom::Translate ti(0.0, -1.0); t = s * tp; t = ti * t; + sp_print_image_R8G8B8A8_N(ctx, px, w, h, rs, &t, SP_OBJECT_STYLE (item)); } else { // preserveAspectRatio - Geom::Translate tp(image->viewx, image->viewy); - Geom::Scale s(image->viewwidth, -image->viewheight); + double vw = image->width.computed / image->sx; + double vh = image->height.computed / image->sy; + + int trimwidth = std::min(w, ceil(image->width.computed / vw * w)); + int trimheight = std::min(h, ceil(image->height.computed / vh * h)); + int trimx = std::max(0, floor((image->x.computed - image->ox) / vw * w)); + int trimy = std::max(0, floor((image->y.computed - image->oy) / vh * h)); + + double vx = std::max(image->ox, image->x.computed); + double vy = std::max(image->oy, image->y.computed); + double vcw = std::min(image->width.computed, vw); + double vch = std::min(image->height.computed, vh); + + Geom::Matrix t; + Geom::Translate tp(vx, vy); + Geom::Scale s(vcw, -vch); Geom::Translate ti(0.0, -1.0); t = s * tp; t = ti * t; - } - - if (image->aspect_align == SP_ASPECT_NONE) { - sp_print_image_R8G8B8A8_N(ctx, px, w, h, rs, &t, SP_OBJECT_STYLE (item)); - } else { // preserveAspectRatio - sp_print_image_R8G8B8A8_N(ctx, px + image->trimx*pixskip + image->trimy*rs, image->trimwidth, image->trimheight, rs, &t, SP_OBJECT_STYLE(item)); + sp_print_image_R8G8B8A8_N(ctx, px + trimx*pixskip + trimy*rs, trimwidth, trimheight, rs, &t, SP_OBJECT_STYLE(item)); } } } @@ -1154,36 +1155,7 @@ sp_image_show (SPItem *item, NRArena *arena, unsigned int /*key*/, unsigned int SPImage * image = SP_IMAGE(item); NRArenaItem *ai = NRArenaImage::create(arena); - if (image->pixbuf) { - nr_arena_image_set_pixbuf(NR_ARENA_IMAGE(ai), image->pixbuf); -#if 0 - int pixskip = gdk_pixbuf_get_n_channels(image->pixbuf) * gdk_pixbuf_get_bits_per_sample(image->pixbuf) / 8; - int rs = gdk_pixbuf_get_rowstride(image->pixbuf); - nr_arena_image_set_style(NR_ARENA_IMAGE(ai), SP_OBJECT_STYLE(SP_OBJECT(item))); - if (image->aspect_align == SP_ASPECT_NONE) { - nr_arena_image_set_pixels(NR_ARENA_IMAGE(ai), - gdk_pixbuf_get_pixels(image->pixbuf), - gdk_pixbuf_get_width(image->pixbuf), - gdk_pixbuf_get_height(image->pixbuf), - rs); - } else { // preserveAspectRatio - nr_arena_image_set_pixels(NR_ARENA_IMAGE(ai), - gdk_pixbuf_get_pixels(image->pixbuf) + image->trimx*pixskip + image->trimy*rs, - image->trimwidth, - image->trimheight, - rs); - } -#endif - } else { - nr_arena_image_set_pixbuf(NR_ARENA_IMAGE(ai), NULL); - } - - // TODO: reenable preserveAspectRatio - //if (image->aspect_align == SP_ASPECT_NONE) { - nr_arena_image_set_geometry(NR_ARENA_IMAGE(ai), image->x.computed, image->y.computed, image->width.computed, image->height.computed); - //} else { // preserveAspectRatio - // nr_arena_image_set_geometry(NR_ARENA_IMAGE(ai), image->viewx, image->viewy, image->viewwidth, image->viewheight); - //} + sp_image_update_arenaitem(image, NR_ARENA_IMAGE(ai)); return ai; } @@ -1295,40 +1267,23 @@ sp_image_pixbuf_force_rgba (GdkPixbuf * pixbuf) /* We assert that realpixbuf is either NULL or identical size to pixbuf */ +static void +sp_image_update_arenaitem (SPImage *image, NRArenaImage *ai) +{ + nr_arena_image_set_style(ai, SP_OBJECT_STYLE(SP_OBJECT(image))); + nr_arena_image_set_pixbuf(ai, image->pixbuf); + nr_arena_image_set_origin(ai, Geom::Point(image->ox, image->oy)); + nr_arena_image_set_scale(ai, image->sx, image->sy); + nr_arena_image_set_clipbox(ai, image->clipbox); +} + static void sp_image_update_canvas_image (SPImage *image) { SPItem *item = SP_ITEM(image); - if (image->pixbuf) { - /* fixme: We are slightly violating spec here (Lauris) */ - if (!image->width._set) { - image->width.computed = gdk_pixbuf_get_width(image->pixbuf); - } - if (!image->height._set) { - image->height.computed = gdk_pixbuf_get_height(image->pixbuf); - } - } - for (SPItemView *v = item->display; v != NULL; v = v->next) { - nr_arena_image_set_style(NR_ARENA_IMAGE(v->arenaitem), SP_OBJECT_STYLE(SP_OBJECT(image))); - // TODO: reenable preserveAspectRatio - //if (image->aspect_align == SP_ASPECT_NONE) { - nr_arena_image_set_pixbuf(NR_ARENA_IMAGE(v->arenaitem), - image->pixbuf); - nr_arena_image_set_geometry(NR_ARENA_IMAGE(v->arenaitem), - image->x.computed, image->y.computed, - image->width.computed, image->height.computed); - /*} else { // preserveAspectRatio - nr_arena_image_set_pixels(NR_ARENA_IMAGE(v->arenaitem), - gdk_pixbuf_get_pixels(image->pixbuf) + image->trimx*pixskip + image->trimy*rs, - image->trimwidth, - image->trimheight, - rs); - nr_arena_image_set_geometry(NR_ARENA_IMAGE(v->arenaitem), - image->viewx, image->viewy, - image->viewwidth, image->viewheight); - }*/ + sp_image_update_arenaitem(image, NR_ARENA_IMAGE(v->arenaitem)); } } -- cgit v1.2.3 From 57a6fee4d17b6049b95ccf2ef445ed18c8a2a841 Mon Sep 17 00:00:00 2001 From: Krzysztof Kosi??ski Date: Wed, 4 Aug 2010 23:08:41 +0200 Subject: Wholesale cruft removal part 2 (bzr r9508.1.45) --- src/sp-image.cpp | 19 +++++-------------- 1 file changed, 5 insertions(+), 14 deletions(-) (limited to 'src/sp-image.cpp') diff --git a/src/sp-image.cpp b/src/sp-image.cpp index b383512f5..596090846 100644 --- a/src/sp-image.cpp +++ b/src/sp-image.cpp @@ -21,32 +21,23 @@ #include #include #include -#include -#include -#include -#include -#include -#include <2geom/rect.h> -//#define GDK_PIXBUF_ENABLE_BACKEND 1 -//#include -#include "display/nr-arena-image.h" -#include #include +#include <2geom/rect.h> +#include +#include "display/nr-arena-image.h" +#include "display/curve.h" //Added for preserveAspectRatio support -- EAF #include "enums.h" #include "attributes.h" - #include "print.h" #include "brokenimage.xpm" #include "document.h" #include "sp-image.h" #include "sp-clippath.h" -#include #include "xml/quote.h" -#include +#include "xml/repr.h" #include "snap-candidate.h" -#include "libnr/nr-matrix-fns.h" #include "io/sys.h" #if ENABLE_LCMS -- cgit v1.2.3 From 2cfc657521d2c22e9238ce1904a6a4a90d3b4517 Mon Sep 17 00:00:00 2001 From: Krzysztof Kosi??ski Date: Mon, 9 Aug 2010 22:45:22 +0200 Subject: Fix performance regression when displaying large images (bzr r9508.1.54) --- src/sp-image.cpp | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) (limited to 'src/sp-image.cpp') diff --git a/src/sp-image.cpp b/src/sp-image.cpp index 596090846..22392e635 100644 --- a/src/sp-image.cpp +++ b/src/sp-image.cpp @@ -26,6 +26,7 @@ #include #include "display/nr-arena-image.h" +#include "display/cairo-utils.h" #include "display/curve.h" //Added for preserveAspectRatio support -- EAF #include "enums.h" @@ -908,6 +909,8 @@ sp_image_update (SPObject *object, SPCtx *ctx, unsigned int flags) } #endif // ENABLE_LCMS image->pixbuf = pixbuf; + // convert to premultiplied native-endian ARGB for display with Cairo + convert_pixbuf_normal_to_argb32(image->pixbuf); } } } @@ -1077,11 +1080,14 @@ sp_image_print (SPItem *item, SPPrintContext *ctx) SPImage *image = SP_IMAGE(item); if (image->pixbuf && (image->width.computed > 0.0) && (image->height.computed > 0.0) ) { - guchar *px = gdk_pixbuf_get_pixels(image->pixbuf); - int w = gdk_pixbuf_get_width(image->pixbuf); - int h = gdk_pixbuf_get_height(image->pixbuf); - int rs = gdk_pixbuf_get_rowstride(image->pixbuf); - int pixskip = gdk_pixbuf_get_n_channels(image->pixbuf) * gdk_pixbuf_get_bits_per_sample(image->pixbuf) / 8; + GdkPixbuf *pb = gdk_pixbuf_copy(image->pixbuf); + convert_pixbuf_argb32_to_normal(pb); + + guchar *px = gdk_pixbuf_get_pixels(pb); + int w = gdk_pixbuf_get_width(pb); + int h = gdk_pixbuf_get_height(pb); + int rs = gdk_pixbuf_get_rowstride(pb); + int pixskip = gdk_pixbuf_get_n_channels(pb) * gdk_pixbuf_get_bits_per_sample(pb) / 8; if (image->aspect_align == SP_ASPECT_NONE) { Geom::Matrix t; @@ -1262,7 +1268,7 @@ static void sp_image_update_arenaitem (SPImage *image, NRArenaImage *ai) { nr_arena_image_set_style(ai, SP_OBJECT_STYLE(SP_OBJECT(image))); - nr_arena_image_set_pixbuf(ai, image->pixbuf); + nr_arena_image_set_argb32_pixbuf(ai, image->pixbuf); nr_arena_image_set_origin(ai, Geom::Point(image->ox, image->oy)); nr_arena_image_set_scale(ai, image->sx, image->sy); nr_arena_image_set_clipbox(ai, image->clipbox); -- cgit v1.2.3 From a4d0a358424440128cd4c4fb2915ccc4b86f4587 Mon Sep 17 00:00:00 2001 From: "Jon A. Cruz" Date: Thu, 5 May 2011 23:21:51 -0700 Subject: Adding initial cut of resource manager. (bzr r10198) --- src/sp-image.cpp | 71 +++++++++++++++++++++----------------------------------- 1 file changed, 26 insertions(+), 45 deletions(-) (limited to 'src/sp-image.cpp') diff --git a/src/sp-image.cpp b/src/sp-image.cpp index 8bd1bfadd..746cd97d9 100644 --- a/src/sp-image.cpp +++ b/src/sp-image.cpp @@ -5,6 +5,7 @@ * Lauris Kaplinski * Edward Flick (EAF) * Abhishek Sharma + * Jon A. Cruz * * Copyright (C) 1999-2005 Authors * Copyright (C) 2000-2001 Ximian, Inc. @@ -107,7 +108,6 @@ extern "C" void user_read_data( png_structp png_ptr, png_bytep data, png_size_t length ); void user_write_data( png_structp png_ptr, png_bytep data, png_size_t length ); void user_flush_data( png_structp png_ptr ); - } @@ -557,8 +557,7 @@ GdkPixbuf* pixbuf_new_from_file( const char *filename, GError **error ) } } -GType -sp_image_get_type (void) +GType sp_image_get_type(void) { static GType image_type = 0; if (!image_type) { @@ -579,8 +578,7 @@ sp_image_get_type (void) return image_type; } -static void -sp_image_class_init (SPImageClass * klass) +static void sp_image_class_init( SPImageClass * klass ) { GObjectClass * gobject_class; SPObjectClass * sp_object_class; @@ -635,8 +633,7 @@ static void sp_image_init( SPImage *image ) image->lastMod = 0; } -static void -sp_image_build (SPObject *object, SPDocument *document, Inkscape::XML::Node *repr) +static void sp_image_build( SPObject *object, SPDocument *document, Inkscape::XML::Node *repr ) { if (((SPObjectClass *) parent_class)->build) { ((SPObjectClass *) parent_class)->build (object, document, repr); @@ -654,8 +651,7 @@ sp_image_build (SPObject *object, SPDocument *document, Inkscape::XML::Node *rep document->addResource("image", object); } -static void -sp_image_release (SPObject *object) +static void sp_image_release( SPObject *object ) { SPImage *image = SP_IMAGE(object); @@ -695,8 +691,7 @@ sp_image_release (SPObject *object) } } -static void -sp_image_set (SPObject *object, unsigned int key, const gchar *value) +static void sp_image_set( SPObject *object, unsigned int key, const gchar *value ) { SPImage *image = SP_IMAGE (object); @@ -818,8 +813,7 @@ sp_image_set (SPObject *object, unsigned int key, const gchar *value) sp_image_set_curve(image); //creates a curve at the image's boundary for snapping } -static void -sp_image_update (SPObject *object, SPCtx *ctx, unsigned int flags) +static void sp_image_update( SPObject *object, SPCtx *ctx, unsigned int flags ) { SPImage *image = SP_IMAGE(object); SPDocument *doc = object->document; @@ -1026,8 +1020,7 @@ sp_image_update (SPObject *object, SPCtx *ctx, unsigned int flags) sp_image_update_canvas_image ((SPImage *) object); } -static void -sp_image_modified (SPObject *object, unsigned int flags) +static void sp_image_modified( SPObject *object, unsigned int flags ) { SPImage *image = SP_IMAGE (object); @@ -1042,8 +1035,7 @@ sp_image_modified (SPObject *object, unsigned int flags) } } -static Inkscape::XML::Node * -sp_image_write (SPObject *object, Inkscape::XML::Document *xml_doc, Inkscape::XML::Node *repr, guint flags) +static Inkscape::XML::Node *sp_image_write( SPObject *object, Inkscape::XML::Document *xml_doc, Inkscape::XML::Node *repr, guint flags ) { SPImage *image = SP_IMAGE (object); @@ -1081,8 +1073,7 @@ sp_image_write (SPObject *object, Inkscape::XML::Document *xml_doc, Inkscape::XM return repr; } -static void -sp_image_bbox(SPItem const *item, NRRect *bbox, Geom::Affine const &transform, unsigned const /*flags*/) +static void sp_image_bbox( SPItem const *item, NRRect *bbox, Geom::Affine const &transform, unsigned const /*flags*/ ) { SPImage const &image = *SP_IMAGE(item); @@ -1099,8 +1090,7 @@ sp_image_bbox(SPItem const *item, NRRect *bbox, Geom::Affine const &transform, u } } -static void -sp_image_print (SPItem *item, SPPrintContext *ctx) +static void sp_image_print( SPItem *item, SPPrintContext *ctx ) { SPImage *image = SP_IMAGE(item); @@ -1135,8 +1125,7 @@ sp_image_print (SPItem *item, SPPrintContext *ctx) } } -static gchar * -sp_image_description(SPItem *item) +static gchar *sp_image_description( SPItem *item ) { SPImage *image = SP_IMAGE(item); char *href_desc; @@ -1159,8 +1148,7 @@ sp_image_description(SPItem *item) return ret; } -static NRArenaItem * -sp_image_show (SPItem *item, NRArena *arena, unsigned int /*key*/, unsigned int /*flags*/) +static NRArenaItem *sp_image_show( SPItem *item, NRArena *arena, unsigned int /*key*/, unsigned int /*flags*/ ) { SPImage * image = SP_IMAGE(item); NRArenaItem *ai = NRArenaImage::create(arena); @@ -1286,8 +1274,7 @@ GdkPixbuf *sp_image_repr_read_image( time_t& modTime, char*& pixPath, const gcha return pixbuf; } -static GdkPixbuf * -sp_image_pixbuf_force_rgba (GdkPixbuf * pixbuf) +static GdkPixbuf *sp_image_pixbuf_force_rgba( GdkPixbuf * pixbuf ) { GdkPixbuf* result; if (gdk_pixbuf_get_has_alpha(pixbuf)) { @@ -1301,8 +1288,7 @@ sp_image_pixbuf_force_rgba (GdkPixbuf * pixbuf) /* We assert that realpixbuf is either NULL or identical size to pixbuf */ -static void -sp_image_update_canvas_image (SPImage *image) +static void sp_image_update_canvas_image( SPImage *image ) { SPItem *item = SP_ITEM(image); @@ -1342,7 +1328,7 @@ sp_image_update_canvas_image (SPImage *image) } } -static void sp_image_snappoints(SPItem const *item, std::vector &p, Inkscape::SnapPreferences const */*snapprefs*/) +static void sp_image_snappoints( SPItem const *item, std::vector &p, Inkscape::SnapPreferences const */*snapprefs*/ ) { /* An image doesn't have any nodes to snap, but still we want to be able snap one image to another. Therefore we will create some snappoints at the corner, similar to a rect. If @@ -1376,8 +1362,7 @@ static void sp_image_snappoints(SPItem const *item, std::vectorheight.computed < MAGIC_EPSILON_TOO) || (image->width.computed < MAGIC_EPSILON_TOO) || (image->clip_ref->getObject())) { @@ -1580,8 +1562,7 @@ sp_image_set_curve(SPImage *image) /** * Return duplicate of curve (if any exists) or NULL if there is no curve */ -SPCurve * -sp_image_get_curve (SPImage *image) +SPCurve *sp_image_get_curve( SPImage *image ) { SPCurve *result = 0; if (image->curve) { @@ -1590,8 +1571,7 @@ sp_image_get_curve (SPImage *image) return result; } -void -sp_embed_image(Inkscape::XML::Node *image_node, GdkPixbuf *pb, Glib::ustring const &mime_in) +void sp_embed_image( Inkscape::XML::Node *image_node, GdkPixbuf *pb, Glib::ustring const &mime_in ) { Glib::ustring format, mime; if (mime_in == "image/jpeg") { @@ -1602,8 +1582,8 @@ sp_embed_image(Inkscape::XML::Node *image_node, GdkPixbuf *pb, Glib::ustring con format = "png"; } - gchar *data; - gsize length; + gchar *data = 0; + gsize length = 0; gdk_pixbuf_save_to_buffer(pb, &data, &length, format.data(), NULL, NULL); // Save base64 encoded data in image node @@ -1614,7 +1594,8 @@ sp_embed_image(Inkscape::XML::Node *image_node, GdkPixbuf *pb, Glib::ustring con gchar *buffer = (gchar *) g_malloc(needed_size), *buf_work = buffer; buf_work += g_sprintf(buffer, "data:%s;base64,", mime.data()); - gint state = 0, save = 0; + gint state = 0; + gint save = 0; gsize written = 0; written += g_base64_encode_step((guchar*) data, length, TRUE, buf_work, &state, &save); written += g_base64_encode_close(TRUE, buf_work + written, &state, &save); -- cgit v1.2.3 From ab143333746e25648b253f13c0539adff089b1b6 Mon Sep 17 00:00:00 2001 From: Krzysztof Kosi??ski Date: Fri, 24 Jun 2011 00:22:07 +0200 Subject: Remove more of libnr (bzr r10347.1.2) --- src/sp-image.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'src/sp-image.cpp') diff --git a/src/sp-image.cpp b/src/sp-image.cpp index f98a6c8e3..3f1c19295 100644 --- a/src/sp-image.cpp +++ b/src/sp-image.cpp @@ -25,6 +25,7 @@ #include #include #include <2geom/rect.h> +#include <2geom/transforms.h> #include #include "display/nr-arena-image.h" @@ -1497,7 +1498,7 @@ static void sp_image_set_curve( SPImage *image ) } else { NRRect rect; sp_image_bbox(image, &rect, Geom::identity(), 0); - Geom::Rect rect2 = to_2geom(*rect.upgrade()); + Geom::Rect rect2 = *to_2geom(&rect); SPCurve *c = SPCurve::new_from_rect(rect2, true); if (image->curve) { -- cgit v1.2.3 From 2994e0b96e7d5d6d198b3d8139e4134f9d454229 Mon Sep 17 00:00:00 2001 From: "Jon A. Cruz" Date: Sat, 9 Jul 2011 02:18:40 -0700 Subject: Next step in refactoring color management. More to come. (bzr r10429) --- src/sp-image.cpp | 1 + 1 file changed, 1 insertion(+) (limited to 'src/sp-image.cpp') diff --git a/src/sp-image.cpp b/src/sp-image.cpp index f98a6c8e3..e9fd7ccde 100644 --- a/src/sp-image.cpp +++ b/src/sp-image.cpp @@ -45,6 +45,7 @@ #include "io/sys.h" #if ENABLE_LCMS #include "color-profile-fns.h" +#include "color-profile-cms-fns.h" #include "color-profile.h" //#define DEBUG_LCMS #ifdef DEBUG_LCMS -- cgit v1.2.3 From df7bda1a8b9d4a1c6f0fd4b82cdeb614eb1ea8d2 Mon Sep 17 00:00:00 2001 From: "Jon A. Cruz" Date: Sun, 10 Jul 2011 00:13:05 -0700 Subject: Refactored to abstract lcms usage more. Added CMSSystem class. (bzr r10437) --- src/sp-image.cpp | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) (limited to 'src/sp-image.cpp') diff --git a/src/sp-image.cpp b/src/sp-image.cpp index e9fd7ccde..ee70d2ca7 100644 --- a/src/sp-image.cpp +++ b/src/sp-image.cpp @@ -44,9 +44,9 @@ #include "io/sys.h" #if ENABLE_LCMS -#include "color-profile-fns.h" -#include "color-profile-cms-fns.h" +#include "cms-system.h" #include "color-profile.h" +#include //#define DEBUG_LCMS #ifdef DEBUG_LCMS @@ -849,9 +849,9 @@ static void sp_image_update( SPObject *object, SPCtx *ctx, unsigned int flags ) DEBUG_MESSAGE( lcmsFive, "in 's sp_image_update. About to call colorprofile_get_handle()" ); #endif // DEBUG_LCMS guint profIntent = Inkscape::RENDERING_INTENT_UNKNOWN; - cmsHPROFILE prof = Inkscape::colorprofile_get_handle( object->document, - &profIntent, - image->color_profile ); + cmsHPROFILE prof = Inkscape::CMSSystem::getHandle( object->document, + &profIntent, + image->color_profile ); if ( prof ) { icProfileClassSignature profileClass = cmsGetDeviceClass( prof ); if ( profileClass != icSigNamedColorClass ) { -- 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/sp-image.cpp | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) (limited to 'src/sp-image.cpp') diff --git a/src/sp-image.cpp b/src/sp-image.cpp index 791e88b39..c82c6fed4 100644 --- a/src/sp-image.cpp +++ b/src/sp-image.cpp @@ -1017,7 +1017,7 @@ static void sp_image_modified( SPObject *object, unsigned int flags ) } if (flags & SP_OBJECT_STYLE_MODIFIED_FLAG) { - for (SPItemView *v = SP_ITEM (image)->display; v != NULL; v = v->next) { + for (SPItemView *v = image->display; v != NULL; v = v->next) { nr_arena_image_set_style (NR_ARENA_IMAGE (v->arenaitem), object->style); } } @@ -1273,8 +1273,7 @@ sp_image_update_arenaitem (SPImage *image, NRArenaImage *ai) nr_arena_image_set_clipbox(ai, image->clipbox); } -static void -sp_image_update_canvas_image (SPImage *image) +static void sp_image_update_canvas_image(SPImage *image) { SPItem *item = SP_ITEM(image); -- 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/sp-image.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src/sp-image.cpp') diff --git a/src/sp-image.cpp b/src/sp-image.cpp index c82c6fed4..c9647c939 100644 --- a/src/sp-image.cpp +++ b/src/sp-image.cpp @@ -1303,7 +1303,7 @@ static void sp_image_snappoints( SPItem const *item, std::vectori2d_affine ()); + Geom::Affine const i2d (item->i2dt_affine ()); p.push_back(Inkscape::SnapCandidatePoint(Geom::Point(x0, y0) * i2d, Inkscape::SNAPSOURCE_CORNER, Inkscape::SNAPTARGET_CORNER)); p.push_back(Inkscape::SnapCandidatePoint(Geom::Point(x0, y1) * i2d, Inkscape::SNAPSOURCE_CORNER, Inkscape::SNAPTARGET_CORNER)); p.push_back(Inkscape::SnapCandidatePoint(Geom::Point(x1, y1) * i2d, Inkscape::SNAPSOURCE_CORNER, Inkscape::SNAPTARGET_CORNER)); -- 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/sp-image.cpp | 29 +++++++++++++++-------------- 1 file changed, 15 insertions(+), 14 deletions(-) (limited to 'src/sp-image.cpp') diff --git a/src/sp-image.cpp b/src/sp-image.cpp index c9647c939..3a1280aa0 100644 --- a/src/sp-image.cpp +++ b/src/sp-image.cpp @@ -28,7 +28,7 @@ #include <2geom/transforms.h> #include -#include "display/nr-arena-image.h" +#include "display/drawing-image.h" #include "display/cairo-utils.h" #include "display/curve.h" //Added for preserveAspectRatio support -- EAF @@ -84,14 +84,14 @@ static void sp_image_bbox(SPItem const *item, NRRect *bbox, Geom::Affine const & static void sp_image_print (SPItem * item, SPPrintContext *ctx); static gchar * sp_image_description (SPItem * item); static void sp_image_snappoints(SPItem const *item, std::vector &p, Inkscape::SnapPreferences const *snapprefs); -static NRArenaItem *sp_image_show (SPItem *item, NRArena *arena, unsigned int key, unsigned int flags); +static Inkscape::DrawingItem *sp_image_show (SPItem *item, NRArena *arena, unsigned int key, unsigned int flags); static Geom::Affine sp_image_set_transform (SPItem *item, Geom::Affine const &xform); static void sp_image_set_curve(SPImage *image); static GdkPixbuf *sp_image_repr_read_image( time_t& modTime, gchar*& pixPath, const gchar *href, const gchar *absref, const gchar *base ); static GdkPixbuf *sp_image_pixbuf_force_rgba (GdkPixbuf * pixbuf); -static void sp_image_update_arenaitem (SPImage *img, NRArenaImage *ai); +static void sp_image_update_arenaitem (SPImage *img, Inkscape::DrawingImage *ai); static void sp_image_update_canvas_image (SPImage *image); static GdkPixbuf * sp_image_repr_read_dataURI (const gchar * uri_data); static GdkPixbuf * sp_image_repr_read_b64 (const gchar * uri_data); @@ -1018,7 +1018,8 @@ static void sp_image_modified( SPObject *object, unsigned int flags ) if (flags & SP_OBJECT_STYLE_MODIFIED_FLAG) { for (SPItemView *v = image->display; v != NULL; v = v->next) { - nr_arena_image_set_style (NR_ARENA_IMAGE (v->arenaitem), object->style); + Inkscape::DrawingImage *img = dynamic_cast(v->arenaitem); + img->setStyle(object->style); } } } @@ -1148,12 +1149,12 @@ static gchar *sp_image_description( SPItem *item ) return ret; } -static NRArenaItem *sp_image_show( SPItem *item, NRArena *arena, unsigned int /*key*/, unsigned int /*flags*/ ) +static Inkscape::DrawingItem *sp_image_show( SPItem *item, NRArena *arena, unsigned int /*key*/, unsigned int /*flags*/ ) { SPImage * image = SP_IMAGE(item); - NRArenaItem *ai = NRArenaImage::create(arena); + Inkscape::DrawingImage *ai = new Inkscape::DrawingImage(arena); - sp_image_update_arenaitem(image, NR_ARENA_IMAGE(ai)); + sp_image_update_arenaitem(image, ai); return ai; } @@ -1264,13 +1265,13 @@ static GdkPixbuf *sp_image_pixbuf_force_rgba( GdkPixbuf * pixbuf ) /* We assert that realpixbuf is either NULL or identical size to pixbuf */ static void -sp_image_update_arenaitem (SPImage *image, NRArenaImage *ai) +sp_image_update_arenaitem (SPImage *image, Inkscape::DrawingImage *ai) { - nr_arena_image_set_style(ai, SP_OBJECT(image)->style); - nr_arena_image_set_argb32_pixbuf(ai, image->pixbuf); - nr_arena_image_set_origin(ai, Geom::Point(image->ox, image->oy)); - nr_arena_image_set_scale(ai, image->sx, image->sy); - nr_arena_image_set_clipbox(ai, image->clipbox); + ai->setStyle(SP_OBJECT(image)->style); + ai->setARGB32Pixbuf(image->pixbuf); + ai->setOrigin(Geom::Point(image->ox, image->oy)); + ai->setScale(image->sx, image->sy); + ai->setClipbox(image->clipbox); } static void sp_image_update_canvas_image(SPImage *image) @@ -1278,7 +1279,7 @@ static void sp_image_update_canvas_image(SPImage *image) SPItem *item = SP_ITEM(image); for (SPItemView *v = item->display; v != NULL; v = v->next) { - sp_image_update_arenaitem(image, NR_ARENA_IMAGE(v->arenaitem)); + sp_image_update_arenaitem(image, dynamic_cast(v->arenaitem)); } } -- 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/sp-image.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'src/sp-image.cpp') diff --git a/src/sp-image.cpp b/src/sp-image.cpp index 3a1280aa0..225cccfca 100644 --- a/src/sp-image.cpp +++ b/src/sp-image.cpp @@ -84,7 +84,7 @@ static void sp_image_bbox(SPItem const *item, NRRect *bbox, Geom::Affine const & static void sp_image_print (SPItem * item, SPPrintContext *ctx); static gchar * sp_image_description (SPItem * item); static void sp_image_snappoints(SPItem const *item, std::vector &p, Inkscape::SnapPreferences const *snapprefs); -static Inkscape::DrawingItem *sp_image_show (SPItem *item, NRArena *arena, unsigned int key, unsigned int flags); +static Inkscape::DrawingItem *sp_image_show (SPItem *item, Inkscape::Drawing &drawing, unsigned int key, unsigned int flags); static Geom::Affine sp_image_set_transform (SPItem *item, Geom::Affine const &xform); static void sp_image_set_curve(SPImage *image); @@ -1149,10 +1149,10 @@ static gchar *sp_image_description( SPItem *item ) return ret; } -static Inkscape::DrawingItem *sp_image_show( SPItem *item, NRArena *arena, unsigned int /*key*/, unsigned int /*flags*/ ) +static Inkscape::DrawingItem *sp_image_show( SPItem *item, Inkscape::Drawing &drawing, unsigned int /*key*/, unsigned int /*flags*/ ) { SPImage * image = SP_IMAGE(item); - Inkscape::DrawingImage *ai = new Inkscape::DrawingImage(arena); + Inkscape::DrawingImage *ai = new Inkscape::DrawingImage(drawing); sp_image_update_arenaitem(image, ai); -- cgit v1.2.3 From babb7a67749cb691674bdd9758f0568d4b094b56 Mon Sep 17 00:00:00 2001 From: Diederik van Lierop Date: Mon, 22 Aug 2011 20:27:53 +0200 Subject: Refactoring of the snapping preferences; mainly about storing all toggles in a single array, instead of each having its own member variable (bzr r10569) --- src/sp-image.cpp | 26 ++++++++++++++------------ 1 file changed, 14 insertions(+), 12 deletions(-) (limited to 'src/sp-image.cpp') diff --git a/src/sp-image.cpp b/src/sp-image.cpp index c9647c939..ea7d5089e 100644 --- a/src/sp-image.cpp +++ b/src/sp-image.cpp @@ -1282,7 +1282,7 @@ static void sp_image_update_canvas_image(SPImage *image) } } -static void sp_image_snappoints( SPItem const *item, std::vector &p, Inkscape::SnapPreferences const */*snapprefs*/ ) +static void sp_image_snappoints( SPItem const *item, std::vector &p, Inkscape::SnapPreferences const *snapprefs ) { /* An image doesn't have any nodes to snap, but still we want to be able snap one image to another. Therefore we will create some snappoints at the corner, similar to a rect. If @@ -1297,17 +1297,19 @@ static void sp_image_snappoints( SPItem const *item, std::vectori2dt_affine ()); - p.push_back(Inkscape::SnapCandidatePoint(Geom::Point(x0, y0) * i2d, Inkscape::SNAPSOURCE_CORNER, Inkscape::SNAPTARGET_CORNER)); - p.push_back(Inkscape::SnapCandidatePoint(Geom::Point(x0, y1) * i2d, Inkscape::SNAPSOURCE_CORNER, Inkscape::SNAPTARGET_CORNER)); - p.push_back(Inkscape::SnapCandidatePoint(Geom::Point(x1, y1) * i2d, Inkscape::SNAPSOURCE_CORNER, Inkscape::SNAPTARGET_CORNER)); - p.push_back(Inkscape::SnapCandidatePoint(Geom::Point(x1, y0) * i2d, Inkscape::SNAPSOURCE_CORNER, Inkscape::SNAPTARGET_CORNER)); + if (snapprefs->isTargetSnappable(Inkscape::SNAPTARGET_IMG_CORNER)) { + // The image has not been clipped: return its corners, which might be rotated for example + SPImage &image = *SP_IMAGE(item); + double const x0 = image.x.computed; + double const y0 = image.y.computed; + double const x1 = x0 + image.width.computed; + double const y1 = y0 + image.height.computed; + Geom::Affine const i2d (item->i2dt_affine ()); + p.push_back(Inkscape::SnapCandidatePoint(Geom::Point(x0, y0) * i2d, Inkscape::SNAPSOURCE_IMG_CORNER, Inkscape::SNAPTARGET_IMG_CORNER)); + p.push_back(Inkscape::SnapCandidatePoint(Geom::Point(x0, y1) * i2d, Inkscape::SNAPSOURCE_IMG_CORNER, Inkscape::SNAPTARGET_IMG_CORNER)); + p.push_back(Inkscape::SnapCandidatePoint(Geom::Point(x1, y1) * i2d, Inkscape::SNAPSOURCE_IMG_CORNER, Inkscape::SNAPTARGET_IMG_CORNER)); + p.push_back(Inkscape::SnapCandidatePoint(Geom::Point(x1, y0) * i2d, Inkscape::SNAPSOURCE_IMG_CORNER, Inkscape::SNAPTARGET_IMG_CORNER)); + } } } -- 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/sp-image.cpp | 23 ++++++++--------------- 1 file changed, 8 insertions(+), 15 deletions(-) (limited to 'src/sp-image.cpp') diff --git a/src/sp-image.cpp b/src/sp-image.cpp index 5f398b10e..3ae2b6e63 100644 --- a/src/sp-image.cpp +++ b/src/sp-image.cpp @@ -80,7 +80,7 @@ static void sp_image_update (SPObject *object, SPCtx *ctx, unsigned int flags); static void sp_image_modified (SPObject *object, unsigned int flags); static Inkscape::XML::Node *sp_image_write (SPObject *object, Inkscape::XML::Document *doc, Inkscape::XML::Node *repr, guint flags); -static void sp_image_bbox(SPItem const *item, NRRect *bbox, Geom::Affine const &transform, unsigned const flags); +static Geom::OptRect sp_image_bbox(SPItem const *item, Geom::Affine const &transform, SPItem::BBoxType type); static void sp_image_print (SPItem * item, SPPrintContext *ctx); static gchar * sp_image_description (SPItem * item); static void sp_image_snappoints(SPItem const *item, std::vector &p, Inkscape::SnapPreferences const *snapprefs); @@ -1062,21 +1062,16 @@ static Inkscape::XML::Node *sp_image_write( SPObject *object, Inkscape::XML::Doc return repr; } -static void sp_image_bbox( SPItem const *item, NRRect *bbox, Geom::Affine const &transform, unsigned const /*flags*/ ) +static Geom::OptRect sp_image_bbox( SPItem const *item,Geom::Affine const &transform, SPItem::BBoxType type ) { SPImage const &image = *SP_IMAGE(item); + Geom::OptRect bbox; if ((image.width.computed > 0.0) && (image.height.computed > 0.0)) { - double const x0 = image.x.computed; - double const y0 = image.y.computed; - double const x1 = x0 + image.width.computed; - double const y1 = y0 + image.height.computed; - - nr_rect_union_pt(bbox, Geom::Point(x0, y0) * transform); - nr_rect_union_pt(bbox, Geom::Point(x1, y0) * transform); - nr_rect_union_pt(bbox, Geom::Point(x1, y1) * transform); - nr_rect_union_pt(bbox, Geom::Point(x0, y1) * transform); + bbox = Geom::Rect::from_xywh(image.x.computed, image.y.computed, image.width.computed, image.height.computed); + *bbox *= transform; } + return bbox; } static void sp_image_print( SPItem *item, SPPrintContext *ctx ) @@ -1499,10 +1494,8 @@ static void sp_image_set_curve( SPImage *image ) image->curve = image->curve->unref(); } } else { - NRRect rect; - sp_image_bbox(image, &rect, Geom::identity(), 0); - Geom::Rect rect2 = *to_2geom(&rect); - SPCurve *c = SPCurve::new_from_rect(rect2, true); + Geom::OptRect rect = sp_image_bbox(image, Geom::identity(), SPItem::VISUAL_BBOX); + SPCurve *c = SPCurve::new_from_rect(*rect, true); if (image->curve) { image->curve = image->curve->unref(); -- cgit v1.2.3 From 84194ec2d0b9830437a5470320422265d5dd8c35 Mon Sep 17 00:00:00 2001 From: Krzysztof Kosi??ski Date: Sat, 27 Aug 2011 12:20:13 +0200 Subject: Remove NRRect use from the extension system (bzr r10582.1.2) --- src/sp-image.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'src/sp-image.cpp') diff --git a/src/sp-image.cpp b/src/sp-image.cpp index 3ae2b6e63..1bfcc90e5 100644 --- a/src/sp-image.cpp +++ b/src/sp-image.cpp @@ -1095,7 +1095,7 @@ static void sp_image_print( SPItem *item, SPPrintContext *ctx ) Geom::Translate ti(0.0, -1.0); t = s * tp; t = ti * t; - sp_print_image_R8G8B8A8_N(ctx, px, w, h, rs, &t, item->style); + sp_print_image_R8G8B8A8_N(ctx, px, w, h, rs, t, item->style); } else { // preserveAspectRatio double vw = image->width.computed / image->sx; double vh = image->height.computed / image->sy; @@ -1116,7 +1116,7 @@ static void sp_image_print( SPItem *item, SPPrintContext *ctx ) Geom::Translate ti(0.0, -1.0); t = s * tp; t = ti * t; - sp_print_image_R8G8B8A8_N(ctx, px + trimx*pixskip + trimy*rs, trimwidth, trimheight, rs, &t, item->style); + sp_print_image_R8G8B8A8_N(ctx, px + trimx*pixskip + trimy*rs, trimwidth, trimheight, rs, t, item->style); } } } -- cgit v1.2.3 From 122894f12a4f8214207f533ed26569fbab5ac9f7 Mon Sep 17 00:00:00 2001 From: "Jon A. Cruz" Date: Sun, 2 Oct 2011 01:26:17 -0700 Subject: Warning cleanup. (bzr r10655) --- src/sp-image.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src/sp-image.cpp') diff --git a/src/sp-image.cpp b/src/sp-image.cpp index 1bfcc90e5..46969897f 100644 --- a/src/sp-image.cpp +++ b/src/sp-image.cpp @@ -1062,7 +1062,7 @@ static Inkscape::XML::Node *sp_image_write( SPObject *object, Inkscape::XML::Doc return repr; } -static Geom::OptRect sp_image_bbox( SPItem const *item,Geom::Affine const &transform, SPItem::BBoxType type ) +static Geom::OptRect sp_image_bbox( SPItem const *item,Geom::Affine const &transform, SPItem::BBoxType /*type*/ ) { SPImage const &image = *SP_IMAGE(item); Geom::OptRect bbox; -- cgit v1.2.3