basegfx/source/tools/bgradient.cxx | 143 +++++++------- basegfx/source/tools/gradienttools.cxx | 24 +- chart2/qa/extras/chart2import.cxx | 20 - chart2/source/tools/ChartGradientPaletteHelper.cxx | 4 cui/source/tabpages/tpgradnt.cxx | 18 - cui/source/tabpages/tptrans.cxx | 15 - docmodel/source/uno/UnoGradientTools.cxx | 7 drawinglayer/source/attribute/fillgradientattribute.cxx | 4 drawinglayer/source/processor2d/cairopixelprocessor2d.cxx | 10 drawinglayer/source/texture/texture.cxx | 24 +- drawinglayer/source/tools/primitive2dxmldump.cxx | 9 filter/source/svg/svgwriter.cxx | 6 include/basegfx/utils/bgradient.hxx | 64 ++++-- oox/qa/unit/drawingml.cxx | 20 - oox/qa/unit/shape.cxx | 64 +++--- oox/source/drawingml/fillproperties.cxx | 4 sc/qa/unit/subsequent_filters_test3.cxx | 16 - sd/qa/unit/export-tests-ooxml1.cxx | 24 +- sd/qa/unit/export-tests-ooxml2.cxx | 8 sd/qa/unit/export-tests-ooxml4.cxx | 16 - sd/qa/unit/misc-tests.cxx | 8 sd/qa/unit/uiimpress.cxx | 8 sd/source/ui/sidebar/SlideBackground.cxx | 18 - svx/source/customshapes/EnhancedCustomShape2d.cxx | 12 - svx/source/sidebar/area/AreaPropertyPanelBase.cxx | 18 - svx/source/sidebar/area/AreaTransparencyGradientPopup.cxx | 14 - sw/qa/extras/odfexport/odfexport.cxx | 16 - sw/qa/extras/ooxmlexport/ooxmlexport7.cxx | 8 sw/source/filter/ww8/rtfattributeoutput.cxx | 2 vcl/source/filter/svm/SvmReader.cxx | 2 30 files changed, 297 insertions(+), 309 deletions(-)
New commits: commit 2c4b43f709b04903ddb93866836036c903fd83b8 Author: Tomaž Vajngerl <[email protected]> AuthorDate: Thu Dec 11 13:19:43 2025 +0900 Commit: Tomaž Vajngerl <[email protected]> CommitDate: Sat Feb 21 11:51:19 2026 +0100 basegfx: don't allow in-place changing of BColorStops externally All the changes should go through BColorStops interface and not directly. Change-Id: I4c6dd42f8d6b6c43cdcf9d53557ccb12f8d0507c Reviewed-on: https://gerrit.libreoffice.org/c/core/+/195386 Reviewed-by: Tomaž Vajngerl <[email protected]> Tested-by: Jenkins Reviewed-on: https://gerrit.libreoffice.org/c/core/+/199918 Tested-by: Jenkins CollaboraOffice <[email protected]> diff --git a/basegfx/source/tools/bgradient.cxx b/basegfx/source/tools/bgradient.cxx index 0c07327cd9c8..2e86774672d5 100644 --- a/basegfx/source/tools/bgradient.cxx +++ b/basegfx/source/tools/bgradient.cxx @@ -196,23 +196,24 @@ BColor BColorStops::getInterpolatedBColor(double fPosition, sal_uInt32 nRequeste */ void BColorStops::replaceStartColor(const BColor& rStart) { - BColorStops::iterator a1stNonStartColor(begin()); + auto a1stNonStartColorIterator(maStops.begin()); // search for highest existing non-StartColor - CAUTION, // there might be none, one or multiple with StopOffset 0.0 - while (a1stNonStartColor != end() && a1stNonStartColor->getStopOffset() <= 0.0) - a1stNonStartColor++; + while (a1stNonStartColorIterator != end() && a1stNonStartColorIterator->getStopOffset() <= 0.0) + a1stNonStartColorIterator++; // create new ColorStops by 1st adding new one and then all // non-StartColor entries BColorStops aNewColorStops; - aNewColorStops.reserve(size() + 1); + aNewColorStops.maStops.reserve(size() + 1); aNewColorStops.addStop(0.0, rStart); - aNewColorStops.maStops.insert(aNewColorStops.end(), a1stNonStartColor, end()); + aNewColorStops.maStops.insert(aNewColorStops.maStops.end(), a1stNonStartColorIterator, + maStops.end()); // assign & done - *this = std::move(aNewColorStops); + maStops = std::move(aNewColorStops.maStops); } /* Tooling method that allows to replace the EndColor in a @@ -260,12 +261,12 @@ void BColorStops::blendToIntensity(double fStartIntensity, double fEndIntensity, return; // blend relative to StopOffset position - for (auto& candidate : *this) + for (auto& rCandidate : maStops) { - const double fOffset(candidate.getStopOffset()); + const double fOffset(rCandidate.getStopOffset()); const double fIntensity((fStartIntensity * (1.0 - fOffset)) + (fEndIntensity * fOffset)); - candidate = basegfx::BColorStop( - fOffset, basegfx::interpolate(rBlendColor, candidate.getStopColor(), fIntensity)); + rCandidate = basegfx::BColorStop( + fOffset, basegfx::interpolate(rBlendColor, rCandidate.getStopColor(), fIntensity)); } } @@ -318,7 +319,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); @@ -485,7 +486,7 @@ bool BColorStops::isSingleColor(BColor& rSingleColor) const rSingleColor = front().getStopColor(); - for (auto const& rCandidate : *this) + for (auto const& rCandidate : maStops) { if (rCandidate.getStopColor() != rSingleColor) return false; @@ -500,8 +501,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()); } @@ -522,13 +523,13 @@ void BColorStops::createSpaceAtStart(double fOffset) BColorStops aNewStops; - for (const auto& candidate : *this) + for (const auto& candidate : maStops) { aNewStops.addStop(fOffset + (candidate.getStopOffset() * (1.0 - fOffset)), candidate.getStopColor()); } - *this = std::move(aNewStops); + maStops = std::move(aNewStops.maStops); } // removeSpaceAtStart removes fOffset space from start by @@ -550,7 +551,7 @@ void BColorStops::removeSpaceAtStart(double fOffset) BColorStops 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)) { @@ -559,7 +560,7 @@ void BColorStops::removeSpaceAtStart(double fOffset) } } - *this = std::move(aNewStops); + maStops = std::move(aNewStops.maStops); } // try to detect if an empty/no-color-change area exists @@ -656,7 +657,7 @@ void BColorStops::doApplyAxial() } // apply color stops - *this = std::move(aNewColorStops); + maStops = std::move(aNewColorStops.maStops); } void BColorStops::doApplySteps(sal_uInt16 nStepCount) @@ -729,7 +730,7 @@ void BColorStops::doApplySteps(sal_uInt16 nStepCount) } // apply the change to color stops - *this = std::move(aNewColorStops); + maStops = std::move(aNewColorStops.maStops); } void BColorStops::tryToApplyBColorModifierStack(const BColorModifierStack& rBColorModifierStack) @@ -738,7 +739,7 @@ void BColorStops::tryToApplyBColorModifierStack(const BColorModifierStack& rBCol // no content on stack, done return; - for (auto& candidate : *this) + for (auto& candidate : maStops) { candidate = BColorStop(candidate.getStopOffset(), rBColorModifierStack.getModifiedColor(candidate.getStopColor())); @@ -764,6 +765,21 @@ bool BColorStops::sameSizeAndDistances(const BColorStops& rComp) const return EntryA == end(); } +void BColorStops::changeStartAndEnd(BColor const& rStart, BColor const& rEnd) +{ + if (size() >= 2) + { + maStops.front() = BColorStop(maStops.front().getStopOffset(), rStart); + maStops.back() = BColorStop(maStops.back().getStopOffset(), rEnd); + } + else + { + clear(); + addStop(0.0, rStart); + addStop(1.0, rEnd); + } +} + std::string BGradient::GradientStyleToString(css::awt::GradientStyle eStyle) { switch (eStyle) @@ -839,9 +855,9 @@ bool BGradient::operator==(const BGradient& rGradient) const && nStepCount == rGradient.nStepCount); } -void BGradient::SetColorStops(const basegfx::BColorStops& rSteps) +void BGradient::SetColorStops(const basegfx::BColorStops& rStops) { - aColorStops = rSteps; + aColorStops = rStops; aColorStops.sortAndCorrect(); if (aColorStops.empty()) aColorStops.addStop(0.0, basegfx::BColor()); @@ -972,10 +988,10 @@ void BGradient::tryToApplyStartEndIntensity() void BGradient::tryToConvertToAxial() { if (css::awt::GradientStyle_LINEAR != GetGradientStyle() || 0 != GetBorder() - || GetColorStops().empty()) + || aColorStops.empty()) return; - if (!GetColorStops().isSymmetrical()) + if (!aColorStops.isSymmetrical()) return; SetGradientStyle(css::awt::GradientStyle_AXIAL); @@ -983,8 +999,7 @@ void BGradient::tryToConvertToAxial() // Stretch the first half of the color stops to double width // 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()); + BColorStops::const_iterator aIter(aColorStops.begin()); while (basegfx::fTools::lessOrEqual(aIter->getStopOffset(), 0.5)) { BColorStop aNextStop(std::clamp((*aIter).getStopOffset() * 2.0, 0.0, 1.0), diff --git a/cui/source/tabpages/tpgradnt.cxx b/cui/source/tabpages/tpgradnt.cxx index f29acef6d3ad..332c087fd537 100644 --- a/cui/source/tabpages/tpgradnt.cxx +++ b/cui/source/tabpages/tpgradnt.cxx @@ -659,21 +659,11 @@ sal_Int32 SvxGradientTabPage::SearchGradientList(std::u16string_view rGradientNa basegfx::BColorStops SvxGradientTabPage::createColorStops() { - basegfx::BColorStops aColorStops; + basegfx::BColorStops aColorStops = m_aColorStops; - 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.addStop(0.0, m_xLbColorFrom->GetSelectEntryColor().getBColor()); - aColorStops.addStop(1.0, m_xLbColorTo->GetSelectEntryColor().getBColor()); - } + aColorStops.changeStartAndEnd( + m_xLbColorFrom->GetSelectEntryColor().getBColor(), + m_xLbColorTo->GetSelectEntryColor().getBColor()); return aColorStops; } diff --git a/cui/source/tabpages/tptrans.cxx b/cui/source/tabpages/tptrans.cxx index d787d087edec..b8eedeb11efb 100644 --- a/cui/source/tabpages/tptrans.cxx +++ b/cui/source/tabpages/tptrans.cxx @@ -512,24 +512,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.addStop(0.0, aStartBColor); - aColorStops.addStop(1.0, aEndBColor); - } - + basegfx::BColorStops aColorStops = maColorStops; + aColorStops.changeStartAndEnd(aStartBColor, aEndBColor); return aColorStops; } diff --git a/include/basegfx/utils/bgradient.hxx b/include/basegfx/utils/bgradient.hxx index 2bafcc7f9fc1..2c84548b48ed 100644 --- a/include/basegfx/utils/bgradient.hxx +++ b/include/basegfx/utils/bgradient.hxx @@ -103,7 +103,6 @@ private: public: typedef typename std::vector<BColorStop>::size_type size_type; - typedef typename std::vector<BColorStop>::iterator iterator; typedef typename std::vector<BColorStop>::const_iterator const_iterator; typedef typename std::vector<BColorStop>::const_reverse_iterator const_reverse_iterator; @@ -124,7 +123,7 @@ public: // constructor with two colors to explicitly create a // BColorStops for StartColor @0.0 & EndColor @1.0 - BColorStops(const BColor& rStart, const BColor& rEnd); + BColorStops(BColor const& rStart, BColor const& rEnd); BColorStops& operator=(const BColorStops& rOther) { @@ -143,7 +142,10 @@ public: BColorStop const& getStop(size_t i) const { return maStops[i]; } double getStopOffset(size_t i) const { return maStops[i].getStopOffset(); } - BColor const& getStopColor(size_t i) const { return maStops[i].getStopColor(); } + + void changeStartAndEnd(BColor const& rStart, BColor const& rEnd); + + BColor getStopColor(size_t i) const { return maStops[i].getStopColor(); } void removeLastStop() { return maStops.pop_back(); } @@ -151,16 +153,12 @@ public: 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(); } - BColorStop& front() { return maStops.front(); } - BColorStop& back() { return maStops.back(); } bool operator==(BColorStops const& rOther) const { return maStops == rOther.maStops; } // helper data struct to support buffering entries in diff --git a/sd/source/ui/sidebar/SlideBackground.cxx b/sd/source/ui/sidebar/SlideBackground.cxx index ec3592b4ba93..7f67684ca70f 100644 --- a/sd/source/ui/sidebar/SlideBackground.cxx +++ b/sd/source/ui/sidebar/SlideBackground.cxx @@ -1287,21 +1287,11 @@ IMPL_LINK_NOARG( SlideBackground, ModifyMarginHdl, weld::ComboBox&, void ) basegfx::BColorStops SlideBackground::createColorStops() { - basegfx::BColorStops aColorStops; + basegfx::BColorStops aColorStops = maColorStops; - 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.addStop(0.0, mxFillGrad1->GetSelectEntryColor().getBColor()); - aColorStops.addStop(1.0, mxFillGrad2->GetSelectEntryColor().getBColor()); - } + aColorStops.changeStartAndEnd( + mxFillGrad1->GetSelectEntryColor().getBColor(), + mxFillGrad2->GetSelectEntryColor().getBColor()); return aColorStops; } diff --git a/svx/source/customshapes/EnhancedCustomShape2d.cxx b/svx/source/customshapes/EnhancedCustomShape2d.cxx index 9f1cf355991a..83edaec4a6dc 100644 --- a/svx/source/customshapes/EnhancedCustomShape2d.cxx +++ b/svx/source/customshapes/EnhancedCustomShape2d.cxx @@ -2821,15 +2821,15 @@ void EnhancedCustomShape2d::AdaptObjColor( if ( nColorCount || 0.0 != dBrightness ) { - basegfx::BColorStops aColorStops(aBGradient.GetColorStops()); - for (auto& candidate : aColorStops) + basegfx::BColorStops aColorStops; + for (auto const& candidate : aBGradient.GetColorStops()) { - candidate = basegfx::BColorStop( - candidate.getStopOffset(), - GetColorData( + basegfx::BColor aBColor = GetColorData( Color(candidate.getStopColor()), nColorCount ? std::min(nColorIndex, nColorCount-1) : nColorIndex, - dBrightness ).getBColor()); + dBrightness).getBColor(); + + aColorStops.addStop(candidate.getStopOffset(), aBColor); } aBGradient.SetColorStops(aColorStops); } diff --git a/svx/source/sidebar/area/AreaPropertyPanelBase.cxx b/svx/source/sidebar/area/AreaPropertyPanelBase.cxx index 1cc38dcf4f55..fed25aba8160 100644 --- a/svx/source/sidebar/area/AreaPropertyPanelBase.cxx +++ b/svx/source/sidebar/area/AreaPropertyPanelBase.cxx @@ -1371,19 +1371,11 @@ sal_Int32 AreaPropertyPanelBase::GetSelectedTransparencyTypeIndex() const basegfx::BColorStops AreaPropertyPanelBase::createColorStops() { - basegfx::BColorStops aColorStops; + basegfx::BColorStops aColorStops = maColorStops; - 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.addStop(0.0, mxLbFillGradFrom->GetSelectEntryColor().getBColor()); - aColorStops.addStop(1.0, mxLbFillGradTo->GetSelectEntryColor().getBColor()); - } + aColorStops.changeStartAndEnd( + mxLbFillGradFrom->GetSelectEntryColor().getBColor(), + mxLbFillGradTo->GetSelectEntryColor().getBColor()); return aColorStops; } diff --git a/svx/source/sidebar/area/AreaTransparencyGradientPopup.cxx b/svx/source/sidebar/area/AreaTransparencyGradientPopup.cxx index d734d1062850..d1c07603ee85 100644 --- a/svx/source/sidebar/area/AreaTransparencyGradientPopup.cxx +++ b/svx/source/sidebar/area/AreaTransparencyGradientPopup.cxx @@ -133,23 +133,13 @@ void AreaTransparencyGradientPopup::ExecuteValueModify() mxMtrTrgrAngle->set_value(nVal, FieldUnit::DEGREE); //End of new code - basegfx::BColorStops aColorStops; basegfx::BColor aStartBColor(mxMtrTrgrStartValue->get_value(FieldUnit::PERCENT) / 100.0); aStartBColor.clamp(); 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.addStop(0.0, aStartBColor); - aColorStops.addStop(1.0, aEndBColor); - } + basegfx::BColorStops aColorStops = maColorStops; // copy + aColorStops.changeStartAndEnd(aStartBColor, aEndBColor); basegfx::BGradient aTmpGradient( aColorStops, commit a5f5c910d72597d01e4edf08e70681544b5fb074 Author: Tomaž Vajngerl <[email protected]> AuthorDate: Mon Dec 8 16:49:36 2025 +0900 Commit: Tomaž Vajngerl <[email protected]> CommitDate: Sat Feb 21 11:51:05 2026 +0100 basegfx: BColorStops shouldn't derive from std::vector Change-Id: I9f246c0d9a5ddc7f8cf428bf7fc8c8957e8584b6 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/158710 Reviewed-by: Tomaž Vajngerl <[email protected]> Tested-by: Jenkins Reviewed-on: https://gerrit.libreoffice.org/c/core/+/199917 Tested-by: Jenkins CollaboraOffice <[email protected]> diff --git a/basegfx/source/tools/bgradient.cxx b/basegfx/source/tools/bgradient.cxx index 5cc7a326f7dc..0c07327cd9c8 100644 --- a/basegfx/source/tools/bgradient.cxx +++ b/basegfx/source/tools/bgradient.cxx @@ -72,8 +72,8 @@ namespace basegfx // 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); + addStop(0.0, rStart); + addStop(1.0, rEnd); } /* Helper to grep the correct ColorStop out of @@ -208,8 +208,8 @@ void BColorStops::replaceStartColor(const BColor& rStart) BColorStops aNewColorStops; aNewColorStops.reserve(size() + 1); - aNewColorStops.emplace_back(0.0, rStart); - aNewColorStops.insert(aNewColorStops.end(), a1stNonStartColor, end()); + aNewColorStops.addStop(0.0, rStart); + aNewColorStops.maStops.insert(aNewColorStops.end(), a1stNonStartColor, end()); // assign & done *this = std::move(aNewColorStops); @@ -225,10 +225,10 @@ void BColorStops::replaceEndColor(const BColor& rEnd) { // erase all evtl. existing EndColor(s) while (!empty() && basegfx::fTools::moreOrEqual(back().getStopOffset(), 1.0)) - pop_back(); + removeLastStop(); // add at the end of existing ColorStops - emplace_back(1.0, rEnd); + addStop(1.0, rEnd); } /* Tooling method to linearly blend the Colors contained in @@ -309,7 +309,7 @@ void BColorStops::sortAndCorrect() // 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()); + addStop(std::max(0.0, std::min(1.0, aEntry.getStopOffset())), aEntry.getStopColor()); // done return; @@ -330,21 +330,21 @@ void BColorStops::sortAndCorrect() for (size_t read(0); read < size(); read++) { // get offset of entry at read position - double fOff((*this)[read].getStopOffset()); + double fOff = maStops[read].getStopOffset(); if (fOff < 0.0 && read + 1 < 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 (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 @@ -362,16 +362,16 @@ void BColorStops::sortAndCorrect() { // 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(), - (1.0 - fOff) / (fOff2 - fOff))); + auto nColor = basegfx::interpolate(maStops[read].getStopColor(), + maStops[read + 1].getStopColor(), + (1.0 - fOff) / (fOff2 - fOff)); + maStops[read + 1] = BColorStop(1.0, nColor); // adapt fOff fOff = 1.0; @@ -388,12 +388,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 @@ -415,19 +415,19 @@ void BColorStops::sortAndCorrect() // all outside too low, rescue last due to being closest to content const BColor aBackColor(back().getStopColor()); clear(); - emplace_back(0.0, aBackColor); + addStop(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); + addStop(1.0, aFrontColor); } } else { - resize(write); + maStops.resize(write); } } } @@ -524,8 +524,8 @@ void BColorStops::createSpaceAtStart(double fOffset) for (const auto& candidate : *this) { - aNewStops.emplace_back(fOffset + (candidate.getStopOffset() * (1.0 - fOffset)), - candidate.getStopColor()); + aNewStops.addStop(fOffset + (candidate.getStopOffset() * (1.0 - fOffset)), + candidate.getStopColor()); } *this = std::move(aNewStops); @@ -554,8 +554,8 @@ void BColorStops::removeSpaceAtStart(double fOffset) { if (basegfx::fTools::moreOrEqual(candidate.getStopOffset(), fOffset)) { - aNewStops.emplace_back((candidate.getStopOffset() - fOffset) * fMul, - candidate.getStopColor()); + aNewStops.addStop((candidate.getStopOffset() - fOffset) * fMul, + candidate.getStopColor()); } } @@ -631,8 +631,8 @@ void BColorStops::doApplyAxial() while (aRevCurrColor != rend()) { - aNewColorStops.emplace_back((1.0 - aRevCurrColor->getStopOffset()) * 0.5, - aRevCurrColor->getStopColor()); + aNewColorStops.addStop((1.0 - aRevCurrColor->getStopOffset()) * 0.5, + aRevCurrColor->getStopColor()); aRevCurrColor++; } @@ -650,8 +650,8 @@ void BColorStops::doApplyAxial() // add gradient stops in non-reverse order, translated and scaled to [0.5 .. 1.0] while (aCurrColor != end()) { - aNewColorStops.emplace_back((aCurrColor->getStopOffset() * 0.5) + 0.5, - aCurrColor->getStopColor()); + aNewColorStops.addStop((aCurrColor->getStopOffset() * 0.5) + 0.5, + aCurrColor->getStopColor()); aCurrColor++; } @@ -686,7 +686,7 @@ void BColorStops::doApplySteps(sal_uInt16 nStepCount) // add start color, but check if it is already there - which is the // case from the 2nd segment on due to a new segment starting with // the same color as the previous one ended - aNewColorStops.push_back(*aColorL); + aNewColorStops.addStop(*aColorL); } if (!basegfx::fTools::equalZero(fDelta)) { @@ -708,12 +708,12 @@ void BColorStops::doApplySteps(sal_uInt16 nStepCount) const double fPosition(fStart + fOffsetStep * static_cast<double>(a)); // add end color of previous sub-segment - aNewColorStops.emplace_back( + aNewColorStops.addStop( fPosition, basegfx::interpolate(rStartColor, rEndColor, static_cast<double>(a - 1) * fSingleStep)); // add start color of current sub-segment - aNewColorStops.emplace_back( + aNewColorStops.addStop( fPosition, basegfx::interpolate(rStartColor, rEndColor, static_cast<double>(a) * fSingleStep)); } @@ -721,7 +721,7 @@ void BColorStops::doApplySteps(sal_uInt16 nStepCount) } // always add end color of segment - aNewColorStops.push_back(*aColorR); + aNewColorStops.addStop(*aColorR); // next segment aColorL++; @@ -810,8 +810,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, @@ -844,7 +844,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 @@ -989,7 +989,7 @@ void BGradient::tryToConvertToAxial() { BColorStop aNextStop(std::clamp((*aIter).getStopOffset() * 2.0, 0.0, 1.0), (*aIter).getStopColor()); - aAxialColorStops.push_back(aNextStop); + 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 bf5060708eaf..d3383953cbe3 100644 --- a/basegfx/source/tools/gradienttools.cxx +++ b/basegfx/source/tools/gradienttools.cxx @@ -344,7 +344,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); } } @@ -357,7 +357,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 @@ -414,24 +414,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++; } @@ -439,16 +439,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/chart2/qa/extras/chart2import.cxx b/chart2/qa/extras/chart2import.cxx index 9f0abcd4c146..a24a8b90dffe 100644 --- a/chart2/qa/extras/chart2import.cxx +++ b/chart2/qa/extras/chart2import.cxx @@ -673,12 +673,12 @@ CPPUNIT_TEST_FIXTURE(Chart2ImportTest, testBnc889755) const basegfx::BColorStops aColorStops = model::gradient::getColorStopsFromUno(aTransparence.ColorStops); CPPUNIT_ASSERT_EQUAL(size_t(3), aColorStops.size()); - CPPUNIT_ASSERT_EQUAL(0.0, aColorStops[0].getStopOffset()); - CPPUNIT_ASSERT_EQUAL(Color(0x404040), Color(aColorStops[0].getStopColor())); - CPPUNIT_ASSERT(basegfx::fTools::equal(aColorStops[1].getStopOffset(), 0.070000000000000007)); - CPPUNIT_ASSERT_EQUAL(Color(0x404040), Color(aColorStops[1].getStopColor())); - CPPUNIT_ASSERT(basegfx::fTools::equal(aColorStops[2].getStopOffset(), 0.080000000000000002)); - CPPUNIT_ASSERT_EQUAL(COL_WHITE, Color(aColorStops[2].getStopColor())); + CPPUNIT_ASSERT_EQUAL(0.0, aColorStops.getStopOffset(0)); + CPPUNIT_ASSERT_EQUAL(Color(0x404040), Color(aColorStops.getStopColor(0))); + CPPUNIT_ASSERT(basegfx::fTools::equal(aColorStops.getStopOffset(1), 0.070000000000000007)); + CPPUNIT_ASSERT_EQUAL(Color(0x404040), Color(aColorStops.getStopColor(1))); + CPPUNIT_ASSERT(basegfx::fTools::equal(aColorStops.getStopOffset(2), 0.080000000000000002)); + CPPUNIT_ASSERT_EQUAL(COL_WHITE, Color(aColorStops.getStopColor(2))); } CPPUNIT_TEST_FIXTURE(Chart2ImportTest, testBnc882383) @@ -717,10 +717,10 @@ CPPUNIT_TEST_FIXTURE(Chart2ImportTest, testTransparencyGradientValue) // MCGR: Use the whole completely imported transparency gradient to check for correctness CPPUNIT_ASSERT_EQUAL(size_t(2), aColorStops.size()); - CPPUNIT_ASSERT_EQUAL(0.0, aColorStops[0].getStopOffset()); - CPPUNIT_ASSERT_EQUAL(Color(0x4d4d4d), Color(aColorStops[0].getStopColor())); - CPPUNIT_ASSERT(basegfx::fTools::equal(aColorStops[1].getStopOffset(), 1.0)); - CPPUNIT_ASSERT_EQUAL(Color(0x333333), Color(aColorStops[1].getStopColor())); + CPPUNIT_ASSERT_EQUAL(0.0, aColorStops.getStopOffset(0)); + CPPUNIT_ASSERT_EQUAL(Color(0x4d4d4d), Color(aColorStops.getStopColor(0))); + CPPUNIT_ASSERT(basegfx::fTools::equal(aColorStops.getStopOffset(1), 1.0)); + CPPUNIT_ASSERT_EQUAL(Color(0x333333), Color(aColorStops.getStopColor(1))); } CPPUNIT_TEST_FIXTURE(Chart2ImportTest, testSimpleStrictXLSX) diff --git a/chart2/source/tools/ChartGradientPaletteHelper.cxx b/chart2/source/tools/ChartGradientPaletteHelper.cxx index cb180c7d99f0..5227d930b79a 100644 --- a/chart2/source/tools/ChartGradientPaletteHelper.cxx +++ b/chart2/source/tools/ChartGradientPaletteHelper.cxx @@ -238,7 +238,7 @@ basegfx::BColorStops ComputeLightVariationStops(const Color& rBase) // 4) Add stop (offsets 0.0, 0.5, 1.0) const double offset = i == 0 ? 1.0 : (i == 1 ? 0.5 : 0.0); - stops.emplace_back(offset, toBColor(finalRgb)); + stops.addStop(offset, toBColor(finalRgb)); } return stops; @@ -278,7 +278,7 @@ basegfx::BColorStops ComputeDarkVariationStops(const Color& rBase) // 3) append stop at 0.0, 0.5, 1.0 const double offset = i == 0 ? 1.0 : (i == 1 ? 0.5 : 0.0); - stops.emplace_back(offset, basegfx::BColor(out.r, out.g, out.b)); + stops.addStop(offset, basegfx::BColor(out.r, out.g, out.b)); } return stops; diff --git a/cui/source/tabpages/tpgradnt.cxx b/cui/source/tabpages/tpgradnt.cxx index 91342ba7b8a6..f29acef6d3ad 100644 --- a/cui/source/tabpages/tpgradnt.cxx +++ b/cui/source/tabpages/tpgradnt.cxx @@ -671,8 +671,8 @@ basegfx::BColorStops SvxGradientTabPage::createColorStops() } else { - aColorStops.emplace_back(0.0, m_xLbColorFrom->GetSelectEntryColor().getBColor()); - aColorStops.emplace_back(1.0, m_xLbColorTo->GetSelectEntryColor().getBColor()); + aColorStops.addStop(0.0, m_xLbColorFrom->GetSelectEntryColor().getBColor()); + aColorStops.addStop(1.0, m_xLbColorTo->GetSelectEntryColor().getBColor()); } return aColorStops; diff --git a/cui/source/tabpages/tptrans.cxx b/cui/source/tabpages/tptrans.cxx index 65588da50540..d787d087edec 100644 --- a/cui/source/tabpages/tptrans.cxx +++ b/cui/source/tabpages/tptrans.cxx @@ -526,8 +526,8 @@ basegfx::BColorStops SvxTransparenceTabPage::createColorStops() } else { - aColorStops.emplace_back(0.0, aStartBColor); - aColorStops.emplace_back(1.0, aEndBColor); + aColorStops.addStop(0.0, aStartBColor); + aColorStops.addStop(1.0, aEndBColor); } return aColorStops; diff --git a/docmodel/source/uno/UnoGradientTools.cxx b/docmodel/source/uno/UnoGradientTools.cxx index 06187c1fac8c..172d4cf2efe8 100644 --- a/docmodel/source/uno/UnoGradientTools.cxx +++ b/docmodel/source/uno/UnoGradientTools.cxx @@ -92,10 +92,9 @@ void fillFromColorStopSequence(basegfx::BColorStops& rColorStops, for (css::awt::ColorStop const& rSourceStop : rUnoColorStopSequence) { - rColorStops.emplace_back(rSourceStop.StopOffset, - basegfx::BColor(rSourceStop.StopColor.Red, - rSourceStop.StopColor.Green, - rSourceStop.StopColor.Blue)); + basegfx::BColor aBColor(rSourceStop.StopColor.Red, rSourceStop.StopColor.Green, + rSourceStop.StopColor.Blue); + rColorStops.addStop(rSourceStop.StopOffset, aBColor); } } } diff --git a/drawinglayer/source/attribute/fillgradientattribute.cxx b/drawinglayer/source/attribute/fillgradientattribute.cxx index 574cd05dbf52..f6f9d9b47dad 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/processor2d/cairopixelprocessor2d.cxx b/drawinglayer/source/processor2d/cairopixelprocessor2d.cxx index 1c2b066fb7b1..15c477c2ccf6 100644 --- a/drawinglayer/source/processor2d/cairopixelprocessor2d.cxx +++ b/drawinglayer/source/processor2d/cairopixelprocessor2d.cxx @@ -2876,12 +2876,12 @@ void CairoPixelProcessor2D::processFillGradientPrimitive2D_linear_axial( // add color stops for (size_t a(0); a < aBColorStops.size(); a++) { - const basegfx::BColorStop& rStop(aBColorStops[a]); + const basegfx::BColorStop& rStop = aBColorStops.getStop(a); const basegfx::BColor aColor(maBColorModifierStack.getModifiedColor(rStop.getStopColor())); if (bHasAlpha) { - const basegfx::BColor aAlpha(aBColorStopsAlpha[a].getStopColor()); + const basegfx::BColor aAlpha(aBColorStopsAlpha.getStopColor(a)); cairo_pattern_add_color_stop_rgba(pPattern, rStop.getStopOffset(), aColor.getRed(), aColor.getGreen(), aColor.getBlue(), 1.0 - aAlpha.luminance()); @@ -3278,12 +3278,12 @@ void CairoPixelProcessor2D::processFillGradientPrimitive2D_radial_elliptical( // add color stops for (size_t a(0); a < aBColorStops.size(); a++) { - const basegfx::BColorStop& rStop(aBColorStops[a]); + const basegfx::BColorStop& rStop = aBColorStops.getStop(a); const basegfx::BColor aColor(maBColorModifierStack.getModifiedColor(rStop.getStopColor())); if (bHasAlpha) { - const basegfx::BColor aAlpha(aBColorStopsAlpha[a].getStopColor()); + const basegfx::BColor aAlpha(aBColorStopsAlpha.getStopColor(a)); cairo_pattern_add_color_stop_rgba(pPattern, rStop.getStopOffset(), aColor.getRed(), aColor.getGreen(), aColor.getBlue(), 1.0 - aAlpha.luminance()); @@ -3654,7 +3654,7 @@ void CairoPixelProcessor2D::processPolyPolygonAlphaGradientPrimitive2D( // create ColorStops at same stops but single color aColorStops.reserve(rAlphaStops.size()); for (const auto& entry : rAlphaStops) - aColorStops.emplace_back(entry.getStopOffset(), aFillColor); + aColorStops.addStop(entry.getStopOffset(), aFillColor); // create FillGradient using that single-color ColorStops const attribute::FillGradientAttribute aFillGradient( diff --git a/drawinglayer/source/texture/texture.cxx b/drawinglayer/source/texture/texture.cxx index 48f60738677c..cb808ff96ac9 100644 --- a/drawinglayer/source/texture/texture.cxx +++ b/drawinglayer/source/texture/texture.cxx @@ -152,7 +152,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 @@ -224,7 +224,7 @@ namespace drawinglayer::texture if (bPenultimateUsed) { // correct temporary change - mnColorStops.pop_back(); + mnColorStops.removeLastStop(); } } @@ -300,7 +300,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 @@ -357,7 +357,7 @@ namespace drawinglayer::texture if (bPenultimateUsed) { // correct temporary change - mnColorStops.pop_back(); + mnColorStops.removeLastStop(); } } @@ -420,7 +420,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 @@ -461,7 +461,7 @@ namespace drawinglayer::texture if (bPenultimateUsed) { // correct temporary change - mnColorStops.pop_back(); + mnColorStops.removeLastStop(); } } @@ -523,7 +523,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 @@ -571,7 +571,7 @@ namespace drawinglayer::texture if (bPenultimateUsed) { // correct temporary change - mnColorStops.pop_back(); + mnColorStops.removeLastStop(); } } @@ -633,7 +633,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 @@ -674,7 +674,7 @@ namespace drawinglayer::texture if (bPenultimateUsed) { // correct temporary change - mnColorStops.pop_back(); + mnColorStops.removeLastStop(); } } @@ -736,7 +736,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 @@ -784,7 +784,7 @@ namespace drawinglayer::texture if (bPenultimateUsed) { // correct temporary change - mnColorStops.pop_back(); + mnColorStops.removeLastStop(); } } diff --git a/drawinglayer/source/tools/primitive2dxmldump.cxx b/drawinglayer/source/tools/primitive2dxmldump.cxx index b36116625bdb..641a9cd71f23 100644 --- a/drawinglayer/source/tools/primitive2dxmldump.cxx +++ b/drawinglayer/source/tools/primitive2dxmldump.cxx @@ -312,15 +312,14 @@ void writeSdrFillAttribute(::tools::XmlWriter& rWriter, for (size_t a(0); a < rColorStops.size(); a++) { if (0 == a) - rWriter.attribute("startColor", - convertColorToString(rColorStops[a].getStopColor())); + rWriter.attribute("startColor", convertColorToString(rColorStops.getStopColor(a))); else if (rColorStops.size() == a + 1) - rWriter.attribute("endColor", convertColorToString(rColorStops[a].getStopColor())); + rWriter.attribute("endColor", convertColorToString(rColorStops.getStopColor(a))); else { rWriter.startElement("colorStop"); - rWriter.attribute("stopOffset", rColorStops[a].getStopOffset()); - rWriter.attribute("stopColor", convertColorToString(rColorStops[a].getStopColor())); + rWriter.attribute("stopOffset", rColorStops.getStopOffset(a)); + rWriter.attribute("stopColor", convertColorToString(rColorStops.getStopColor(a))); rWriter.endElement(); } } diff --git a/filter/source/svg/svgwriter.cxx b/filter/source/svg/svgwriter.cxx index f299b959bbe8..6dfb00d6fab1 100644 --- a/filter/source/svg/svgwriter.cxx +++ b/filter/source/svg/svgwriter.cxx @@ -2445,8 +2445,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 @@ -3515,7 +3515,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 2ac8eba41d61..2bafcc7f9fc1 100644 --- a/include/basegfx/utils/bgradient.hxx +++ b/include/basegfx/utils/bgradient.hxx @@ -96,27 +96,29 @@ 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; + public: - explicit BColorStops() - : vector() - { - } - BColorStops(const BColorStops& other) - : vector(other) + typedef typename std::vector<BColorStop>::size_type size_type; + typedef typename std::vector<BColorStop>::iterator iterator; + typedef typename std::vector<BColorStop>::const_iterator const_iterator; + typedef typename std::vector<BColorStop>::const_reverse_iterator const_reverse_iterator; + + 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) { } @@ -124,17 +126,43 @@ 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 const& aColorStop) { maStops.push_back(aColorStop); } + + BColorStop const& getStop(size_t i) const { return maStops[i]; } + double getStopOffset(size_t i) const { return maStops[i].getStopOffset(); } + BColor const& getStopColor(size_t i) const { return maStops[i].getStopColor(); } + + void removeLastStop() { return maStops.pop_back(); } + + 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(); } + BColorStop& front() { return maStops.front(); } + BColorStop& back() { return maStops.back(); } + bool operator==(BColorStops const& rOther) const { return maStops == rOther.maStops; } + // helper data struct to support buffering entries in // gradient texture mapping, see usages for more info struct BColorStopRange diff --git a/oox/qa/unit/drawingml.cxx b/oox/qa/unit/drawingml.cxx index 81cd41de8048..b12922532d3d 100644 --- a/oox/qa/unit/drawingml.cxx +++ b/oox/qa/unit/drawingml.cxx @@ -199,16 +199,16 @@ CPPUNIT_TEST_FIXTURE(OoxDrawingmlTest, testGradientMultiStepTransparency) = model::gradient::getColorStopsFromUno(aTransparence.ColorStops); CPPUNIT_ASSERT_EQUAL(size_t(5), aColorStops.size()); - CPPUNIT_ASSERT_DOUBLES_EQUAL(0.00, aColorStops[0].getStopOffset(), 1E-3); - CPPUNIT_ASSERT_DOUBLES_EQUAL(0.19, aColorStops[1].getStopOffset(), 1E-3); - CPPUNIT_ASSERT_DOUBLES_EQUAL(0.35, aColorStops[2].getStopOffset(), 1E-3); - CPPUNIT_ASSERT_DOUBLES_EQUAL(0.58, aColorStops[3].getStopOffset(), 1E-3); - CPPUNIT_ASSERT_DOUBLES_EQUAL(1.00, aColorStops[4].getStopOffset(), 1E-3); - CPPUNIT_ASSERT_EQUAL(COL_WHITE, Color(aColorStops[0].getStopColor())); - CPPUNIT_ASSERT_EQUAL(Color(0x9e9e9e), Color(aColorStops[1].getStopColor())); - CPPUNIT_ASSERT_EQUAL(Color(0x363636), Color(aColorStops[2].getStopColor())); - CPPUNIT_ASSERT_EQUAL(COL_BLACK, Color(aColorStops[3].getStopColor())); - CPPUNIT_ASSERT_EQUAL(COL_BLACK, Color(aColorStops[4].getStopColor())); + CPPUNIT_ASSERT_DOUBLES_EQUAL(0.00, aColorStops.getStopOffset(0), 1E-3); + CPPUNIT_ASSERT_DOUBLES_EQUAL(0.19, aColorStops.getStopOffset(1), 1E-3); + CPPUNIT_ASSERT_DOUBLES_EQUAL(0.35, aColorStops.getStopOffset(2), 1E-3); + CPPUNIT_ASSERT_DOUBLES_EQUAL(0.58, aColorStops.getStopOffset(3), 1E-3); + CPPUNIT_ASSERT_DOUBLES_EQUAL(1.00, aColorStops.getStopOffset(4), 1E-3); + CPPUNIT_ASSERT_EQUAL(COL_WHITE, Color(aColorStops.getStopColor(0))); + CPPUNIT_ASSERT_EQUAL(Color(0x9e9e9e), Color(aColorStops.getStopColor(1))); + CPPUNIT_ASSERT_EQUAL(Color(0x363636), Color(aColorStops.getStopColor(2))); + CPPUNIT_ASSERT_EQUAL(COL_BLACK, Color(aColorStops.getStopColor(3))); + CPPUNIT_ASSERT_EQUAL(COL_BLACK, Color(aColorStops.getStopColor(4))); } CPPUNIT_TEST_FIXTURE(OoxDrawingmlTest, testShapeTextAlignment) diff --git a/oox/qa/unit/shape.cxx b/oox/qa/unit/shape.cxx index 5ac67b454933..21b11cb2d7f6 100644 --- a/oox/qa/unit/shape.cxx +++ b/oox/qa/unit/shape.cxx @@ -656,10 +656,10 @@ CPPUNIT_TEST_FIXTURE(OoxShapeTest, testWriterFontwork3) aColorStops = model::gradient::getColorStopsFromUno(aGradient.ColorStops); CPPUNIT_ASSERT_EQUAL(size_t(2), aColorStops.size()); - CPPUNIT_ASSERT_EQUAL(0.0, aColorStops[0].getStopOffset()); - CPPUNIT_ASSERT_EQUAL(COL_LIGHTBLUE, Color(aColorStops[0].getStopColor())); - CPPUNIT_ASSERT(basegfx::fTools::equal(aColorStops[1].getStopOffset(), 1.0)); - CPPUNIT_ASSERT_EQUAL(Color(0xf79646), Color(aColorStops[1].getStopColor())); + CPPUNIT_ASSERT_EQUAL(0.0, aColorStops.getStopOffset(0)); + CPPUNIT_ASSERT_EQUAL(COL_LIGHTBLUE, Color(aColorStops.getStopColor(0))); + CPPUNIT_ASSERT(basegfx::fTools::equal(aColorStops.getStopOffset(1), 1.0)); + CPPUNIT_ASSERT_EQUAL(Color(0xf79646), Color(aColorStops.getStopColor(1))); CPPUNIT_ASSERT_EQUAL(sal_Int16(690), aGradient.Angle); CPPUNIT_ASSERT_EQUAL(sal_Int16(0), aGradient.XOffset); @@ -680,10 +680,10 @@ CPPUNIT_TEST_FIXTURE(OoxShapeTest, testWriterFontwork3) aColorStops = model::gradient::getColorStopsFromUno(aGradient.ColorStops); CPPUNIT_ASSERT_EQUAL(size_t(2), aColorStops.size()); - CPPUNIT_ASSERT(basegfx::fTools::equal(aColorStops[0].getStopOffset(), 0.40000000000000002)); - CPPUNIT_ASSERT_EQUAL(Color(0xf79646), Color(aColorStops[0].getStopColor())); - CPPUNIT_ASSERT(basegfx::fTools::equal(aColorStops[1].getStopOffset(), 1.0)); - CPPUNIT_ASSERT_EQUAL(COL_LIGHTBLUE, Color(aColorStops[1].getStopColor())); + CPPUNIT_ASSERT(basegfx::fTools::equal(aColorStops.getStopOffset(0), 0.40000000000000002)); + CPPUNIT_ASSERT_EQUAL(Color(0xf79646), Color(aColorStops.getStopColor(0))); + CPPUNIT_ASSERT(basegfx::fTools::equal(aColorStops.getStopOffset(1), 1.0)); + CPPUNIT_ASSERT_EQUAL(COL_LIGHTBLUE, Color(aColorStops.getStopColor(1))); CPPUNIT_ASSERT_EQUAL(sal_Int16(900), aGradient.Angle); CPPUNIT_ASSERT_EQUAL(sal_Int16(50), aGradient.XOffset); @@ -704,10 +704,10 @@ CPPUNIT_TEST_FIXTURE(OoxShapeTest, testWriterFontwork3) aColorStops = model::gradient::getColorStopsFromUno(aGradient.ColorStops); CPPUNIT_ASSERT_EQUAL(size_t(2), aColorStops.size()); - CPPUNIT_ASSERT_EQUAL(0.0, aColorStops[0].getStopOffset()); - CPPUNIT_ASSERT_EQUAL(Color(0xf79646), Color(aColorStops[0].getStopColor())); - CPPUNIT_ASSERT(basegfx::fTools::equal(aColorStops[1].getStopOffset(), 1.0)); - CPPUNIT_ASSERT_EQUAL(COL_LIGHTBLUE, Color(aColorStops[1].getStopColor())); + CPPUNIT_ASSERT_EQUAL(0.0, aColorStops.getStopOffset(0)); + CPPUNIT_ASSERT_EQUAL(Color(0xf79646), Color(aColorStops.getStopColor(0))); + CPPUNIT_ASSERT(basegfx::fTools::equal(aColorStops.getStopOffset(1), 1.0)); + CPPUNIT_ASSERT_EQUAL(COL_LIGHTBLUE, Color(aColorStops.getStopColor(1))); CPPUNIT_ASSERT_EQUAL(sal_Int16(900), aGradient.Angle); CPPUNIT_ASSERT_EQUAL(sal_Int16(100), aGradient.XOffset); @@ -828,10 +828,10 @@ CPPUNIT_TEST_FIXTURE(OoxShapeTest, testImportWordArtGradient) aColorStops = model::gradient::getColorStopsFromUno(aGradient.ColorStops); CPPUNIT_ASSERT_EQUAL(size_t(2), aColorStops.size()); - CPPUNIT_ASSERT_EQUAL(0.0, aColorStops[0].getStopOffset()); - CPPUNIT_ASSERT_EQUAL(Color(0xffc000), Color(aColorStops[0].getStopColor())); - CPPUNIT_ASSERT(basegfx::fTools::equal(aColorStops[1].getStopOffset(), 1.0)); - CPPUNIT_ASSERT_EQUAL(Color(0xc00000), Color(aColorStops[1].getStopColor())); + CPPUNIT_ASSERT_EQUAL(0.0, aColorStops.getStopOffset(0)); + CPPUNIT_ASSERT_EQUAL(Color(0xffc000), Color(aColorStops.getStopColor(0))); + CPPUNIT_ASSERT(basegfx::fTools::equal(aColorStops.getStopOffset(1), 1.0)); + CPPUNIT_ASSERT_EQUAL(Color(0xc00000), Color(aColorStops.getStopColor(1))); CPPUNIT_ASSERT_EQUAL(awt::GradientStyle_LINEAR, aGradient.Style); CPPUNIT_ASSERT_EQUAL(sal_Int16(690), aGradient.Angle); @@ -860,10 +860,10 @@ CPPUNIT_TEST_FIXTURE(OoxShapeTest, testImportWordArtGradient) aColorStops = model::gradient::getColorStopsFromUno(aGradient.ColorStops); CPPUNIT_ASSERT_EQUAL(size_t(2), aColorStops.size()); - CPPUNIT_ASSERT_EQUAL(0.0, aColorStops[0].getStopOffset()); - CPPUNIT_ASSERT_EQUAL(Color(0x0083e0), Color(aColorStops[0].getStopColor())); - CPPUNIT_ASSERT(basegfx::fTools::equal(aColorStops[1].getStopOffset(), 1.0)); - CPPUNIT_ASSERT_EQUAL(Color(0xe6e600), Color(aColorStops[1].getStopColor())); + CPPUNIT_ASSERT_EQUAL(0.0, aColorStops.getStopOffset(0)); + CPPUNIT_ASSERT_EQUAL(Color(0x0083e0), Color(aColorStops.getStopColor(0))); + CPPUNIT_ASSERT(basegfx::fTools::equal(aColorStops.getStopOffset(1), 1.0)); + CPPUNIT_ASSERT_EQUAL(Color(0xe6e600), Color(aColorStops.getStopColor(1))); CPPUNIT_ASSERT_EQUAL(awt::GradientStyle_RADIAL, aGradient.Style); CPPUNIT_ASSERT_EQUAL(sal_Int16(50), aGradient.XOffset); @@ -875,10 +875,10 @@ CPPUNIT_TEST_FIXTURE(OoxShapeTest, testImportWordArtGradient) // Transparency is encoded in gray color. CPPUNIT_ASSERT_EQUAL(size_t(2), aColorStops.size()); - CPPUNIT_ASSERT_EQUAL(0.0, aColorStops[0].getStopOffset()); - CPPUNIT_ASSERT_EQUAL(COL_GRAY7, Color(aColorStops[0].getStopColor())); - CPPUNIT_ASSERT(basegfx::fTools::equal(aColorStops[1].getStopOffset(), 1.0)); - CPPUNIT_ASSERT_EQUAL(Color(0x4d4d4d), Color(aColorStops[1].getStopColor())); + CPPUNIT_ASSERT_EQUAL(0.0, aColorStops.getStopOffset(0)); + CPPUNIT_ASSERT_EQUAL(COL_GRAY7, Color(aColorStops.getStopColor(0))); + CPPUNIT_ASSERT(basegfx::fTools::equal(aColorStops.getStopOffset(1), 1.0)); + CPPUNIT_ASSERT_EQUAL(Color(0x4d4d4d), Color(aColorStops.getStopColor(1))); CPPUNIT_ASSERT_EQUAL(awt::GradientStyle_RADIAL, aGradient.Style); CPPUNIT_ASSERT_EQUAL(sal_Int16(50), aGradient.XOffset); @@ -912,10 +912,10 @@ CPPUNIT_TEST_FIXTURE(OoxShapeTest, testImportWordArtGradient) aColorStops = model::gradient::getColorStopsFromUno(aGradient.ColorStops); CPPUNIT_ASSERT_EQUAL(size_t(2), aColorStops.size()); - CPPUNIT_ASSERT_EQUAL(0.0, aColorStops[0].getStopOffset()); - CPPUNIT_ASSERT_EQUAL(Color(0x4472c4), Color(aColorStops[0].getStopColor())); - CPPUNIT_ASSERT(basegfx::fTools::equal(aColorStops[1].getStopOffset(), 1.0)); - CPPUNIT_ASSERT_EQUAL(Color(0x4472c4), Color(aColorStops[1].getStopColor())); + CPPUNIT_ASSERT_EQUAL(0.0, aColorStops.getStopOffset(0)); + CPPUNIT_ASSERT_EQUAL(Color(0x4472c4), Color(aColorStops.getStopColor(0))); + CPPUNIT_ASSERT(basegfx::fTools::equal(aColorStops.getStopOffset(1), 1.0)); + CPPUNIT_ASSERT_EQUAL(Color(0x4472c4), Color(aColorStops.getStopColor(1))); CPPUNIT_ASSERT_EQUAL(awt::GradientStyle_RECT, aGradient.Style); CPPUNIT_ASSERT_EQUAL(sal_Int16(100), aGradient.XOffset); @@ -927,10 +927,10 @@ CPPUNIT_TEST_FIXTURE(OoxShapeTest, testImportWordArtGradient) // Transparency is encoded in gray color. CPPUNIT_ASSERT_EQUAL(size_t(2), aColorStops.size()); - CPPUNIT_ASSERT_EQUAL(0.0, aColorStops[0].getStopOffset()); - CPPUNIT_ASSERT_EQUAL(COL_BLACK, Color(aColorStops[0].getStopColor())); - CPPUNIT_ASSERT(basegfx::fTools::equal(aColorStops[1].getStopOffset(), 1.0)); - CPPUNIT_ASSERT_EQUAL(COL_WHITE, Color(aColorStops[1].getStopColor())); + CPPUNIT_ASSERT_EQUAL(0.0, aColorStops.getStopOffset(0)); + CPPUNIT_ASSERT_EQUAL(COL_BLACK, Color(aColorStops.getStopColor(0))); + CPPUNIT_ASSERT(basegfx::fTools::equal(aColorStops.getStopOffset(1), 1.0)); + CPPUNIT_ASSERT_EQUAL(COL_WHITE, Color(aColorStops.getStopColor(1))); CPPUNIT_ASSERT_EQUAL(awt::GradientStyle_RECT, aGradient.Style); CPPUNIT_ASSERT_EQUAL(sal_Int16(100), aGradient.XOffset); diff --git a/oox/source/drawingml/fillproperties.cxx b/oox/source/drawingml/fillproperties.cxx index c2f24160f305..fbf6ded12b85 100644 --- a/oox/source/drawingml/fillproperties.cxx +++ b/oox/source/drawingml/fillproperties.cxx @@ -477,7 +477,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(); } @@ -487,7 +487,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/sc/qa/unit/subsequent_filters_test3.cxx b/sc/qa/unit/subsequent_filters_test3.cxx index fb5343932ac7..dd6733e8c90a 100644 --- a/sc/qa/unit/subsequent_filters_test3.cxx +++ b/sc/qa/unit/subsequent_filters_test3.cxx @@ -1928,10 +1928,10 @@ CPPUNIT_TEST_FIXTURE(ScFiltersTest3, testTdf129789) const basegfx::BColorStops& rColorStops(rGradientItem.GetGradientValue().GetColorStops()); CPPUNIT_ASSERT_EQUAL(size_t(2), rColorStops.size()); - CPPUNIT_ASSERT_EQUAL(0.0, rColorStops[0].getStopOffset()); - CPPUNIT_ASSERT_EQUAL(Color(0xdde8cb), Color(rColorStops[0].getStopColor())); - CPPUNIT_ASSERT(basegfx::fTools::equal(rColorStops[1].getStopOffset(), 1.0)); - CPPUNIT_ASSERT_EQUAL(Color(0xffd7d7), Color(rColorStops[1].getStopColor())); + CPPUNIT_ASSERT_EQUAL(0.0, rColorStops.getStopOffset(0)); + CPPUNIT_ASSERT_EQUAL(Color(0xdde8cb), Color(rColorStops.getStopColor(0))); + CPPUNIT_ASSERT(basegfx::fTools::equal(rColorStops.getStopOffset(1), 1.0)); + CPPUNIT_ASSERT_EQUAL(Color(0xffd7d7), Color(rColorStops.getStopColor(1))); SdrCaptionObj* const pCaptionH9 = checkCaption(*pDoc, ScAddress(7, 8, 0), false); @@ -1942,10 +1942,10 @@ CPPUNIT_TEST_FIXTURE(ScFiltersTest3, testTdf129789) const basegfx::BColorStops& rColorStops2(rGradientItem2.GetGradientValue().GetColorStops()); CPPUNIT_ASSERT_EQUAL(size_t(2), rColorStops2.size()); - CPPUNIT_ASSERT_EQUAL(0.0, rColorStops2[0].getStopOffset()); - CPPUNIT_ASSERT_EQUAL(Color(0xdde8cb), Color(rColorStops2[0].getStopColor())); - CPPUNIT_ASSERT(basegfx::fTools::equal(rColorStops2[1].getStopOffset(), 1.0)); - CPPUNIT_ASSERT_EQUAL(Color(0xffd7d7), Color(rColorStops2[1].getStopColor())); + CPPUNIT_ASSERT_EQUAL(0.0, rColorStops2.getStopOffset(0)); + CPPUNIT_ASSERT_EQUAL(Color(0xdde8cb), Color(rColorStops2.getStopColor(0))); + CPPUNIT_ASSERT(basegfx::fTools::equal(rColorStops2.getStopOffset(1), 1.0)); + CPPUNIT_ASSERT_EQUAL(Color(0xffd7d7), Color(rColorStops2.getStopColor(1))); } { diff --git a/sd/qa/unit/export-tests-ooxml1.cxx b/sd/qa/unit/export-tests-ooxml1.cxx index 4d6ff232b5f7..a95647297378 100644 --- a/sd/qa/unit/export-tests-ooxml1.cxx +++ b/sd/qa/unit/export-tests-ooxml1.cxx @@ -1264,12 +1264,12 @@ CPPUNIT_TEST_FIXTURE(SdOOXMLExportTest1, testTdf94238) // 'Expected: 0, Actual : 10592673', i.e. the start color of the gradient // was incorrect. CPPUNIT_ASSERT_EQUAL(size_t(3), aColorStops.size()); - CPPUNIT_ASSERT_EQUAL(0.0, aColorStops[0].getStopOffset()); - CPPUNIT_ASSERT_EQUAL(COL_BLACK, Color(aColorStops[0].getStopColor())); - CPPUNIT_ASSERT(basegfx::fTools::equal(aColorStops[1].getStopOffset(), 0.39000000000000001)); - CPPUNIT_ASSERT_EQUAL(COL_BLACK, Color(aColorStops[1].getStopColor())); - CPPUNIT_ASSERT(basegfx::fTools::equal(aColorStops[2].getStopOffset(), 1.0)); - CPPUNIT_ASSERT_EQUAL(Color(0x8b8b8b), Color(aColorStops[2].getStopColor())); + CPPUNIT_ASSERT_EQUAL(0.0, aColorStops.getStopOffset(0)); + CPPUNIT_ASSERT_EQUAL(COL_BLACK, Color(aColorStops.getStopColor(0))); + CPPUNIT_ASSERT(basegfx::fTools::equal(aColorStops.getStopOffset(1), 0.39000000000000001)); + CPPUNIT_ASSERT_EQUAL(COL_BLACK, Color(aColorStops.getStopColor(1))); + CPPUNIT_ASSERT(basegfx::fTools::equal(aColorStops.getStopOffset(2), 1.0)); + CPPUNIT_ASSERT_EQUAL(Color(0x8b8b8b), Color(aColorStops.getStopColor(2))); } CPPUNIT_TEST_FIXTURE(SdOOXMLExportTest1, testPictureTransparency) @@ -1523,12 +1523,12 @@ CPPUNIT_TEST_FIXTURE(SdOOXMLExportTest1, testTdf128345GradientAxial) = model::gradient::getColorStopsFromUno(aTransparenceGradient.ColorStops); CPPUNIT_ASSERT_EQUAL(size_t(3), aColorStops.size()); - CPPUNIT_ASSERT_EQUAL(0.0, aColorStops[0].getStopOffset()); - CPPUNIT_ASSERT_EQUAL(COL_WHITE, Color(aColorStops[0].getStopColor())); - CPPUNIT_ASSERT(basegfx::fTools::equal(aColorStops[1].getStopOffset(), 0.5)); - CPPUNIT_ASSERT_EQUAL(COL_BLACK, Color(aColorStops[1].getStopColor())); - CPPUNIT_ASSERT(basegfx::fTools::equal(aColorStops[2].getStopOffset(), 1.0)); - CPPUNIT_ASSERT_EQUAL(COL_WHITE, Color(aColorStops[2].getStopColor())); + CPPUNIT_ASSERT_EQUAL(0.0, aColorStops.getStopOffset(0)); + CPPUNIT_ASSERT_EQUAL(COL_WHITE, Color(aColorStops.getStopColor(0))); + CPPUNIT_ASSERT(basegfx::fTools::equal(aColorStops.getStopOffset(1), 0.5)); + CPPUNIT_ASSERT_EQUAL(COL_BLACK, Color(aColorStops.getStopColor(1))); + CPPUNIT_ASSERT(basegfx::fTools::equal(aColorStops.getStopOffset(2), 1.0)); + CPPUNIT_ASSERT_EQUAL(COL_WHITE, Color(aColorStops.getStopColor(2))); CPPUNIT_ASSERT_EQUAL(awt::GradientStyle_LINEAR, aTransparenceGradient.Style); } diff --git a/sd/qa/unit/export-tests-ooxml2.cxx b/sd/qa/unit/export-tests-ooxml2.cxx index 9678eabb27ee..d009c43cde0f 100644 --- a/sd/qa/unit/export-tests-ooxml2.cxx +++ b/sd/qa/unit/export-tests-ooxml2.cxx @@ -1021,10 +1021,10 @@ CPPUNIT_TEST_FIXTURE(SdOOXMLExportTest2, testTdf105739) = model::gradient::getColorStopsFromUno(aFillGradient.ColorStops); CPPUNIT_ASSERT_EQUAL(size_t(2), aColorStops.size()); - CPPUNIT_ASSERT_EQUAL(0.0, aColorStops[0].getStopOffset()); - CPPUNIT_ASSERT_EQUAL(COL_LIGHTRED, Color(aColorStops[0].getStopColor())); - CPPUNIT_ASSERT(basegfx::fTools::equal(aColorStops[1].getStopOffset(), 1.0)); - CPPUNIT_ASSERT_EQUAL(Color(0x00b050), Color(aColorStops[1].getStopColor())); + CPPUNIT_ASSERT_EQUAL(0.0, aColorStops.getStopOffset(0)); + CPPUNIT_ASSERT_EQUAL(COL_LIGHTRED, Color(aColorStops.getStopColor(0))); + CPPUNIT_ASSERT(basegfx::fTools::equal(aColorStops.getStopOffset(1), 1.0)); + CPPUNIT_ASSERT_EQUAL(Color(0x00b050), Color(aColorStops.getStopColor(1))); CPPUNIT_ASSERT_EQUAL(int(awt::GradientStyle_LINEAR), static_cast<int>(aFillGradient.Style)); } } diff --git a/sd/qa/unit/export-tests-ooxml4.cxx b/sd/qa/unit/export-tests-ooxml4.cxx index c7719c84da9f..d44afda796b3 100644 --- a/sd/qa/unit/export-tests-ooxml4.cxx +++ b/sd/qa/unit/export-tests-ooxml4.cxx @@ -384,10 +384,10 @@ CPPUNIT_TEST_FIXTURE(SdOOXMLExportTest4, testTdf127372) = model::gradient::getColorStopsFromUno(aTransparenceGradient.ColorStops); CPPUNIT_ASSERT_EQUAL(size_t(2), aColorStops.size()); - CPPUNIT_ASSERT_EQUAL(0.0, aColorStops[0].getStopOffset()); - CPPUNIT_ASSERT_EQUAL(COL_BLACK, Color(aColorStops[0].getStopColor())); - CPPUNIT_ASSERT(basegfx::fTools::equal(aColorStops[1].getStopOffset(), 1.0)); - CPPUNIT_ASSERT_EQUAL(COL_BLACK, Color(aColorStops[1].getStopColor())); + CPPUNIT_ASSERT_EQUAL(0.0, aColorStops.getStopOffset(0)); + CPPUNIT_ASSERT_EQUAL(COL_BLACK, Color(aColorStops.getStopColor(0))); + CPPUNIT_ASSERT(basegfx::fTools::equal(aColorStops.getStopOffset(1), 1.0)); + CPPUNIT_ASSERT_EQUAL(COL_BLACK, Color(aColorStops.getStopColor(1))); } CPPUNIT_TEST_FIXTURE(SdOOXMLExportTest4, testTdf127379) @@ -417,10 +417,10 @@ CPPUNIT_TEST_FIXTURE(SdOOXMLExportTest4, testTdf127379) = model::gradient::getColorStopsFromUno(aGradient.ColorStops); CPPUNIT_ASSERT_EQUAL(size_t(2), aColorStops.size()); - CPPUNIT_ASSERT_EQUAL(0.0, aColorStops[0].getStopOffset()); - CPPUNIT_ASSERT_EQUAL(COL_LIGHTRED, Color(aColorStops[0].getStopColor())); - CPPUNIT_ASSERT(basegfx::fTools::equal(aColorStops[1].getStopOffset(), 1.0)); - CPPUNIT_ASSERT_EQUAL(Color(0x2a6099), Color(aColorStops[1].getStopColor())); + CPPUNIT_ASSERT_EQUAL(0.0, aColorStops.getStopOffset(0)); + CPPUNIT_ASSERT_EQUAL(COL_LIGHTRED, Color(aColorStops.getStopColor(0))); + CPPUNIT_ASSERT(basegfx::fTools::equal(aColorStops.getStopOffset(1), 1.0)); + CPPUNIT_ASSERT_EQUAL(Color(0x2a6099), Color(aColorStops.getStopColor(1))); } CPPUNIT_TEST_FIXTURE(SdOOXMLExportTest4, testTdf98603) diff --git a/sd/qa/unit/misc-tests.cxx b/sd/qa/unit/misc-tests.cxx index d1f70d458810..9da73ca3384d 100644 --- a/sd/qa/unit/misc-tests.cxx +++ b/sd/qa/unit/misc-tests.cxx @@ -370,10 +370,10 @@ void SdMiscTest::testFillGradient() = model::gradient::getColorStopsFromUno(aGradient2.ColorStops); CPPUNIT_ASSERT_EQUAL(size_t(2), aColorStops.size()); - CPPUNIT_ASSERT_EQUAL(0.0, aColorStops[0].getStopOffset()); - CPPUNIT_ASSERT_EQUAL(COL_LIGHTRED, Color(aColorStops[0].getStopColor())); - CPPUNIT_ASSERT(basegfx::fTools::equal(aColorStops[1].getStopOffset(), 1.0)); - CPPUNIT_ASSERT_EQUAL(COL_LIGHTGREEN, Color(aColorStops[1].getStopColor())); + CPPUNIT_ASSERT_EQUAL(0.0, aColorStops.getStopOffset(0)); + CPPUNIT_ASSERT_EQUAL(COL_LIGHTRED, Color(aColorStops.getStopColor(0))); + CPPUNIT_ASSERT(basegfx::fTools::equal(aColorStops.getStopOffset(1), 1.0)); + CPPUNIT_ASSERT_EQUAL(COL_LIGHTGREEN, Color(aColorStops.getStopColor(1))); } void SdMiscTest::testTdf44774() diff --git a/sd/qa/unit/uiimpress.cxx b/sd/qa/unit/uiimpress.cxx index 895c95352e1b..638e367ca2da 100644 --- a/sd/qa/unit/uiimpress.cxx +++ b/sd/qa/unit/uiimpress.cxx @@ -1642,10 +1642,10 @@ CPPUNIT_TEST_FIXTURE(SdUiImpressTest, testPageFillGradient) const basegfx::BColorStops& rColorStops(aGradient.GetColorStops()); CPPUNIT_ASSERT_EQUAL(size_t(2), rColorStops.size()); - CPPUNIT_ASSERT_EQUAL(0.0, rColorStops[0].getStopOffset()); - CPPUNIT_ASSERT_EQUAL(COL_LIGHTRED, Color(rColorStops[0].getStopColor())); - CPPUNIT_ASSERT(basegfx::fTools::equal(rColorStops[1].getStopOffset(), 1.0)); - CPPUNIT_ASSERT_EQUAL(COL_LIGHTBLUE, Color(rColorStops[1].getStopColor())); + CPPUNIT_ASSERT_EQUAL(0.0, rColorStops.getStopOffset(0)); + CPPUNIT_ASSERT_EQUAL(COL_LIGHTRED, Color(rColorStops.getStopColor(0))); + CPPUNIT_ASSERT(basegfx::fTools::equal(rColorStops.getStopOffset(1), 1.0)); + CPPUNIT_ASSERT_EQUAL(COL_LIGHTBLUE, Color(rColorStops.getStopColor(1))); } CPPUNIT_TEST_FIXTURE(SdUiImpressTest, testTdf134053) diff --git a/sd/source/ui/sidebar/SlideBackground.cxx b/sd/source/ui/sidebar/SlideBackground.cxx index 3a15e0f178f5..ec3592b4ba93 100644 --- a/sd/source/ui/sidebar/SlideBackground.cxx +++ b/sd/source/ui/sidebar/SlideBackground.cxx @@ -1299,8 +1299,8 @@ basegfx::BColorStops SlideBackground::createColorStops() } else { - aColorStops.emplace_back(0.0, mxFillGrad1->GetSelectEntryColor().getBColor()); - aColorStops.emplace_back(1.0, mxFillGrad2->GetSelectEntryColor().getBColor()); + aColorStops.addStop(0.0, mxFillGrad1->GetSelectEntryColor().getBColor()); + aColorStops.addStop(1.0, mxFillGrad2->GetSelectEntryColor().getBColor()); } return aColorStops; diff --git a/svx/source/sidebar/area/AreaPropertyPanelBase.cxx b/svx/source/sidebar/area/AreaPropertyPanelBase.cxx index 700fa2650ca4..1cc38dcf4f55 100644 --- a/svx/source/sidebar/area/AreaPropertyPanelBase.cxx +++ b/svx/source/sidebar/area/AreaPropertyPanelBase.cxx @@ -1376,15 +1376,13 @@ basegfx::BColorStops AreaPropertyPanelBase::createColorStops() 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()); + 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()); + aColorStops.addStop(0.0, mxLbFillGradFrom->GetSelectEntryColor().getBColor()); + aColorStops.addStop(1.0, mxLbFillGradTo->GetSelectEntryColor().getBColor()); } return aColorStops; diff --git a/svx/source/sidebar/area/AreaTransparencyGradientPopup.cxx b/svx/source/sidebar/area/AreaTransparencyGradientPopup.cxx index 4b5ed0eda076..d734d1062850 100644 --- a/svx/source/sidebar/area/AreaTransparencyGradientPopup.cxx +++ b/svx/source/sidebar/area/AreaTransparencyGradientPopup.cxx @@ -142,13 +142,13 @@ void AreaTransparencyGradientPopup::ExecuteValueModify() if (maColorStops.size() >= 2) { aColorStops = maColorStops; - aColorStops.front() = basegfx::BColorStop(maColorStops.front().getStopOffset(), aStartBColor); + 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.addStop(0.0, aStartBColor); + aColorStops.addStop(1.0, aEndBColor); } basegfx::BGradient aTmpGradient( diff --git a/sw/qa/extras/odfexport/odfexport.cxx b/sw/qa/extras/odfexport/odfexport.cxx index bbfbd3e1b505..196984dadded 100644 --- a/sw/qa/extras/odfexport/odfexport.cxx +++ b/sw/qa/extras/odfexport/odfexport.cxx @@ -797,10 +797,10 @@ DECLARE_ODFEXPORT_TEST(testTextframeGradient, "textframe-gradient.odt") basegfx::BColorStops aColorStops = model::gradient::getColorStopsFromUno(aGradient.ColorStops); CPPUNIT_ASSERT_EQUAL(size_t(2), aColorStops.size()); - CPPUNIT_ASSERT_EQUAL(0.0, aColorStops[0].getStopOffset()); - CPPUNIT_ASSERT_EQUAL(Color(0xc0504d), Color(aColorStops[0].getStopColor())); - CPPUNIT_ASSERT(basegfx::fTools::equal(aColorStops[1].getStopOffset(), 1.0)); - CPPUNIT_ASSERT_EQUAL(Color(0xd99594), Color(aColorStops[1].getStopColor())); + CPPUNIT_ASSERT_EQUAL(0.0, aColorStops.getStopOffset(0)); + CPPUNIT_ASSERT_EQUAL(Color(0xc0504d), Color(aColorStops.getStopColor(0))); + CPPUNIT_ASSERT(basegfx::fTools::equal(aColorStops.getStopOffset(1), 1.0)); + CPPUNIT_ASSERT_EQUAL(Color(0xd99594), Color(aColorStops.getStopColor(1))); CPPUNIT_ASSERT_EQUAL(awt::GradientStyle_AXIAL, aGradient.Style); xFrame.set(xIndexAccess->getByIndex(1), uno::UNO_QUERY); @@ -811,10 +811,10 @@ DECLARE_ODFEXPORT_TEST(testTextframeGradient, "textframe-gradient.odt") aColorStops = model::gradient::getColorStopsFromUno(aGradient.ColorStops); CPPUNIT_ASSERT_EQUAL(size_t(2), aColorStops.size()); - CPPUNIT_ASSERT_EQUAL(0.0, aColorStops[0].getStopOffset()); - CPPUNIT_ASSERT_EQUAL(COL_BLACK, Color(aColorStops[0].getStopColor())); - CPPUNIT_ASSERT(basegfx::fTools::equal(aColorStops[1].getStopOffset(), 1.0)); - CPPUNIT_ASSERT_EQUAL(COL_GRAY7, Color(aColorStops[1].getStopColor())); + CPPUNIT_ASSERT_EQUAL(0.0, aColorStops.getStopOffset(0)); + CPPUNIT_ASSERT_EQUAL(COL_BLACK, Color(aColorStops.getStopColor(0))); + CPPUNIT_ASSERT(basegfx::fTools::equal(aColorStops.getStopOffset(1), 1.0)); + CPPUNIT_ASSERT_EQUAL(COL_GRAY7, Color(aColorStops.getStopColor(1))); CPPUNIT_ASSERT_EQUAL(awt::GradientStyle_AXIAL, aGradient.Style); } diff --git a/sw/qa/extras/ooxmlexport/ooxmlexport7.cxx b/sw/qa/extras/ooxmlexport/ooxmlexport7.cxx index 8f398e06a4b1..73c82a4aa32d 100644 --- a/sw/qa/extras/ooxmlexport/ooxmlexport7.cxx +++ b/sw/qa/extras/ooxmlexport/ooxmlexport7.cxx @@ -656,10 +656,10 @@ DECLARE_OOXMLEXPORT_TEST(testTdf77219_backgroundShape, "tdf77219_backgroundShape basegfx::BColorStops aColorStops = model::gradient::getColorStopsFromUno(aGradient.ColorStops); CPPUNIT_ASSERT_EQUAL(size_t(2), aColorStops.size()); - CPPUNIT_ASSERT_EQUAL(0.0, aColorStops[0].getStopOffset()); - CPPUNIT_ASSERT_EQUAL(Color(0x5f497a), Color(aColorStops[0].getStopColor())); - CPPUNIT_ASSERT(basegfx::fTools::equal(aColorStops[1].getStopOffset(), 1.0)); - CPPUNIT_ASSERT_EQUAL(COL_WHITE, Color(aColorStops[1].getStopColor())); + CPPUNIT_ASSERT_EQUAL(0.0, aColorStops.getStopOffset(0)); + CPPUNIT_ASSERT_EQUAL(Color(0x5f497a), Color(aColorStops.getStopColor(0))); + CPPUNIT_ASSERT(basegfx::fTools::equal(aColorStops.getStopOffset(1), 1.0)); + CPPUNIT_ASSERT_EQUAL(COL_WHITE, Color(aColorStops.getStopColor(1))); CPPUNIT_ASSERT_EQUAL(awt::GradientStyle_LINEAR, aGradient.Style); // without the fix, this was 1350 (visually the colors were reversed) CPPUNIT_ASSERT_EQUAL(sal_Int16(3150), aGradient.Angle); diff --git a/sw/source/filter/ww8/rtfattributeoutput.cxx b/sw/source/filter/ww8/rtfattributeoutput.cxx index aef4f081ca8f..45c30e3a3ac1 100644 --- a/sw/source/filter/ww8/rtfattributeoutput.cxx +++ b/sw/source/filter/ww8/rtfattributeoutput.cxx @@ -4197,7 +4197,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 - aMSOEndColor = Color(rColorStops[1].getStopColor()); + aMSOEndColor = Color(rColorStops.getStopColor(1)); } m_aFlyProperties.push_back(std::make_pair<OString, OString>( diff --git a/vcl/source/filter/svm/SvmReader.cxx b/vcl/source/filter/svm/SvmReader.cxx index 96239da18cbc..cf1ca8491629 100644 --- a/vcl/source/filter/svm/SvmReader.cxx +++ b/vcl/source/filter/svm/SvmReader.cxx @@ -1158,7 +1158,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)); } }
