From bb8c80451efac613442f77de66d246065ffa4fcf Mon Sep 17 00:00:00 2001 From: Niko Kiirala Date: Tue, 29 May 2007 10:47:04 +0000 Subject: Added support for in-parameter in filter primitives (bzr r3041) --- src/display/nr-filter-blend.cpp | 8 -------- src/display/nr-filter-slot.cpp | 23 +++++++++++++++++++---- src/display/nr-filter-types.h | 2 +- src/display/nr-filter.cpp | 2 -- 4 files changed, 20 insertions(+), 15 deletions(-) (limited to 'src/display') diff --git a/src/display/nr-filter-blend.cpp b/src/display/nr-filter-blend.cpp index 1468eb61b..0e2f965b7 100644 --- a/src/display/nr-filter-blend.cpp +++ b/src/display/nr-filter-blend.cpp @@ -23,14 +23,6 @@ #include "libnr/nr-blit.h" #include "libnr/nr-pixops.h" -/* -static inline int clamp(const int val, const int min, const int max) { - if (val < min) return min; - if (val > max) return max; - return val; -} -*/ - template static void _render(NRPixBlock &out, NRPixBlock &in1, NRPixBlock &in2) { unsigned char *in1_data = NR_PIXBLOCK_PX(&in1); diff --git a/src/display/nr-filter-slot.cpp b/src/display/nr-filter-slot.cpp index 3a2895ec6..673754f18 100644 --- a/src/display/nr-filter-slot.cpp +++ b/src/display/nr-filter-slot.cpp @@ -62,7 +62,7 @@ NRPixBlock *FilterSlot::get(int slot_nr) || slot_nr == NR_FILTER_BACKGROUNDIMAGE || slot_nr == NR_FILTER_BACKGROUNDALPHA || slot_nr == NR_FILTER_FILLPAINT - || slot_nr == NR_FILTER_SOURCEPAINT)) + || slot_nr == NR_FILTER_STROKEPAINT)) { /* If needed, fetch background */ if (slot_nr == NR_FILTER_BACKGROUNDIMAGE @@ -70,7 +70,22 @@ NRPixBlock *FilterSlot::get(int slot_nr) { NRPixBlock *pb; pb = nr_arena_item_get_background(_arena_item); - this->set(NR_FILTER_BACKGROUNDIMAGE, pb); + if (pb) { + this->set(NR_FILTER_BACKGROUNDIMAGE, pb); + } else { + NRPixBlock *source = this->get(NR_FILTER_SOURCEGRAPHIC); + pb = new NRPixBlock(); + if (!pb) return NULL; // Allocation failed + nr_pixblock_setup_fast(pb, source->mode, + source->area.x0, source->area.y0, + source->area.x1, source->area.y1, true); + if (pb->size != NR_PIXBLOCK_SIZE_TINY && pb->data.px == NULL) { + // allocation failed + delete pb; + return NULL; + } + this->set(NR_FILTER_BACKGROUNDIMAGE, pb); + } } /* If only a alpha channel is needed, strip it from full image */ if (slot_nr == NR_FILTER_SOURCEALPHA) { @@ -83,7 +98,7 @@ NRPixBlock *FilterSlot::get(int slot_nr) if (slot_nr == NR_FILTER_FILLPAINT) { // TODO } - if (slot_nr == NR_FILTER_SOURCEPAINT) { + if (slot_nr == NR_FILTER_STROKEPAINT) { // TODO } } @@ -125,7 +140,7 @@ int FilterSlot::_get_index(int slot_nr) slot_nr == NR_FILTER_BACKGROUNDIMAGE || slot_nr == NR_FILTER_BACKGROUNDALPHA || slot_nr == NR_FILTER_FILLPAINT || - slot_nr == NR_FILTER_SOURCEPAINT); + slot_nr == NR_FILTER_STROKEPAINT); int index = -1; if (slot_nr == NR_FILTER_SLOT_NOT_SET) { diff --git a/src/display/nr-filter-types.h b/src/display/nr-filter-types.h index 3eebe3731..6f28c6257 100644 --- a/src/display/nr-filter-types.h +++ b/src/display/nr-filter-types.h @@ -31,7 +31,7 @@ enum { NR_FILTER_BACKGROUNDIMAGE = -4, NR_FILTER_BACKGROUNDALPHA = -5, NR_FILTER_FILLPAINT = -6, - NR_FILTER_SOURCEPAINT = -7 + NR_FILTER_STROKEPAINT = -7 }; } /* namespace NR */ diff --git a/src/display/nr-filter.cpp b/src/display/nr-filter.cpp index 515d5961f..d8cfb2ecf 100644 --- a/src/display/nr-filter.cpp +++ b/src/display/nr-filter.cpp @@ -35,8 +35,6 @@ using Inkscape::round; #endif -//#include "display/nr-arena-shape.h" - __attribute__ ((const)) inline static int _max4(const double a, const double b, const double c, const double d) { -- cgit v1.2.3