[lfs-patches] r3557 - trunk/inkscape

ken at higgs.linuxfromscratch.org ken at higgs.linuxfromscratch.org
Tue May 16 14:31:57 PDT 2017


Author: ken
Date: Tue May 16 14:31:57 2017
New Revision: 3557

Log:
inkscape: fix it for gcc-7.1

Added:
   trunk/inkscape/inkscape-0.92.1-gcc7-1.patch

Added: trunk/inkscape/inkscape-0.92.1-gcc7-1.patch
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ trunk/inkscape/inkscape-0.92.1-gcc7-1.patch	Tue May 16 14:31:57 2017	(r3557)
@@ -0,0 +1,85 @@
+Submitted By: Ken Moffat <ken at linuxfromscratch dot org>
+Date: 2017-05-16
+Initial Package Version: 0.92.1
+Upstream Status: Applied
+Origin: Upstream, cherry-picked.
+Description: Fixes FTBFS (two sets of error: call of overloaded 'abs...' is
+ambiguous) with gcc-7.1.
+
+--- inkscape-0.92.1/src/ui/tools/flood-tool.cpp.orig	2017-05-16 20:45:31.374672304 +0100
++++ inkscape-0.92.1/src/ui/tools/flood-tool.cpp	2017-05-16 21:35:01.564359096 +0100
+@@ -196,6 +196,21 @@
+ }
+ 
+ /**
++ * \brief Check whether two unsigned integers are close to each other
++ *
++ * \param[in] a The 1st unsigned int
++ * \param[in] b The 2nd unsigned int
++ * \param[in] d The threshold for comparison
++ *
++ * \return true if |a-b| <= d; false otherwise
++ */
++static bool compare_guint32(guint32 const a, guint32 const b, guint32 const d)
++{
++    const int difference = std::abs(static_cast<int>(a) - static_cast<int>(b));
++    return difference <= d;
++}
++
++/**
+  * Compare a pixel in a pixel buffer with another pixel to determine if a point should be included in the fill operation.
+  * @param check The pixel in the pixel buffer to check.
+  * @param orig The original selected pixel to use as the fill target color.
+@@ -232,27 +247,35 @@
+     
+     switch (method) {
+         case FLOOD_CHANNELS_ALPHA:
+-            return abs(static_cast<int>(ac) - ao) <= threshold;
++            return compare_guint32(ac, ao, threshold);
+         case FLOOD_CHANNELS_R:
+-            return abs(static_cast<int>(ac ? unpremul_alpha(rc, ac) : 0) - (ao ? unpremul_alpha(ro, ao) : 0)) <= threshold;
++            return compare_guint32(ac ? unpremul_alpha(rc, ac) : 0,
++                                   ao ? unpremul_alpha(ro, ao) : 0,
++                                   threshold);
+         case FLOOD_CHANNELS_G:
+-            return abs(static_cast<int>(ac ? unpremul_alpha(gc, ac) : 0) - (ao ? unpremul_alpha(go, ao) : 0)) <= threshold;
++            return compare_guint32(ac ? unpremul_alpha(gc, ac) : 0,
++                                   ao ? unpremul_alpha(go, ao) : 0,
++                                   threshold);
+         case FLOOD_CHANNELS_B:
+-            return abs(static_cast<int>(ac ? unpremul_alpha(bc, ac) : 0) - (ao ? unpremul_alpha(bo, ao) : 0)) <= threshold;
++            return compare_guint32(ac ? unpremul_alpha(bc, ac) : 0,
++                                   ao ? unpremul_alpha(bo, ao) : 0,
++                                   threshold);
+         case FLOOD_CHANNELS_RGB:
+-            guint32 amc, rmc, bmc, gmc;
+-            //amc = 255*255 - (255-ac)*(255-ad); amc = (amc + 127) / 255;
+-            //amc = (255-ac)*ad + 255*ac; amc = (amc + 127) / 255;
+-            amc = 255; // Why are we looking at desktop? Cairo version ignores destop alpha
+-            rmc = (255-ac)*rd + 255*rc; rmc = (rmc + 127) / 255;
+-            gmc = (255-ac)*gd + 255*gc; gmc = (gmc + 127) / 255;
+-            bmc = (255-ac)*bd + 255*bc; bmc = (bmc + 127) / 255;
+-
+-            diff += abs(static_cast<int>(amc ? unpremul_alpha(rmc, amc) : 0) - (amop ? unpremul_alpha(rmop, amop) : 0));
+-            diff += abs(static_cast<int>(amc ? unpremul_alpha(gmc, amc) : 0) - (amop ? unpremul_alpha(gmop, amop) : 0));
+-            diff += abs(static_cast<int>(amc ? unpremul_alpha(bmc, amc) : 0) - (amop ? unpremul_alpha(bmop, amop) : 0));
+-            return ((diff / 3) <= ((threshold * 3) / 4));
+-        
++            {
++                guint32 amc, rmc, bmc, gmc;
++                //amc = 255*255 - (255-ac)*(255-ad); amc = (amc + 127) / 255;
++                //amc = (255-ac)*ad + 255*ac; amc = (amc + 127) / 255;
++                amc = 255; // Why are we looking at desktop? Cairo version ignores destop alpha
++                rmc = (255-ac)*rd + 255*rc; rmc = (rmc + 127) / 255;
++                gmc = (255-ac)*gd + 255*gc; gmc = (gmc + 127) / 255;
++                bmc = (255-ac)*bd + 255*bc; bmc = (bmc + 127) / 255;
++
++                int diff = 0; // The total difference between each of the 3 color components
++                diff += std::abs(static_cast<int>(amc ? unpremul_alpha(rmc, amc) : 0) - static_cast<int>(amop ? unpremul_alpha(rmop, amop) : 0));
++                diff += std::abs(static_cast<int>(amc ? unpremul_alpha(gmc, amc) : 0) - static_cast<int>(amop ? unpremul_alpha(gmop, amop) : 0));
++                diff += std::abs(static_cast<int>(amc ? unpremul_alpha(bmc, amc) : 0) - static_cast<int>(amop ? unpremul_alpha(bmop, amop) : 0));
++                return ((diff / 3) <= ((threshold * 3) / 4));
++            }
+         case FLOOD_CHANNELS_H:
+             return ((int)(fabs(hsl_check[0] - hsl_orig[0]) * 100.0) <= threshold);
+         case FLOOD_CHANNELS_S:


More information about the patches mailing list