tdf#161658 Limit new selection overlay to Calc only

Previous patches [1] and [2] introduced a contrast white line to the selection overlay that was supposed to affect only Calc, but it ended up affecting other areas of LO, such as the star math editor as well as Writer.

This patch makes sure the changes only affect cell selection in Calc.

[1] dc243f0122
[2] 3c0db898092c2cf6148c01f6c561acc199d484f5

Change-Id: Ie910120e4b71c55ad8c00a905e1204e291a711f9
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/169292
Reviewed-by: Rafael Lima <rafael.palma.lima@gmail.com>
Tested-by: Jenkins
This commit is contained in:
Rafael Lima
2024-06-22 14:38:54 +02:00
parent 40e0885130
commit c3e80cbaaa
3 changed files with 38 additions and 26 deletions
+3 -1
View File
@@ -48,6 +48,7 @@ namespace sdr::overlay
sal_uInt16 mnLastTransparence;
bool mbBorder : 1;
bool mbContrastOutline : 1;
// geometry creation for OverlayObject, can use local *Last* values
virtual drawinglayer::primitive2d::Primitive2DContainer createOverlayObjectPrimitive2DSequence() override;
@@ -57,7 +58,8 @@ namespace sdr::overlay
OverlayType eType,
const Color& rColor,
std::vector< basegfx::B2DRange >&& rRanges,
bool bBorder);
bool bBorder,
bool bContrastOutline = false);
virtual ~OverlaySelection() override;
// data read access
+8 -8
View File
@@ -6701,7 +6701,7 @@ void ScGridWindow::UpdateCursorOverlay()
sdr::overlay::OverlayType::Solid,
aCursorColor,
std::move(aRanges),
false));
false, false));
xOverlayManager->add(*pOverlay);
mpOOCursors.reset(new sdr::overlay::OverlayObjectList);
@@ -6790,7 +6790,7 @@ void ScGridWindow::UpdateSelectionOverlay()
sdr::overlay::OverlayType::Transparent,
aHighlight,
std::move(aRanges),
true));
true, true));
xOverlayManager->add(*pOverlay);
mpOOSelection.reset(new sdr::overlay::OverlayObjectList);
@@ -6859,7 +6859,7 @@ void ScGridWindow::UpdateHighlightOverlay()
sdr::overlay::OverlayType::Transparent,
aHighlightColor,
std::move(aRanges),
false));
false, false));
xOverlayManager->add(*pOverlay);
mpOOHighlight.reset(new sdr::overlay::OverlayObjectList);
@@ -6973,7 +6973,7 @@ void ScGridWindow::UpdateAutoFillOverlay()
sdr::overlay::OverlayType::Solid,
aHandleColor,
std::move(aRanges),
false));
false, false));
xOverlayManager->add(*pOverlay);
mpOOAutoFill.reset(new sdr::overlay::OverlayObjectList);
@@ -7119,7 +7119,7 @@ void ScGridWindow::UpdateDragRectOverlay()
sdr::overlay::OverlayType::Invert,
COL_BLACK,
std::move(aRanges),
false));
false, false));
xOverlayManager->add(*pOverlay);
mpOODragRect.reset(new sdr::overlay::OverlayObjectList);
@@ -7195,7 +7195,7 @@ void ScGridWindow::UpdateHeaderOverlay()
sdr::overlay::OverlayType::Invert,
COL_BLACK,
std::move(aRanges),
false));
false, false));
xOverlayManager->add(*pOverlay);
mpOOHeader.reset(new sdr::overlay::OverlayObjectList);
@@ -7265,7 +7265,7 @@ void ScGridWindow::UpdateShrinkOverlay()
sdr::overlay::OverlayType::Invert,
COL_BLACK,
std::move(aRanges),
false));
false, false));
xOverlayManager->add(*pOverlay);
mpOOShrink.reset(new sdr::overlay::OverlayObjectList);
@@ -7330,7 +7330,7 @@ void ScGridWindow::UpdateSparklineGroupOverlay()
std::unique_ptr<sdr::overlay::OverlayObject> pOverlay(new sdr::overlay::OverlaySelection(
sdr::overlay::OverlayType::Transparent,
aColor, std::move(aRanges), true));
aColor, std::move(aRanges), true, false));
xOverlayManager->add(*pOverlay);
mpOOSparklineGroup->append(std::move(pOverlay));
+27 -17
View File
@@ -38,12 +38,17 @@ namespace sdr::overlay
{
// combine ranges geometrically to a single, ORed polygon
static basegfx::B2DPolyPolygon impCombineRangesToPolyPolygon(const std::vector< basegfx::B2DRange >& rRanges)
static basegfx::B2DPolyPolygon impCombineRangesToPolyPolygon(const std::vector< basegfx::B2DRange >& rRanges, bool bOffset)
{
// Determines the offset in twips
Size aSize(1, 1);
aSize = o3tl::convert(aSize, o3tl::Length::px, o3tl::Length::twip);
const sal_Int32 nOffset = aSize.getWidth();
// Determines the offset in twips.
// The offset is only needed if the contrast outline is drawn
sal_Int32 nOffset(0);
if (bOffset)
{
Size aSize(1, 1);
aSize = o3tl::convert(aSize, o3tl::Length::px, o3tl::Length::twip);
nOffset = aSize.getWidth();
}
const sal_uInt32 nCount(rRanges.size());
basegfx::B2DPolyPolygon aRetval;
@@ -168,22 +173,25 @@ namespace sdr::overlay
if(mbBorder)
{
// External outline using themed color
basegfx::B2DPolyPolygon aPolyPolygon(impCombineRangesToPolyPolygon(getRanges()));
basegfx::B2DPolyPolygon aPolyPolygon(impCombineRangesToPolyPolygon(getRanges(), mbContrastOutline));
const drawinglayer::primitive2d::Primitive2DReference aSelectionOutline(
new drawinglayer::primitive2d::PolyPolygonHairlinePrimitive2D(
std::move(aPolyPolygon),
aRGBColor));
// tdf#161204 Outline with white color to provide contrast
basegfx::B2DPolyPolygon aContrastPolyPolygon(impCombineRangesToContrastPolyPolygon(getRanges()));
const drawinglayer::primitive2d::Primitive2DReference aContrastSelectionOutline(
new drawinglayer::primitive2d::PolyPolygonHairlinePrimitive2D(
std::move(aContrastPolyPolygon),
basegfx::BColor(1.0, 1.0, 1.0)));
// add both to result
aRetval = drawinglayer::primitive2d::Primitive2DContainer { aUnifiedTransparence, aSelectionOutline };
aRetval.append(drawinglayer::primitive2d::Primitive2DContainer{aUnifiedTransparence, aContrastSelectionOutline});
aRetval = drawinglayer::primitive2d::Primitive2DContainer {aUnifiedTransparence, aSelectionOutline};
// tdf#161204 Outline with white color to provide contrast
if (mbContrastOutline)
{
basegfx::B2DPolyPolygon aContrastPolyPolygon(impCombineRangesToContrastPolyPolygon(getRanges()));
const drawinglayer::primitive2d::Primitive2DReference aContrastSelectionOutline(
new drawinglayer::primitive2d::PolyPolygonHairlinePrimitive2D(
std::move(aContrastPolyPolygon),
basegfx::BColor(1.0, 1.0, 1.0)));
aRetval.append(drawinglayer::primitive2d::Primitive2DContainer{aContrastSelectionOutline});
}
}
else
{
@@ -200,13 +208,15 @@ namespace sdr::overlay
OverlayType eType,
const Color& rColor,
std::vector< basegfx::B2DRange >&& rRanges,
bool bBorder)
bool bBorder,
bool bContrastOutline)
: OverlayObject(rColor),
meOverlayType(eType),
maRanges(std::move(rRanges)),
maLastOverlayType(eType),
mnLastTransparence(0),
mbBorder(bBorder)
mbBorder(bBorder),
mbContrastOutline(bContrastOutline)
{
// no AA for selection overlays
allowAntiAliase(false);