diff --git a/src/app/tools/ink_processing.h b/src/app/tools/ink_processing.h index 3671f1a22..a18d4dce8 100644 --- a/src/app/tools/ink_processing.h +++ b/src/app/tools/ink_processing.h @@ -655,20 +655,25 @@ private: template class XorInkProcessing : public DoubleInkProcessing, ImageTraits> { public: - XorInkProcessing(ToolLoop* loop) { } + XorInkProcessing(ToolLoop* loop) { + m_color = loop->getPrimaryColor(); + } void processPixel(int x, int y) { // Do nothing } + +private: + color_t m_color; }; template<> void XorInkProcessing::processPixel(int x, int y) { - *m_dstAddress = rgba_blend_blackandwhite(*m_srcAddress, 0, 255); + *m_dstAddress = rgba_blend_blackandwhite(*m_srcAddress, m_color, 255); } template<> void XorInkProcessing::processPixel(int x, int y) { - *m_dstAddress = graya_blend_blackandwhite(*m_srcAddress, 0, 255); + *m_dstAddress = graya_blend_blackandwhite(*m_srcAddress, m_color, 255); } template<> diff --git a/src/raster/blend.cpp b/src/raster/blend.cpp index c80fc31b7..2399bab6d 100644 --- a/src/raster/blend.cpp +++ b/src/raster/blend.cpp @@ -202,17 +202,20 @@ int rgba_blend_blackandwhite(int back, int front, int opacity) int B_r, B_g, B_b, B_a; int D_v; + B_a = rgba_geta(back); + if (B_a == 0) + return front; + B_r = rgba_getr(back); B_g = rgba_getg(back); B_b = rgba_getb(back); - B_a = rgba_geta(back); if ((B_r*30 + B_g*59 + B_b*11)/100 < 128) D_v = 255; else D_v = 0; - return rgba(D_v, D_v, D_v, B_a); + return rgba(D_v, D_v, D_v, 255); } /**********************************************************************/ @@ -297,15 +300,18 @@ int graya_blend_blackandwhite(int back, int front, int opacity) int B_k, B_a; int D_k; - B_k = graya_getv(back); B_a = graya_geta(back); + if (B_a == 0) + return front; + + B_k = graya_getv(back); if (B_k < 128) D_k = 255; else D_k = 0; - return graya(D_k, B_a); + return graya(D_k, 255); } } // namespace raster