summaryrefslogtreecommitdiff
path: root/drawinglayer/source
diff options
context:
space:
mode:
Diffstat (limited to 'drawinglayer/source')
-rw-r--r--drawinglayer/source/processor2d/vclpixelprocessor2d.cxx10
-rw-r--r--drawinglayer/source/processor2d/vclprocessor2d.cxx10
2 files changed, 20 insertions, 0 deletions
diff --git a/drawinglayer/source/processor2d/vclpixelprocessor2d.cxx b/drawinglayer/source/processor2d/vclpixelprocessor2d.cxx
index 03012fb5d35a..db65dc3de4bb 100644
--- a/drawinglayer/source/processor2d/vclpixelprocessor2d.cxx
+++ b/drawinglayer/source/processor2d/vclpixelprocessor2d.cxx
@@ -140,6 +140,16 @@ namespace drawinglayer
mpOutputDevice->SetLineColor(Color(aLineColor));
//aLocalPolygon.transform(maCurrentTransformation);
+ if (getOptionsDrawinglayer().IsAntiAliasing() && getOptionsDrawinglayer().IsSnapHorVerLinesToDiscrete())
+ {
+ if (basegfx::utils::containsOnlyHorizontalOrVerticalLines(rLocalPolygon))
+ {
+ // DrawPolyLineDirect() only works in AA mode, but pure horizontal or vertical
+ // lines are better with AA off.
+ return false;
+ }
+ }
+
// try drawing; if it did not work, use standard fallback
return mpOutputDevice->DrawPolyLineDirect(
maCurrentTransformation,
diff --git a/drawinglayer/source/processor2d/vclprocessor2d.cxx b/drawinglayer/source/processor2d/vclprocessor2d.cxx
index 361f7a5bd5a3..335e30a56ce9 100644
--- a/drawinglayer/source/processor2d/vclprocessor2d.cxx
+++ b/drawinglayer/source/processor2d/vclprocessor2d.cxx
@@ -331,6 +331,7 @@ namespace drawinglayer
basegfx::B2DPolygon aLocalPolygon(rPolygonCandidate.getB2DPolygon());
aLocalPolygon.transform(maCurrentTransformation);
+ bool bDisableAA = false;
if(bPixelBased && getOptionsDrawinglayer().IsAntiAliasing() && getOptionsDrawinglayer().IsSnapHorVerLinesToDiscrete())
{
// #i98289#
@@ -339,9 +340,18 @@ namespace drawinglayer
// not-AntiAliased such lines look more pleasing to the eye (e.g. 2D chart content). This
// NEEDS to be done in discrete coordinates, so only useful for pixel based rendering.
aLocalPolygon = basegfx::utils::snapPointsOfHorizontalOrVerticalEdges(aLocalPolygon);
+
+ // Also disable AA, snap would leave the start/end of lines still anti-aliased when
+ // their coordinates are provided in logic units.
+ bDisableAA = basegfx::utils::containsOnlyHorizontalOrVerticalLines(aLocalPolygon);
}
+ const AntialiasingFlags nOriginalAA(mpOutputDevice->GetAntialiasing());
+ if (bDisableAA && (nOriginalAA & AntialiasingFlags::EnableB2dDraw))
+ mpOutputDevice->SetAntialiasing(nOriginalAA & ~AntialiasingFlags::EnableB2dDraw);
mpOutputDevice->DrawPolyLine(aLocalPolygon, 0.0);
+ if (bDisableAA && (nOriginalAA & AntialiasingFlags::EnableB2dDraw))
+ mpOutputDevice->SetAntialiasing(mpOutputDevice->GetAntialiasing() | AntialiasingFlags::EnableB2dDraw);
}
// direct draw of transformed BitmapEx primitive