basegfx/source/tools/bgradient.cxx                        |  223 +++++++-------
 basegfx/source/tools/gradienttools.cxx                    |   32 +-
 cui/source/tabpages/tpgradnt.cxx                          |   18 -
 cui/source/tabpages/tptrans.cxx                           |   14 
 drawinglayer/source/attribute/fillgradientattribute.cxx   |    4 
 drawinglayer/source/texture/texture.cxx                   |   24 -
 drawinglayer/source/tools/primitive2dxmldump.cxx          |   12 
 filter/source/svg/svgwriter.cxx                           |    6 
 include/basegfx/utils/bgradient.hxx                       |   99 ++++--
 oox/source/drawingml/fillproperties.cxx                   |    4 
 oox/source/export/drawingml.cxx                           |    4 
 sd/source/ui/sidebar/SlideBackground.cxx                  |   18 -
 svx/source/sidebar/area/AreaPropertyPanelBase.cxx         |   20 -
 svx/source/sidebar/area/AreaTransparencyGradientPopup.cxx |   13 
 sw/source/filter/ww8/rtfattributeoutput.cxx               |    2 
 vcl/source/filter/svm/SvmReader.cxx                       |    2 
 16 files changed, 247 insertions(+), 248 deletions(-)

New commits:
commit fe45c979064af8c17fdfc1b81ee54aa267d470e3
Author:     Tomaž Vajngerl <tomaz.vajng...@collabora.co.uk>
AuthorDate: Tue Jul 18 18:02:28 2023 +0900
Commit:     Tomaž Vajngerl <tomaz.vajng...@collabora.co.uk>
CommitDate: Tue Jul 18 18:02:28 2023 +0900

    basegfx: BColorStops shouldn't derive from std::vector
    
    Change-Id: I9f246c0d9a5ddc7f8cf428bf7fc8c8957e8584b6

diff --git a/basegfx/source/tools/bgradient.cxx 
b/basegfx/source/tools/bgradient.cxx
index 7b62a19c9ad6..b4b5995706d0 100644
--- a/basegfx/source/tools/bgradient.cxx
+++ b/basegfx/source/tools/bgradient.cxx
@@ -75,14 +75,15 @@ void BColorStops::setColorStopSequence(const 
css::awt::ColorStopSequence& rColor
     if (0 != nLen)
     {
         // we have ColorStops
-        reserve(nLen);
+        maStops.reserve(nLen);
         const css::awt::ColorStop* 
pSourceColorStop(rColorStops.getConstArray());
 
         for (sal_Int32 a(0); a < nLen; a++, pSourceColorStop++)
         {
-            emplace_back(pSourceColorStop->StopOffset,
-                         BColor(pSourceColorStop->StopColor.Red, 
pSourceColorStop->StopColor.Green,
-                                pSourceColorStop->StopColor.Blue));
+            BColor aColor(pSourceColorStop->StopColor.Red, 
pSourceColorStop->StopColor.Green,
+                          pSourceColorStop->StopColor.Blue);
+
+            maStops.emplace_back(pSourceColorStop->StopOffset, aColor);
         }
     }
 }
@@ -107,8 +108,8 @@ BColorStops::BColorStops(const css::uno::Any& rVal)
 // BColorStops for a single StartColor @0.0 & EndColor @1.0
 BColorStops::BColorStops(const BColor& rStart, const BColor& rEnd)
 {
-    emplace_back(0.0, rStart);
-    emplace_back(1.0, rEnd);
+    maStops.emplace_back(0.0, rStart);
+    maStops.emplace_back(1.0, rEnd);
 }
 
 /* Helper to grep the correct ColorStop out of
@@ -120,30 +121,30 @@ BColor BColorStops::getInterpolatedBColor(double 
fPosition, sal_uInt32 nRequeste
                                           BColorStopRange& 
rLastColorStopRange) const
 {
     // no color at all, done
-    if (empty())
+    if (maStops.empty())
         return BColor();
 
     // outside range -> at start
-    const double fMin(front().getStopOffset());
+    const double fMin(maStops.front().getStopOffset());
     if (fPosition < fMin)
-        return front().getStopColor();
+        return maStops.front().getStopColor();
 
     // outside range -> at end
-    const double fMax(back().getStopOffset());
+    const double fMax(maStops.back().getStopOffset());
     if (fPosition > fMax)
-        return back().getStopColor();
+        return maStops.back().getStopColor();
 
     // special case for the 'classic' case with just two colors:
     // we can optimize that and keep the speed/resources low
     // by avoiding some calculations and an O(log(N)) array access
-    if (2 == size())
+    if (2 == maStops.size())
     {
         // if same StopOffset use front color
         if (fTools::equal(fMin, fMax))
-            return front().getStopColor();
+            return maStops.front().getStopColor();
 
-        const basegfx::BColor aCStart(front().getStopColor());
-        const basegfx::BColor aCEnd(back().getStopColor());
+        const basegfx::BColor aCStart(maStops.front().getStopColor());
+        const basegfx::BColor aCEnd(maStops.back().getStopColor());
 
         // if colors are equal just return one
         if (aCStart == aCEnd)
@@ -180,21 +181,22 @@ BColor BColorStops::getInterpolatedBColor(double 
fPosition, sal_uInt32 nRequeste
         //       looping/accessing, but that's just due to the extensive
         //       debug test code created by the stl. In a pro version,
         //       all is good/fast as expected
-        const auto upperBound(std::upper_bound(begin(), end(), 
BColorStop(fPosition),
+        const auto upperBound(std::upper_bound(maStops.begin(), maStops.end(),
+                                               BColorStop(fPosition),
                                                [](const BColorStop& x, const 
BColorStop& y) {
                                                    return x.getStopOffset() < 
y.getStopOffset();
                                                }));
 
         // no upper bound, done
-        if (end() == upperBound)
-            return back().getStopColor();
+        if (maStops.end() == upperBound)
+            return maStops.back().getStopColor();
 
         // lower bound is one entry back, access that
         const auto lowerBound(upperBound - 1);
 
         // no lower bound, done
-        if (end() == lowerBound)
-            return back().getStopColor();
+        if (maStops.end() == lowerBound)
+            return maStops.back().getStopColor();
 
         // we have lower and upper bound, get colors and offsets
         rLastColorStopRange.maColorStart = lowerBound->getStopColor();
@@ -231,24 +233,24 @@ BColor BColorStops::getInterpolatedBColor(double 
fPosition, sal_uInt32 nRequeste
     */
 void BColorStops::replaceStartColor(const BColor& rStart)
 {
-    BColorStops::iterator a1stNonStartColor(begin());
+    auto a1stNonStartColor(maStops.begin());
 
     // search for highest existing non-StartColor - CAUTION,
     // there might be none, one or multiple with StopOffset 0.0
-    while (a1stNonStartColor != end()
+    while (a1stNonStartColor != maStops.end()
            && basegfx::fTools::lessOrEqual(a1stNonStartColor->getStopOffset(), 
0.0))
         a1stNonStartColor++;
 
     // create new ColorStops by 1st adding new one and then all
     // non-StartColor entries
-    BColorStops aNewColorStops;
+    std::vector<BColorStop> aNewColorStops;
 
-    aNewColorStops.reserve(size() + 1);
+    aNewColorStops.reserve(maStops.size() + 1);
     aNewColorStops.emplace_back(0.0, rStart);
-    aNewColorStops.insert(aNewColorStops.end(), a1stNonStartColor, end());
+    aNewColorStops.insert(aNewColorStops.end(), a1stNonStartColor, 
maStops.end());
 
     // assign & done
-    *this = aNewColorStops;
+    maStops = aNewColorStops;
 }
 
 /* Tooling method that allows to replace the EndColor in a
@@ -260,11 +262,11 @@ void BColorStops::replaceStartColor(const BColor& rStart)
 void BColorStops::replaceEndColor(const BColor& rEnd)
 {
     // erase all evtl. existing EndColor(s)
-    while (!empty() && basegfx::fTools::moreOrEqual(back().getStopOffset(), 
1.0))
-        pop_back();
+    while (!maStops.empty() && 
basegfx::fTools::moreOrEqual(maStops.back().getStopOffset(), 1.0))
+        maStops.pop_back();
 
     // add at the end of existing ColorStops
-    emplace_back(1.0, rEnd);
+    maStops.emplace_back(1.0, rEnd);
 }
 
 /* Tooling method to linearly blend the Colors contained in
@@ -284,7 +286,7 @@ void BColorStops::blendToIntensity(double fStartIntensity, 
double fEndIntensity,
                                    const BColor& rBlendColor)
 {
     // no entries, done
-    if (empty())
+    if (maStops.empty())
         return;
 
     // correct intensities (maybe assert when input was wrong)
@@ -296,7 +298,7 @@ void BColorStops::blendToIntensity(double fStartIntensity, 
double fEndIntensity,
         return;
 
     // blend relative to StopOffset position
-    for (auto& candidate : *this)
+    for (auto& candidate : maStops)
     {
         const double fOffset(candidate.getStopOffset());
         const double fIntensity((fStartIntensity * (1.0 - fOffset)) + 
(fEndIntensity * fOffset));
@@ -334,18 +336,19 @@ void BColorStops::blendToIntensity(double 
fStartIntensity, double fEndIntensity,
 void BColorStops::sortAndCorrect()
 {
     // no content, we are done
-    if (empty())
+    if (maStops.empty())
         return;
 
-    if (1 == size())
+    if (1 == maStops.size())
     {
         // no gradient at all, but preserve given color
         // evtl. correct offset to be in valid range [0.0 .. 1.0]
         // NOTE: This does not move it to 0.0 or 1.0, it *can* still
         //       be somewhere in-between what is allowed
-        const BColorStop aEntry(front());
-        clear();
-        emplace_back(std::max(0.0, std::min(1.0, aEntry.getStopOffset())), 
aEntry.getStopColor());
+        const BColorStop aFirstEntry(maStops.front());
+        maStops.clear();
+        maStops.emplace_back(std::max(0.0, std::min(1.0, 
aFirstEntry.getStopOffset())),
+                             aFirstEntry.getStopColor());
 
         // done
         return;
@@ -354,7 +357,7 @@ void BColorStops::sortAndCorrect()
     // start with sorting the input data. Remember that
     // this preserves the order of equal entries, where
     // equal is defined here by offset (see use operator==)
-    std::sort(begin(), end());
+    std::sort(maStops.begin(), maStops.end());
 
     // prepare status values
     size_t write(0);
@@ -363,24 +366,24 @@ void BColorStops::sortAndCorrect()
     // and write with write <= read all the time. Step over the
     // data using read and check for valid entry. If valid, decide
     // how to keep it
-    for (size_t read(0); read < size(); read++)
+    for (size_t read(0); read < maStops.size(); read++)
     {
         // get offset of entry at read position
-        double fOff((*this)[read].getStopOffset());
+        double fOff(maStops[read].getStopOffset());
 
-        if (basegfx::fTools::less(fOff, 0.0) && read + 1 < size())
+        if (basegfx::fTools::less(fOff, 0.0) && read + 1 < maStops.size())
         {
             // value < 0.0 and we have a next entry. check for gradient snippet
             // containing 0.0 resp. StartColor
-            const double fOff2((*this)[read + 1].getStopOffset());
+            const double fOff2(maStops[read + 1].getStopOffset());
 
             if (basegfx::fTools::more(fOff2, 0.0))
             {
                 // read is the start of a gradient snippet containing 0.0. 
Correct
                 // entry to StartColor, interpolate to correct StartColor
-                (*this)[read]
-                    = BColorStop(0.0, 
basegfx::interpolate((*this)[read].getStopColor(),
-                                                           (*this)[read + 
1].getStopColor(),
+                maStops[read]
+                    = BColorStop(0.0, 
basegfx::interpolate(maStops[read].getStopColor(),
+                                                           maStops[read + 
1].getStopColor(),
                                                            (0.0 - fOff) / 
(fOff2 - fOff)));
 
                 // adapt fOff
@@ -394,19 +397,19 @@ void BColorStops::sortAndCorrect()
             continue;
         }
 
-        if (basegfx::fTools::less(fOff, 1.0) && read + 1 < size())
+        if (basegfx::fTools::less(fOff, 1.0) && read + 1 < maStops.size())
         {
             // value < 1.0 and we have a next entry. check for gradient snippet
             // containing 1.0 resp. EndColor
-            const double fOff2((*this)[read + 1].getStopOffset());
+            const double fOff2(maStops[read + 1].getStopOffset());
 
             if (basegfx::fTools::more(fOff2, 1.0))
             {
                 // read is the start of a gradient snippet containing 1.0. 
Correct
                 // next entry to EndColor, interpolate to correct EndColor
-                (*this)[read + 1]
-                    = BColorStop(1.0, 
basegfx::interpolate((*this)[read].getStopColor(),
-                                                           (*this)[read + 
1].getStopColor(),
+                maStops[read + 1]
+                    = BColorStop(1.0, 
basegfx::interpolate(maStops[read].getStopColor(),
+                                                           maStops[read + 
1].getStopColor(),
                                                            (1.0 - fOff) / 
(fOff2 - fOff)));
 
                 // adapt fOff
@@ -424,12 +427,12 @@ void BColorStops::sortAndCorrect()
         // entry is valid value at read position
         // copy if write target is empty (write at start) or when
         // write target is different to read in color or offset
-        if (0 == write || !((*this)[read] == (*this)[write - 1]))
+        if (0 == write || !(maStops[read] == maStops[write - 1]))
         {
             if (write != read)
             {
                 // copy read to write backwards to close gaps
-                (*this)[write] = (*this)[read];
+                maStops[write] = maStops[read];
             }
 
             // always forward write position
@@ -439,31 +442,31 @@ void BColorStops::sortAndCorrect()
 
     // correct size when length is reduced. write is always at
     // last used position + 1
-    if (size() > write)
+    if (maStops.size() > write)
     {
         if (0 == write)
         {
             // no valid entries at all, but not empty. This can only happen
             // when all entries are below 0.0 or above 1.0 (else a gradient
             // snippet spawning over both would have been detected)
-            if (basegfx::fTools::less(back().getStopOffset(), 0.0))
+            if (basegfx::fTools::less(maStops.back().getStopOffset(), 0.0))
             {
                 // all outside too low, rescue last due to being closest to 
content
-                const BColor aBackColor(back().getStopColor());
-                clear();
-                emplace_back(0.0, aBackColor);
+                const BColor aBackColor(maStops.back().getStopColor());
+                maStops.clear();
+                maStops.emplace_back(0.0, aBackColor);
             }
             else // if (basegfx::fTools::more(front().getStopOffset(), 1.0))
             {
                 // all outside too high, rescue first due to being closest to 
content
-                const BColor aFrontColor(front().getStopColor());
-                clear();
-                emplace_back(1.0, aFrontColor);
+                const BColor aFrontColor(maStops.front().getStopColor());
+                maStops.clear();
+                maStops.emplace_back(1.0, aFrontColor);
             }
         }
         else
         {
-            resize(write);
+            maStops.resize(write);
         }
     }
 }
@@ -471,28 +474,28 @@ void BColorStops::sortAndCorrect()
 bool BColorStops::checkPenultimate() const
 {
     // not needed when no ColorStops
-    if (empty())
+    if (maStops.empty())
         return false;
 
     // not needed when last ColorStop at the end or outside
-    if (basegfx::fTools::moreOrEqual(back().getStopOffset(), 1.0))
+    if (basegfx::fTools::moreOrEqual(maStops.back().getStopOffset(), 1.0))
         return false;
 
     // get penultimate entry
-    const auto penultimate(rbegin() + 1);
+    const auto penultimate(maStops.rbegin() + 1);
 
     // if there is none, we need no correction and are done
-    if (penultimate == rend())
+    if (penultimate == maStops.rend())
         return false;
 
     // not needed when the last two ColorStops have different offset, then
     // a visible range will be processed already
-    if (!basegfx::fTools::equal(back().getStopOffset(), 
penultimate->getStopOffset()))
+    if (!basegfx::fTools::equal(maStops.back().getStopOffset(), 
penultimate->getStopOffset()))
         return false;
 
     // not needed when the last two ColorStops have the same Color, then the
     // range before solves the problem
-    if (back().getStopColor() == penultimate->getStopColor())
+    if (maStops.back().getStopColor() == penultimate->getStopColor())
         return false;
 
     return true;
@@ -504,11 +507,11 @@ bool BColorStops::checkPenultimate() const
     */
 css::awt::ColorStopSequence BColorStops::getAsColorStopSequence() const
 {
-    css::awt::ColorStopSequence aRetval(size());
+    css::awt::ColorStopSequence aRetval(maStops.size());
     // rColorStopSequence.realloc(rColorStops.size());
     css::awt::ColorStop* pTargetColorStop(aRetval.getArray());
 
-    for (const auto& candidate : *this)
+    for (const auto& candidate : maStops)
     {
         pTargetColorStop->StopOffset = candidate.getStopOffset();
         pTargetColorStop->StopColor = 
css::rendering::RGBColor(candidate.getStopColor().getRed(),
@@ -529,21 +532,21 @@ css::awt::ColorStopSequence 
BColorStops::getAsColorStopSequence() const
     */
 bool BColorStops::isSingleColor(BColor& rSingleColor) const
 {
-    if (empty())
+    if (maStops.empty())
     {
         rSingleColor = BColor();
         return true;
     }
 
-    if (1 == size())
+    if (1 == maStops.size())
     {
-        rSingleColor = front().getStopColor();
+        rSingleColor = maStops.front().getStopColor();
         return true;
     }
 
-    rSingleColor = front().getStopColor();
+    rSingleColor = maStops.front().getStopColor();
 
-    for (auto const& rCandidate : *this)
+    for (auto const& rCandidate : maStops)
     {
         if (rCandidate.getStopColor() != rSingleColor)
             return false;
@@ -558,8 +561,8 @@ bool BColorStops::isSingleColor(BColor& rSingleColor) const
 void BColorStops::reverseColorStops()
 {
     // can use std::reverse, but also need to adapt offset(s)
-    std::reverse(begin(), end());
-    for (auto& candidate : *this)
+    std::reverse(maStops.begin(), maStops.end());
+    for (auto& candidate : maStops)
         candidate = BColorStop(1.0 - candidate.getStopOffset(), 
candidate.getStopColor());
 }
 
@@ -568,7 +571,7 @@ void BColorStops::reverseColorStops()
 void BColorStops::createSpaceAtStart(double fOffset)
 {
     // nothing to do if empty
-    if (empty())
+    if (maStops.empty())
         return;
 
     // correct offset to [0.0 .. 1.0]
@@ -578,15 +581,15 @@ void BColorStops::createSpaceAtStart(double fOffset)
     if (basegfx::fTools::equalZero(fOffset))
         return;
 
-    BColorStops aNewStops;
+    std::vector<BColorStop> aNewStops;
 
-    for (const auto& candidate : *this)
+    for (const auto& candidate : maStops)
     {
         aNewStops.emplace_back(fOffset + (candidate.getStopOffset() * (1.0 - 
fOffset)),
                                candidate.getStopColor());
     }
 
-    *this = aNewStops;
+    maStops = aNewStops;
 }
 
 // removeSpaceAtStart removes fOffset space from start by
@@ -595,7 +598,7 @@ void BColorStops::createSpaceAtStart(double fOffset)
 void BColorStops::removeSpaceAtStart(double fOffset)
 {
     // nothing to do if empty
-    if (empty())
+    if (maStops.empty())
         return;
 
     // correct factor to [0.0 .. 1.0]
@@ -605,10 +608,10 @@ void BColorStops::removeSpaceAtStart(double fOffset)
     if (basegfx::fTools::equalZero(fOffset))
         return;
 
-    BColorStops aNewStops;
+    std::vector<BColorStop> aNewStops;
     const double fMul(basegfx::fTools::equal(fOffset, 1.0) ? 1.0 : 1.0 / (1.0 
- fOffset));
 
-    for (const auto& candidate : *this)
+    for (const auto& candidate : maStops)
     {
         if (basegfx::fTools::moreOrEqual(candidate.getStopOffset(), fOffset))
         {
@@ -617,7 +620,7 @@ void BColorStops::removeSpaceAtStart(double fOffset)
         }
     }
 
-    *this = aNewStops;
+    maStops = aNewStops;
 }
 
 // try to detect if an empty/no-color-change area exists
@@ -633,14 +636,14 @@ double BColorStops::detectPossibleOffsetAtStart() const
 
     // here we know that we have at least two colors, so we have a
     // color change. Find colors left and right of that first color change
-    BColorStops::const_iterator aColorR(begin());
-    BColorStops::const_iterator aColorL(aColorR++);
+    auto aColorR(maStops.begin());
+    auto aColorL(aColorR++);
 
     // aColorR would 1st get equal to end(), so no need to also check aColorL
     // for end(). Loop as long as same color. Since we *have* a color change
     // not even aColorR can get equal to end() before color inequality, but
     // keep for safety
-    while (aColorR != end() && aColorL->getStopColor() == 
aColorR->getStopColor())
+    while (aColorR != maStops.end() && aColorL->getStopColor() == 
aColorR->getStopColor())
     {
         aColorL++;
         aColorR++;
@@ -648,7 +651,7 @@ double BColorStops::detectPossibleOffsetAtStart() const
 
     // also for safety: access values at aColorL below *only*
     // if not equal to end(), but can theoretically not happen
-    if (aColorL == end())
+    if (aColorL == maStops.end())
     {
         return 0.0;
     }
@@ -660,13 +663,13 @@ double BColorStops::detectPossibleOffsetAtStart() const
 //  checks whether the color stops are symmetrical in color and offset.
 bool BColorStops::isSymmetrical() const
 {
-    if (empty())
+    if (maStops.empty())
         return false;
-    if (1 == size())
-        return basegfx::fTools::equal(0.5, front().getStopOffset());
+    if (1 == maStops.size())
+        return basegfx::fTools::equal(0.5, maStops.front().getStopOffset());
 
-    BColorStops::const_iterator aIter(begin()); // for going forward
-    BColorStops::const_iterator aRIter(end()); // for going backward
+    auto aIter(maStops.begin()); // for going forward
+    auto aRIter(maStops.end()); // for going backward
     --aRIter;
     // We have at least two elements, so aIter <= aRIter fails before 
iterators no longer point to
     // an element.
@@ -682,12 +685,12 @@ bool BColorStops::isSymmetrical() const
 void BColorStops::doApplyAxial()
 {
     // prepare new ColorStops
-    basegfx::BColorStops aNewColorStops;
+    std::vector<BColorStop> aNewColorStops;
 
     // add gradient stops in reverse order, scaled to [0.0 .. 0.5]
-    basegfx::BColorStops::const_reverse_iterator aRevCurrColor(rbegin());
+    auto aRevCurrColor(maStops.rbegin());
 
-    while (aRevCurrColor != rend())
+    while (aRevCurrColor != maStops.rend())
     {
         aNewColorStops.emplace_back((1.0 - aRevCurrColor->getStopOffset()) * 
0.5,
                                     aRevCurrColor->getStopColor());
@@ -695,7 +698,7 @@ void BColorStops::doApplyAxial()
     }
 
     // prepare non-reverse run
-    basegfx::BColorStops::const_iterator aCurrColor(begin());
+    auto aCurrColor(maStops.begin());
 
     if (basegfx::fTools::equalZero(aCurrColor->getStopOffset()))
     {
@@ -706,7 +709,7 @@ void BColorStops::doApplyAxial()
     }
 
     // add gradient stops in non-reverse order, translated and scaled to [0.5 
.. 1.0]
-    while (aCurrColor != end())
+    while (aCurrColor != maStops.end())
     {
         aNewColorStops.emplace_back((aCurrColor->getStopOffset() * 0.5) + 0.5,
                                     aCurrColor->getStopColor());
@@ -714,7 +717,7 @@ void BColorStops::doApplyAxial()
     }
 
     // apply color stops
-    *this = aNewColorStops;
+    maStops = aNewColorStops;
 }
 
 void BColorStops::doApplySteps(sal_uInt16 nStepCount)
@@ -729,11 +732,11 @@ void BColorStops::doApplySteps(sal_uInt16 nStepCount)
         return;
 
     // prepare new color stops, get L/R iterators for segments
-    basegfx::BColorStops aNewColorStops;
-    basegfx::BColorStops::const_iterator aColorR(begin());
-    basegfx::BColorStops::const_iterator aColorL(aColorR++);
+    std::vector<BColorStop> aNewColorStops;
+    auto aColorR(maStops.begin());
+    auto aColorL(aColorR++);
 
-    while (aColorR != end())
+    while (aColorR != maStops.end())
     {
         // get start/end color for segment
         const double fStart(aColorL->getStopOffset());
@@ -787,7 +790,7 @@ void BColorStops::doApplySteps(sal_uInt16 nStepCount)
     }
 
     // apply the change to color stops
-    *this = aNewColorStops;
+    maStops = aNewColorStops;
 }
 
 std::string BGradient::GradientStyleToString(css::awt::GradientStyle eStyle)
@@ -836,8 +839,8 @@ BGradient::BGradient()
     , nIntensEnd(100)
     , nStepCount(0)
 {
-    aColorStops.emplace_back(0.0, BColor(0.0, 0.0, 0.0)); // COL_BLACK
-    aColorStops.emplace_back(1.0, BColor(1.0, 1.0, 1.0)); // COL_WHITE
+    aColorStops.addStop(0.0, BColor(0.0, 0.0, 0.0)); // COL_BLACK
+    aColorStops.addStop(1.0, BColor(1.0, 1.0, 1.0)); // COL_WHITE
 }
 
 BGradient::BGradient(const basegfx::BColorStops& rColorStops, 
css::awt::GradientStyle eTheStyle,
@@ -936,7 +939,7 @@ void BGradient::SetColorStops(const basegfx::BColorStops& 
rSteps)
     aColorStops = rSteps;
     aColorStops.sortAndCorrect();
     if (aColorStops.empty())
-        aColorStops.emplace_back(0.0, basegfx::BColor());
+        aColorStops.addStop(0.0, basegfx::BColor());
 }
 
 namespace
@@ -1120,12 +1123,12 @@ void BGradient::tryToConvertToAxial()
     // and collect them in a new color stops vector.
     BColorStops aAxialColorStops;
     aAxialColorStops.reserve(std::ceil(GetColorStops().size() / 2.0));
-    BColorStops::const_iterator aIter(GetColorStops().begin());
+    auto aIter(GetColorStops().begin());
     while (basegfx::fTools::lessOrEqual(aIter->getStopOffset(), 0.5))
     {
-        BColorStop aNextStop(std::clamp((*aIter).getStopOffset() * 2.0, 0.0, 
1.0),
-                             (*aIter).getStopColor());
-        aAxialColorStops.push_back(aNextStop);
+        BColorStop aNextStop(std::clamp(aIter->getStopOffset() * 2.0, 0.0, 
1.0),
+                             aIter->getStopColor());
+        aAxialColorStops.addStop(aNextStop);
         ++aIter;
     }
     // Axial gradients have outmost color as last color stop.
diff --git a/basegfx/source/tools/gradienttools.cxx 
b/basegfx/source/tools/gradienttools.cxx
index 8f3e8ae83c06..bc8bbedeeeab 100644
--- a/basegfx/source/tools/gradienttools.cxx
+++ b/basegfx/source/tools/gradienttools.cxx
@@ -345,7 +345,7 @@ namespace basegfx
                     // create fallback synched with existing AlphaStops
                     for (const auto& cand : rAlphaStops)
                     {
-                        rColorStops.emplace_back(cand.getStopOffset(), 
rSingleColor);
+                        rColorStops.addStop(cand.getStopOffset(), 
rSingleColor);
                     }
                 }
 
@@ -358,7 +358,7 @@ namespace basegfx
                 // create fallback AlphaStops synched with existing ColorStops 
using SingleAlpha
                 for (const auto& cand : rColorStops)
                 {
-                    rAlphaStops.emplace_back(cand.getStopOffset(), 
rSingleAlpha);
+                    rAlphaStops.addStop(cand.getStopOffset(), rSingleAlpha);
                 }
 
                 // preparations complete, we are done
@@ -373,8 +373,8 @@ namespace basegfx
             if (!bNeedToSyncronize)
             {
                 // check for same StopOffsets
-                BColorStops::const_iterator aCurrColor(rColorStops.begin());
-                BColorStops::const_iterator aCurrAlpha(rAlphaStops.begin());
+                auto aCurrColor(rColorStops.begin());
+                auto aCurrAlpha(rAlphaStops.begin());
 
                 while (!bNeedToSyncronize &&
                     aCurrColor != rColorStops.end() &&
@@ -395,8 +395,8 @@ namespace basegfx
             if (bNeedToSyncronize)
             {
                 // synchronize sizes & StopOffsets
-                BColorStops::const_iterator aCurrColor(rColorStops.begin());
-                BColorStops::const_iterator aCurrAlpha(rAlphaStops.begin());
+                auto aCurrColor(rColorStops.begin());
+                auto aCurrAlpha(rAlphaStops.begin());
                 BColorStops aNewColor;
                 BColorStops aNewAlpha;
                 BColorStops::BColorStopRange aColorStopRange;
@@ -415,24 +415,24 @@ namespace basegfx
                         if (fTools::less(fColorOff, fAlphaOff))
                         {
                             // copy color, create alpha
-                            aNewColor.emplace_back(fColorOff, 
aCurrColor->getStopColor());
-                            aNewAlpha.emplace_back(fColorOff, 
rAlphaStops.getInterpolatedBColor(fColorOff, 0, aAlphaStopRange));
+                            aNewColor.addStop(fColorOff, 
aCurrColor->getStopColor());
+                            aNewAlpha.addStop(fColorOff, 
rAlphaStops.getInterpolatedBColor(fColorOff, 0, aAlphaStopRange));
                             bRealChange = true;
                             aCurrColor++;
                         }
                         else if (fTools::more(fColorOff, fAlphaOff))
                         {
                             // copy alpha, create color
-                            aNewColor.emplace_back(fAlphaOff, 
rColorStops.getInterpolatedBColor(fAlphaOff, 0, aColorStopRange));
-                            aNewAlpha.emplace_back(fAlphaOff, 
aCurrAlpha->getStopColor());
+                            aNewColor.addStop(fAlphaOff, 
rColorStops.getInterpolatedBColor(fAlphaOff, 0, aColorStopRange));
+                            aNewAlpha.addStop(fAlphaOff, 
aCurrAlpha->getStopColor());
                             bRealChange = true;
                             aCurrAlpha++;
                         }
                         else
                         {
                             // equal: copy both, advance
-                            aNewColor.emplace_back(fColorOff, 
aCurrColor->getStopColor());
-                            aNewAlpha.emplace_back(fAlphaOff, 
aCurrAlpha->getStopColor());
+                            aNewColor.addStop(fColorOff, 
aCurrColor->getStopColor());
+                            aNewAlpha.addStop(fAlphaOff, 
aCurrAlpha->getStopColor());
                             aCurrColor++;
                             aCurrAlpha++;
                         }
@@ -440,16 +440,16 @@ namespace basegfx
                     else if (bColor)
                     {
                         const double fColorOff(aCurrColor->getStopOffset());
-                        aNewAlpha.emplace_back(fColorOff, 
rAlphaStops.getInterpolatedBColor(fColorOff, 0, aAlphaStopRange));
-                        aNewColor.emplace_back(fColorOff, 
aCurrColor->getStopColor());
+                        aNewAlpha.addStop(fColorOff, 
rAlphaStops.getInterpolatedBColor(fColorOff, 0, aAlphaStopRange));
+                        aNewColor.addStop(fColorOff, 
aCurrColor->getStopColor());
                         bRealChange = true;
                         aCurrColor++;
                     }
                     else if (bAlpha)
                     {
                         const double fAlphaOff(aCurrAlpha->getStopOffset());
-                        aNewColor.emplace_back(fAlphaOff, 
rColorStops.getInterpolatedBColor(fAlphaOff, 0, aColorStopRange));
-                        aNewAlpha.emplace_back(fAlphaOff, 
aCurrAlpha->getStopColor());
+                        aNewColor.addStop(fAlphaOff, 
rColorStops.getInterpolatedBColor(fAlphaOff, 0, aColorStopRange));
+                        aNewAlpha.addStop(fAlphaOff, 
aCurrAlpha->getStopColor());
                         bRealChange = true;
                         aCurrAlpha++;
                     }
diff --git a/cui/source/tabpages/tpgradnt.cxx b/cui/source/tabpages/tpgradnt.cxx
index df629a154ff4..a5256c8e3a6e 100644
--- a/cui/source/tabpages/tpgradnt.cxx
+++ b/cui/source/tabpages/tpgradnt.cxx
@@ -652,21 +652,11 @@ sal_Int32 
SvxGradientTabPage::SearchGradientList(std::u16string_view rGradientNa
 
 basegfx::BColorStops SvxGradientTabPage::createColorStops()
 {
-    basegfx::BColorStops aColorStops;
+    basegfx::BColor aStartColor = 
m_xLbColorFrom->GetSelectEntryColor().getBColor();
+    basegfx::BColor aEndColor = 
m_xLbColorTo->GetSelectEntryColor().getBColor();
 
-    if(m_aColorStops.size() >= 2)
-    {
-        aColorStops = m_aColorStops;
-        aColorStops.front() = 
basegfx::BColorStop(m_aColorStops.front().getStopOffset(),
-                                                  
m_xLbColorFrom->GetSelectEntryColor().getBColor());
-        aColorStops.back() = 
basegfx::BColorStop(m_aColorStops.back().getStopOffset(),
-                                                 
m_xLbColorTo->GetSelectEntryColor().getBColor());
-    }
-    else
-    {
-        aColorStops.emplace_back(0.0, 
m_xLbColorFrom->GetSelectEntryColor().getBColor());
-        aColorStops.emplace_back(1.0, 
m_xLbColorTo->GetSelectEntryColor().getBColor());
-    }
+    basegfx::BColorStops aColorStops = m_aColorStops;
+    aColorStops.setStartAndEndColors(aStartColor, aEndColor);
 
     return aColorStops;
 }
diff --git a/cui/source/tabpages/tptrans.cxx b/cui/source/tabpages/tptrans.cxx
index 04cbdfb6b24a..f70e464dfec7 100644
--- a/cui/source/tabpages/tptrans.cxx
+++ b/cui/source/tabpages/tptrans.cxx
@@ -511,23 +511,13 @@ void SvxTransparenceTabPage::InvalidatePreview (bool 
bEnable)
 
 basegfx::BColorStops SvxTransparenceTabPage::createColorStops()
 {
-    basegfx::BColorStops aColorStops;
     basegfx::BColor 
aStartBColor(m_xMtrTrgrStartValue->get_value(FieldUnit::PERCENT) / 100.0);
     aStartBColor.clamp();
     basegfx::BColor 
aEndBColor(m_xMtrTrgrEndValue->get_value(FieldUnit::PERCENT) / 100.0);
     aEndBColor.clamp();
 
-    if(maColorStops.size() >= 2)
-    {
-        aColorStops = maColorStops;
-        aColorStops.front() = 
basegfx::BColorStop(maColorStops.front().getStopOffset(), aStartBColor);
-        aColorStops.back() = 
basegfx::BColorStop(maColorStops.back().getStopOffset(), aEndBColor);
-    }
-    else
-    {
-        aColorStops.emplace_back(0.0, aStartBColor);
-        aColorStops.emplace_back(1.0, aEndBColor);
-    }
+    basegfx::BColorStops aColorStops = maColorStops;
+    aColorStops.setStartAndEndColors(aStartBColor, aEndBColor);
 
     return aColorStops;
 }
diff --git a/drawinglayer/source/attribute/fillgradientattribute.cxx 
b/drawinglayer/source/attribute/fillgradientattribute.cxx
index e02fdd4a5dad..18c6d758b12b 100644
--- a/drawinglayer/source/attribute/fillgradientattribute.cxx
+++ b/drawinglayer/source/attribute/fillgradientattribute.cxx
@@ -64,7 +64,7 @@ namespace drawinglayer::attribute
                 // fallback value
                 if (maColorStops.empty())
                 {
-                    maColorStops.emplace_back(0.0, basegfx::BColor());
+                    maColorStops.addStop(0.0, basegfx::BColor());
                 }
             }
 
@@ -78,7 +78,7 @@ namespace drawinglayer::attribute
                 mnSteps(0)
             {
                 // always add a fallback color, see above
-                maColorStops.emplace_back(0.0, basegfx::BColor());
+                maColorStops.addStop(0.0, basegfx::BColor());
             }
 
             // data read access
diff --git a/drawinglayer/source/texture/texture.cxx 
b/drawinglayer/source/texture/texture.cxx
index ccfaa13bd8bf..5a10333c7698 100644
--- a/drawinglayer/source/texture/texture.cxx
+++ b/drawinglayer/source/texture/texture.cxx
@@ -153,7 +153,7 @@ namespace drawinglayer::texture
                 // created gradient geometry.
                 // The simplest way is to temporarily add an entry to the local
                 // ColorStops for this at 1.0 (using same color)
-                mnColorStops.emplace_back(1.0, 
mnColorStops.back().getStopColor());
+                mnColorStops.addStop(1.0, mnColorStops.back().getStopColor());
             }
 
             // prepare unit range transform
@@ -225,7 +225,7 @@ namespace drawinglayer::texture
             if (bPenultimateUsed)
             {
                 // correct temporary change
-                mnColorStops.pop_back();
+                mnColorStops.getStops().pop_back();
             }
         }
 
@@ -301,7 +301,7 @@ namespace drawinglayer::texture
             if (bPenultimateUsed)
             {
                 // temporarily add a ColorStop entry
-                mnColorStops.emplace_back(1.0, 
mnColorStops.back().getStopColor());
+                mnColorStops.addStop(1.0, mnColorStops.back().getStopColor());
             }
 
             // prepare unit range transform
@@ -358,7 +358,7 @@ namespace drawinglayer::texture
             if (bPenultimateUsed)
             {
                 // correct temporary change
-                mnColorStops.pop_back();
+                mnColorStops.getStops().pop_back();
             }
         }
 
@@ -421,7 +421,7 @@ namespace drawinglayer::texture
             if (bPenultimateUsed)
             {
                 // temporarily add a ColorStop entry
-                mnColorStops.emplace_back(1.0, 
mnColorStops.back().getStopColor());
+                mnColorStops.addStop(1.0, mnColorStops.back().getStopColor());
             }
 
             // outer loop over ColorStops, each is from cs_l to cs_r
@@ -462,7 +462,7 @@ namespace drawinglayer::texture
             if (bPenultimateUsed)
             {
                 // correct temporary change
-                mnColorStops.pop_back();
+                mnColorStops.getStops().pop_back();
             }
         }
 
@@ -524,7 +524,7 @@ namespace drawinglayer::texture
             if (bPenultimateUsed)
             {
                 // temporarily add a ColorStop entry
-                mnColorStops.emplace_back(1.0, 
mnColorStops.back().getStopColor());
+                mnColorStops.addStop(1.0, mnColorStops.back().getStopColor());
             }
 
             // prepare vars dependent on aspect ratio
@@ -572,7 +572,7 @@ namespace drawinglayer::texture
             if (bPenultimateUsed)
             {
                 // correct temporary change
-                mnColorStops.pop_back();
+                mnColorStops.getStops().pop_back();
             }
         }
 
@@ -634,7 +634,7 @@ namespace drawinglayer::texture
             if (bPenultimateUsed)
             {
                 // temporarily add a ColorStop entry
-                mnColorStops.emplace_back(1.0, 
mnColorStops.back().getStopColor());
+                mnColorStops.addStop(1.0, mnColorStops.back().getStopColor());
             }
 
             // outer loop over ColorStops, each is from cs_l to cs_r
@@ -675,7 +675,7 @@ namespace drawinglayer::texture
             if (bPenultimateUsed)
             {
                 // correct temporary change
-                mnColorStops.pop_back();
+                mnColorStops.getStops().pop_back();
             }
         }
 
@@ -737,7 +737,7 @@ namespace drawinglayer::texture
             if (bPenultimateUsed)
             {
                 // temporarily add a ColorStop entry
-                mnColorStops.emplace_back(1.0, 
mnColorStops.back().getStopColor());
+                mnColorStops.addStop(1.0, mnColorStops.back().getStopColor());
             }
 
             // prepare vars dependent on aspect ratio
@@ -785,7 +785,7 @@ namespace drawinglayer::texture
             if (bPenultimateUsed)
             {
                 // correct temporary change
-                mnColorStops.pop_back();
+                mnColorStops.getStops().pop_back();
             }
         }
 
diff --git a/drawinglayer/source/tools/primitive2dxmldump.cxx 
b/drawinglayer/source/tools/primitive2dxmldump.cxx
index d94bd14d4f20..e13fbaefba73 100644
--- a/drawinglayer/source/tools/primitive2dxmldump.cxx
+++ b/drawinglayer/source/tools/primitive2dxmldump.cxx
@@ -310,14 +310,16 @@ void writeSdrFillAttribute(::tools::XmlWriter& rWriter,
         {
             if (0 == a)
                 rWriter.attribute("startColor",
-                                  
convertColorToString(rColorStops[a].getStopColor()));
+                                  
convertColorToString(rColorStops.getStops()[a].getStopColor()));
             else if (rColorStops.size() == a + 1)
-                rWriter.attribute("endColor", 
convertColorToString(rColorStops[a].getStopColor()));
+                rWriter.attribute("endColor",
+                                  
convertColorToString(rColorStops.getStops()[a].getStopColor()));
             else
             {
                 rWriter.startElement("colorStop");
-                rWriter.attribute("stopOffset", 
rColorStops[a].getStopOffset());
-                rWriter.attribute("stopColor", 
convertColorToString(rColorStops[a].getStopColor()));
+                rWriter.attribute("stopOffset", 
rColorStops.getStops()[a].getStopOffset());
+                rWriter.attribute("stopColor",
+                                  
convertColorToString(rColorStops.getStops()[a].getStopColor()));
                 rWriter.endElement();
             }
         }
@@ -540,7 +542,7 @@ void Primitive2dXmlDump::dump(
     pStream->ReadBytes(pBuffer.get(), nSize);
     pBuffer[nSize] = 0;
 
-    printf ("%s\n", pBuffer.get());
+    printf("%s\n", pBuffer.get());
 }
 
 namespace
diff --git a/filter/source/svg/svgwriter.cxx b/filter/source/svg/svgwriter.cxx
index 00e78ce5c5f2..1136cefb15fd 100644
--- a/filter/source/svg/svgwriter.cxx
+++ b/filter/source/svg/svgwriter.cxx
@@ -2384,8 +2384,8 @@ void SVGActionWriter::ImplWriteGradientLinear( const 
tools::PolyPolygon& rPolyPo
             else
             {
                 // else create color stops with 'old' start/endColor
-                aColorStops.emplace_back(0.0, 
rGradient.GetStartColor().getBColor());
-                aColorStops.emplace_back(1.0, 
rGradient.GetEndColor().getBColor());
+                aColorStops.addStop(0.0, 
rGradient.GetStartColor().getBColor());
+                aColorStops.addStop(1.0, rGradient.GetEndColor().getBColor());
             }
 
             // create a basegfx::BGradient with the info to be able to directly
@@ -3411,7 +3411,7 @@ void SVGActionWriter::ImplWriteActions( const 
GDIMetaFile& rMtf,
                             aMemStm.ReadDouble(fG);
                             aMemStm.ReadDouble(fB);
 
-                            aColorStops.emplace_back(fOff, basegfx::BColor(fR, 
fG, fB));
+                            aColorStops.addStop(fOff, basegfx::BColor(fR, fG, 
fB));
                         }
 
                         // export with real Color Stops
diff --git a/include/basegfx/utils/bgradient.hxx 
b/include/basegfx/utils/bgradient.hxx
index 3e2acf9a4b67..c42c955dd429 100644
--- a/include/basegfx/utils/bgradient.hxx
+++ b/include/basegfx/utils/bgradient.hxx
@@ -18,19 +18,10 @@
 #include <tools/degree.hxx>
 #include <boost/property_tree/ptree_fwd.hpp>
 
-namespace com
-{
-namespace sun
-{
-namespace star
-{
-namespace uno
+namespace com::sun::star::uno
 {
 class Any;
 }
-}
-}
-}
 
 namespace basegfx
 {
@@ -107,32 +98,36 @@ public:
         is read-only, this can/will be guaranteed by forcing/checking this
         in the constructor, see ::FillGradientAttribute
     */
-class BASEGFX_DLLPUBLIC BColorStops final : public std::vector<BColorStop>
+class BASEGFX_DLLPUBLIC BColorStops final
 {
 private:
+    std::vector<BColorStop> maStops;
+
+    typedef typename std::vector<BColorStop>::const_iterator const_iterator;
+    typedef typename std::vector<BColorStop>::iterator iterator;
+    typedef typename std::vector<BColorStop>::const_reverse_iterator 
const_reverse_iterator;
+    typedef typename std::vector<BColorStop>::difference_type difference_type;
+    typedef typename std::vector<BColorStop>::size_type size_type;
+
     void setColorStopSequence(const css::awt::ColorStopSequence& rColorStops);
 
 public:
-    explicit BColorStops()
-        : vector()
-    {
-    }
-    BColorStops(const BColorStops& other)
-        : vector(other)
+    explicit BColorStops() {}
+
+    BColorStops(const BColorStops& rOther)
+        : maStops(rOther.maStops)
     {
     }
-    BColorStops(BColorStops&& other) noexcept
-        : vector(std::move(other))
+
+    BColorStops(BColorStops&& rOther) noexcept
+        : maStops(std::move(rOther.maStops))
     {
     }
     BColorStops(std::initializer_list<BColorStop> init)
-        : vector(init)
-    {
-    }
-    BColorStops(const_iterator first, const_iterator last)
-        : vector(first, last)
+        : maStops(init)
     {
     }
+
     BColorStops(const css::awt::ColorStopSequence& rColorStops);
 
     // needs true == rVal.has<css::awt::ColorStopSequence>()
@@ -142,17 +137,65 @@ public:
     // BColorStops for StartColor @0.0 & EndColor @1.0
     BColorStops(const BColor& rStart, const BColor& rEnd);
 
-    BColorStops& operator=(const BColorStops& r)
+    BColorStops& operator=(const BColorStops& rOther)
     {
-        vector::operator=(r);
+        maStops = rOther.maStops;
         return *this;
     }
-    BColorStops& operator=(BColorStops&& r) noexcept
+
+    BColorStops& operator=(BColorStops&& rOther) noexcept
     {
-        vector::operator=(std::move(r));
+        maStops = std::move(rOther.maStops);
         return *this;
     }
 
+    void addStop(double fOffset, BColor aColor) { 
maStops.emplace_back(fOffset, aColor); }
+
+    void addStop(BColorStop aColorStop) { maStops.push_back(aColorStop); }
+
+    BColorStop const& getStop(size_t i) const { return maStops[i]; }
+
+    void reserve(size_t nNumber) { maStops.reserve(nNumber); }
+
+    void clear() { maStops.clear(); }
+
+    bool empty() const { return maStops.empty(); }
+
+    size_type size() const { return maStops.size(); }
+
+    iterator begin() { return maStops.begin(); }
+
+    iterator end() { return maStops.end(); }
+
+    const_iterator begin() const { return maStops.begin(); }
+
+    const_iterator end() const { return maStops.end(); }
+
+    const_reverse_iterator rbegin() const { return maStops.rbegin(); }
+
+    const_reverse_iterator rend() const { return maStops.rend(); }
+
+    const BColorStop& front() const { return maStops.front(); }
+
+    const BColorStop& back() const { return maStops.back(); }
+
+    bool operator==(BColorStops const& rOther) const { return maStops == 
rOther.maStops; }
+
+    void setStartAndEndColors(BColor aStartColor, BColor aEndColor)
+    {
+        if (maStops.size() < 2)
+        {
+            maStops.resize(2);
+            maStops.front() = BColorStop(0.0, aStartColor);
+            maStops.back() = BColorStop(1.0, aEndColor);
+        }
+        else
+        {
+            maStops.front() = BColorStop(maStops.front().getStopOffset(), 
aStartColor);
+            maStops.back() = BColorStop(maStops.back().getStopOffset(), 
aEndColor);
+        }
+    }
+
     // helper data struct to support buffering entries in
     // gradient texture mapping, see usages for more info
     struct BColorStopRange
diff --git a/oox/source/drawingml/fillproperties.cxx 
b/oox/source/drawingml/fillproperties.cxx
index 7e2f5185b7f6..8f55d7c791f1 100644
--- a/oox/source/drawingml/fillproperties.cxx
+++ b/oox/source/drawingml/fillproperties.cxx
@@ -455,7 +455,7 @@ void FillProperties::pushToPropMap(ShapePropertyMap& 
rPropMap, const GraphicHelp
                 for (const auto& rCandidate : maGradientProps.maGradientStops)
                 {
                     const ::Color 
aColor(rCandidate.second.getColor(rGraphicHelper, nPhClr));
-                    aColorStops.emplace_back(rCandidate.first, 
aColor.getBColor());
+                    aColorStops.addStop(rCandidate.first, aColor.getBColor());
                     bContainsTransparency = bContainsTransparency || 
rCandidate.second.hasTransparency();
                 }
 
@@ -465,7 +465,7 @@ void FillProperties::pushToPropMap(ShapePropertyMap& 
rPropMap, const GraphicHelp
                     for (const auto& rCandidate : 
maGradientProps.maGradientStops)
                     {
                         const double 
fTrans(rCandidate.second.getTransparency() * (1.0/100.0));
-                        aTransparencyStops.emplace_back(rCandidate.first, 
basegfx::BColor(fTrans, fTrans, fTrans));
+                        aTransparencyStops.addStop(rCandidate.first, 
basegfx::BColor(fTrans, fTrans, fTrans));
                     }
                 }
 
diff --git a/oox/source/export/drawingml.cxx b/oox/source/export/drawingml.cxx
index a8c032259476..ecdc4f30a11a 100644
--- a/oox/source/export/drawingml.cxx
+++ b/oox/source/export/drawingml.cxx
@@ -830,8 +830,8 @@ void DrawingML::WriteGradientFill(
     // export GradientStops (with alpha)
     mpFS->startElementNS(XML_a, XML_gsLst);
 
-    basegfx::BColorStops::const_iterator aCurrColor(aColorStops.begin());
-    basegfx::BColorStops::const_iterator aCurrAlpha(aAlphaStops.begin());
+    auto aCurrColor(aColorStops.begin());
+    auto aCurrAlpha(aAlphaStops.begin());
 
     while (aCurrColor != aColorStops.end() && aCurrAlpha != aAlphaStops.end())
     {
diff --git a/sd/source/ui/sidebar/SlideBackground.cxx 
b/sd/source/ui/sidebar/SlideBackground.cxx
index 6cd8d6b4c858..07978c1c33ed 100644
--- a/sd/source/ui/sidebar/SlideBackground.cxx
+++ b/sd/source/ui/sidebar/SlideBackground.cxx
@@ -1289,21 +1289,11 @@ IMPL_LINK_NOARG( SlideBackground, ModifyMarginHdl, 
weld::ComboBox&, void )
 
 basegfx::BColorStops SlideBackground::createColorStops()
 {
-    basegfx::BColorStops aColorStops;
+    basegfx::BColor aStartColor = 
mxFillGrad1->GetSelectEntryColor().getBColor();
+    basegfx::BColor aEndColor = mxFillGrad2->GetSelectEntryColor().getBColor();
 
-    if (maColorStops.size() >= 2)
-    {
-        aColorStops = maColorStops;
-        aColorStops.front() = 
basegfx::BColorStop(maColorStops.front().getStopOffset(),
-                                                  
mxFillGrad1->GetSelectEntryColor().getBColor());
-        aColorStops.back() = 
basegfx::BColorStop(maColorStops.back().getStopOffset(),
-                                                 
mxFillGrad2->GetSelectEntryColor().getBColor());
-    }
-    else
-    {
-        aColorStops.emplace_back(0.0, 
mxFillGrad1->GetSelectEntryColor().getBColor());
-        aColorStops.emplace_back(1.0, 
mxFillGrad2->GetSelectEntryColor().getBColor());
-    }
+    basegfx::BColorStops aColorStops = maColorStops;
+    aColorStops.setStartAndEndColors(aStartColor, aEndColor);
 
     return aColorStops;
 }
diff --git a/svx/source/sidebar/area/AreaPropertyPanelBase.cxx 
b/svx/source/sidebar/area/AreaPropertyPanelBase.cxx
index 3659110f16db..d7e80f9f7eda 100644
--- a/svx/source/sidebar/area/AreaPropertyPanelBase.cxx
+++ b/svx/source/sidebar/area/AreaPropertyPanelBase.cxx
@@ -1369,23 +1369,13 @@ sal_Int32 
AreaPropertyPanelBase::GetSelectedTransparencyTypeIndex() const
 
 basegfx::BColorStops AreaPropertyPanelBase::createColorStops()
 {
-    basegfx::BColorStops aColorStops;
+    basegfx::BColor aStartColor = 
mxLbFillGradFrom->GetSelectEntryColor().getBColor();
+    basegfx::BColor aEndColor = 
mxLbFillGradTo->GetSelectEntryColor().getBColor();
 
-    if (maColorStops.size() >= 2)
-    {
-        aColorStops = maColorStops;
-        aColorStops.front() = 
basegfx::BColorStop(maColorStops.front().getStopOffset(),
-                                                  
mxLbFillGradFrom->GetSelectEntryColor().getBColor());
-        aColorStops.back() = 
basegfx::BColorStop(maColorStops.back().getStopOffset(),
-                                                 
mxLbFillGradTo->GetSelectEntryColor().getBColor());
-    }
-    else
-    {
-        aColorStops.emplace_back(0.0, 
mxLbFillGradFrom->GetSelectEntryColor().getBColor());
-        aColorStops.emplace_back(1.0, 
mxLbFillGradTo->GetSelectEntryColor().getBColor());
-    }
+    basegfx::BColorStops aColorStops = maColorStops;
+    aColorStops.setStartAndEndColors(aStartColor, aEndColor);
 
-    return aColorStops;
+   return aColorStops;
 }
 
 } // end of namespace svx::sidebar
diff --git a/svx/source/sidebar/area/AreaTransparencyGradientPopup.cxx 
b/svx/source/sidebar/area/AreaTransparencyGradientPopup.cxx
index 680cf2cfc4ee..e5f835c8760f 100644
--- a/svx/source/sidebar/area/AreaTransparencyGradientPopup.cxx
+++ b/svx/source/sidebar/area/AreaTransparencyGradientPopup.cxx
@@ -139,17 +139,8 @@ void AreaTransparencyGradientPopup::ExecuteValueModify()
     basegfx::BColor 
aEndBColor(mxMtrTrgrEndValue->get_value(FieldUnit::PERCENT) / 100.0);
     aEndBColor.clamp();
 
-    if (maColorStops.size() >= 2)
-    {
-        aColorStops = maColorStops;
-        aColorStops.front() = 
basegfx::BColorStop(maColorStops.front().getStopOffset(), aStartBColor);
-        aColorStops.back() = 
basegfx::BColorStop(maColorStops.back().getStopOffset(), aEndBColor);
-    }
-    else
-    {
-        aColorStops.emplace_back(0.0, aStartBColor);
-        aColorStops.emplace_back(1.0, aEndBColor);
-    }
+    aColorStops = maColorStops;
+    aColorStops.setStartAndEndColors(aStartBColor, aEndBColor);
 
     basegfx::BGradient aTmpGradient(
         aColorStops,
diff --git a/sw/source/filter/ww8/rtfattributeoutput.cxx 
b/sw/source/filter/ww8/rtfattributeoutput.cxx
index 59ed71f198bc..3e1d10d591e3 100644
--- a/sw/source/filter/ww8/rtfattributeoutput.cxx
+++ b/sw/source/filter/ww8/rtfattributeoutput.cxx
@@ -3733,7 +3733,7 @@ void RtfAttributeOutput::FormatFillGradient(const 
XFillGradientItem& rFillGradie
         // assume what was formally GradientStyle_AXIAL, see above and also 
refer to
         // FillModel::pushToPropMap 'fFocus' value and usage.
         // The 2nd color is the in-between color, use it
-        const Color aEndColor(rColorStops[1].getStopColor());
+        const Color aEndColor(rColorStops.getStop(1).getStopColor());
         m_aFlyProperties.push_back(std::make_pair<OString, OString>(
             "fillBackColor", OString::number(wwUtility::RGBToBGR(aEndColor))));
         m_aFlyProperties.push_back(
diff --git a/vcl/source/filter/svm/SvmReader.cxx 
b/vcl/source/filter/svm/SvmReader.cxx
index 56f2d933bbe9..c006596441a1 100644
--- a/vcl/source/filter/svm/SvmReader.cxx
+++ b/vcl/source/filter/svm/SvmReader.cxx
@@ -1360,7 +1360,7 @@ rtl::Reference<MetaAction> 
SvmReader::FloatTransparentHandler(ImplMetaReadData*
             mrStream.ReadDouble(fG);
             mrStream.ReadDouble(fB);
 
-            aColorStops.emplace_back(fOff, basegfx::BColor(fR, fG, fB));
+            aColorStops.addStop(fOff, basegfx::BColor(fR, fG, fB));
         }
 
         pAction->addSVGTransparencyColorStops(aColorStops);

Reply via email to