include/svx/svdobj.hxx | 3 ++- sd/source/ui/view/sdview.cxx | 24 ++++++++++++++++++++---- svx/source/svdraw/svdotextdecomposition.cxx | 4 +++- 3 files changed, 25 insertions(+), 6 deletions(-)
New commits: commit 000a05339b4d7d25aea063a16b7a01ca9080978f Author: Caolán McNamara <caol...@redhat.com> AuthorDate: Tue Nov 8 11:33:38 2022 +0000 Commit: Caolán McNamara <caol...@redhat.com> CommitDate: Tue Nov 8 14:52:43 2022 +0100 Resolves: tdf#148140 get text auto color right in impress edit mode Change-Id: I2695c86e9b749a4c38920af6d33e8e89f8ea3c62 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/142426 Tested-by: Jenkins Reviewed-by: Caolán McNamara <caol...@redhat.com> diff --git a/include/svx/svdobj.hxx b/include/svx/svdobj.hxx index a251d8ddac33..3c30c479dc80 100644 --- a/include/svx/svdobj.hxx +++ b/include/svx/svdobj.hxx @@ -880,7 +880,8 @@ public: const css::uno::WeakReference< css::drawing::XShape >& getWeakUnoShape() const { return maWeakUnoShape; } - void setSuitableOutlinerBg(Outliner& rOutliner) const; + // return true if a bg was set, false otherwise + bool setSuitableOutlinerBg(Outliner& rOutliner) const; // If fillstyle is drawing::FillStyle_BITMAP, returns the graphic. const Graphic* getFillGraphic() const; diff --git a/sd/source/ui/view/sdview.cxx b/sd/source/ui/view/sdview.cxx index c92ee1113e3c..3c5d190532fe 100644 --- a/sd/source/ui/view/sdview.cxx +++ b/sd/source/ui/view/sdview.cxx @@ -449,6 +449,20 @@ void ViewRedirector::createRedirectedPrimitive2DSequence( } } +namespace +{ + void setOutlinerBgFromPage(::Outliner& rOutl, SdrPageView& rPgView, bool bScreenDisplay) + { + SdPage* pPage = static_cast<SdPage*>(rPgView.GetPage()); + if (pPage) + { + // #i75566# Name change GetBackgroundColor -> GetPageBackgroundColor and + // hint value if screen display. Only then the AutoColor mechanisms shall be applied + rOutl.SetBackgroundColor(pPage->GetPageBackgroundColor(&rPgView, bScreenDisplay)); + } + } +} + /** * The event will be forwarded to the View */ @@ -476,9 +490,7 @@ void View::CompleteRedraw(OutputDevice* pOutDev, const vcl::Region& rReg, sdr::c || (OUTDEV_PDF == pOutDev->GetOutDevType()))) bScreenDisplay = false; - // #i75566# Name change GetBackgroundColor -> GetPageBackgroundColor and - // hint value if screen display. Only then the AutoColor mechanisms shall be applied - rOutl.SetBackgroundColor( pPage->GetPageBackgroundColor(pPgView, bScreenDisplay) ); + setOutlinerBgFromPage(rOutl, *pPgView, bScreenDisplay); } } @@ -724,7 +736,11 @@ bool View::SdrBeginTextEdit( } else { - pObj->setSuitableOutlinerBg(*pOL); + // tdf#148140 Set the background to determine autocolor. + // Use any explicit bg with fallback to underlying page if + // none found + if (!pObj->setSuitableOutlinerBg(*pOL) && pPV) + setOutlinerBgFromPage(*pOL, *pPV, true); } } diff --git a/svx/source/svdraw/svdotextdecomposition.cxx b/svx/source/svdraw/svdotextdecomposition.cxx index 5d7389fe83db..e526c44edc68 100644 --- a/svx/source/svdraw/svdotextdecomposition.cxx +++ b/svx/source/svdraw/svdotextdecomposition.cxx @@ -875,7 +875,7 @@ void SdrTextObj::impDecomposeAutoFitTextPrimitive( // Resolves: fdo#35779 set background color of this shape as the editeng background if there // is one. Check the shape itself, then the host page, then that page's master page. -void SdrObject::setSuitableOutlinerBg(::Outliner& rOutliner) const +bool SdrObject::setSuitableOutlinerBg(::Outliner& rOutliner) const { const SfxItemSet* pBackgroundFillSet = getBackgroundFillSet(); if (drawing::FillStyle_NONE != pBackgroundFillSet->Get(XATTR_FILLSTYLE).GetValue()) @@ -883,7 +883,9 @@ void SdrObject::setSuitableOutlinerBg(::Outliner& rOutliner) const Color aColor(rOutliner.GetBackgroundColor()); GetDraftFillColor(*pBackgroundFillSet, aColor); rOutliner.SetBackgroundColor(aColor); + return true; } + return false; } const SfxItemSet* SdrObject::getBackgroundFillSet() const