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);