diff options
| author | Ted Gould <ted@gould.cx> | 2009-12-21 16:37:12 +0000 |
|---|---|---|
| committer | Ted Gould <ted@gould.cx> | 2009-12-21 16:37:12 +0000 |
| commit | 752a8f90d3442cdaa4689ba6de4b911ca4fda514 (patch) | |
| tree | 5e0739ec9bd2ac9cbdd2a2343859f89e02dae181 /src/display | |
| parent | Merging in from trunk (diff) | |
| parent | Updating the READMEs to better handle OSX. (diff) | |
| download | inkscape-752a8f90d3442cdaa4689ba6de4b911ca4fda514.tar.gz inkscape-752a8f90d3442cdaa4689ba6de4b911ca4fda514.zip | |
Updating to current trunk
(bzr r8254.1.38)
Diffstat (limited to 'src/display')
25 files changed, 110 insertions, 39 deletions
diff --git a/src/display/nr-arena-glyphs.cpp b/src/display/nr-arena-glyphs.cpp index 429f1ed32..db0922915 100644 --- a/src/display/nr-arena-glyphs.cpp +++ b/src/display/nr-arena-glyphs.cpp @@ -444,6 +444,7 @@ nr_arena_glyphs_group_render(cairo_t *ct, NRArenaItem *item, NRRectL *area, NRPi SPStyle const *style = ggroup->style; guint ret = item->state; + bool print_colors_preview = (item->arena->rendermode == Inkscape::RENDERMODE_PRINT_COLORS_PREVIEW); if (item->arena->rendermode == Inkscape::RENDERMODE_OUTLINE) { @@ -511,6 +512,10 @@ nr_arena_glyphs_group_render(cairo_t *ct, NRArenaItem *item, NRRectL *area, NRPi } else { rgba = style->fill.value.color.toRGBA32( SP_SCALE24_TO_FLOAT(style->fill_opacity.value) ); } + + if (print_colors_preview) + nr_arena_separate_color_plates(&rgba); + nr_blit_pixblock_mask_rgba32(pb, &m, rgba); pb->empty = FALSE; } @@ -551,6 +556,10 @@ nr_arena_glyphs_group_render(cairo_t *ct, NRArenaItem *item, NRRectL *area, NRPi } else { rgba = style->stroke.value.color.toRGBA32( SP_SCALE24_TO_FLOAT(style->stroke_opacity.value) ); } + + if (print_colors_preview) + nr_arena_separate_color_plates(&rgba); + nr_blit_pixblock_mask_rgba32(pb, &m, rgba); pb->empty = FALSE; } else { diff --git a/src/display/nr-arena-item.cpp b/src/display/nr-arena-item.cpp index bdab5b479..b80df7273 100644 --- a/src/display/nr-arena-item.cpp +++ b/src/display/nr-arena-item.cpp @@ -312,7 +312,9 @@ nr_arena_item_invoke_render (cairo_t *ct, NRArenaItem *item, NRRectL const *area NRPixBlock *pb, unsigned int flags) { bool outline = (item->arena->rendermode == Inkscape::RENDERMODE_OUTLINE); - bool filter = (item->arena->rendermode == Inkscape::RENDERMODE_NORMAL); + bool filter = (item->arena->rendermode != Inkscape::RENDERMODE_OUTLINE && + item->arena->rendermode != Inkscape::RENDERMODE_NO_FILTERS); + bool print_colors = (item->arena->rendermode == Inkscape::RENDERMODE_PRINT_COLORS_PREVIEW); nr_return_val_if_fail (item != NULL, NR_ARENA_ITEM_STATE_INVALID); nr_return_val_if_fail (NR_IS_ARENA_ITEM (item), diff --git a/src/display/nr-arena-shape.cpp b/src/display/nr-arena-shape.cpp index 96ea76cbe..e2a9e9580 100644 --- a/src/display/nr-arena-shape.cpp +++ b/src/display/nr-arena-shape.cpp @@ -35,6 +35,7 @@ #include "display/nr-filter.h" #include <typeinfo> #include <cairo.h> +#include "preferences.h" #include <glib.h> #include "svg/svg.h" @@ -831,7 +832,6 @@ cairo_arena_shape_render_stroke(NRArenaItem *item, NRRectL *area, NRPixBlock *pb pb->empty = FALSE; } - /** * Renders the item. Markers are just composed into the parent buffer. */ @@ -844,6 +844,7 @@ nr_arena_shape_render(cairo_t *ct, NRArenaItem *item, NRRectL *area, NRPixBlock if (!shape->style) return item->state; bool outline = (NR_ARENA_ITEM(shape)->arena->rendermode == Inkscape::RENDERMODE_OUTLINE); + bool print_colors_preview = (NR_ARENA_ITEM(shape)->arena->rendermode == Inkscape::RENDERMODE_PRINT_COLORS_PREVIEW); if (outline) { // cairo outline rendering @@ -874,6 +875,7 @@ nr_arena_shape_render(cairo_t *ct, NRArenaItem *item, NRRectL *area, NRPixBlock } SPStyle const *style = shape->style; + if (shape->fill_shp) { NRPixBlock m; guint32 rgba; @@ -893,12 +895,18 @@ nr_arena_shape_render(cairo_t *ct, NRArenaItem *item, NRRectL *area, NRPixBlock if (shape->_fill.paint.type() == NRArenaShape::Paint::NONE) { // do not render fill in any way } else if (shape->_fill.paint.type() == NRArenaShape::Paint::COLOR) { + + const SPColor* fill_color = &shape->_fill.paint.color(); if ( item->render_opacity ) { - rgba = shape->_fill.paint.color().toRGBA32( shape->_fill.opacity * - SP_SCALE24_TO_FLOAT(style->opacity.value) ); + rgba = fill_color->toRGBA32( shape->_fill.opacity * + SP_SCALE24_TO_FLOAT(style->opacity.value) ); } else { - rgba = shape->_fill.paint.color().toRGBA32( shape->_fill.opacity ); + rgba = fill_color->toRGBA32( shape->_fill.opacity ); } + + if (print_colors_preview) + nr_arena_separate_color_plates(&rgba); + nr_blit_pixblock_mask_rgba32(pb, &m, rgba); pb->empty = FALSE; } else if (shape->_fill.paint.type() == NRArenaShape::Paint::SERVER) { @@ -929,14 +937,19 @@ nr_arena_shape_render(cairo_t *ct, NRArenaItem *item, NRRectL *area, NRPixBlock nr_pixblock_render_shape_mask_or(m, shape->stroke_shp); m.empty = FALSE; - if ( item->render_opacity ) { - rgba = shape->_stroke.paint.color().toRGBA32( shape->_stroke.opacity * - SP_SCALE24_TO_FLOAT(style->opacity.value) ); - } else { - rgba = shape->_stroke.paint.color().toRGBA32( shape->_stroke.opacity ); - } - nr_blit_pixblock_mask_rgba32(pb, &m, rgba); - pb->empty = FALSE; + const SPColor* stroke_color = &shape->_stroke.paint.color(); + if ( item->render_opacity ) { + rgba = stroke_color->toRGBA32( shape->_stroke.opacity * + SP_SCALE24_TO_FLOAT(style->opacity.value) ); + } else { + rgba = stroke_color->toRGBA32( shape->_stroke.opacity ); + } + + if (print_colors_preview) + nr_arena_separate_color_plates(&rgba); + + nr_blit_pixblock_mask_rgba32(pb, &m, rgba); + pb->empty = FALSE; nr_pixblock_release(&m); diff --git a/src/display/nr-arena.cpp b/src/display/nr-arena.cpp index 74e0f409c..33870a118 100644 --- a/src/display/nr-arena.cpp +++ b/src/display/nr-arena.cpp @@ -18,6 +18,7 @@ #include "nr-filter-types.h" #include <libnr/nr-blit.h> #include "preferences.h" +#include "color.h" static void nr_arena_class_init (NRArenaClass *klass); static void nr_arena_init (NRArena *arena); @@ -181,6 +182,29 @@ nr_arena_set_renderoffscreen (NRArena *arena) } +#define FLOAT_TO_UINT8(f) (int(f*255)) +#define RGBA_R(v) ((v) >> 24) +#define RGBA_G(v) (((v) >> 16) & 0xff) +#define RGBA_B(v) (((v) >> 8) & 0xff) +#define RGBA_A(v) ((v) & 0xff) + +void nr_arena_separate_color_plates(guint32* rgba){ + Inkscape::Preferences *prefs = Inkscape::Preferences::get(); + bool render_cyan = prefs->getBool("/options/printcolorspreview/cyan", true); + bool render_magenta = prefs->getBool("/options/printcolorspreview/magenta", true); + bool render_yellow = prefs->getBool("/options/printcolorspreview/yellow", true); + bool render_black = prefs->getBool("/options/printcolorspreview/black", true); + + float rgb_v[3]; + float cmyk_v[4]; + sp_color_rgb_to_cmyk_floatv (cmyk_v, RGBA_R(*rgba)/256.0, RGBA_G(*rgba)/256.0, RGBA_B(*rgba)/256.0); + sp_color_cmyk_to_rgb_floatv (rgb_v, render_cyan ? cmyk_v[0] : 0, + render_magenta ? cmyk_v[1] : 0, + render_yellow ? cmyk_v[2] : 0, + render_black ? cmyk_v[3] : 0); + *rgba = (FLOAT_TO_UINT8(rgb_v[0])<<24) + (FLOAT_TO_UINT8(rgb_v[1])<<16) + (FLOAT_TO_UINT8(rgb_v[2])<<8) + 0xff; +} + /* Local Variables: mode:c++ diff --git a/src/display/nr-arena.h b/src/display/nr-arena.h index 1c091b7c7..d2f9dc246 100644 --- a/src/display/nr-arena.h +++ b/src/display/nr-arena.h @@ -64,4 +64,6 @@ void nr_arena_set_renderoffscreen (NRArena *arena); void nr_arena_render_paintserver_fill (NRPixBlock *pb, NRRectL *area, SPPainter *painter, float opacity, NRPixBlock *mask); +void nr_arena_separate_color_plates(guint32* rgba); + #endif diff --git a/src/display/nr-filter-colormatrix.cpp b/src/display/nr-filter-colormatrix.cpp index 66fb196cb..0b24649a9 100644 --- a/src/display/nr-filter-colormatrix.cpp +++ b/src/display/nr-filter-colormatrix.cpp @@ -2,7 +2,7 @@ * feColorMatrix filter primitive renderer * * Authors: - * Felipe Corrêa da Silva Sanches <felipe.sanches@gmail.com> + * Felipe Corrêa da Silva Sanches <juca@members.fsf.org> * Jasper van de Gronde <th.v.d.gronde@hccnet.nl> * * Copyright (C) 2007 authors diff --git a/src/display/nr-filter-colormatrix.h b/src/display/nr-filter-colormatrix.h index 1c331a5b0..47b454c53 100644 --- a/src/display/nr-filter-colormatrix.h +++ b/src/display/nr-filter-colormatrix.h @@ -5,7 +5,7 @@ * feColorMatrix filter primitive renderer * * Authors: - * Felipe Corrêa da Silva Sanches <felipe.sanches@gmail.com> + * Felipe Corrêa da Silva Sanches <juca@members.fsf.org> * * Copyright (C) 2007 authors * diff --git a/src/display/nr-filter-component-transfer.cpp b/src/display/nr-filter-component-transfer.cpp index 87f87c95a..ab9990360 100644 --- a/src/display/nr-filter-component-transfer.cpp +++ b/src/display/nr-filter-component-transfer.cpp @@ -2,7 +2,7 @@ * feComponentTransfer filter primitive renderer * * Authors: - * Felipe Corrêa da Silva Sanches <felipe.sanches@gmail.com> + * Felipe Corrêa da Silva Sanches <juca@members.fsf.org> * Jasper van de Gronde <th.v.d.gronde@hccnet.nl> * * Copyright (C) 2007 authors diff --git a/src/display/nr-filter-component-transfer.h b/src/display/nr-filter-component-transfer.h index 3d8be272e..eb76bd543 100644 --- a/src/display/nr-filter-component-transfer.h +++ b/src/display/nr-filter-component-transfer.h @@ -5,7 +5,7 @@ * feComponentTransfer filter primitive renderer * * Authors: - * Felipe Corrêa da Silva Sanches <felipe.sanches@gmail.com> + * Felipe Corrêa da Silva Sanches <juca@members.fsf.org> * * Copyright (C) 2007 authors * diff --git a/src/display/nr-filter-convolve-matrix.cpp b/src/display/nr-filter-convolve-matrix.cpp index e9f7e7dfe..fc88102d8 100644 --- a/src/display/nr-filter-convolve-matrix.cpp +++ b/src/display/nr-filter-convolve-matrix.cpp @@ -2,7 +2,7 @@ * feConvolveMatrix filter primitive renderer * * Authors: - * Felipe Corrêa da Silva Sanches <felipe.sanches@gmail.com> + * Felipe Corrêa da Silva Sanches <juca@members.fsf.org> * Jasper van de Gronde <th.v.d.gronde@hccnet.nl> * * Copyright (C) 2007,2009 authors @@ -41,7 +41,7 @@ static inline void convolve2D_XY(unsigned int const x, unsigned int const y, uns unsigned int jEnd = X_UPPER ? width+targetX-x : orderX; for (unsigned int i=iBegin; i<iEnd; i++){ - for (int j=jBegin; j<jEnd; j++){ + for (unsigned int j=jBegin; j<jEnd; j++){ unsigned int index = 4*( x - targetX + j + width*(y - targetY + i) ); unsigned int kernel_index = orderX-j-1 + orderX*(orderY-i-1); double k = PREMULTIPLIED ? kernel[kernel_index] : in_data[index+3] * kernel[kernel_index]; diff --git a/src/display/nr-filter-convolve-matrix.h b/src/display/nr-filter-convolve-matrix.h index d7a04a766..e7416f9cc 100644 --- a/src/display/nr-filter-convolve-matrix.h +++ b/src/display/nr-filter-convolve-matrix.h @@ -5,7 +5,7 @@ * feConvolveMatrix filter primitive renderer * * Authors: - * Felipe Corrêa da Silva Sanches <felipe.sanches@gmail.com> + * Felipe Corrêa da Silva Sanches <juca@members.fsf.org> * * Copyright (C) 2007 authors * diff --git a/src/display/nr-filter-displacement-map.cpp b/src/display/nr-filter-displacement-map.cpp index 869a184ac..4de5e658c 100644 --- a/src/display/nr-filter-displacement-map.cpp +++ b/src/display/nr-filter-displacement-map.cpp @@ -2,7 +2,7 @@ * feDisplacementMap filter primitive renderer * * Authors: - * Felipe Corrêa da Silva Sanches <felipe.sanches@gmail.com> + * Felipe Corrêa da Silva Sanches <juca@members.fsf.org> * * Copyright (C) 2007 authors * diff --git a/src/display/nr-filter-displacement-map.h b/src/display/nr-filter-displacement-map.h index 180030c85..bb15b77a3 100644 --- a/src/display/nr-filter-displacement-map.h +++ b/src/display/nr-filter-displacement-map.h @@ -5,7 +5,7 @@ * feDisplacementMap filter primitive renderer * * Authors: - * Felipe Corrêa da Silva Sanches <felipe.sanches@gmail.com> + * Felipe Corrêa da Silva Sanches <juca@members.fsf.org> * * Copyright (C) 2007 authors * diff --git a/src/display/nr-filter-flood.cpp b/src/display/nr-filter-flood.cpp index 026cbce16..1d804f969 100644 --- a/src/display/nr-filter-flood.cpp +++ b/src/display/nr-filter-flood.cpp @@ -2,15 +2,21 @@ * feFlood filter primitive renderer * * Authors: - * Felipe Corrêa da Silva Sanches <felipe.sanches@gmail.com> + * Felipe Corrêa da Silva Sanches <juca@members.fsf.org> * * Copyright (C) 2007 authors * * Released under GNU GPL, read the file 'COPYING' for more information */ +#ifdef HAVE_CONFIG_H +# include "config.h" +#endif + #include "display/nr-filter-flood.h" #include "display/nr-filter-utils.h" +#include "svg/svg-icc-color.h" +#include "svg/svg-color.h" namespace Inkscape { namespace Filters { @@ -26,6 +32,7 @@ FilterFlood::~FilterFlood() {} int FilterFlood::render(FilterSlot &slot, FilterUnits const &/*units*/) { +g_message("rendering feflood"); NRPixBlock *in = slot.get(_input); if (!in) { g_warning("Missing source image for feFlood (in=%d)", _input); @@ -43,12 +50,18 @@ int FilterFlood::render(FilterSlot &slot, FilterUnits const &/*units*/) { true); unsigned char *out_data = NR_PIXBLOCK_PX(out); - unsigned char r,g,b,a; - r = CLAMP_D_TO_U8((color >> 24) % 256); - g = CLAMP_D_TO_U8((color >> 16) % 256); - b = CLAMP_D_TO_U8((color >> 8) % 256); - a = CLAMP_D_TO_U8(opacity*255); + + + r = CLAMP_D_TO_U8((color >> 24) % 256); + g = CLAMP_D_TO_U8((color >> 16) % 256); + b = CLAMP_D_TO_U8((color >> 8) % 256); + a = CLAMP_D_TO_U8(opacity*255); + +#if ENABLE_LCMS + icc_color_to_sRGB(icc, &r, &g, &b); +g_message("result: r:%d g:%d b:%d", r, g, b); +#endif //ENABLE_LCMS for(i=0; i < 4*in_h*in_w; i+=4){ out_data[i]=r; @@ -70,6 +83,10 @@ void FilterFlood::set_opacity(double o) { opacity = o; } +void FilterFlood::set_icc(SVGICCColor *icc_color) { + icc = icc_color; +} + void FilterFlood::area_enlarge(NRRectL &/*area*/, Geom::Matrix const &/*trans*/) { } diff --git a/src/display/nr-filter-flood.h b/src/display/nr-filter-flood.h index 9e6a53abb..98c374bbd 100644 --- a/src/display/nr-filter-flood.h +++ b/src/display/nr-filter-flood.h @@ -5,7 +5,7 @@ * feFlood filter primitive renderer * * Authors: - * Felipe Corrêa da Silva Sanches <felipe.sanches@gmail.com> + * Felipe Corrêa da Silva Sanches <juca@members.fsf.org> * * Copyright (C) 2007 authors * @@ -15,6 +15,7 @@ #include "display/nr-filter-primitive.h" #include "display/nr-filter-slot.h" #include "display/nr-filter-units.h" +#include "svg/svg-color.h" namespace Inkscape { namespace Filters { @@ -27,11 +28,13 @@ public: virtual void set_opacity(double o); virtual void set_color(guint32 c); + virtual void set_icc(SVGICCColor *icc_color); virtual int render(FilterSlot &slot, FilterUnits const &units); virtual void area_enlarge(NRRectL &area, Geom::Matrix const &trans); private: double opacity; guint32 color; + SVGICCColor *icc; }; } /* namespace Filters */ diff --git a/src/display/nr-filter-image.cpp b/src/display/nr-filter-image.cpp index 2b799f8d2..4ad6982f3 100644 --- a/src/display/nr-filter-image.cpp +++ b/src/display/nr-filter-image.cpp @@ -2,7 +2,7 @@ * feImage filter primitive renderer * * Authors: - * Felipe Corrêa da Silva Sanches <felipe.sanches@gmail.com> + * Felipe Corrêa da Silva Sanches <juca@members.fsf.org> * Tavmjong Bah <tavmjong@free.fr> * * Copyright (C) 2007 authors diff --git a/src/display/nr-filter-morphology.cpp b/src/display/nr-filter-morphology.cpp index 2df3ff807..258298751 100644 --- a/src/display/nr-filter-morphology.cpp +++ b/src/display/nr-filter-morphology.cpp @@ -2,7 +2,7 @@ * feMorphology filter primitive renderer * * Authors: - * Felipe Corrêa da Silva Sanches <felipe.sanches@gmail.com> + * Felipe Corrêa da Silva Sanches <juca@members.fsf.org> * * Copyright (C) 2007 authors * diff --git a/src/display/nr-filter-morphology.h b/src/display/nr-filter-morphology.h index 1d3e16be3..16ccad5e6 100644 --- a/src/display/nr-filter-morphology.h +++ b/src/display/nr-filter-morphology.h @@ -5,7 +5,7 @@ * feMorphology filter primitive renderer * * Authors: - * Felipe Corrêa da Silva Sanches <felipe.sanches@gmail.com> + * Felipe Corrêa da Silva Sanches <juca@members.fsf.org> * * Copyright (C) 2007 authors * diff --git a/src/display/nr-filter-tile.cpp b/src/display/nr-filter-tile.cpp index 53399eba2..898db9f53 100644 --- a/src/display/nr-filter-tile.cpp +++ b/src/display/nr-filter-tile.cpp @@ -2,7 +2,7 @@ * feTile filter primitive renderer * * Authors: - * Felipe Corrêa da Silva Sanches <felipe.sanches@gmail.com> + * Felipe Corrêa da Silva Sanches <juca@members.fsf.org> * * Copyright (C) 2007 authors * diff --git a/src/display/nr-filter-tile.h b/src/display/nr-filter-tile.h index ea826dfd7..5a6a5a78c 100644 --- a/src/display/nr-filter-tile.h +++ b/src/display/nr-filter-tile.h @@ -5,7 +5,7 @@ * feTile filter primitive renderer * * Authors: - * Felipe Corrêa da Silva Sanches <felipe.sanches@gmail.com> + * Felipe Corrêa da Silva Sanches <juca@members.fsf.org> * * Copyright (C) 2007 authors * diff --git a/src/display/nr-filter-turbulence.cpp b/src/display/nr-filter-turbulence.cpp index a91db3d56..8d22b180d 100644 --- a/src/display/nr-filter-turbulence.cpp +++ b/src/display/nr-filter-turbulence.cpp @@ -3,7 +3,7 @@ * * Authors: * World Wide Web Consortium <http://www.w3.org/> - * Felipe Corrêa da Silva Sanches <felipe.sanches@gmail.com> + * Felipe Corrêa da Silva Sanches <juca@members.fsf.org> * * This file has a considerable amount of code adapted from * the W3C SVG filter specs, available at: diff --git a/src/display/nr-filter-turbulence.h b/src/display/nr-filter-turbulence.h index b12e6395a..b841cc37f 100644 --- a/src/display/nr-filter-turbulence.h +++ b/src/display/nr-filter-turbulence.h @@ -6,7 +6,7 @@ * * Authors: * World Wide Web Consortium <http://www.w3.org/> - * Felipe Corrêa da Silva Sanches <felipe.sanches@gmail.com> + * Felipe Corrêa da Silva Sanches <juca@members.fsf.org> * Niko Kiirala <niko@kiirala.com> * * This file has a considerable amount of code adapted from diff --git a/src/display/nr-svgfonts.cpp b/src/display/nr-svgfonts.cpp index 2d71504d2..7a0db664a 100644 --- a/src/display/nr-svgfonts.cpp +++ b/src/display/nr-svgfonts.cpp @@ -4,7 +4,7 @@ * SVGFonts rendering implementation * * Authors: - * Felipe C. da S. Sanches <felipe.sanches@gmail.com> + * Felipe C. da S. Sanches <juca@members.fsf.org> * * Copyright (C) 2008 Felipe C. da S. Sanches * diff --git a/src/display/nr-svgfonts.h b/src/display/nr-svgfonts.h index ebf5ad08b..ddf4ba327 100644 --- a/src/display/nr-svgfonts.h +++ b/src/display/nr-svgfonts.h @@ -5,7 +5,7 @@ * SVGFonts rendering headear * * Authors: - * Felipe C. da S. Sanches <felipe.sanches@gmail.com> + * Felipe C. da S. Sanches <juca@members.fsf.org> * * Copyright (C) 2008 Felipe C. da S. Sanches * diff --git a/src/display/rendermode.h b/src/display/rendermode.h index 1b59ae9bb..abcdb3db4 100644 --- a/src/display/rendermode.h +++ b/src/display/rendermode.h @@ -12,7 +12,8 @@ namespace Inkscape { enum RenderMode { RENDERMODE_NORMAL, RENDERMODE_NO_FILTERS, - RENDERMODE_OUTLINE + RENDERMODE_OUTLINE, + RENDERMODE_PRINT_COLORS_PREVIEW }; } |
