[Libreoffice-commits] core.git: vcl/win

Libreoffice Gerrit user logerrit at kemper.freedesktop.org
Tue Jan 22 16:10:16 UTC 2019


 vcl/win/gdi/gdiimpl.cxx |   46 ++++++++++++++++++++++++++++++++++++++++------
 vcl/win/gdi/gdiimpl.hxx |    2 ++
 2 files changed, 42 insertions(+), 6 deletions(-)

New commits:
commit 81ab8e736fafbe826008939568e2d446204ae080
Author:     Xisco Faulí <xiscofauli at libreoffice.org>
AuthorDate: Tue Jan 22 14:04:22 2019 +0100
Commit:     Xisco Faulí <xiscofauli at libreoffice.org>
CommitDate: Tue Jan 22 17:09:46 2019 +0100

    Revert "tdf#107792 vcl/win: do not afraid to delete stock objects"
    
    This reverts commit b940eb5903f583089e99042d60ceae635ae2af83.
    
    So far tdf#122877, tdf#122867 and tdf#122851 have been found
    
    Change-Id: Id69db9e705001aa8b561642b4bb9e70a2fc3fcbd
    Reviewed-on: https://gerrit.libreoffice.org/66737
    Reviewed-by: Dmitriy Shilin <dshil at fastmail.com>
    Tested-by: Jenkins
    Reviewed-by: Xisco Faulí <xiscofauli at libreoffice.org>

diff --git a/vcl/win/gdi/gdiimpl.cxx b/vcl/win/gdi/gdiimpl.cxx
index b3f5b0735bb0..a9406729fa21 100644
--- a/vcl/win/gdi/gdiimpl.cxx
+++ b/vcl/win/gdi/gdiimpl.cxx
@@ -210,7 +210,9 @@ WinSalGraphicsImpl::WinSalGraphicsImpl(WinSalGraphics& rParent):
     mbXORMode(false),
     mbPen(false),
     mhPen(nullptr),
+    mbStockPen(false),
     mbBrush(false),
+    mbStockBrush(false),
     mhBrush(nullptr)
 {
 }
@@ -218,10 +220,16 @@ WinSalGraphicsImpl::WinSalGraphicsImpl(WinSalGraphics& rParent):
 WinSalGraphicsImpl::~WinSalGraphicsImpl()
 {
     if ( mhPen )
-        DeletePen( mhPen );
+    {
+        if ( !mbStockPen )
+            DeletePen( mhPen );
+    }
 
     if ( mhBrush )
-        DeleteBrush( mhBrush );
+    {
+        if ( !mbStockBrush )
+            DeleteBrush( mhBrush );
+    }
 }
 
 void WinSalGraphicsImpl::Init()
@@ -1278,6 +1286,7 @@ void WinSalGraphicsImpl::SetLineColor()
 
     // set new data
     mbPen       = FALSE;
+    mbStockPen  = TRUE;
 }
 
 void WinSalGraphicsImpl::SetLineColor(Color nColor)
@@ -1285,8 +1294,12 @@ void WinSalGraphicsImpl::SetLineColor(Color nColor)
     COLORREF nPenColor = PALETTERGB(nColor.GetRed(),
                                     nColor.GetGreen(),
                                     nColor.GetBlue());
+    bool bStockPen = false;
+
     HPEN hNewPen = SearchStockPen(nPenColor);
-    if (!hNewPen)
+    if (hNewPen)
+        bStockPen = true;
+    else
         hNewPen = MakePen(nColor);
 
     ResetPen(hNewPen);
@@ -1295,6 +1308,7 @@ void WinSalGraphicsImpl::SetLineColor(Color nColor)
     mnPenColor  = nPenColor;
     maLineColor = nColor;
     mbPen       = TRUE;
+    mbStockPen  = bStockPen;
 }
 
 HPEN WinSalGraphicsImpl::SearchStockPen(COLORREF nPenColor)
@@ -1336,9 +1350,16 @@ void WinSalGraphicsImpl::ResetPen(HPEN hNewPen)
     HPEN hOldPen = SelectPen(mrParent.getHDC(), hNewPen);
 
     if (mhPen)
-        DeletePen(mhPen);
+    {
+        if (!mbStockPen)
+        {
+            DeletePen(mhPen);
+        }
+    }
     else
+    {
         mrParent.mhDefPen = hOldPen;
+    }
 
     mhPen = hNewPen;
 }
@@ -1349,6 +1370,7 @@ void WinSalGraphicsImpl::SetFillColor()
 
     // set new data
     mbBrush     = FALSE;
+    mbStockBrush = TRUE;
 }
 
 void WinSalGraphicsImpl::SetFillColor(Color nColor)
@@ -1356,8 +1378,12 @@ void WinSalGraphicsImpl::SetFillColor(Color nColor)
     COLORREF nBrushColor = PALETTERGB(nColor.GetRed(),
                                       nColor.GetGreen(),
                                       nColor.GetBlue());
+    bool bStockBrush = false;
+
     HBRUSH hNewBrush = SearchStockBrush(nBrushColor);
-    if (!hNewBrush)
+    if (hNewBrush)
+        bStockBrush = true;
+    else
         hNewBrush = MakeBrush(nColor);
 
     ResetBrush(hNewBrush);
@@ -1366,6 +1392,7 @@ void WinSalGraphicsImpl::SetFillColor(Color nColor)
     mnBrushColor = nBrushColor;
     maFillColor = nColor;
     mbBrush     = TRUE;
+    mbStockBrush = bStockBrush;
 }
 
 HBRUSH WinSalGraphicsImpl::SearchStockBrush(COLORREF nBrushColor)
@@ -1498,9 +1525,16 @@ void WinSalGraphicsImpl::ResetBrush(HBRUSH hNewBrush)
     HBRUSH hOldBrush = SelectBrush(mrParent.getHDC(), hNewBrush);
 
     if (mhBrush)
-        DeleteBrush(mhBrush);
+    {
+        if (!mbStockBrush)
+        {
+            DeleteBrush(mhBrush);
+        }
+    }
     else
+    {
         mrParent.mhDefBrush = hOldBrush;
+    }
 
     mhBrush = hNewBrush;
 }
diff --git a/vcl/win/gdi/gdiimpl.hxx b/vcl/win/gdi/gdiimpl.hxx
index e96b226457f7..f1cd729daf1b 100644
--- a/vcl/win/gdi/gdiimpl.hxx
+++ b/vcl/win/gdi/gdiimpl.hxx
@@ -38,7 +38,9 @@ private:
     bool mbXORMode : 1; // _every_ output with RasterOp XOR
     bool mbPen : 1; // is Pen (FALSE == NULL_PEN)
     HPEN mhPen; // Pen
+    bool mbStockPen : 1; // is Pen a stockpen
     bool mbBrush : 1; // is Brush (FALSE == NULL_BRUSH)
+    bool mbStockBrush : 1; // is Brush a stockbrush
     HBRUSH mhBrush; // Brush
     COLORREF mnPenColor; // PenColor
     COLORREF mnBrushColor; // BrushColor


More information about the Libreoffice-commits mailing list