#include "wx/cocoa/autorelease.h"
#include "wx/cocoa/string.h"
+#include "wx/cocoa/ObjcRef.h"
#import <AppKit/NSBitmapImageRep.h>
#import <AppKit/NSGraphics.h>
wxBitmapRefData::wxBitmapRefData( const wxBitmapRefData& data)
{
+ wxAutoNSAutoreleasePool pool;
+
m_width = data.m_width;
m_height = data.m_height;
m_depth = data.m_depth;
m_numColors = data.m_numColors;
m_bitmapPalette = data.m_bitmapPalette;
m_quality = data.m_quality;
- m_cocoaNSBitmapImageRep = [data.m_cocoaNSBitmapImageRep copyWithZone:nil];
+ m_cocoaNSBitmapImageRep = wxGCSafeRetain([[data.m_cocoaNSBitmapImageRep copyWithZone:nil] autorelease]);
m_bitmapMask = data.m_bitmapMask?new wxMask(*data.m_bitmapMask):NULL;
}
wxBitmapRefData::~wxBitmapRefData()
{
- [m_cocoaNSBitmapImageRep release];
+ wxGCSafeRelease(m_cocoaNSBitmapImageRep);
m_cocoaNSBitmapImageRep = NULL;
delete m_bitmapMask;
if(!M_BITMAPDATA)
return;
// NOTE: No checking is done to make sure width/height agree
- [bitmapImageRep retain];
- [M_BITMAPDATA->m_cocoaNSBitmapImageRep release];
+ wxGCSafeRetain(bitmapImageRep);
+ wxGCSafeRelease(M_BITMAPDATA->m_cocoaNSBitmapImageRep);
M_BITMAPDATA->m_cocoaNSBitmapImageRep = bitmapImageRep;
}
bool wxBitmap::Create(int w, int h, int d)
{
+ wxAutoNSAutoreleasePool pool;
+
UnRef();
m_refData = new wxBitmapRefData;
M_BITMAPDATA->m_depth = d;
/* TODO: create new bitmap */
- M_BITMAPDATA->m_cocoaNSBitmapImageRep = [[NSBitmapImageRep alloc]
+ M_BITMAPDATA->m_cocoaNSBitmapImageRep = wxGCSafeRetain([[[NSBitmapImageRep alloc]
initWithBitmapDataPlanes: NULL
pixelsWide: w
pixelsHigh: h
colorSpaceName: NSCalibratedRGBColorSpace
bytesPerRow: 0 // NOTE: Contrary to Apple documentation Mac OS
// 10.4 will add padding bytes when 0 is used here
- bitsPerPixel: 0];
+ bitsPerPixel: 0] autorelease]);
wxLogTrace(wxTRACE_COCOA,wxT("M_BITMAPDATA=%p NSBitmapImageRep bitmapData=%p"), M_BITMAPDATA, [M_BITMAPDATA->m_cocoaNSBitmapImageRep bitmapData]);
M_BITMAPDATA->m_ok = true;
M_BITMAPDATA->m_ok = true;
M_BITMAPDATA->m_numColors = 0;
M_BITMAPDATA->m_quality = 0;
- M_BITMAPDATA->m_cocoaNSBitmapImageRep = [imageRep retain];
+ M_BITMAPDATA->m_cocoaNSBitmapImageRep = wxGCSafeRetain(imageRep);
M_BITMAPDATA->m_bitmapMask = NULL;
return true;
}
M_BITMAPDATA->m_ok = true;
M_BITMAPDATA->m_numColors = 0;
M_BITMAPDATA->m_quality = 0;
- M_BITMAPDATA->m_cocoaNSBitmapImageRep = [imageRep retain];
+ M_BITMAPDATA->m_cocoaNSBitmapImageRep = wxGCSafeRetain(imageRep);
M_BITMAPDATA->m_bitmapMask = NULL;
return true;
}
NSRect imageRect;
imageRect.origin.x = imageRect.origin.y = 0.0;
imageRect.size = [icon.GetNSImage() size];
- NSBitmapImageRep *newBitmapRep = [[NSBitmapImageRep alloc] initWithFocusedViewRect:imageRect];
+ NSBitmapImageRep *newBitmapRep = [[[NSBitmapImageRep alloc] initWithFocusedViewRect:imageRect] autorelease];
[icon.GetNSImage() unlockFocus];
if(!newBitmapRep)
return false;
m_refData = new wxBitmapRefData;
- M_BITMAPDATA->m_cocoaNSBitmapImageRep = newBitmapRep;
+ M_BITMAPDATA->m_cocoaNSBitmapImageRep = wxGCSafeRetain(newBitmapRep);
M_BITMAPDATA->m_width = [newBitmapRep pixelsWide];
M_BITMAPDATA->m_height = [newBitmapRep pixelsHigh];
M_BITMAPDATA->m_depth = [newBitmapRep bitsPerSample]*[newBitmapRep samplesPerPixel];
bool wxBitmap::CreateFromImage(const wxImage& image, int depth)
{
+ wxAutoNSAutoreleasePool pool;
UnRef();
wxCHECK_MSG(image.Ok(), false, wxT("invalid image"));
M_BITMAPDATA->m_width = image.GetWidth();
M_BITMAPDATA->m_height = image.GetHeight();
- NSBitmapImageRep *bitmapImage = [[NSBitmapImageRep alloc]
+ NSBitmapImageRep *bitmapImage = [[[NSBitmapImageRep alloc]
initWithBitmapDataPlanes: NULL
pixelsWide: image.GetWidth()
pixelsHigh: image.GetHeight()
isPlanar: NO
colorSpaceName: NSCalibratedRGBColorSpace
bytesPerRow: image.GetWidth()*3
- bitsPerPixel: 0];
+ bitsPerPixel: 0] autorelease];
// TODO: Specify bytesPerRow:0 and then use [bitmapImage bytesPerRow]
// so that the rows are aligned suitably for altivec by the OS (Tiger)
M_BITMAPDATA->m_ok = true;
M_BITMAPDATA->m_numColors = 0;
M_BITMAPDATA->m_quality = 0;
- M_BITMAPDATA->m_cocoaNSBitmapImageRep = bitmapImage;
+ M_BITMAPDATA->m_cocoaNSBitmapImageRep = wxGCSafeRetain(bitmapImage);
M_BITMAPDATA->m_bitmapMask = new wxMask(*this,wxColour(image.GetMaskRed(),image.GetMaskGreen(),image.GetMaskBlue()));
return true;
}
// Copy constructor
wxMask::wxMask(const wxMask& src)
: wxObject(src)
-, m_cocoaNSBitmapImageRep([src.m_cocoaNSBitmapImageRep retain])
+, m_cocoaNSBitmapImageRep(wxGCSafeRetain(src.m_cocoaNSBitmapImageRep))
{
}
wxMask::~wxMask()
{
- [m_cocoaNSBitmapImageRep release];
+ wxGCSafeRelease(m_cocoaNSBitmapImageRep);
}
// Create a mask from a mono bitmap (copies the bitmap).
{ wxCHECK_MSG(false,false,wxT("Unimplemented pixel format")); }
// maskRep was autoreleased in case we had to exit quickly
- m_cocoaNSBitmapImageRep = [maskRep retain];
+ m_cocoaNSBitmapImageRep = wxGCSafeRetain(maskRep);
return true;
}
#endif //WX_PRECOMP
#include "wx/cocoa/autorelease.h"
+#include "wx/cocoa/ObjcRef.h"
#import <AppKit/NSColor.h>
, m_blue(col.m_blue)
, m_alpha(col.m_alpha)
{
- [m_cocoaNSColor retain];
+ wxGCSafeRetain(m_cocoaNSColor);
}
wxColour::wxColour( WX_NSColor aColor )
wxColour& wxColour::operator =(const wxColour& col)
{
- m_cocoaNSColor = col.m_cocoaNSColor;
+ m_cocoaNSColor = wxGCSafeRetain(col.m_cocoaNSColor);
m_red = col.m_red;
m_green = col.m_green;
m_blue = col.m_blue;
m_alpha = col.m_alpha;
- [m_cocoaNSColor retain];
return *this;
}
wxColour::~wxColour ()
{
- [m_cocoaNSColor release];
+ wxGCSafeRelease(m_cocoaNSColor);
}
void wxColour::InitRGBA(unsigned char r,
unsigned char a)
{
wxAutoNSAutoreleasePool pool;
- [m_cocoaNSColor release];
- m_cocoaNSColor = [[NSColor colorWithCalibratedRed:r/255.0 green:g/255.0 blue:b/255.0 alpha:a/255.0] retain];
+ wxGCSafeRelease(m_cocoaNSColor);
+ m_cocoaNSColor = wxGCSafeRetain([NSColor colorWithCalibratedRed:r/255.0 green:g/255.0 blue:b/255.0 alpha:a/255.0]);
m_red = r;
m_green = g;
m_blue = b;
void wxColour::Set( WX_NSColor aColor )
{
- [aColor retain];
- [m_cocoaNSColor release];
+ wxGCSafeRetain(aColor);
+ wxGCSafeRelease(m_cocoaNSColor);
m_cocoaNSColor = aColor;
/* Make a temporary color in RGB format and get the values. Note that
#include "wx/cocoa/autorelease.h"
#include "wx/cocoa/string.h"
+#include "wx/cocoa/ObjcRef.h"
#import <AppKit/NSBezierPath.h>
#import <AppKit/NSTextStorage.h>
void wxCocoaDCImpl::CocoaInitializeTextSystem()
{
+ wxAutoNSAutoreleasePool pool;
+
wxASSERT_MSG(!sm_cocoaNSTextStorage && !sm_cocoaNSLayoutManager && !sm_cocoaNSTextContainer,wxT("Text system already initalized! BAD PROGRAMMER!"));
- sm_cocoaNSTextStorage = [[NSTextStorage alloc] init];
+ // FIXME: Never released
+ sm_cocoaNSTextStorage = wxGCSafeRetain([[[NSTextStorage alloc] init] autorelease]);
+
+ // FIXME: Never released
+ sm_cocoaNSLayoutManager = wxGCSafeRetain([[[NSLayoutManager alloc] init] autorelease]);
- sm_cocoaNSLayoutManager = [[NSLayoutManager alloc] init];
[sm_cocoaNSTextStorage addLayoutManager:sm_cocoaNSLayoutManager];
// NSTextStorage retains NSLayoutManager, but so do we
// [sm_cocoaNSLayoutManager release]; [sm_cocoaNSLayoutManager retain];
// NOTE: initWithContainerSize is the designated initializer, but the
// Apple CircleView sample gets away with just calling init, which
// is all we really need for our purposes.
- sm_cocoaNSTextContainer = [[NSTextContainer alloc] init];
+ // FIXME: Never released
+ sm_cocoaNSTextContainer = wxGCSafeRetain([[[NSTextContainer alloc] init] autorelease]);
[sm_cocoaNSLayoutManager addTextContainer:sm_cocoaNSTextContainer];
// NSLayoutManager retains NSTextContainer, but so do we
// [sm_cocoaNSTextContainer release]; [sm_cocoaNSTextContainer retain];
#include "wx/colour.h"
#endif //WX_PRECOMP
+#include "wx/cocoa/ObjcRef.h"
+
#import <AppKit/NSColor.h>
// ========================================================================
m_nbDash = data.m_nbDash;
m_dash = data.m_dash;
m_stipple = data.m_stipple;
- m_cocoaNSColor = [data.m_cocoaNSColor retain];
+ m_cocoaNSColor = wxGCSafeRetain(data.m_cocoaNSColor);
m_cocoaDash = NULL;
}
inline void wxPenRefData::FreeCocoaNSColor()
{
- [m_cocoaNSColor release];
+ wxGCSafeRelease(m_cocoaNSColor);
m_cocoaNSColor = nil;
}
switch( m_style )
{
case wxTRANSPARENT:
- m_cocoaNSColor = [[NSColor clearColor] retain];
+ m_cocoaNSColor = wxGCSafeRetain([NSColor clearColor]);
break;
case wxSTIPPLE:
// wxBitmap isn't implemented yet
if(!colour_NSColor)
colour_NSColor = [NSColor clearColor];
m_cocoaNSColor = [colour_NSColor copyWithZone:nil];
+ [wxGCSafeRetain(m_cocoaNSColor) release]; // retain in GC. no change in RR.
break;
}
}
#include "wx/cocoa/autorelease.h"
#include "wx/cocoa/string.h"
+#include "wx/cocoa/ObjcRef.h"
#include "wx/cocoa/objc/NSView.h"
#include "wx/cocoa/objc/NSWindow.h"
bool need_debug = cocoaNSWindow || m_cocoaNSWindow;
if(need_debug) wxLogTrace(wxTRACE_COCOA_RetainRelease,wxT("wxTopLevelWindowCocoa=%p::SetNSWindow [m_cocoaNSWindow=%p retainCount]=%d"),this,m_cocoaNSWindow,[m_cocoaNSWindow retainCount]);
DisassociateNSWindow(m_cocoaNSWindow);
- [cocoaNSWindow retain];
- [m_cocoaNSWindow release];
+ wxGCSafeRetain(cocoaNSWindow);
+ wxGCSafeRelease(m_cocoaNSWindow);
m_cocoaNSWindow = cocoaNSWindow;
// NOTE: We are no longer using posing so we won't get events on the
// window's view unless it was explicitly created as the wx view class.
#include "wx/cocoa/string.h"
#include "wx/cocoa/trackingrectmanager.h"
#include "wx/mac/corefoundation/cfref.h"
+#include "wx/cocoa/ObjcRef.h"
#import <Foundation/NSArray.h>
#import <Foundation/NSRunLoop.h>
bool need_debug = cocoaNSView || m_cocoaNSView;
if(need_debug) wxLogTrace(wxTRACE_COCOA_RetainRelease,wxT("wxWindowCocoa=%p::SetNSView [m_cocoaNSView=%p retainCount]=%d"),this,m_cocoaNSView,[m_cocoaNSView retainCount]);
DisassociateNSView(m_cocoaNSView);
- [cocoaNSView retain];
- [m_cocoaNSView release];
+ wxGCSafeRetain(cocoaNSView);
+ wxGCSafeRelease(m_cocoaNSView);
m_cocoaNSView = cocoaNSView;
AssociateNSView(m_cocoaNSView);
if(need_debug) wxLogTrace(wxTRACE_COCOA_RetainRelease,wxT("wxWindowCocoa=%p::SetNSView [cocoaNSView=%p retainCount]=%d"),this,cocoaNSView,[cocoaNSView retainCount]);