summaryrefslogtreecommitdiffstats
path: root/src/sp-pattern.cpp
diff options
context:
space:
mode:
authorJohan B. C. Engelen <jbc.engelen@swissonline.ch>2011-02-21 22:28:50 +0000
committerJohan Engelen <goejendaagh@zonnet.nl>2011-02-21 22:28:50 +0000
commit4a4047fdd90aede6d16c020ddcd70c57ea4aa218 (patch)
treee43b214f3025b953644385c301a03a4d2f3b1dbf /src/sp-pattern.cpp
parentFinished cleanup of outdated SP_OBJECT_PARENT C macro. (diff)
downloadinkscape-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.cpp12
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);
}
}