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.mehrbrodt@allotropia.de>
Reviewed-by: Samuel Mehrbrodt <samuel.mehrbrodt@allotropia.de>
diff --git a/sc/source/core/data/column3.cxx b/sc/source/core/data/column3.cxx
index 2408323..def3e6a 100644
--- a/sc/source/core/data/column3.cxx
+++ b/sc/source/core/data/column3.cxx
@@ -2436,9 +2436,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)
@@ -2450,8 +2453,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
        }
        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 a0d62f6..97d761f 100644
--- a/sc/source/core/data/table3.cxx
+++ b/sc/source/core/data/table3.cxx
@@ -2738,9 +2738,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++)