[Libreoffice-commits] core.git: include/vcl vcl/source
Chris Sherlock (via logerrit)
logerrit at kemper.freedesktop.org
Wed Jul 3 10:51:00 UTC 2019
include/vcl/outdev.hxx | 9 ++++++++-
include/vcl/print.hxx | 2 +-
vcl/source/gdi/pdfwriter_impl.hxx | 2 +-
vcl/source/gdi/pdfwriter_impl2.cxx | 5 ++++-
vcl/source/gdi/print.cxx | 5 ++++-
vcl/source/outdev/clipping.cxx | 10 ++++------
6 files changed, 22 insertions(+), 11 deletions(-)
New commits:
commit 58ef52cf3258030860d34f05bc19e2b42d9503c6
Author: Chris Sherlock <chris.sherlock79 at gmail.com>
AuthorDate: Tue Jul 2 04:57:36 2019 +1000
Commit: Tomaž Vajngerl <quikee at gmail.com>
CommitDate: Wed Jul 3 12:49:55 2019 +0200
tdf#74702: OutputDevice:InitClipRegion followup
Followup to commit 3a99d7f621036, which did a good job of removing use
of GetOutDevType() in OutputDevice initialization. Commit changes
ClipRegionIntersectionRectangle() to ClipToDeviceBounds().
ClipRegionIntersectionRectangle() takes a region and clips it, however
it breaks the contract in Printer and PDFWriterImpl where it does a noop
- any caller on these classes will expect the region to be clipped to an
intersecting rectangle.
Instead, I have renamed it to ClipToDeviceBounds(), which is what the
bClipBounds check shows it is doing in the original code. I have made it
return the new clipped region as this seems more logical.
I have also moved the comment to a doxygen comment on the function
signature in OutputDevice.
Change-Id: I64276920bb452839df04c16f0efc3d5581162673
Reviewed-on: https://gerrit.libreoffice.org/74967
Tested-by: Jenkins
Reviewed-by: Adrien Ollier <adr.ollier at hotmail.fr>
Reviewed-by: Tomaž Vajngerl <quikee at gmail.com>
diff --git a/include/vcl/outdev.hxx b/include/vcl/outdev.hxx
index 959a8ccdc036..cf1d5c09c685 100644
--- a/include/vcl/outdev.hxx
+++ b/include/vcl/outdev.hxx
@@ -666,7 +666,14 @@ public:
protected:
virtual void InitClipRegion();
- virtual void ClipRegionIntersectRectangle(vcl::Region&);
+
+ /** Perform actual rect clip against outdev dimensions, to generate
+ empty clips whenever one of the values is completely off the device.
+
+ @param aRegion region to be clipped to the device dimensions
+ @returns region clipped to the device bounds
+ **/
+ virtual vcl::Region ClipToDeviceBounds(vcl::Region aRegion) const;
virtual void ClipToPaintRegion ( tools::Rectangle& rDstRect );
private:
diff --git a/include/vcl/print.hxx b/include/vcl/print.hxx
index 6210acb5bac1..957d97b49a61 100644
--- a/include/vcl/print.hxx
+++ b/include/vcl/print.hxx
@@ -233,7 +233,7 @@ protected:
const tools::PolyPolygon &rPolyPoly ) override;
void ScaleBitmap ( Bitmap&, SalTwoRect& ) override { };
- void ClipRegionIntersectRectangle(vcl::Region&) override;
+ vcl::Region ClipToDeviceBounds(vcl::Region aRegion) const override;
public:
void DrawGradientEx( OutputDevice* pOut, const tools::Rectangle& rRect,
diff --git a/vcl/source/gdi/pdfwriter_impl.hxx b/vcl/source/gdi/pdfwriter_impl.hxx
index c728b16c21f4..50bfa5863a6b 100644
--- a/vcl/source/gdi/pdfwriter_impl.hxx
+++ b/vcl/source/gdi/pdfwriter_impl.hxx
@@ -595,7 +595,7 @@ public:
protected:
void ImplClearFontData(bool bNewFontLists) override;
- void ClipRegionIntersectRectangle(vcl::Region&) override;
+ vcl::Region ClipToDeviceBounds(vcl::Region aRegion) const override;
void DrawHatchLine_DrawLine(const Point& rStartPoint, const Point& rEndPoint) override;
private:
diff --git a/vcl/source/gdi/pdfwriter_impl2.cxx b/vcl/source/gdi/pdfwriter_impl2.cxx
index bf24fd2978dc..63a369c177c9 100644
--- a/vcl/source/gdi/pdfwriter_impl2.cxx
+++ b/vcl/source/gdi/pdfwriter_impl2.cxx
@@ -2030,6 +2030,9 @@ void PDFWriterImpl::ImplClearFontData(bool bNewFontLists)
}
}
-void PDFWriterImpl::ClipRegionIntersectRectangle(vcl::Region&) {}
+vcl::Region PDFWriterImpl::ClipToDeviceBounds(vcl::Region aRegion) const
+{
+ return aRegion;
+}
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/vcl/source/gdi/print.cxx b/vcl/source/gdi/print.cxx
index 8678dc1986b2..24253ca77609 100644
--- a/vcl/source/gdi/print.cxx
+++ b/vcl/source/gdi/print.cxx
@@ -1669,7 +1669,10 @@ void Printer::SetFontOrientation( LogicalFontInstance* const pFontEntry ) const
pFontEntry->mnOrientation = pFontEntry->mxFontMetric->GetOrientation();
}
-void Printer::ClipRegionIntersectRectangle(vcl::Region&) {}
+vcl::Region Printer::ClipToDeviceBounds(vcl::Region aRegion) const
+{
+ return aRegion;
+}
Bitmap Printer::GetBitmap( const Point& rSrcPt, const Size& rSize ) const
{
diff --git a/vcl/source/outdev/clipping.cxx b/vcl/source/outdev/clipping.cxx
index 6e3fa877bc4b..9dad2667bb66 100644
--- a/vcl/source/outdev/clipping.cxx
+++ b/vcl/source/outdev/clipping.cxx
@@ -153,8 +153,7 @@ void OutputDevice::InitClipRegion()
mbOutputClipped = false;
// #102532# Respect output offset also for clip region
- vcl::Region aRegion( ImplPixelToDevicePixel( maRegion ) );
- ClipRegionIntersectRectangle(aRegion);
+ vcl::Region aRegion = ClipToDeviceBounds(ImplPixelToDevicePixel(maRegion));
if ( aRegion.IsEmpty() )
{
@@ -183,15 +182,14 @@ void OutputDevice::InitClipRegion()
mbInitClipRegion = false;
}
-void OutputDevice::ClipRegionIntersectRectangle(vcl::Region& rRegion)
+vcl::Region OutputDevice::ClipToDeviceBounds(vcl::Region aRegion) const
{
- // Perform actual rect clip against outdev dimensions,
- // to generate empty clips whenever one of the values is completely off the device.
- rRegion.Intersect(tools::Rectangle{mnOutOffX,
+ aRegion.Intersect(tools::Rectangle{mnOutOffX,
mnOutOffY,
mnOutOffX + GetOutputWidthPixel() - 1,
mnOutOffY + GetOutputHeightPixel() - 1
});
+ return aRegion;
}
vcl::Region OutputDevice::GetActiveClipRegion() const
More information about the Libreoffice-commits
mailing list