X-Git-Url: https://git.tokkee.org/?a=blobdiff_plain;ds=sidebyside;f=src%2Fdisplay%2Fnr-filter-blend.cpp;h=4645d9bc063a8bf0493e202e0b54ff4f5f0365b3;hb=d7e5c97357def056c805b596bdf1dccd0df19ff4;hp=b02b20cbf6d8eddcfbaa2e97bf400d40d1865128;hpb=d0bb68525547101b5c938b246ff897a5de413cff;p=inkscape.git diff --git a/src/display/nr-filter-blend.cpp b/src/display/nr-filter-blend.cpp index b02b20cbf..4645d9bc0 100644 --- a/src/display/nr-filter-blend.cpp +++ b/src/display/nr-filter-blend.cpp @@ -8,8 +8,9 @@ * * Authors: * Niko Kiirala + * Jasper van de Gronde * - * Copyright (C) 2007 authors + * Copyright (C) 2007-2008 authors * * Released under GNU GPL, read the file 'COPYING' for more information */ @@ -19,12 +20,13 @@ #include "display/nr-filter-primitive.h" #include "display/nr-filter-slot.h" #include "display/nr-filter-types.h" +#include "display/nr-filter-units.h" #include "libnr/nr-pixblock.h" -#include "libnr/nr-matrix.h" #include "libnr/nr-blit.h" #include "libnr/nr-pixops.h" -namespace NR { +namespace Inkscape { +namespace Filters { /* * From http://www.w3.org/TR/SVG11/filters.html#feBlend @@ -56,9 +58,9 @@ namespace NR { inline void blend_normal(unsigned char *r, unsigned char const *a, unsigned char const *b) { - r[0] = NR_NORMALIZE_21((255 - a[3]) * b[0]) + a[0]; - r[1] = NR_NORMALIZE_21((255 - a[3]) * b[1]) + a[1]; - r[2] = NR_NORMALIZE_21((255 - a[3]) * b[2]) + a[2]; + r[0] = NR_COMPOSEPPP_1111(a[0],a[3],b[0]); + r[1] = NR_COMPOSEPPP_1111(a[1],a[3],b[1]); + r[2] = NR_COMPOSEPPP_1111(a[2],a[3],b[2]); SET_ALPHA; } @@ -79,9 +81,9 @@ blend_multiply(unsigned char *r, unsigned char const *a, unsigned char const *b) inline void blend_screen(unsigned char *r, unsigned char const *a, unsigned char const *b) { - r[0] = NR_NORMALIZE_21(b[0] * 255 + a[0] * 255 - a[0] * b[0]); - r[1] = NR_NORMALIZE_21(b[1] * 255 + a[1] * 255 - a[1] * b[1]); - r[2] = NR_NORMALIZE_21(b[2] * 255 + a[2] * 255 - a[2] * b[2]); + r[0] = NR_NORMALIZE_21((b[0] + a[0]) * 255 - a[0] * b[0]); + r[1] = NR_NORMALIZE_21((b[1] + a[1]) * 255 - a[1] * b[1]); + r[2] = NR_NORMALIZE_21((b[2] + a[2]) * 255 - a[2] * b[2]); SET_ALPHA; } @@ -89,12 +91,12 @@ blend_screen(unsigned char *r, unsigned char const *a, unsigned char const *b) inline void blend_darken(unsigned char *r, unsigned char const *a, unsigned char const *b) { - r[0] = std::min(NR_NORMALIZE_21((255 - a[3]) * b[0]) + a[0], - NR_NORMALIZE_21((255 - b[3]) * a[0]) + b[0]); - r[1] = std::min(NR_NORMALIZE_21((255 - a[3]) * b[1]) + a[1], - NR_NORMALIZE_21((255 - b[3]) * a[1]) + b[1]); - r[2] = std::min(NR_NORMALIZE_21((255 - a[3]) * b[2]) + a[2], - NR_NORMALIZE_21((255 - b[3]) * a[2]) + b[2]); + r[0] = NR_NORMALIZE_21(std::min(NR_COMPOSEPPP_1112(a[0],a[3],b[0]), + NR_COMPOSEPPP_1112(b[0],b[3],a[0]))); + r[1] = NR_NORMALIZE_21(std::min(NR_COMPOSEPPP_1112(a[1],a[3],b[1]), + NR_COMPOSEPPP_1112(b[1],b[3],a[1]))); + r[2] = NR_NORMALIZE_21(std::min(NR_COMPOSEPPP_1112(a[2],a[3],b[2]), + NR_COMPOSEPPP_1112(b[2],b[3],a[2]))); SET_ALPHA; } @@ -102,12 +104,12 @@ blend_darken(unsigned char *r, unsigned char const *a, unsigned char const *b) inline void blend_lighten(unsigned char *r, unsigned char const *a, unsigned char const *b) { - r[0] = std::max(NR_NORMALIZE_21((255 - a[3]) * b[0]) + a[0], - NR_NORMALIZE_21((255 - b[3]) * a[0]) + b[0]); - r[1] = std::max(NR_NORMALIZE_21((255 - a[3]) * b[1]) + a[1], - NR_NORMALIZE_21((255 - b[3]) * a[1]) + b[1]); - r[2] = std::max(NR_NORMALIZE_21((255 - a[3]) * b[2]) + a[2], - NR_NORMALIZE_21((255 - b[3]) * a[2]) + b[2]); + r[0] = NR_NORMALIZE_21(std::max(NR_COMPOSEPPP_1112(a[0],a[3],b[0]), + NR_COMPOSEPPP_1112(b[0],b[3],a[0]))); + r[1] = NR_NORMALIZE_21(std::max(NR_COMPOSEPPP_1112(a[1],a[3],b[1]), + NR_COMPOSEPPP_1112(b[1],b[3],a[1]))); + r[2] = NR_NORMALIZE_21(std::max(NR_COMPOSEPPP_1112(a[2],a[3],b[2]), + NR_COMPOSEPPP_1112(b[2],b[3],a[2]))); SET_ALPHA; } @@ -123,7 +125,7 @@ FilterPrimitive * FilterBlend::create() { FilterBlend::~FilterBlend() {} -int FilterBlend::render(FilterSlot &slot, Matrix const &trans) { +int FilterBlend::render(FilterSlot &slot, FilterUnits const & /*units*/) { NRPixBlock *in1 = slot.get(_input); NRPixBlock *in2 = slot.get(_input2); NRPixBlock *original_in1 = in1; @@ -218,7 +220,8 @@ void FilterBlend::set_mode(FilterBlendMode mode) { } } -} /* namespace NR */ +} /* namespace Filters */ +} /* namespace Inkscape */ /* Local Variables: