From a073b6133960734b809c1bc93e39a76fdf1e7c15 Mon Sep 17 00:00:00 2001 From: "Armin Le Grand (Collabora)" Date: Mon, 15 Jul 2024 18:55:56 +0200 Subject: CairoSDPR: Direct support for RGBA Gradients (I) Detect where created when a RGBA gradient could be used directly and create a primitive representing that, a PolyPolygonRGBAGradientPrimitive2D. That primitive decomposes to what was created before, so no primitive renderer has to be touched, all will work as before. NOTE: That helper primitive just holds references to what would be created anyways, so one depth step added but not really any additional data. This is the 1st step for direct support, the 2nd is to then detect and use that primitive in SDPR implementations directly. Change-Id: I4f247636ce58a8a1fd1e0df32dabed0d6cc10d0e Reviewed-on: https://gerrit.libreoffice.org/c/core/+/170527 Tested-by: Jenkins Reviewed-by: Armin Le Grand --- basegfx/source/tools/bgradient.cxx | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) (limited to 'basegfx') diff --git a/basegfx/source/tools/bgradient.cxx b/basegfx/source/tools/bgradient.cxx index e27ab160463b..bac738ad3221 100644 --- a/basegfx/source/tools/bgradient.cxx +++ b/basegfx/source/tools/bgradient.cxx @@ -746,6 +746,25 @@ void BColorStops::tryToApplyBColorModifierStack(const BColorModifierStack& rBCol } } +bool BColorStops::sameSizeAndDistances(const BColorStops& rComp) const +{ + if (size() != rComp.size()) + { + return false; + } + + BColorStops::const_iterator EntryA(begin()); + BColorStops::const_iterator EntryB(rComp.begin()); + + while (EntryA != end() && fTools::equal(EntryA->getStopOffset(), EntryB->getStopOffset())) + { + EntryA++; + EntryB++; + } + + return EntryA == end(); +} + std::string BGradient::GradientStyleToString(css::awt::GradientStyle eStyle) { switch (eStyle) -- cgit v1.2.3