[Libreoffice-commits] core.git: 8 commits - include/vcl sc/qa svx/source sw/source vcl/source vcl/unx

Caolán McNamara caolanm at redhat.com
Mon Jun 1 09:41:44 PDT 2015


 include/vcl/outdev.hxx                        |    2 
 sc/qa/unit/ucalc.cxx                          |    8 +-
 svx/source/tbxctrls/tbcontrl.cxx              |    8 --
 sw/source/core/unocore/unochart.cxx           |    4 -
 vcl/source/outdev/bitmap.cxx                  |   26 +++---
 vcl/source/outdev/curvedshapes.cxx            |    8 +-
 vcl/source/outdev/gradient.cxx                |   22 +++--
 vcl/source/outdev/hatch.cxx                   |    6 -
 vcl/source/outdev/line.cxx                    |    4 -
 vcl/source/outdev/mask.cxx                    |    8 +-
 vcl/source/outdev/nativecontrols.cxx          |    2 
 vcl/source/outdev/outdevstate.cxx             |   99 ++++++++++----------------
 vcl/source/outdev/pixel.cxx                   |    8 +-
 vcl/source/outdev/polygon.cxx                 |    8 +-
 vcl/source/outdev/polyline.cxx                |    8 +-
 vcl/source/outdev/rect.cxx                    |    8 +-
 vcl/source/outdev/text.cxx                    |   10 +-
 vcl/source/outdev/textline.cxx                |    4 -
 vcl/source/outdev/transparent.cxx             |   10 +-
 vcl/source/outdev/wallpaper.cxx               |   10 +-
 vcl/source/window/splitwin.cxx                |   22 +++++
 vcl/unx/gtk3/gdi/gtk3salnativewidgets-gtk.cxx |   13 +--
 22 files changed, 151 insertions(+), 147 deletions(-)

New commits:
commit 047857759995d4eccec5451db339ebd1f53fd285
Author: Caolán McNamara <caolanm at redhat.com>
Date:   Sun May 31 20:59:24 2015 +0100

    coverity#1302688 Resource leak
    
    Change-Id: I78ed5df0d18da9374092c8d2d4fca43cba0f8a88

diff --git a/sc/qa/unit/ucalc.cxx b/sc/qa/unit/ucalc.cxx
index c16dfb8..7eb21f5 100644
--- a/sc/qa/unit/ucalc.cxx
+++ b/sc/qa/unit/ucalc.cxx
@@ -5931,10 +5931,10 @@ void testDataBarLengthImpl(ScDocument* pDoc, ScDataBarLengthData* pData, const S
 
     for (size_t i = 0; pData[i].nLength != -200; ++i)
     {
-        ScDataBarInfo* pInfo = pDatabar->GetDataBarInfo(ScAddress(nCol, i, 0));
-        CPPUNIT_ASSERT(pInfo);
-        ASSERT_DOUBLES_EQUAL(pData[i].nLength, pInfo->mnLength);
-        ASSERT_DOUBLES_EQUAL(nZeroPos, pInfo->mnZero);
+        std::unique_ptr<ScDataBarInfo> xInfo(pDatabar->GetDataBarInfo(ScAddress(nCol, i, 0)));
+        CPPUNIT_ASSERT(xInfo.get());
+        ASSERT_DOUBLES_EQUAL(pData[i].nLength, xInfo->mnLength);
+        ASSERT_DOUBLES_EQUAL(nZeroPos, xInfo->mnZero);
     }
     delete pFormat;
 }
commit 52052e5b03a605f261ab041233a5c6b3c8a19143
Author: Caolán McNamara <caolanm at redhat.com>
Date:   Sun May 31 20:55:11 2015 +0100

    coverity#1302690 Uninitialized pointer field
    
    Change-Id: Idea6c8a988cdff9fd7c99fb0d37935f391ba0da2

diff --git a/vcl/source/outdev/outdevstate.cxx b/vcl/source/outdev/outdevstate.cxx
index 1f30392..e1c6498 100644
--- a/vcl/source/outdev/outdevstate.cxx
+++ b/vcl/source/outdev/outdevstate.cxx
@@ -39,36 +39,40 @@
 #include "salgdi.hxx"
 #include "sallayout.hxx"
 
-OutDevState::OutDevState() :
-    mnFlags(PushFlags::NONE)
+OutDevState::OutDevState()
+    : mpMapMode(0)
+    , mbMapActive(false)
+    , mpClipRegion(0)
+    , mpLineColor(0)
+    , mpFillColor(0)
+    , mpFont(0)
+    , mpTextColor(0)
+    , mpTextFillColor(0)
+    , mpTextLineColor(0)
+    , mpOverlineColor(0)
+    , mpRefPoint(0)
+    , meTextAlign(ALIGN_TOP)
+    , meRasterOp(ROP_OVERPAINT)
+    , mnTextLayoutMode(TEXT_LAYOUT_DEFAULT)
+    , meTextLanguage(0)
+    , mnFlags(PushFlags::NONE)
 {
 }
 
 OutDevState::~OutDevState()
 {
-    if ( mnFlags & PushFlags::LINECOLOR )
-        delete mpLineColor;
-    if ( mnFlags & PushFlags::FILLCOLOR )
-        delete mpFillColor;
-    if ( mnFlags & PushFlags::FONT )
-        delete mpFont;
-    if ( mnFlags & PushFlags::TEXTCOLOR )
-        delete mpTextColor;
-    if ( mnFlags & PushFlags::TEXTFILLCOLOR )
-        delete mpTextFillColor;
-    if ( mnFlags & PushFlags::TEXTLINECOLOR )
-        delete mpTextLineColor;
-    if ( mnFlags & PushFlags::OVERLINECOLOR )
-        delete mpOverlineColor;
-    if ( mnFlags & PushFlags::MAPMODE )
-        delete mpMapMode;
-    if ( mnFlags & PushFlags::CLIPREGION )
-        delete mpClipRegion;
-    if ( mnFlags & PushFlags::REFPOINT )
-        delete mpRefPoint;
+    delete mpLineColor;
+    delete mpFillColor;
+    delete mpFont;
+    delete mpTextColor;
+    delete mpTextFillColor;
+    delete mpTextLineColor;
+    delete mpOverlineColor;
+    delete mpMapMode;
+    delete mpClipRegion;
+    delete mpRefPoint;
 }
 
-
 void OutputDevice::Push( PushFlags nFlags )
 {
 
@@ -79,44 +83,29 @@ void OutputDevice::Push( PushFlags nFlags )
 
     pState->mnFlags = nFlags;
 
-    if ( nFlags & PushFlags::LINECOLOR )
+    if (nFlags & PushFlags::LINECOLOR && mbLineColor)
     {
-        if ( mbLineColor )
-            pState->mpLineColor = new Color( maLineColor );
-        else
-            pState->mpLineColor = NULL;
+        pState->mpLineColor = new Color( maLineColor );
     }
-    if ( nFlags & PushFlags::FILLCOLOR )
+    if (nFlags & PushFlags::FILLCOLOR && mbFillColor)
     {
-        if ( mbFillColor )
-            pState->mpFillColor = new Color( maFillColor );
-        else
-            pState->mpFillColor = NULL;
+        pState->mpFillColor = new Color( maFillColor );
     }
     if ( nFlags & PushFlags::FONT )
         pState->mpFont = new vcl::Font( maFont );
     if ( nFlags & PushFlags::TEXTCOLOR )
         pState->mpTextColor = new Color( GetTextColor() );
-    if ( nFlags & PushFlags::TEXTFILLCOLOR )
+    if (nFlags & PushFlags::TEXTFILLCOLOR && IsTextFillColor())
     {
-        if ( IsTextFillColor() )
-            pState->mpTextFillColor = new Color( GetTextFillColor() );
-        else
-            pState->mpTextFillColor = NULL;
+        pState->mpTextFillColor = new Color( GetTextFillColor() );
     }
-    if ( nFlags & PushFlags::TEXTLINECOLOR )
+    if (nFlags & PushFlags::TEXTLINECOLOR && IsTextLineColor())
     {
-        if ( IsTextLineColor() )
-            pState->mpTextLineColor = new Color( GetTextLineColor() );
-        else
-            pState->mpTextLineColor = NULL;
+        pState->mpTextLineColor = new Color( GetTextLineColor() );
     }
-    if ( nFlags & PushFlags::OVERLINECOLOR )
+    if (nFlags & PushFlags::OVERLINECOLOR && IsOverlineColor())
     {
-        if ( IsOverlineColor() )
-            pState->mpOverlineColor = new Color( GetOverlineColor() );
-        else
-            pState->mpOverlineColor = NULL;
+        pState->mpOverlineColor = new Color( GetOverlineColor() );
     }
     if ( nFlags & PushFlags::TEXTALIGN )
         pState->meTextAlign = GetTextAlign();
@@ -131,19 +120,13 @@ void OutputDevice::Push( PushFlags nFlags )
         pState->mpMapMode = new MapMode( maMapMode );
         pState->mbMapActive = mbMap;
     }
-    if ( nFlags & PushFlags::CLIPREGION )
+    if (nFlags & PushFlags::CLIPREGION && mbClipRegion)
     {
-        if ( mbClipRegion )
-            pState->mpClipRegion = new vcl::Region( maRegion );
-        else
-            pState->mpClipRegion = NULL;
+        pState->mpClipRegion = new vcl::Region( maRegion );
     }
-    if ( nFlags & PushFlags::REFPOINT )
+    if (nFlags & PushFlags::REFPOINT && mbRefPoint)
     {
-        if ( mbRefPoint )
-            pState->mpRefPoint = new Point( maRefPoint );
-        else
-            pState->mpRefPoint = NULL;
+        pState->mpRefPoint = new Point( maRefPoint );
     }
 
     mpOutDevStateStack->push_back( pState );
commit 5f1a267c9a97059cbc8e77a0ed9b011dfe891df7
Author: Caolán McNamara <caolanm at redhat.com>
Date:   Sun May 31 20:40:13 2015 +0100

    coverity#1302689 Uninitialized scalar field
    
    Change-Id: I1515ab21370e70564f266cbaa21769d28716d85c

diff --git a/vcl/source/window/splitwin.cxx b/vcl/source/window/splitwin.cxx
index fa18d3d..69c14f8 100644
--- a/vcl/source/window/splitwin.cxx
+++ b/vcl/source/window/splitwin.cxx
@@ -98,8 +98,26 @@ public:
     bool                mbCalcPix;
 };
 
-ImplSplitItem::ImplSplitItem() :
-    mpSet( NULL )
+ImplSplitItem::ImplSplitItem()
+    : mnSize(0)
+    , mnPixSize(0)
+    , mnLeft(0)
+    , mnTop(0)
+    , mnWidth(0)
+    , mnHeight(0)
+    , mnSplitPos(0)
+    , mnSplitSize(0)
+    , mnOldSplitPos(0)
+    , mnOldSplitSize(0)
+    , mnOldWidth(0)
+    , mnOldHeight(0)
+    , mpSet(0)
+    , mnId(0)
+    , mnBits(SplitWindowItemFlags::NONE)
+    , mbFixed(false)
+    , mbSubSize(false)
+    , mnMinSize(-1)
+    , mnMaxSize(-1)
 {
 }
 
commit 7fd544da2ef2f472a3aaa825c3cacfe28961e9db
Author: Caolán McNamara <caolanm at redhat.com>
Date:   Sun May 31 20:32:18 2015 +0100

    coverity#1302664 Unchecked dynamic_cast
    
    and
    
    coverity#1302661 Unchecked dynamic_cast
    
    Change-Id: I29735d3627c9d600465c02482002134cd196e098

diff --git a/sw/source/core/unocore/unochart.cxx b/sw/source/core/unocore/unochart.cxx
index 161ee5f..33a0b27 100644
--- a/sw/source/core/unocore/unochart.cxx
+++ b/sw/source/core/unocore/unochart.cxx
@@ -2192,7 +2192,7 @@ uno::Sequence< OUString > SAL_CALL SwChartDataSequence::getTextualData()
                 // keep original cursor and make copy of it that gets handed
                 // over to the SwXCellRange object which takes ownership and
                 // thus will destroy the copy later.
-                SwXCellRange aRange( dynamic_cast<SwUnoTableCrsr*>(pTableCrsr.get())->Clone(), *pTableFormat, aDesc );
+                SwXCellRange aRange( dynamic_cast<SwUnoTableCrsr&>(*pTableCrsr.get()).Clone(), *pTableFormat, aDesc );
                 aRange.GetDataSequence( 0, &aRes, 0 );
             }
         }
@@ -2221,7 +2221,7 @@ uno::Sequence< double > SAL_CALL SwChartDataSequence::getNumericalData()
                 // keep original cursor and make copy of it that gets handed
                 // over to the SwXCellRange object which takes ownership and
                 // thus will destroy the copy later.
-                SwXCellRange aRange( dynamic_cast<SwUnoTableCrsr*>(pTableCrsr.get())->Clone(), *pTableFormat, aDesc );
+                SwXCellRange aRange( dynamic_cast<SwUnoTableCrsr&>(*pTableCrsr.get()).Clone(), *pTableFormat, aDesc );
 
                 // get numerical values and make an effort to return the
                 // numerical value for text formatted cells
commit 7e5d98c427cdcd10566b8f5a7a35c0561ec82d72
Author: Caolán McNamara <caolanm at redhat.com>
Date:   Sun May 31 20:28:06 2015 +0100

    masses of coverity FORWARD_NULL warnings from copied assert
    
    Change-Id: I8f698bbcf4d53a4477cc0ee0c3f2c7f08e521f8a

diff --git a/include/vcl/outdev.hxx b/include/vcl/outdev.hxx
index b00f2d3..1754058 100644
--- a/include/vcl/outdev.hxx
+++ b/include/vcl/outdev.hxx
@@ -613,6 +613,8 @@ protected:
 
     SAL_DLLPRIVATE void         drawOutDevDirect ( const OutputDevice* pSrcDev, SalTwoRect& rPosAry );
 
+    SAL_DLLPRIVATE void         assert_if_double_buffered_window() const;
+
 private:
 
     // not implemented; to detect misuses of DrawOutDev(...OutputDevice&);
diff --git a/vcl/source/outdev/bitmap.cxx b/vcl/source/outdev/bitmap.cxx
index f59e441..718cef9 100644
--- a/vcl/source/outdev/bitmap.cxx
+++ b/vcl/source/outdev/bitmap.cxx
@@ -36,7 +36,7 @@
 
 void OutputDevice::DrawBitmap( const Point& rDestPt, const Bitmap& rBitmap )
 {
-    assert(!dynamic_cast<vcl::Window*>(this) || !dynamic_cast<vcl::Window*>(this)->SupportsDoubleBuffering());
+    assert_if_double_buffered_window();
 
     const Size aSizePix( rBitmap.GetSizePixel() );
     DrawBitmap( rDestPt, PixelToLogic( aSizePix ), Point(), aSizePix, rBitmap, MetaActionType::BMP );
@@ -44,7 +44,7 @@ void OutputDevice::DrawBitmap( const Point& rDestPt, const Bitmap& rBitmap )
 
 void OutputDevice::DrawBitmap( const Point& rDestPt, const Size& rDestSize, const Bitmap& rBitmap )
 {
-    assert(!dynamic_cast<vcl::Window*>(this) || !dynamic_cast<vcl::Window*>(this)->SupportsDoubleBuffering());
+    assert_if_double_buffered_window();
 
     DrawBitmap( rDestPt, rDestSize, Point(), rBitmap.GetSizePixel(), rBitmap, MetaActionType::BMPSCALE );
 }
@@ -54,7 +54,7 @@ void OutputDevice::DrawBitmap( const Point& rDestPt, const Size& rDestSize,
                                    const Point& rSrcPtPixel, const Size& rSrcSizePixel,
                                    const Bitmap& rBitmap, const MetaActionType nAction )
 {
-    assert(!dynamic_cast<vcl::Window*>(this) || !dynamic_cast<vcl::Window*>(this)->SupportsDoubleBuffering());
+    assert_if_double_buffered_window();
 
     if( ImplIsRecordLayout() )
         return;
@@ -236,7 +236,7 @@ Bitmap OutputDevice::GetDownsampledBitmap( const Size& rDstSz,
 void OutputDevice::DrawBitmapEx( const Point& rDestPt,
                                  const BitmapEx& rBitmapEx )
 {
-    assert(!dynamic_cast<vcl::Window*>(this) || !dynamic_cast<vcl::Window*>(this)->SupportsDoubleBuffering());
+    assert_if_double_buffered_window();
 
     if( ImplIsRecordLayout() )
         return;
@@ -255,7 +255,7 @@ void OutputDevice::DrawBitmapEx( const Point& rDestPt,
 void OutputDevice::DrawBitmapEx( const Point& rDestPt, const Size& rDestSize,
                                  const BitmapEx& rBitmapEx )
 {
-    assert(!dynamic_cast<vcl::Window*>(this) || !dynamic_cast<vcl::Window*>(this)->SupportsDoubleBuffering());
+    assert_if_double_buffered_window();
 
     if( ImplIsRecordLayout() )
         return;
@@ -275,7 +275,7 @@ void OutputDevice::DrawBitmapEx( const Point& rDestPt, const Size& rDestSize,
                                  const Point& rSrcPtPixel, const Size& rSrcSizePixel,
                                  const BitmapEx& rBitmapEx, const MetaActionType nAction )
 {
-    assert(!dynamic_cast<vcl::Window*>(this) || !dynamic_cast<vcl::Window*>(this)->SupportsDoubleBuffering());
+    assert_if_double_buffered_window();
 
     if( ImplIsRecordLayout() )
         return;
@@ -492,7 +492,7 @@ void OutputDevice::DrawDeviceBitmap( const Point& rDestPt, const Size& rDestSize
                                      const Point& rSrcPtPixel, const Size& rSrcSizePixel,
                                      BitmapEx& rBitmapEx )
 {
-    assert(!dynamic_cast<vcl::Window*>(this) || !dynamic_cast<vcl::Window*>(this)->SupportsDoubleBuffering());
+    assert_if_double_buffered_window();
 
     if (rBitmapEx.IsAlpha())
     {
@@ -622,7 +622,7 @@ void OutputDevice::DrawDeviceAlphaBitmap( const Bitmap& rBmp, const AlphaMask& r
                                     const Point& rDestPt, const Size& rDestSize,
                                     const Point& rSrcPtPixel, const Size& rSrcSizePixel )
 {
-    assert(!dynamic_cast<vcl::Window*>(this) || !dynamic_cast<vcl::Window*>(this)->SupportsDoubleBuffering());
+    assert_if_double_buffered_window();
 
     Point     aOutPt(LogicToPixel(rDestPt));
     Size      aOutSz(LogicToPixel(rDestSize));
@@ -918,7 +918,7 @@ private:
 
 void OutputDevice::DrawDeviceAlphaBitmapSlowPath(const Bitmap& rBitmap, const AlphaMask& rAlpha, Rectangle aDstRect, Rectangle aBmpRect, Size& aOutSize, Point& aOutPoint)
 {
-    assert(!dynamic_cast<vcl::Window*>(this) || !dynamic_cast<vcl::Window*>(this)->SupportsDoubleBuffering());
+    assert_if_double_buffered_window();
 
     VirtualDevice* pOldVDev = mpAlphaVDev;
 
@@ -1036,7 +1036,7 @@ bool OutputDevice::DrawTransformBitmapExDirect(
         const basegfx::B2DHomMatrix& aFullTransform,
         const BitmapEx& rBitmapEx)
 {
-    assert(!dynamic_cast<vcl::Window*>(this) || !dynamic_cast<vcl::Window*>(this)->SupportsDoubleBuffering());
+    assert_if_double_buffered_window();
 
     bool bDone = false;
 
@@ -1157,7 +1157,7 @@ void OutputDevice::DrawTransformedBitmapEx(
     const basegfx::B2DHomMatrix& rTransformation,
     const BitmapEx& rBitmapEx)
 {
-    assert(!dynamic_cast<vcl::Window*>(this) || !dynamic_cast<vcl::Window*>(this)->SupportsDoubleBuffering());
+    assert_if_double_buffered_window();
 
     if( ImplIsRecordLayout() )
         return;
@@ -1330,7 +1330,7 @@ namespace
 
 void OutputDevice::DrawImage( const Point& rPos, const Image& rImage, DrawImageFlags nStyle )
 {
-    assert(!dynamic_cast<vcl::Window*>(this) || !dynamic_cast<vcl::Window*>(this)->SupportsDoubleBuffering());
+    assert_if_double_buffered_window();
 
     DrawImage( rPos, Size(), rImage, nStyle );
 }
@@ -1338,7 +1338,7 @@ void OutputDevice::DrawImage( const Point& rPos, const Image& rImage, DrawImageF
 void OutputDevice::DrawImage( const Point& rPos, const Size& rSize,
                               const Image& rImage, DrawImageFlags nStyle )
 {
-    assert(!dynamic_cast<vcl::Window*>(this) || !dynamic_cast<vcl::Window*>(this)->SupportsDoubleBuffering());
+    assert_if_double_buffered_window();
 
     bool bIsSizeValid = rSize.getWidth() != 0 && rSize.getHeight() != 0;
 
diff --git a/vcl/source/outdev/curvedshapes.cxx b/vcl/source/outdev/curvedshapes.cxx
index db8f7d6..0190a4d 100644
--- a/vcl/source/outdev/curvedshapes.cxx
+++ b/vcl/source/outdev/curvedshapes.cxx
@@ -25,7 +25,7 @@
 
 void OutputDevice::DrawEllipse( const Rectangle& rRect )
 {
-    assert(!dynamic_cast<vcl::Window*>(this) || !dynamic_cast<vcl::Window*>(this)->SupportsDoubleBuffering());
+    assert_if_double_buffered_window();
 
     if ( mpMetaFile )
         mpMetaFile->AddAction( new MetaEllipseAction( rRect ) );
@@ -73,7 +73,7 @@ void OutputDevice::DrawEllipse( const Rectangle& rRect )
 void OutputDevice::DrawArc( const Rectangle& rRect,
                             const Point& rStartPt, const Point& rEndPt )
 {
-    assert(!dynamic_cast<vcl::Window*>(this) || !dynamic_cast<vcl::Window*>(this)->SupportsDoubleBuffering());
+    assert_if_double_buffered_window();
 
     if ( mpMetaFile )
         mpMetaFile->AddAction( new MetaArcAction( rRect, rStartPt, rEndPt ) );
@@ -117,7 +117,7 @@ void OutputDevice::DrawArc( const Rectangle& rRect,
 void OutputDevice::DrawPie( const Rectangle& rRect,
                             const Point& rStartPt, const Point& rEndPt )
 {
-    assert(!dynamic_cast<vcl::Window*>(this) || !dynamic_cast<vcl::Window*>(this)->SupportsDoubleBuffering());
+    assert_if_double_buffered_window();
 
     if ( mpMetaFile )
         mpMetaFile->AddAction( new MetaPieAction( rRect, rStartPt, rEndPt ) );
@@ -168,7 +168,7 @@ void OutputDevice::DrawPie( const Rectangle& rRect,
 void OutputDevice::DrawChord( const Rectangle& rRect,
                               const Point& rStartPt, const Point& rEndPt )
 {
-    assert(!dynamic_cast<vcl::Window*>(this) || !dynamic_cast<vcl::Window*>(this)->SupportsDoubleBuffering());
+    assert_if_double_buffered_window();
 
     if ( mpMetaFile )
         mpMetaFile->AddAction( new MetaChordAction( rRect, rStartPt, rEndPt ) );
diff --git a/vcl/source/outdev/gradient.cxx b/vcl/source/outdev/gradient.cxx
index ca0e949..41c2455 100644
--- a/vcl/source/outdev/gradient.cxx
+++ b/vcl/source/outdev/gradient.cxx
@@ -32,7 +32,7 @@
 void OutputDevice::DrawGradient( const Rectangle& rRect,
                                  const Gradient& rGradient )
 {
-    assert(!dynamic_cast<vcl::Window*>(this) || !dynamic_cast<vcl::Window*>(this)->SupportsDoubleBuffering());
+    assert_if_double_buffered_window();
 
     // Convert rectangle to a tools::PolyPolygon by first converting to a Polygon
     Polygon aPolygon ( rRect );
@@ -44,7 +44,7 @@ void OutputDevice::DrawGradient( const Rectangle& rRect,
 void OutputDevice::DrawGradient( const tools::PolyPolygon& rPolyPoly,
                                  const Gradient& rGradient )
 {
-    assert(!dynamic_cast<vcl::Window*>(this) || !dynamic_cast<vcl::Window*>(this)->SupportsDoubleBuffering());
+    assert_if_double_buffered_window();
 
     if ( mnDrawMode & DrawModeFlags::NoGradient )
         return;     // nothing to draw!
@@ -172,7 +172,7 @@ void OutputDevice::ClipAndDrawGradientMetafile ( const Gradient &rGradient, cons
 void OutputDevice::DrawGradientToMetafile ( const tools::PolyPolygon& rPolyPoly,
                                             const Gradient& rGradient )
 {
-    assert(!dynamic_cast<vcl::Window*>(this) || !dynamic_cast<vcl::Window*>(this)->SupportsDoubleBuffering());
+    assert_if_double_buffered_window();
 
     if ( !mpMetaFile )
         return;
@@ -260,7 +260,7 @@ void OutputDevice::DrawLinearGradient( const Rectangle& rRect,
                                        const Gradient& rGradient,
                                        const tools::PolyPolygon* pClixPolyPoly )
 {
-    assert(!dynamic_cast<vcl::Window*>(this) || !dynamic_cast<vcl::Window*>(this)->SupportsDoubleBuffering());
+    assert_if_double_buffered_window();
 
     // get BoundRect of rotated rectangle
     Rectangle aRect;
@@ -438,11 +438,19 @@ void OutputDevice::DrawLinearGradient( const Rectangle& rRect,
     }
 }
 
+void OutputDevice::assert_if_double_buffered_window() const
+{
+#ifndef NDEBUG
+    const vcl::Window *pWindow = dynamic_cast<const vcl::Window*>(this);
+    assert(!pWindow || !pWindow->SupportsDoubleBuffering());
+#endif
+}
+
 void OutputDevice::DrawComplexGradient( const Rectangle& rRect,
                                         const Gradient& rGradient,
                                         const tools::PolyPolygon* pClixPolyPoly )
 {
-    assert(!dynamic_cast<vcl::Window*>(this) || !dynamic_cast<vcl::Window*>(this)->SupportsDoubleBuffering());
+    assert_if_double_buffered_window();
 
     // Determine if we output via Polygon or PolyPolygon
     // For all rasteroperations other then Overpaint always use PolyPolygon,
@@ -608,7 +616,7 @@ void OutputDevice::DrawComplexGradient( const Rectangle& rRect,
 void OutputDevice::DrawLinearGradientToMetafile( const Rectangle& rRect,
                                                  const Gradient& rGradient )
 {
-    assert(!dynamic_cast<vcl::Window*>(this) || !dynamic_cast<vcl::Window*>(this)->SupportsDoubleBuffering());
+    assert_if_double_buffered_window();
 
     // get BoundRect of rotated rectangle
     Rectangle aRect;
@@ -788,7 +796,7 @@ void OutputDevice::DrawLinearGradientToMetafile( const Rectangle& rRect,
 void OutputDevice::DrawComplexGradientToMetafile( const Rectangle& rRect,
                                                   const Gradient& rGradient )
 {
-    assert(!dynamic_cast<vcl::Window*>(this) || !dynamic_cast<vcl::Window*>(this)->SupportsDoubleBuffering());
+    assert_if_double_buffered_window();
 
     // Determine if we output via Polygon or PolyPolygon
     // For all rasteroperations other then Overpaint always use PolyPolygon,
diff --git a/vcl/source/outdev/hatch.cxx b/vcl/source/outdev/hatch.cxx
index a33fae3..1ccdcc7 100644
--- a/vcl/source/outdev/hatch.cxx
+++ b/vcl/source/outdev/hatch.cxx
@@ -44,7 +44,7 @@ extern "C" int SAL_CALL HatchCmpFnc( const void* p1, const void* p2 )
 
 void OutputDevice::DrawHatch( const tools::PolyPolygon& rPolyPoly, const Hatch& rHatch )
 {
-    assert(!dynamic_cast<vcl::Window*>(this) || !dynamic_cast<vcl::Window*>(this)->SupportsDoubleBuffering());
+    assert_if_double_buffered_window();
 
     Hatch aHatch( rHatch );
 
@@ -139,7 +139,7 @@ void OutputDevice::AddHatchActions( const tools::PolyPolygon& rPolyPoly, const H
 
 void OutputDevice::DrawHatch( const tools::PolyPolygon& rPolyPoly, const Hatch& rHatch, bool bMtf )
 {
-    assert(!dynamic_cast<vcl::Window*>(this) || !dynamic_cast<vcl::Window*>(this)->SupportsDoubleBuffering());
+    assert_if_double_buffered_window();
 
     if(rPolyPoly.Count())
     {
@@ -322,7 +322,7 @@ void OutputDevice::CalcHatchValues( const Rectangle& rRect, long nDist, sal_uInt
 void OutputDevice::DrawHatchLine( const Line& rLine, const tools::PolyPolygon& rPolyPoly,
                                       Point* pPtBuffer, bool bMtf )
 {
-    assert(!dynamic_cast<vcl::Window*>(this) || !dynamic_cast<vcl::Window*>(this)->SupportsDoubleBuffering());
+    assert_if_double_buffered_window();
 
     double  fX, fY;
     long    nAdd, nPCounter = 0;
diff --git a/vcl/source/outdev/line.cxx b/vcl/source/outdev/line.cxx
index f37280f..f8eba4a 100644
--- a/vcl/source/outdev/line.cxx
+++ b/vcl/source/outdev/line.cxx
@@ -35,7 +35,7 @@
 void OutputDevice::DrawLine( const Point& rStartPt, const Point& rEndPt,
                              const LineInfo& rLineInfo )
 {
-    assert(!dynamic_cast<vcl::Window*>(this) || !dynamic_cast<vcl::Window*>(this)->SupportsDoubleBuffering());
+    assert_if_double_buffered_window();
 
     if ( rLineInfo.IsDefault() )
     {
@@ -89,7 +89,7 @@ void OutputDevice::DrawLine( const Point& rStartPt, const Point& rEndPt,
 
 void OutputDevice::DrawLine( const Point& rStartPt, const Point& rEndPt )
 {
-    assert(!dynamic_cast<vcl::Window*>(this) || !dynamic_cast<vcl::Window*>(this)->SupportsDoubleBuffering());
+    assert_if_double_buffered_window();
 
     if ( mpMetaFile )
         mpMetaFile->AddAction( new MetaLineAction( rStartPt, rEndPt ) );
diff --git a/vcl/source/outdev/mask.cxx b/vcl/source/outdev/mask.cxx
index 29737a1..facbb9a 100644
--- a/vcl/source/outdev/mask.cxx
+++ b/vcl/source/outdev/mask.cxx
@@ -34,7 +34,7 @@ extern const sal_uLong nVCLLut[ 256 ];
 void OutputDevice::DrawMask( const Point& rDestPt,
                              const Bitmap& rBitmap, const Color& rMaskColor )
 {
-    assert(!dynamic_cast<vcl::Window*>(this) || !dynamic_cast<vcl::Window*>(this)->SupportsDoubleBuffering());
+    assert_if_double_buffered_window();
 
     const Size aSizePix( rBitmap.GetSizePixel() );
     DrawMask( rDestPt, PixelToLogic( aSizePix ), Point(), aSizePix, rBitmap, rMaskColor, MetaActionType::MASK );
@@ -43,7 +43,7 @@ void OutputDevice::DrawMask( const Point& rDestPt,
 void OutputDevice::DrawMask( const Point& rDestPt, const Size& rDestSize,
                              const Bitmap& rBitmap, const Color& rMaskColor )
 {
-    assert(!dynamic_cast<vcl::Window*>(this) || !dynamic_cast<vcl::Window*>(this)->SupportsDoubleBuffering());
+    assert_if_double_buffered_window();
 
     DrawMask( rDestPt, rDestSize, Point(), rBitmap.GetSizePixel(), rBitmap, rMaskColor, MetaActionType::MASKSCALE );
 }
@@ -53,7 +53,7 @@ void OutputDevice::DrawMask( const Point& rDestPt, const Size& rDestSize,
                              const Bitmap& rBitmap, const Color& rMaskColor,
                              const MetaActionType nAction )
 {
-    assert(!dynamic_cast<vcl::Window*>(this) || !dynamic_cast<vcl::Window*>(this)->SupportsDoubleBuffering());
+    assert_if_double_buffered_window();
 
     if( ImplIsRecordLayout() )
         return;
@@ -108,7 +108,7 @@ void OutputDevice::DrawDeviceMask( const Bitmap& rMask, const Color& rMaskColor,
                               const Point& rDestPt, const Size& rDestSize,
                               const Point& rSrcPtPixel, const Size& rSrcSizePixel )
 {
-    assert(!dynamic_cast<vcl::Window*>(this) || !dynamic_cast<vcl::Window*>(this)->SupportsDoubleBuffering());
+    assert_if_double_buffered_window();
 
     const ImpBitmap* pImpBmp = rMask.ImplGetImpBitmap();
     if ( pImpBmp )
diff --git a/vcl/source/outdev/nativecontrols.cxx b/vcl/source/outdev/nativecontrols.cxx
index 6e9279c..0711021 100644
--- a/vcl/source/outdev/nativecontrols.cxx
+++ b/vcl/source/outdev/nativecontrols.cxx
@@ -273,7 +273,7 @@ bool OutputDevice::DrawNativeControl( ControlType nType,
                             const ImplControlValue& aValue,
                             const OUString& aCaption )
 {
-    assert(!dynamic_cast<vcl::Window*>(this) || !dynamic_cast<vcl::Window*>(this)->SupportsDoubleBuffering());
+    assert_if_double_buffered_window();
 
     if( !EnableNativeWidget( *this ) )
         return false;
diff --git a/vcl/source/outdev/pixel.cxx b/vcl/source/outdev/pixel.cxx
index c4f6528..8310a72 100644
--- a/vcl/source/outdev/pixel.cxx
+++ b/vcl/source/outdev/pixel.cxx
@@ -57,7 +57,7 @@ Color OutputDevice::GetPixel( const Point& rPt ) const
 
 void OutputDevice::DrawPixel( const Point& rPt )
 {
-    assert(!dynamic_cast<vcl::Window*>(this) || !dynamic_cast<vcl::Window*>(this)->SupportsDoubleBuffering());
+    assert_if_double_buffered_window();
 
     if ( mpMetaFile )
         mpMetaFile->AddAction( new MetaPointAction( rPt ) );
@@ -87,7 +87,7 @@ void OutputDevice::DrawPixel( const Point& rPt )
 
 void OutputDevice::DrawPixel( const Point& rPt, const Color& rColor )
 {
-    assert(!dynamic_cast<vcl::Window*>(this) || !dynamic_cast<vcl::Window*>(this)->SupportsDoubleBuffering());
+    assert_if_double_buffered_window();
 
     Color aColor = ImplDrawModeToColor( rColor );
 
@@ -116,7 +116,7 @@ void OutputDevice::DrawPixel( const Point& rPt, const Color& rColor )
 
 void OutputDevice::DrawPixel( const Polygon& rPts, const Color* pColors )
 {
-    assert(!dynamic_cast<vcl::Window*>(this) || !dynamic_cast<vcl::Window*>(this)->SupportsDoubleBuffering());
+    assert_if_double_buffered_window();
 
     if ( !pColors )
     {
@@ -163,7 +163,7 @@ void OutputDevice::DrawPixel( const Polygon& rPts, const Color* pColors )
 
 void OutputDevice::DrawPixel( const Polygon& rPts, const Color& rColor )
 {
-    assert(!dynamic_cast<vcl::Window*>(this) || !dynamic_cast<vcl::Window*>(this)->SupportsDoubleBuffering());
+    assert_if_double_buffered_window();
 
     if( rColor != COL_TRANSPARENT && ! ImplIsRecordLayout() )
     {
diff --git a/vcl/source/outdev/polygon.cxx b/vcl/source/outdev/polygon.cxx
index c25025c..9b703a0 100644
--- a/vcl/source/outdev/polygon.cxx
+++ b/vcl/source/outdev/polygon.cxx
@@ -33,7 +33,7 @@
 
 void OutputDevice::DrawPolyPolygon( const tools::PolyPolygon& rPolyPoly )
 {
-    assert(!dynamic_cast<vcl::Window*>(this) || !dynamic_cast<vcl::Window*>(this)->SupportsDoubleBuffering());
+    assert_if_double_buffered_window();
 
     if( mpMetaFile )
         mpMetaFile->AddAction( new MetaPolyPolygonAction( rPolyPoly ) );
@@ -131,7 +131,7 @@ void OutputDevice::DrawPolyPolygon( const tools::PolyPolygon& rPolyPoly )
 
 void OutputDevice::DrawPolygon( const basegfx::B2DPolygon& rB2DPolygon)
 {
-    assert(!dynamic_cast<vcl::Window*>(this) || !dynamic_cast<vcl::Window*>(this)->SupportsDoubleBuffering());
+    assert_if_double_buffered_window();
 
     // AW: Do NOT paint empty polygons
     if(rB2DPolygon.count())
@@ -143,7 +143,7 @@ void OutputDevice::DrawPolygon( const basegfx::B2DPolygon& rB2DPolygon)
 
 void OutputDevice::DrawPolygon( const Polygon& rPoly )
 {
-    assert(!dynamic_cast<vcl::Window*>(this) || !dynamic_cast<vcl::Window*>(this)->SupportsDoubleBuffering());
+    assert_if_double_buffered_window();
 
     if( mpMetaFile )
         mpMetaFile->AddAction( new MetaPolygonAction( rPoly ) );
@@ -239,7 +239,7 @@ void OutputDevice::DrawPolygon( const Polygon& rPoly )
 
 void OutputDevice::DrawPolyPolygon( const basegfx::B2DPolyPolygon& rB2DPolyPoly )
 {
-    assert(!dynamic_cast<vcl::Window*>(this) || !dynamic_cast<vcl::Window*>(this)->SupportsDoubleBuffering());
+    assert_if_double_buffered_window();
 
     if( mpMetaFile )
         mpMetaFile->AddAction( new MetaPolyPolygonAction( tools::PolyPolygon( rB2DPolyPoly ) ) );
diff --git a/vcl/source/outdev/polyline.cxx b/vcl/source/outdev/polyline.cxx
index 236d2cd..3be82cf 100644
--- a/vcl/source/outdev/polyline.cxx
+++ b/vcl/source/outdev/polyline.cxx
@@ -31,7 +31,7 @@
 
 void OutputDevice::DrawPolyLine( const Polygon& rPoly )
 {
-    assert(!dynamic_cast<vcl::Window*>(this) || !dynamic_cast<vcl::Window*>(this)->SupportsDoubleBuffering());
+    assert_if_double_buffered_window();
 
     if( mpMetaFile )
         mpMetaFile->AddAction( new MetaPolyLineAction( rPoly ) );
@@ -101,7 +101,7 @@ void OutputDevice::DrawPolyLine( const Polygon& rPoly )
 
 void OutputDevice::DrawPolyLine( const Polygon& rPoly, const LineInfo& rLineInfo )
 {
-    assert(!dynamic_cast<vcl::Window*>(this) || !dynamic_cast<vcl::Window*>(this)->SupportsDoubleBuffering());
+    assert_if_double_buffered_window();
 
     if ( rLineInfo.IsDefault() )
     {
@@ -129,7 +129,7 @@ void OutputDevice::DrawPolyLine( const basegfx::B2DPolygon& rB2DPolygon,
                                  basegfx::B2DLineJoin eLineJoin,
                                  css::drawing::LineCap eLineCap)
 {
-    assert(!dynamic_cast<vcl::Window*>(this) || !dynamic_cast<vcl::Window*>(this)->SupportsDoubleBuffering());
+    assert_if_double_buffered_window();
 
     if( mpMetaFile )
     {
@@ -275,7 +275,7 @@ bool OutputDevice::DrawPolyLineDirect( const basegfx::B2DPolygon& rB2DPolygon,
                                        css::drawing::LineCap eLineCap,
                                        bool bBypassAACheck )
 {
-    assert(!dynamic_cast<vcl::Window*>(this) || !dynamic_cast<vcl::Window*>(this)->SupportsDoubleBuffering());
+    assert_if_double_buffered_window();
 
     // AW: Do NOT paint empty PolyPolygons
     if(!rB2DPolygon.count())
diff --git a/vcl/source/outdev/rect.cxx b/vcl/source/outdev/rect.cxx
index 4492352..a9ebc0a 100644
--- a/vcl/source/outdev/rect.cxx
+++ b/vcl/source/outdev/rect.cxx
@@ -29,7 +29,7 @@
 
 void OutputDevice::DrawRect( const Rectangle& rRect )
 {
-    assert(!dynamic_cast<vcl::Window*>(this) || !dynamic_cast<vcl::Window*>(this)->SupportsDoubleBuffering());
+    assert_if_double_buffered_window();
 
     if ( mpMetaFile )
         mpMetaFile->AddAction( new MetaRectAction( rRect ) );
@@ -68,7 +68,7 @@ void OutputDevice::DrawRect( const Rectangle& rRect )
 void OutputDevice::DrawRect( const Rectangle& rRect,
                              sal_uLong nHorzRound, sal_uLong nVertRound )
 {
-    assert(!dynamic_cast<vcl::Window*>(this) || !dynamic_cast<vcl::Window*>(this)->SupportsDoubleBuffering());
+    assert_if_double_buffered_window();
 
     if ( mpMetaFile )
         mpMetaFile->AddAction( new MetaRoundRectAction( rRect, nHorzRound, nVertRound ) );
@@ -128,7 +128,7 @@ void OutputDevice::DrawRect( const Rectangle& rRect,
 
 void OutputDevice::DrawCheckered(const Point& rPos, const Size& rSize, sal_uInt32 nLen, Color aStart, Color aEnd)
 {
-    assert(!dynamic_cast<vcl::Window*>(this) || !dynamic_cast<vcl::Window*>(this)->SupportsDoubleBuffering());
+    assert_if_double_buffered_window();
 
     const sal_uInt32 nMaxX(rPos.X() + rSize.Width());
     const sal_uInt32 nMaxY(rPos.Y() + rSize.Height());
@@ -154,7 +154,7 @@ void OutputDevice::DrawCheckered(const Point& rPos, const Size& rSize, sal_uInt3
 
 void OutputDevice::DrawGrid( const Rectangle& rRect, const Size& rDist, DrawGridFlags nFlags )
 {
-    assert(!dynamic_cast<vcl::Window*>(this) || !dynamic_cast<vcl::Window*>(this)->SupportsDoubleBuffering());
+    assert_if_double_buffered_window();
 
     Rectangle aDstRect( PixelToLogic( Point() ), GetOutputSize() );
     aDstRect.Intersection( rRect );
diff --git a/vcl/source/outdev/text.cxx b/vcl/source/outdev/text.cxx
index 15e59bf..639151d 100644
--- a/vcl/source/outdev/text.cxx
+++ b/vcl/source/outdev/text.cxx
@@ -838,7 +838,7 @@ void OutputDevice::DrawText( const Point& rStartPt, const OUString& rStr,
                              MetricVector* pVector, OUString* pDisplayText
                              )
 {
-    assert(!dynamic_cast<vcl::Window*>(this) || !dynamic_cast<vcl::Window*>(this)->SupportsDoubleBuffering());
+    assert_if_double_buffered_window();
 
     if(nLen == 0x0FFFF)
     {
@@ -961,7 +961,7 @@ void OutputDevice::DrawTextArray( const Point& rStartPt, const OUString& rStr,
                                   const long* pDXAry,
                                   sal_Int32 nIndex, sal_Int32 nLen, SalLayoutFlags flags )
 {
-    assert(!dynamic_cast<vcl::Window*>(this) || !dynamic_cast<vcl::Window*>(this)->SupportsDoubleBuffering());
+    assert_if_double_buffered_window();
 
     if(nLen == 0x0FFFF)
     {
@@ -1166,7 +1166,7 @@ void OutputDevice::DrawStretchText( const Point& rStartPt, sal_uLong nWidth,
                                     const OUString& rStr,
                                     sal_Int32 nIndex, sal_Int32 nLen)
 {
-    assert(!dynamic_cast<vcl::Window*>(this) || !dynamic_cast<vcl::Window*>(this)->SupportsDoubleBuffering());
+    assert_if_double_buffered_window();
 
     if(nIndex < 0 || nIndex == 0x0FFFF || nLen == 0x0FFFF)
     {
@@ -1840,7 +1840,7 @@ void OutputDevice::DrawText( const Rectangle& rRect, const OUString& rOrigStr, D
                              MetricVector* pVector, OUString* pDisplayText,
                              vcl::ITextLayout* _pTextLayout )
 {
-    assert(!dynamic_cast<vcl::Window*>(this) || !dynamic_cast<vcl::Window*>(this)->SupportsDoubleBuffering());
+    assert_if_double_buffered_window();
 
     if (mpOutDevData->mpRecordLayout)
     {
@@ -2148,7 +2148,7 @@ void OutputDevice::DrawCtrlText( const Point& rPos, const OUString& rStr,
                                  sal_Int32 nIndex, sal_Int32 nLen,
                                  DrawTextFlags nStyle, MetricVector* pVector, OUString* pDisplayText )
 {
-    assert(!dynamic_cast<vcl::Window*>(this) || !dynamic_cast<vcl::Window*>(this)->SupportsDoubleBuffering());
+    assert_if_double_buffered_window();
 
     if(nLen == 0x0FFFF)
     {
diff --git a/vcl/source/outdev/textline.cxx b/vcl/source/outdev/textline.cxx
index 8e55eca..551e556 100644
--- a/vcl/source/outdev/textline.cxx
+++ b/vcl/source/outdev/textline.cxx
@@ -941,7 +941,7 @@ void OutputDevice::DrawTextLine( const Point& rPos, long nWidth,
                                  FontUnderline eOverline,
                                  bool bUnderlineAbove )
 {
-    assert(!dynamic_cast<vcl::Window*>(this) || !dynamic_cast<vcl::Window*>(this)->SupportsDoubleBuffering());
+    assert_if_double_buffered_window();
 
     if ( mpMetaFile )
         mpMetaFile->AddAction( new MetaTextLineAction( rPos, nWidth, eStrikeout, eUnderline, eOverline ) );
@@ -985,7 +985,7 @@ void OutputDevice::DrawTextLine( const Point& rPos, long nWidth,
 
 void OutputDevice::DrawWaveLine( const Point& rStartPos, const Point& rEndPos )
 {
-    assert(!dynamic_cast<vcl::Window*>(this) || !dynamic_cast<vcl::Window*>(this)->SupportsDoubleBuffering());
+    assert_if_double_buffered_window();
 
     if ( !IsDeviceOutputNecessary() || ImplIsRecordLayout() )
         return;
diff --git a/vcl/source/outdev/transparent.cxx b/vcl/source/outdev/transparent.cxx
index 7d4e027..6827fc3 100644
--- a/vcl/source/outdev/transparent.cxx
+++ b/vcl/source/outdev/transparent.cxx
@@ -218,7 +218,7 @@ void OutputDevice::ImplPrintTransparent( const Bitmap& rBmp, const Bitmap& rMask
 
 void OutputDevice::DrawTransparent( const basegfx::B2DPolyPolygon& rB2DPolyPoly, double fTransparency)
 {
-    assert(!dynamic_cast<vcl::Window*>(this) || !dynamic_cast<vcl::Window*>(this)->SupportsDoubleBuffering());
+    assert_if_double_buffered_window();
 
     // AW: Do NOT paint empty PolyPolygons
     if(!rB2DPolyPoly.count())
@@ -282,7 +282,7 @@ void OutputDevice::DrawTransparent( const basegfx::B2DPolyPolygon& rB2DPolyPoly,
 
 void OutputDevice::DrawInvisiblePolygon( const tools::PolyPolygon& rPolyPoly )
 {
-    assert(!dynamic_cast<vcl::Window*>(this) || !dynamic_cast<vcl::Window*>(this)->SupportsDoubleBuffering());
+    assert_if_double_buffered_window();
 
     // short circuit if the polygon border is invisible too
     if( !mbLineColor )
@@ -298,7 +298,7 @@ void OutputDevice::DrawInvisiblePolygon( const tools::PolyPolygon& rPolyPoly )
 bool OutputDevice::DrawTransparentNatively ( const tools::PolyPolygon& rPolyPoly,
                                              sal_uInt16 nTransparencePercent )
 {
-    assert(!dynamic_cast<vcl::Window*>(this) || !dynamic_cast<vcl::Window*>(this)->SupportsDoubleBuffering());
+    assert_if_double_buffered_window();
 
     bool bDrawn = false;
 
@@ -607,7 +607,7 @@ void OutputDevice::EmulateDrawTransparent ( const tools::PolyPolygon& rPolyPoly,
 void OutputDevice::DrawTransparent( const tools::PolyPolygon& rPolyPoly,
                                     sal_uInt16 nTransparencePercent )
 {
-    assert(!dynamic_cast<vcl::Window*>(this) || !dynamic_cast<vcl::Window*>(this)->SupportsDoubleBuffering());
+    assert_if_double_buffered_window();
 
     // short circuit for drawing an opaque polygon
     if( (nTransparencePercent < 1) || (mnDrawMode & DrawModeFlags::NoTransparency) )
@@ -659,7 +659,7 @@ void OutputDevice::DrawTransparent( const tools::PolyPolygon& rPolyPoly,
 void OutputDevice::DrawTransparent( const GDIMetaFile& rMtf, const Point& rPos,
                                     const Size& rSize, const Gradient& rTransparenceGradient )
 {
-    assert(!dynamic_cast<vcl::Window*>(this) || !dynamic_cast<vcl::Window*>(this)->SupportsDoubleBuffering());
+    assert_if_double_buffered_window();
 
     const Color aBlack( COL_BLACK );
 
diff --git a/vcl/source/outdev/wallpaper.cxx b/vcl/source/outdev/wallpaper.cxx
index c9f3c4c..367ecea 100644
--- a/vcl/source/outdev/wallpaper.cxx
+++ b/vcl/source/outdev/wallpaper.cxx
@@ -26,7 +26,7 @@
 void OutputDevice::DrawWallpaper( const Rectangle& rRect,
                                   const Wallpaper& rWallpaper )
 {
-    assert(!dynamic_cast<vcl::Window*>(this) || !dynamic_cast<vcl::Window*>(this)->SupportsDoubleBuffering());
+    assert_if_double_buffered_window();
 
     if ( mpMetaFile )
         mpMetaFile->AddAction( new MetaWallpaperAction( rRect, rWallpaper ) );
@@ -54,7 +54,7 @@ void OutputDevice::DrawWallpaper( long nX, long nY,
                                   long nWidth, long nHeight,
                                   const Wallpaper& rWallpaper )
 {
-    assert(!dynamic_cast<vcl::Window*>(this) || !dynamic_cast<vcl::Window*>(this)->SupportsDoubleBuffering());
+    assert_if_double_buffered_window();
 
     if( rWallpaper.IsBitmap() )
         DrawBitmapWallpaper( nX, nY, nWidth, nHeight, rWallpaper );
@@ -68,7 +68,7 @@ void OutputDevice::DrawColorWallpaper( long nX, long nY,
                                        long nWidth, long nHeight,
                                        const Wallpaper& rWallpaper )
 {
-    assert(!dynamic_cast<vcl::Window*>(this) || !dynamic_cast<vcl::Window*>(this)->SupportsDoubleBuffering());
+    assert_if_double_buffered_window();
 
     // draw wallpaper without border
     Color aOldLineColor = GetLineColor();
@@ -107,7 +107,7 @@ void OutputDevice::DrawBitmapWallpaper( long nX, long nY,
                                             long nWidth, long nHeight,
                                             const Wallpaper& rWallpaper )
 {
-    assert(!dynamic_cast<vcl::Window*>(this) || !dynamic_cast<vcl::Window*>(this)->SupportsDoubleBuffering());
+    assert_if_double_buffered_window();
 
     BitmapEx aBmpEx;
     const BitmapEx* pCached = rWallpaper.ImplGetImpWallpaper()->ImplGetCachedBitmap();
@@ -345,7 +345,7 @@ void OutputDevice::DrawGradientWallpaper( long nX, long nY,
                                           long nWidth, long nHeight,
                                           const Wallpaper& rWallpaper )
 {
-    assert(!dynamic_cast<vcl::Window*>(this) || !dynamic_cast<vcl::Window*>(this)->SupportsDoubleBuffering());
+    assert_if_double_buffered_window();
 
     Rectangle aBound;
     GDIMetaFile* pOldMetaFile = mpMetaFile;
commit a08f0aa2857f4a5342cedf2038488fc98fb716fb
Author: Caolán McNamara <caolanm at redhat.com>
Date:   Sat May 30 21:22:21 2015 +0100

    coverity#1302609 Division or modulo by zero
    
    Change-Id: Ia578a948b776c15372d3940b350f20048bb6124c

diff --git a/svx/source/tbxctrls/tbcontrl.cxx b/svx/source/tbxctrls/tbcontrl.cxx
index 4741096..5fc515f 100644
--- a/svx/source/tbxctrls/tbcontrl.cxx
+++ b/svx/source/tbxctrls/tbcontrl.cxx
@@ -606,9 +606,9 @@ void SvxStyleBox_Impl::UserDrawEntry(const UserDrawEvent& rUDEvt, const OUString
 
 void SvxStyleBox_Impl::SetupEntry(sal_uInt16 nItem, const Rectangle& rRect, OutputDevice* pDevice, const OUString& rStyleName, bool bIsNotSelected)
 {
+    unsigned int nId = rRect.GetHeight() != 0 ? (rRect.getY() / rRect.GetHeight()) : MAX_STYLES_ENTRIES;
     if (nItem == 0 || nItem == GetEntryCount() - 1)
     {
-        unsigned int nId = (rRect.getY() / rRect.GetHeight());
         if(nId < MAX_STYLES_ENTRIES && m_pButtons[nId])
             m_pButtons[nId]->Hide();
     }
@@ -735,14 +735,12 @@ void SvxStyleBox_Impl::SetupEntry(sal_uInt16 nItem, const Rectangle& rRect, Outp
                 // handle the push-button
                 if (bIsNotSelected)
                 {
-                    unsigned int nId = (rRect.getY() / rRect.GetHeight());
-                    if(nId < MAX_STYLES_ENTRIES && m_pButtons[nId])
+                    if (nId < MAX_STYLES_ENTRIES && m_pButtons[nId])
                         m_pButtons[nId]->Hide();
                 }
                 else
                 {
-                    unsigned int nId = (rRect.getY() / rRect.GetHeight());
-                    if(nId < MAX_STYLES_ENTRIES)
+                    if (nId < MAX_STYLES_ENTRIES)
                     {
                         if(m_pButtons[nId] == nullptr)
                         {
commit 1abbba1d0980786b4bded6961a12da494cb93806
Author: Caolán McNamara <caolanm at redhat.com>
Date:   Sat May 30 21:20:14 2015 +0100

    coverity#1302608 gtk3 Logically dead code
    
    Change-Id: I7e727bc71a5fb02d89eb6b4fb35cda26bcfa617a

diff --git a/vcl/unx/gtk3/gdi/gtk3salnativewidgets-gtk.cxx b/vcl/unx/gtk3/gdi/gtk3salnativewidgets-gtk.cxx
index a782bf8..3b06626 100644
--- a/vcl/unx/gtk3/gdi/gtk3salnativewidgets-gtk.cxx
+++ b/vcl/unx/gtk3/gdi/gtk3salnativewidgets-gtk.cxx
@@ -87,11 +87,10 @@ enum {
     RENDER_SCROLLBAR = 9,
     RENDER_SPINBUTTON = 10,
     RENDER_COMBOBOX = 11,
-    RENDER_EXTENSION = 12,
-    RENDER_EXPANDER = 13,
-    RENDER_ICON = 14,
-    RENDER_PROGRESS = 15,
-    RENDER_FOCUS = 16,
+    RENDER_EXPANDER = 12,
+    RENDER_ICON = 13,
+    RENDER_PROGRESS = 14,
+    RENDER_FOCUS = 15,
 };
 
 static void NWCalcArrowRect( const Rectangle& rButton, Rectangle& rArrow )
@@ -1089,9 +1088,6 @@ bool GtkSalGraphics::drawNativeControl( ControlType nType, ControlPart nPart, co
             gtk_render_frame(context, cr, nX, nY, nWidth, nHeight);
         }
         break;
-    case RENDER_EXTENSION:
-        gtk_render_extension(context, cr, nX, nY, nWidth, nHeight, GTK_POS_BOTTOM);
-        break;
     case RENDER_CHECK:
     case RENDER_RADIO:
         PaintCheckOrRadio(context, cr, rControlRegion, nType);
commit 0b25823eced797ab039f26fe51df73c7aa3e1130
Author: Caolán McNamara <caolanm at redhat.com>
Date:   Sat May 30 21:18:20 2015 +0100

    coverity#1302691 gtk3 Unused value
    
    Change-Id: Iabd10ef2c77dc389c6afdba1d38064e54bf3198d

diff --git a/vcl/unx/gtk3/gdi/gtk3salnativewidgets-gtk.cxx b/vcl/unx/gtk3/gdi/gtk3salnativewidgets-gtk.cxx
index 9cdf850..a782bf8 100644
--- a/vcl/unx/gtk3/gdi/gtk3salnativewidgets-gtk.cxx
+++ b/vcl/unx/gtk3/gdi/gtk3salnativewidgets-gtk.cxx
@@ -1648,7 +1648,6 @@ void GtkSalGraphics::updateSettings( AllSettings& rSettings )
         case PANGO_STRETCH_EXTRA_EXPANDED:    aInfo.m_eWidth = WIDTH_EXTRA_EXPANDED;break;
         case PANGO_STRETCH_ULTRA_EXPANDED:    aInfo.m_eWidth = WIDTH_ULTRA_EXPANDED;break;
     }
-    aInfo.m_eWidth = WIDTH_ULTRA_CONDENSED;
 
 #if OSL_DEBUG_LEVEL > 1
     fprintf( stderr, "font name BEFORE system match: \"%s\"\n", aFamily.getStr() );


More information about the Libreoffice-commits mailing list