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

Reply via email to