make fat valueset selection rectangles solid
as used in writer's bullets and numbering valuesets
Change-Id: I4ac028fa9ef71163f29024352bb4fb7aeef0865a
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/124273
Tested-by: Jenkins
Reviewed-by: Caolán McNamara <caolanm@redhat.com>
diff --git a/svtools/source/control/valueset.cxx b/svtools/source/control/valueset.cxx
index 13f2abf..0a73e04 100644
--- a/svtools/source/control/valueset.cxx
+++ b/svtools/source/control/valueset.cxx
@@ -20,8 +20,11 @@
#include <sal/config.h>
#include <o3tl/safeint.hxx>
#include <basegfx/matrix/b2dhommatrix.hxx>
#include <basegfx/polygon/b2dpolygontools.hxx>
#include <tools/debug.hxx>
#include <comphelper/base64.hxx>
#include <vcl/canvastools.hxx>
#include <vcl/decoview.hxx>
#include <vcl/event.hxx>
#include <vcl/svapp.hxx>
@@ -1272,68 +1275,93 @@ void ValueSet::ImplDrawSelect(vcl::RenderContext& rRenderContext,
}
else
{
if (bDrawSel)
{
rRenderContext.SetLineColor(aDoubleColor);
tools::PolyPolygon aPolyPoly(1);
aPolyPoly.Insert(aRect);
rRenderContext.DrawTransparent(aPolyPoly, nTransparencePercent);
}
if (mbDoubleSel)
{
aRect.AdjustLeft( 1 );
aRect.AdjustTop( 1 );
aRect.AdjustRight( -1 );
aRect.AdjustBottom( -1 );
if (bDrawSel)
{
tools::PolyPolygon aPolyPoly(1);
aPolyPoly.Insert(aRect);
rRenderContext.DrawTransparent(aPolyPoly, nTransparencePercent);
}
}
aRect.AdjustLeft( 1 );
aRect.AdjustTop( 1 );
aRect.AdjustRight( -1 );
aRect.AdjustBottom( -1 );
tools::Rectangle aRect2 = aRect;
aRect.AdjustLeft( 1 );
aRect.AdjustTop( 1 );
aRect.AdjustRight( -1 );
aRect.AdjustBottom( -1 );
if (bDrawSel)
{
tools::PolyPolygon aPolyPoly(1);
aPolyPoly.Insert(aRect);
rRenderContext.DrawTransparent(aPolyPoly, nTransparencePercent);
}
if (mbDoubleSel)
{
aRect.AdjustLeft( 1 );
aRect.AdjustTop( 1 );
aRect.AdjustRight( -1 );
aRect.AdjustBottom( -1 );
if (bDrawSel)
{
tools::PolyPolygon aPolyPoly(1);
aPolyPoly.Insert(aRect);
rRenderContext.DrawTransparent(aPolyPoly, nTransparencePercent);
}
}
rRenderContext.SetLineColor(aDoubleColor);
tools::Rectangle aFocusRect;
if (bDrawSel)
if (!mbDoubleSel)
{
rRenderContext.SetLineColor(aSingleColor);
// an outer rectangle surrounding a "focus" rectangle, surrounding
// an inner rectangle. Focus rectangle is always drawn, but rendered
// empty when there is no focus. e.g. as seen in color valuesets
if (bDrawSel)
{
tools::PolyPolygon aPolyPoly(1);
aPolyPoly.Insert(aRect);
rRenderContext.DrawTransparent(aPolyPoly, nTransparencePercent);
}
aRect.AdjustLeft( 1 );
aRect.AdjustTop( 1 );
aRect.AdjustRight( -1 );
aRect.AdjustBottom( -1 );
aFocusRect = aRect;
aRect.AdjustLeft( 1 );
aRect.AdjustTop( 1 );
aRect.AdjustRight( -1 );
aRect.AdjustBottom( -1 );
if (bDrawSel)
{
tools::PolyPolygon aPolyPoly(1);
aPolyPoly.Insert(aRect);
rRenderContext.DrawTransparent(aPolyPoly, nTransparencePercent);
}
if (bDrawSel)
rRenderContext.SetLineColor(aSingleColor);
else
rRenderContext.SetLineColor(COL_LIGHTGRAY);
rRenderContext.DrawRect(aFocusRect);
}
else
{
rRenderContext.SetLineColor(COL_LIGHTGRAY);
// a thick bordered rectangle surrounding an optional "focus"
// rectangle which is only drawn when focused, as seen in format,
// bullets and numbering in writer
const int nAdjust = 2;
aRect.AdjustLeft(nAdjust);
aRect.AdjustTop(nAdjust);
aRect.AdjustRight(-nAdjust);
aRect.AdjustBottom(-nAdjust);
aFocusRect = aRect;
if (bDrawSel)
{
const basegfx::B2DPolygon aRectPoly(
basegfx::utils::createPolygonFromRect(
vcl::unotools::b2DRectangleFromRectangle(aRect)));
const int nThickness = nAdjust * 2;
if (!rRenderContext.DrawPolyLineDirect(basegfx::B2DHomMatrix(),
aRectPoly,
nThickness,
nTransparencePercent / 100.0,
nullptr,
basegfx::B2DLineJoin::Miter))
{
SAL_WARN("svtools", "presumably impossible in practice, but fallback to see something");
rRenderContext.DrawPolyLine(aRectPoly, nThickness, basegfx::B2DLineJoin::Miter);
}
}
if (bFocus)
{
if (bDrawSel)
rRenderContext.SetLineColor(aSingleColor);
else
rRenderContext.SetLineColor(COL_LIGHTGRAY);
rRenderContext.DrawRect(aFocusRect);
}
}
tools::PolyPolygon aPolyPoly(1);
aPolyPoly.Insert(aRect2);
rRenderContext.DrawTransparent(aPolyPoly, nTransparencePercent);
if (bFocus)
InvertFocusRect(rRenderContext, aRect2);
InvertFocusRect(rRenderContext, aFocusRect);
}
ImplDrawItemText(rRenderContext, pItem->maText);