summaryrefslogtreecommitdiff
path: root/cui/source/tabpages/tpgradnt.cxx
diff options
context:
space:
mode:
authorRegina Henschel <rb.henschel@t-online.de>2023-06-21 15:01:20 +0200
committerRegina Henschel <rb.henschel@t-online.de>2023-06-23 10:54:24 +0200
commitbb19bda1dc620f0f8662776d9818aedf45486994 (patch)
treeb3642e60db311287a935b54d46fd7b440e2d36f0 /cui/source/tabpages/tpgradnt.cxx
parent8ec8d592e31aebe19075e9f89c4c2c7abcf8d420 (diff)
tdf#155901 MCGR: preserve first and last gradient stop too
Error was, that only the in-between gradient stops were preserve. First stop was set with fixed offset 0, last stop with fixed offset 1. The offsets of first and last gradient stop of the original gradient were lost. Now in all cases (hopefully) the complete gradient stops vector is preserved and the original offset is used, if e.g. the user changes the color. For calculating transparence the indirect way over Color is removed. Instead percent is directly transformed to the 0..1 values of BColor. That avoids rounding errors. Change-Id: Icdf699a6c2e9c6289d2f77033858448e58396a60 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/153395 Tested-by: Jenkins Reviewed-by: Regina Henschel <rb.henschel@t-online.de>
Diffstat (limited to 'cui/source/tabpages/tpgradnt.cxx')
-rw-r--r--cui/source/tabpages/tpgradnt.cxx25
1 files changed, 16 insertions, 9 deletions
diff --git a/cui/source/tabpages/tpgradnt.cxx b/cui/source/tabpages/tpgradnt.cxx
index 7f6630747a42..d3d066236ae1 100644
--- a/cui/source/tabpages/tpgradnt.cxx
+++ b/cui/source/tabpages/tpgradnt.cxx
@@ -548,9 +548,11 @@ void SvxGradientTabPage::ChangeGradientHdl_Impl()
m_xLbColorTo->SetNoSelection();
m_xLbColorTo->SelectEntry(Color(pGradient->GetColorStops().back().getStopColor()));
- // MCGR: preserve in-between ColorStops if given
- if (pGradient->GetColorStops().size() > 2)
- m_aColorStops = basegfx::BColorStops(pGradient->GetColorStops().begin() + 1, pGradient->GetColorStops().end() - 1);
+ // MCGR: preserve ColorStops if given.
+ // tdf#155901 We need offset of first and last stop, so include them.
+ if (pGradient->GetColorStops().size() >= 2)
+ m_aColorStops = basegfx::BColorStops(pGradient->GetColorStops().begin(),
+ pGradient->GetColorStops().end());
else
m_aColorStops.clear();
@@ -641,14 +643,19 @@ basegfx::BColorStops SvxGradientTabPage::createColorStops()
{
basegfx::BColorStops aColorStops;
- aColorStops.emplace_back(0.0, m_xLbColorFrom->GetSelectEntryColor().getBColor());
-
- if(!m_aColorStops.empty())
+ if(m_aColorStops.size() >= 2)
{
- aColorStops.insert(aColorStops.begin(), m_aColorStops.begin(), m_aColorStops.end());
+ aColorStops.emplace_back(m_aColorStops.front().getStopOffset(),
+ m_xLbColorFrom->GetSelectEntryColor().getBColor());
+ aColorStops.insert(aColorStops.begin(), m_aColorStops.begin() + 1, m_aColorStops.end() - 1);
+ aColorStops.emplace_back(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());
}
-
- aColorStops.emplace_back(1.0, m_xLbColorTo->GetSelectEntryColor().getBColor());
return aColorStops;
}