diff options
| author | Johan B. C. Engelen <jbc.engelen@swissonline.ch> | 2011-02-21 22:28:50 +0000 |
|---|---|---|
| committer | Johan Engelen <goejendaagh@zonnet.nl> | 2011-02-21 22:28:50 +0000 |
| commit | 4a4047fdd90aede6d16c020ddcd70c57ea4aa218 (patch) | |
| tree | e43b214f3025b953644385c301a03a4d2f3b1dbf /src/sp-pattern.cpp | |
| parent | Finished cleanup of outdated SP_OBJECT_PARENT C macro. (diff) | |
| download | inkscape-4a4047fdd90aede6d16c020ddcd70c57ea4aa218.tar.gz inkscape-4a4047fdd90aede6d16c020ddcd70c57ea4aa218.zip | |
NEW: Grayscale color display mode. (toggle assigned keybinding: Shift+keypad5)
(bzr r10065)
Diffstat (limited to '')
| -rw-r--r-- | src/sp-pattern.cpp | 12 |
1 files changed, 10 insertions, 2 deletions
diff --git a/src/sp-pattern.cpp b/src/sp-pattern.cpp index cd2e706f0..9ea0ef891 100644 --- a/src/sp-pattern.cpp +++ b/src/sp-pattern.cpp @@ -30,6 +30,7 @@ #include "uri.h" #include "sp-pattern.h" #include "xml/repr.h" +#include "display/grayscale.h" #include <sigc++/functors/ptr_fun.h> #include <sigc++/adaptors/bind.h> @@ -915,10 +916,12 @@ sp_pat_fill (SPPainter *painter, NRPixBlock *pb) if (pattern_width (pp->pat) < NR_EPSILON) return; if (pattern_height (pp->pat) < NR_EPSILON) return; + bool grayscale = Grayscale::activeDesktopIsGrayscale(); // TODO: find good way to access the current rendermode + /* Find buffer area in gradient space */ /* fixme: This is suboptimal (Lauris) */ - if ( pp->use_cached_tile ) { + if ( !grayscale && pp->use_cached_tile ) { double pat_w=pattern_width (pp->pat); double pat_h=pattern_height (pp->pat); if ( pb->mode == NR_PIXBLOCK_MODE_R8G8B8A8N || pb->mode == NR_PIXBLOCK_MODE_R8G8B8A8P ) { // same thing because it's filling an empty pixblock @@ -1031,8 +1034,13 @@ sp_pat_fill (SPPainter *painter, NRPixBlock *pb) // fixme: (Lauris) nr_pixblock_setup_extern (&ppb, pb->mode, area.x0, area.y0, area.x1, area.y1, NR_PIXBLOCK_PX (pb), pb->rs, FALSE, FALSE); + Inkscape::ColorRenderMode saved_colormode = pp->root->arena->colorrendermode; + if (grayscale) { + pp->root->arena->colorrendermode = Inkscape::COLORRENDERMODE_GRAYSCALE; + } nr_arena_item_invoke_render (NULL, pp->root, &area, &ppb, 0); - + pp->root->arena->colorrendermode = saved_colormode; + nr_pixblock_release (&ppb); } } |
