diff options
| author | Andrew Higginson <at.higginson@gmail.com> | 2011-12-27 21:04:47 +0000 |
|---|---|---|
| committer | Andrew <at.higginson@gmail.com> | 2011-12-27 21:04:47 +0000 |
| commit | 80960b623a99aae1402ab651b2974ef544ed3b03 (patch) | |
| tree | ba49d42c2789e9e11f805e2d5263e10f9fedeef8 /src/dyna-draw-context.cpp | |
| parent | try to fix bug (diff) | |
| parent | GDL: Cherry-pick upstream patch 73852 (2011-03-23) - Add missing return value. (diff) | |
| download | inkscape-80960b623a99aae1402ab651b2974ef544ed3b03.tar.gz inkscape-80960b623a99aae1402ab651b2974ef544ed3b03.zip | |
merged with trunk so I can build again...
(bzr r10092.1.36)
Diffstat (limited to 'src/dyna-draw-context.cpp')
| -rw-r--r-- | src/dyna-draw-context.cpp | 21 |
1 files changed, 9 insertions, 12 deletions
diff --git a/src/dyna-draw-context.cpp b/src/dyna-draw-context.cpp index 2988aea49..32da6de4e 100644 --- a/src/dyna-draw-context.cpp +++ b/src/dyna-draw-context.cpp @@ -33,11 +33,12 @@ #include "svg/svg.h" #include "display/canvas-bpath.h" -#include <2geom/isnan.h> +#include "display/cairo-utils.h" +#include <2geom/math-utils.h> #include <2geom/pathvector.h> #include <2geom/bezier-utils.h> #include "display/curve.h" -#include <glib/gmem.h> +#include <glib.h> #include "macros.h" #include "document.h" #include "selection.h" @@ -439,16 +440,12 @@ sp_dyna_draw_brush(SPDynaDrawContext *dc) double trace_thick = 1; if (dc->trace_bg) { // pick single pixel - NRPixBlock pb; - int x = (int) floor(brush_w[Geom::X]); - int y = (int) floor(brush_w[Geom::Y]); - nr_pixblock_setup_fast(&pb, NR_PIXBLOCK_MODE_R8G8B8A8P, x, y, x+1, y+1, TRUE); - sp_canvas_arena_render_pixblock(SP_CANVAS_ARENA(sp_desktop_drawing(SP_EVENT_CONTEXT(dc)->desktop)), &pb); - const unsigned char *s = NR_PIXBLOCK_PX(&pb); - double R = s[0] / 255.0; - double G = s[1] / 255.0; - double B = s[2] / 255.0; - double A = s[3] / 255.0; + double R, G, B, A; + Geom::IntRect area = Geom::IntRect::from_xywh(brush_w.floor(), Geom::IntPoint(1, 1)); + cairo_surface_t *s = cairo_image_surface_create(CAIRO_FORMAT_ARGB32, 1, 1); + sp_canvas_arena_render_surface(SP_CANVAS_ARENA(sp_desktop_drawing(SP_EVENT_CONTEXT(dc)->desktop)), s, area); + ink_cairo_surface_average_color_premul(s, R, G, B, A); + cairo_surface_destroy(s); double max = MAX (MAX (R, G), B); double min = MIN (MIN (R, G), B); double L = A * (max + min)/2 + (1 - A); // blend with white bg |
