svx/source/xoutdev/xtabgrdt.cxx |   31 ++++++++++++-------------------
 1 file changed, 12 insertions(+), 19 deletions(-)

New commits:
commit 6c0ce7f7124ea7d91eada9a544c52235770fa255
Author:     Armin Le Grand (allotropia) <armin.le.grand.ext...@allotropia.de>
AuthorDate: Wed Apr 19 16:24:22 2023 +0200
Commit:     Armin Le Grand <armin.le.gr...@me.com>
CommitDate: Thu Apr 20 13:56:22 2023 +0200

    MCGR: Correct creation for Gradient-Previews
    
    Change-Id: Iafadcaa93660317d65c8f45940653273b562f37e
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/150651
    Tested-by: Jenkins
    Reviewed-by: Armin Le Grand <armin.le.gr...@me.com>

diff --git a/svx/source/xoutdev/xtabgrdt.cxx b/svx/source/xoutdev/xtabgrdt.cxx
index 7fee511072c3..c853e69a3a44 100644
--- a/svx/source/xoutdev/xtabgrdt.cxx
+++ b/svx/source/xoutdev/xtabgrdt.cxx
@@ -101,24 +101,7 @@ BitmapEx XGradientList::CreateBitmap( tools::Long nIndex, 
const Size& rSize ) co
                 basegfx::B2DRange(0.0, 0.0, rSize.Width(), rSize.Height())));
 
         const XGradient& rGradient = GetGradient(nIndex)->GetGradient();
-        const sal_uInt16 nStartIntens(rGradient.GetStartIntens());
-        basegfx::BColor 
aStart(rGradient.GetColorStops().front().getStopColor());
-
-        if(nStartIntens != 100)
-        {
-            const basegfx::BColor aBlack;
-            aStart = interpolate(aBlack, aStart, 
static_cast<double>(nStartIntens) * 0.01);
-        }
-
-        const sal_uInt16 nEndIntens(rGradient.GetEndIntens());
-        basegfx::BColor aEnd(rGradient.GetColorStops().back().getStopColor());
-
-        if(nEndIntens != 100)
-        {
-            const basegfx::BColor aBlack;
-            aEnd = interpolate(aBlack, aEnd, static_cast<double>(nEndIntens) * 
0.01);
-        }
-
+        basegfx::ColorStops aColorStops(rGradient.GetColorStops());
         drawinglayer::attribute::GradientStyle 
aGradientStyle(drawinglayer::attribute::GradientStyle::Rect);
 
         switch(rGradient.GetGradientStyle())
@@ -155,13 +138,23 @@ BitmapEx XGradientList::CreateBitmap( tools::Long nIndex, 
const Size& rSize ) co
             }
         }
 
+        if (rGradient.GetStartIntens() != 100 || rGradient.GetEndIntens() != 
100)
+        {
+            // Need to do the (old, crazy) blend against black
+            basegfx::utils::blendColorStopsToIntensity(
+                aColorStops,
+                rGradient.GetStartIntens() * 0.01,
+                rGradient.GetEndIntens() * 0.01,
+                basegfx::BColor()); // COL_BLACK
+        }
+
         drawinglayer::attribute::FillGradientAttribute aFillGradient(
             aGradientStyle,
             static_cast<double>(rGradient.GetBorder()) * 0.01,
             static_cast<double>(rGradient.GetXOffset()) * 0.01,
             static_cast<double>(rGradient.GetYOffset()) * 0.01,
             toRadians(rGradient.GetAngle()),
-            basegfx::utils::createColorStopsFromStartEndColor(aStart, aEnd));
+            aColorStops);
 
         const drawinglayer::primitive2d::Primitive2DReference 
aGradientPrimitive(
             new drawinglayer::primitive2d::PolyPolygonGradientPrimitive2D(

Reply via email to