summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/display/nr-filter-composite.cpp150
1 files changed, 0 insertions, 150 deletions
diff --git a/src/display/nr-filter-composite.cpp b/src/display/nr-filter-composite.cpp
index e6abb7bae..5c00898d4 100644
--- a/src/display/nr-filter-composite.cpp
+++ b/src/display/nr-filter-composite.cpp
@@ -15,75 +15,8 @@
#include "display/cairo-templates.h"
#include "display/cairo-utils.h"
#include "display/nr-filter-composite.h"
-#include "display/nr-filter-pixops.h"
#include "display/nr-filter-slot.h"
#include "display/nr-filter-units.h"
-#include "display/nr-filter-utils.h"
-#include "libnr/nr-blit.h"
-#include "libnr/nr-pixblock.h"
-#include "libnr/nr-pixops.h"
-
-inline void
-composite_over(unsigned char *r, unsigned char const *a, unsigned char const *b)
-{
- 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]);
- r[3] = NR_COMPOSEPPP_1111(a[3],a[3],b[3]);
-}
-
-inline void
-composite_in(unsigned char *r, unsigned char const *a, unsigned char const *b)
-{
- r[0] = NR_NORMALIZE_21(a[0] * b[3]);
- r[1] = NR_NORMALIZE_21(a[1] * b[3]);
- r[2] = NR_NORMALIZE_21(a[2] * b[3]);
- r[3] = NR_NORMALIZE_21(a[3] * b[3]);
-}
-
-inline void
-composite_out(unsigned char *r, unsigned char const *a, unsigned char const *b)
-{
- r[0] = NR_NORMALIZE_21(a[0] * (255 - b[3]));
- r[1] = NR_NORMALIZE_21(a[1] * (255 - b[3]));
- r[2] = NR_NORMALIZE_21(a[2] * (255 - b[3]));
- r[3] = NR_NORMALIZE_21(a[3] * (255 - b[3]));
-}
-
-inline void
-composite_atop(unsigned char *r, unsigned char const *a, unsigned char const *b)
-{
- r[0] = NR_NORMALIZE_21(a[0] * b[3] + b[0] * (255 - a[3]));
- r[1] = NR_NORMALIZE_21(a[1] * b[3] + b[1] * (255 - a[3]));
- r[2] = NR_NORMALIZE_21(a[2] * b[3] + b[2] * (255 - a[3]));
- r[3] = b[3];
-}
-
-inline void
-composite_xor(unsigned char *r, unsigned char const *a, unsigned char const *b)
-{
- r[0] = NR_NORMALIZE_21(a[0] * (255 - b[3]) + b[0] * (255 - a[3]));
- r[1] = NR_NORMALIZE_21(a[1] * (255 - b[3]) + b[1] * (255 - a[3]));
- r[2] = NR_NORMALIZE_21(a[2] * (255 - b[3]) + b[2] * (255 - a[3]));
- r[3] = NR_NORMALIZE_21(a[3] * (255 - b[3]) + b[3] * (255 - a[3]));
-}
-
-// BUGBUG / TODO
-// This makes arithmetic compositing non re-entrant and non thread safe.
-static int arith_k1, arith_k2, arith_k3, arith_k4;
-inline void
-composite_arithmetic(unsigned char *r, unsigned char const *a, unsigned char const *b)
-{
- using Inkscape::Filters::clamp3;
- r[0] = NR_NORMALIZE_31(clamp3(arith_k1 * a[0] * b[0]
- + arith_k2 * a[0] + arith_k3 * b[0] + arith_k4));
- r[1] = NR_NORMALIZE_31(clamp3(arith_k1 * a[1] * b[1]
- + arith_k2 * a[1] + arith_k3 * b[1] + arith_k4));
- r[2] = NR_NORMALIZE_31(clamp3(arith_k1 * a[2] * b[2]
- + arith_k2 * a[2] + arith_k3 * b[2] + arith_k4));
- r[3] = NR_NORMALIZE_31(clamp3(arith_k1 * a[3] * b[3]
- + arith_k2 * a[3] + arith_k3 * b[3] + arith_k4));
-}
namespace Inkscape {
namespace Filters {
@@ -123,89 +56,6 @@ private:
guint32 _k1, _k2, _k3, _k4;
};
-#if 0
-int FilterComposite::render(FilterSlot &slot, FilterUnits const &/*units*/) {
- NRPixBlock *in1 = slot.get(_input);
- NRPixBlock *in2 = slot.get(_input2);
- NRPixBlock *original_in1 = in1;
- NRPixBlock *original_in2 = in2;
- NRPixBlock *out;
-
- // Bail out if either one of source images is missing
- if (!in1 || !in2) {
- g_warning("Missing source image for feComposite (in=%d in2=%d)", _input, _input2);
- return 1;
- }
-
- out = new NRPixBlock;
- NRRectL out_area;
- nr_rect_l_union(&out_area, &in1->area, &in2->area);
- nr_pixblock_setup_fast(out, NR_PIXBLOCK_MODE_R8G8B8A8P,
- out_area.x0, out_area.y0, out_area.x1, out_area.y1,
- true);
-
- // Blending modes are defined for premultiplied RGBA values,
- // thus convert them to that format before blending
- if (in1->mode != NR_PIXBLOCK_MODE_R8G8B8A8P) {
- in1 = nr_pixblock_new_fast(NR_PIXBLOCK_MODE_R8G8B8A8P,
- original_in1->area.x0, original_in1->area.y0,
- original_in1->area.x1, original_in1->area.y1,
- false);
- nr_blit_pixblock_pixblock(in1, original_in1);
- }
- if (in2->mode != NR_PIXBLOCK_MODE_R8G8B8A8P) {
- in2 = nr_pixblock_new_fast(NR_PIXBLOCK_MODE_R8G8B8A8P,
- original_in2->area.x0, original_in2->area.y0,
- original_in2->area.x1, original_in2->area.y1,
- false);
- nr_blit_pixblock_pixblock(in2, original_in2);
- }
-
- /* pixops_mix is defined in display/nr-filter-pixops.h
- * It mixes the two input images with the function given as template
- * and places the result in output image.
- */
- switch (op) {
- case COMPOSITE_IN:
- pixops_mix<composite_in>(*out, *in1, *in2);
- break;
- case COMPOSITE_OUT:
- pixops_mix<composite_out>(*out, *in1, *in2);
- break;
- case COMPOSITE_ATOP:
- pixops_mix<composite_atop>(*out, *in1, *in2);
- break;
- case COMPOSITE_XOR:
- pixops_mix<composite_xor>(*out, *in1, *in2);
- break;
- case COMPOSITE_ARITHMETIC:
- arith_k1 = (int)round(k1 * 255);
- arith_k2 = (int)round(k2 * 255 * 255);
- arith_k3 = (int)round(k3 * 255 * 255);
- arith_k4 = (int)round(k4 * 255 * 255 * 255);
- pixops_mix<composite_arithmetic>(*out, *in1, *in2);
- break;
- case COMPOSITE_DEFAULT:
- case COMPOSITE_OVER:
- default:
- pixops_mix<composite_over>(*out, *in1, *in2);
- break;
- }
-
- if (in1 != original_in1) {
- nr_pixblock_free(in1);
- }
- if (in2 != original_in2) {
- nr_pixblock_free(in2);
- }
-
- out->empty = FALSE;
- slot.set(_output, out);
-
- return 0;
-}
-#endif
-
void FilterComposite::render_cairo(FilterSlot &slot)
{
cairo_surface_t *input1 = slot.getcairo(_input);