From 1a1e9ff1c33b8c1f3882448deae8d5cfe6c204a2 Mon Sep 17 00:00:00 2001 From: David Elliott Date: Tue, 18 Jan 2005 03:47:33 +0000 Subject: [PATCH] Don't depend on m_cocoaWxToBoundsTransform not being released until after we're done with it; retain/release it appropriately. git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@31442 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- src/cocoa/dc.mm | 1 + src/cocoa/dcclient.mm | 15 ++++++++++++--- src/cocoa/dcmemory.mm | 5 ++++- 3 files changed, 17 insertions(+), 4 deletions(-) diff --git a/src/cocoa/dc.mm b/src/cocoa/dc.mm index b74aa7bbf7..94578291b6 100644 --- a/src/cocoa/dc.mm +++ b/src/cocoa/dc.mm @@ -146,6 +146,7 @@ wxDC::wxDC(void) wxDC::~wxDC(void) { + [m_cocoaWxToBoundsTransform release]; } bool wxDC::CocoaLockFocus() diff --git a/src/cocoa/dcclient.mm b/src/cocoa/dcclient.mm index d6ca05bc5e..c22214c824 100644 --- a/src/cocoa/dcclient.mm +++ b/src/cocoa/dcclient.mm @@ -70,7 +70,10 @@ bool wxWindowDC::CocoaUnlockFocusOnNSView() bool wxWindowDC::CocoaLockFocus() { wxLogTrace(wxTRACE_COCOA,wxT("Locking focus on wxWindowDC=%p, NSView=%p"),this, m_window->GetNonClientNSView()); - m_cocoaWxToBoundsTransform = CocoaGetWxToBoundsTransform([m_window->GetNonClientNSView() isFlipped], [m_window->GetNonClientNSView() bounds].size.height); + NSAffineTransform *newTransform = CocoaGetWxToBoundsTransform([m_window->GetNonClientNSView() isFlipped], [m_window->GetNonClientNSView() bounds].size.height); + [newTransform retain]; + [m_cocoaWxToBoundsTransform release]; + m_cocoaWxToBoundsTransform = newTransform; return CocoaLockFocusOnNSView(m_window->GetNonClientNSView()); } @@ -113,7 +116,10 @@ wxClientDC::~wxClientDC(void) bool wxClientDC::CocoaLockFocus() { wxLogTrace(wxTRACE_COCOA,wxT("Locking focus on wxClientDC=%p, NSView=%p"),this, m_window->GetNSView()); - m_cocoaWxToBoundsTransform = m_window->CocoaGetWxToBoundsTransform(); + NSAffineTransform *newTransform = m_window->CocoaGetWxToBoundsTransform(); + [newTransform retain]; + [m_cocoaWxToBoundsTransform release]; + m_cocoaWxToBoundsTransform = newTransform; return CocoaLockFocusOnNSView(m_window->GetNSView()); } @@ -138,7 +144,10 @@ wxPaintDC::wxPaintDC( wxWindow *window ) wxASSERT_MSG([NSView focusView]==window->GetNSView(), wxT("PaintDC's NSView does not have focus. Please use wxPaintDC only as the first DC created in a paint handler")); sm_cocoaDCStack.Insert(this); m_lockedNSView = window->GetNSView(); - m_cocoaWxToBoundsTransform = window->CocoaGetWxToBoundsTransform(); + NSAffineTransform *newTransform = window->CocoaGetWxToBoundsTransform(); + [newTransform retain]; + [m_cocoaWxToBoundsTransform release]; + m_cocoaWxToBoundsTransform = newTransform; CocoaApplyTransformations(); }; diff --git a/src/cocoa/dcmemory.mm b/src/cocoa/dcmemory.mm index fb11593b35..0f2f04c365 100644 --- a/src/cocoa/dcmemory.mm +++ b/src/cocoa/dcmemory.mm @@ -53,7 +53,10 @@ bool wxMemoryDC::CocoaLockFocus() { [m_cocoaNSImage lockFocus]; sm_cocoaDCStack.Insert(this); - m_cocoaWxToBoundsTransform = CocoaGetWxToBoundsTransform([m_cocoaNSImage isFlipped], [m_cocoaNSImage size].height); + NSAffineTransform *newTransform = CocoaGetWxToBoundsTransform([m_cocoaNSImage isFlipped], [m_cocoaNSImage size].height); + [newTransform retain]; + [m_cocoaWxToBoundsTransform release]; + m_cocoaWxToBoundsTransform = newTransform; CocoaApplyTransformations(); return true; } -- 2.45.2