sc/source/core/data/column3.cxx |   14 ++++++++++----
 sc/source/core/data/table3.cxx  |   16 +++++++++++++++-
 2 files changed, 25 insertions(+), 5 deletions(-)

New commits:
commit 2391d8073624004e0cd657ab07ff947f6a9ef0c7
Author:     Samuel Mehrbrodt <samuel.mehrbr...@allotropia.de>
AuthorDate: Tue Aug 31 10:49:51 2021 +0200
Commit:     Xisco Fauli <xiscofa...@libreoffice.org>
CommitDate: Fri Sep 24 14:21:14 2021 +0200

    tdf#142579 Consider cond. format background colors in color filter
    
    In addition to color scale, consider background colors set by a
    conditional style.
    
    Change-Id: I203c4a5ae87aa7b47c2caafcac703b0a0c1a677c
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/121474
    Tested-by: Samuel Mehrbrodt <samuel.mehrbr...@allotropia.de>
    Reviewed-by: Samuel Mehrbrodt <samuel.mehrbr...@allotropia.de>
    Signed-off-by: Xisco Fauli <xiscofa...@libreoffice.org>
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/122467
    Tested-by: Jenkins

diff --git a/sc/source/core/data/column3.cxx b/sc/source/core/data/column3.cxx
index 6532996d7b71..9f9c697e709e 100644
--- a/sc/source/core/data/column3.cxx
+++ b/sc/source/core/data/column3.cxx
@@ -2435,9 +2435,12 @@ class FilterEntriesHandler
         // Colors
         ScAddress aPos(rColumn.GetCol(), nRow, rColumn.GetTab());
 
-        // Text color
+        Color backgroundColor;
+        bool bHasConditionalBackgroundColor = false;
+
         Color textColor;
         bool bHasConditionalTextColor = false;
+        // Check text & background color from cond. formatting
         const ScPatternAttr* pPattern
             = mrColumn.GetDoc().GetPattern(aPos.Col(), aPos.Row(), aPos.Tab());
         if (pPattern)
@@ -2449,8 +2452,13 @@ class FilterEntriesHandler
                 const SvxColorItem* pColor = 
&pPattern->GetItem(ATTR_FONT_COLOR, pCondSet);
                 textColor = pColor->GetValue();
                 bHasConditionalTextColor = true;
+
+                const SvxBrushItem* pBackgroundColor = 
&pPattern->GetItem(ATTR_BACKGROUND, pCondSet);
+                backgroundColor = pBackgroundColor->GetColor();
+                bHasConditionalBackgroundColor = true;
             }
         }
+
         if (!bHasConditionalTextColor)
         {
             const SvxColorItem* pColor = rColumn.GetDoc().GetAttr(aPos, 
ATTR_FONT_COLOR);
@@ -2459,9 +2467,7 @@ class FilterEntriesHandler
         if (textColor != COL_AUTO)
             mrFilterEntries.addTextColor(textColor);
 
-        // Background color
-        Color backgroundColor;
-        bool bHasConditionalBackgroundColor = false;
+        // Color scale needs a different handling
         ScConditionalFormat* pCondFormat
             = rColumn.GetDoc().GetCondFormat(aPos.Col(), aPos.Row(), 
aPos.Tab());
         if (pCondFormat)
diff --git a/sc/source/core/data/table3.cxx b/sc/source/core/data/table3.cxx
index 553223c685e9..554b69b90203 100644
--- a/sc/source/core/data/table3.cxx
+++ b/sc/source/core/data/table3.cxx
@@ -2850,9 +2850,23 @@ public:
     {
         ScAddress aPos(nCol, nRow, nTab);
         Color color;
+
         // Background color can be set via conditional formatting - check that 
first
-        ScConditionalFormat* pCondFormat = mrDoc.GetCondFormat(nCol, nRow, 
nTab);
         bool bHasConditionalColor = false;
+        const ScPatternAttr* pPattern = mrDoc.GetPattern(nCol, nRow, nTab);
+        if (pPattern)
+        {
+            if 
(!pPattern->GetItem(ATTR_CONDITIONAL).GetCondFormatData().empty())
+            {
+                const SfxItemSet* pCondSet
+                    = mrDoc.GetCondResult(nCol, nRow, nTab);
+                const SvxBrushItem* pBackgroundColor = 
&pPattern->GetItem(ATTR_BACKGROUND, pCondSet);
+                color = pBackgroundColor->GetColor();
+                bHasConditionalColor = true;
+            }
+        }
+
+        ScConditionalFormat* pCondFormat = mrDoc.GetCondFormat(nCol, nRow, 
nTab);
         if (pCondFormat)
         {
             for (size_t i = 0; i < pCondFormat->size(); i++)

Reply via email to