DECLARE_WXCOCOA_OBJC_CLASS(NSAffineTransform);
-class WXDLLIMPEXP_FWD_CORE wxDC;
-WX_DECLARE_LIST(wxDC, wxCocoaDCStack);
+#include "wx/dc.h"
+
+class WXDLLIMPEXP_FWD_CORE wxCocoaDCImpl;
+WX_DECLARE_LIST(wxCocoaDCImpl, wxCocoaDCStack);
//=========================================================================
// wxDC
//=========================================================================
-class WXDLLEXPORT wxDC: public wxDCBase
+class WXDLLIMPEXP_CORE wxCocoaDCImpl: public wxDCImpl
{
- DECLARE_DYNAMIC_CLASS(wxDC)
- DECLARE_NO_COPY_CLASS(wxDC)
+ DECLARE_ABSTRACT_CLASS(wxCocoaDCImpl)
+ DECLARE_NO_COPY_CLASS(wxCocoaDCImpl)
//-------------------------------------------------------------------------
// Initialization
//-------------------------------------------------------------------------
public:
- wxDC();
- virtual ~wxDC();
+ wxCocoaDCImpl(wxDC *owner);
+ virtual ~wxCocoaDCImpl();
//-------------------------------------------------------------------------
// wxCocoa specifics
/////////////////////////////////////////////////////////////////////////////
// Name: wx/cocoa/dcclient.h
-// Purpose: wxClientDC, wxPaintDC and wxWindowDC classes
+// Purpose: wxClientDCImpl, wxPaintDCImpl and wxWindowDCImpl classes
// Author: David Elliott
// Modified by:
// Created: 2003/04/01
#ifndef __WX_COCOA_DCCLIENT_H__
#define __WX_COCOA_DCCLIENT_H__
-#include "wx/dc.h"
+#include "wx/cocoa/dc.h"
// DFE: A while ago I stumbled upon the fact that retrieving the parent
// NSView of the content view seems to return the entire window rectangle
// (including decorations). Of course, that is not at all part of the
// Cocoa or OpenStep APIs, but it might be a neat hack.
-class WXDLLIMPEXP_CORE wxWindowDC: public wxDC
+class WXDLLIMPEXP_CORE wxWindowDCImpl: public wxCocoaDCImpl
{
- DECLARE_DYNAMIC_CLASS(wxWindowDC)
+ DECLARE_DYNAMIC_CLASS(wxWindowDCImpl)
public:
- wxWindowDC(void);
+ wxWindowDCImpl(wxDC *owner);
// Create a DC corresponding to a window
- wxWindowDC(wxWindow *win);
- virtual ~wxWindowDC(void);
+ wxWindowDCImpl(wxDC *owner, wxWindow *win);
+ virtual ~wxWindowDCImpl(void);
protected:
wxWindow *m_window;
virtual bool CocoaGetBounds(void *rectData);
};
-class WXDLLIMPEXP_CORE wxClientDC: public wxWindowDC
+class WXDLLIMPEXP_CORE wxClientDCImpl: public wxWindowDCImpl
{
- DECLARE_DYNAMIC_CLASS(wxClientDC)
+ DECLARE_DYNAMIC_CLASS(wxClientDCImpl)
public:
- wxClientDC(void);
+ wxClientDCImpl(wxDC *owner);
// Create a DC corresponding to a window
- wxClientDC(wxWindow *win);
- virtual ~wxClientDC(void);
+ wxClientDCImpl(wxDC *owner, wxWindow *win);
+ virtual ~wxClientDCImpl(void);
protected:
// DC stack
virtual bool CocoaLockFocus();
virtual bool CocoaUnlockFocus();
};
-class WXDLLIMPEXP_CORE wxPaintDC: public wxWindowDC
+class WXDLLIMPEXP_CORE wxPaintDCImpl: public wxWindowDCImpl
{
- DECLARE_DYNAMIC_CLASS(wxPaintDC)
+ DECLARE_DYNAMIC_CLASS(wxPaintDCImpl)
public:
- wxPaintDC(void);
+ wxPaintDCImpl(wxDC *owner);
// Create a DC corresponding to a window
- wxPaintDC(wxWindow *win);
- virtual ~wxPaintDC(void);
+ wxPaintDCImpl(wxDC *owner, wxWindow *win);
+ virtual ~wxPaintDCImpl(void);
protected:
// DC stack
virtual bool CocoaLockFocus();
/////////////////////////////////////////////////////////////////////////////
// Name: wx/cocoa/dcmemory.h
-// Purpose: wxMemoryDC class
+// Purpose: wxMemoryDCImpl class
// Author: David Elliott
// Modified by:
// Created: 2003/03/16
#ifndef __WX_COCOA_DCMEMORY_H__
#define __WX_COCOA_DCMEMORY_H__
-#include "wx/dc.h"
+#include "wx/cocoa/dc.h"
-class WXDLLEXPORT wxMemoryDC: public wxDC, public wxMemoryDCBase
+#include "wx/dcmemory.h"
+
+class WXDLLEXPORT wxMemoryDCImpl: public wxCocoaDCImpl
{
- DECLARE_DYNAMIC_CLASS(wxMemoryDC)
+ DECLARE_DYNAMIC_CLASS(wxMemoryDCImpl)
public:
- wxMemoryDC() { Init(); }
- wxMemoryDC(wxBitmap& bitmap) { Init(); SelectObject(bitmap); }
- wxMemoryDC( wxDC *dc ); // Create compatible DC
- virtual ~wxMemoryDC(void);
+ wxMemoryDCImpl(wxMemoryDC *owner)
+ : wxCocoaDCImpl(owner)
+ { Init(); }
+ wxMemoryDCImpl(wxMemoryDC *owner, wxBitmap& bitmap)
+ : wxCocoaDCImpl(owner)
+ { Init();
+ owner->SelectObject(bitmap);
+ }
+ wxMemoryDCImpl(wxMemoryDC *owner, wxDC *dc ); // Create compatible DC
+ virtual ~wxMemoryDCImpl(void);
virtual void DoGetSize(int *width, int *height) const;
virtual void DoSelect(const wxBitmap& bitmap);
/////////////////////////////////////////////////////////////////////////////
// Name: wx/cocoa/dcscreen.h
-// Purpose: wxScreenDC class
+// Purpose: wxScreenDCImpl class
// Author: David Elliott
// Modified by:
// Created: 2003/03/16
#ifndef __WX_COCOA_DCSCREEN_H__
#define __WX_COCOA_DCSCREEN_H__
-#include "wx/dcclient.h"
+#include "wx/dcscreen.h"
+#include "wx/cocoa/dc.h"
-class WXDLLEXPORT wxScreenDC: public wxDC
+class WXDLLEXPORT wxScreenDCImpl: public wxCocoaDCImpl
{
- DECLARE_DYNAMIC_CLASS(wxScreenDC)
+ DECLARE_DYNAMIC_CLASS(wxScreenDCImpl)
public:
- wxScreenDC(void);
- wxScreenDC( wxDC *dc ); // Create compatible DC
- virtual ~wxScreenDC(void);
+ wxScreenDCImpl(wxScreenDC *owner);
+ wxScreenDCImpl(wxScreenDC *owner, wxDC *dc ); // Create compatible DC
+ virtual ~wxScreenDCImpl(void);
// Compatibility with X's requirements for drawing on top of all windows
static bool StartDrawingOnTop(wxWindow* WXUNUSED(window)) { return true; }
#include "wx/app.h"
#ifndef WX_PRECOMP
- #include "wx/dc.h"
#include "wx/intl.h"
#include "wx/log.h"
#include "wx/module.h"
#include "wx/cocoa/mbarman.h"
#include "wx/cocoa/NSApplication.h"
+#include "wx/cocoa/dc.h"
+
#import <AppKit/NSApplication.h>
#import <Foundation/NSRunLoop.h>
#import <Foundation/NSThread.h>
{
wxAutoNSAutoreleasePool pool;
- wxDC::CocoaShutdownTextSystem();
+ wxCocoaDCImpl::CocoaShutdownTextSystem();
wxMenuBarManager::DestroyInstance();
[[NSNotificationCenter defaultCenter] removeObserver:sg_cocoaAppObserver];
if(!sm_isEmbedded)
wxMenuBarManager::CreateInstance();
- wxDC::CocoaInitializeTextSystem();
+ wxCocoaDCImpl::CocoaInitializeTextSystem();
return true;
}
#include "wx/wxprec.h"
-#include "wx/dc.h"
+#include "wx/cocoa/dc.h"
#ifndef WX_PRECOMP
#include "wx/log.h"
#include "wx/listimpl.cpp"
WX_DEFINE_LIST(wxCocoaDCStack);
-IMPLEMENT_ABSTRACT_CLASS(wxDC, wxObject)
-WX_NSTextStorage wxDC::sm_cocoaNSTextStorage = nil;
-WX_NSLayoutManager wxDC::sm_cocoaNSLayoutManager = nil;
-WX_NSTextContainer wxDC::sm_cocoaNSTextContainer = nil;
-wxCocoaDCStack wxDC::sm_cocoaDCStack;
+IMPLEMENT_ABSTRACT_CLASS(wxCocoaDCImpl, wxDCImpl)
+
+WX_NSTextStorage wxCocoaDCImpl::sm_cocoaNSTextStorage = nil;
+WX_NSLayoutManager wxCocoaDCImpl::sm_cocoaNSLayoutManager = nil;
+WX_NSTextContainer wxCocoaDCImpl::sm_cocoaNSTextContainer = nil;
+wxCocoaDCStack wxCocoaDCImpl::sm_cocoaDCStack;
inline void CocoaSetPenForNSBezierPath(wxPen &pen, NSBezierPath *bezpath)
{
}
}
-void wxDC::CocoaInitializeTextSystem()
+void wxCocoaDCImpl::CocoaInitializeTextSystem()
{
wxASSERT_MSG(!sm_cocoaNSTextStorage && !sm_cocoaNSLayoutManager && !sm_cocoaNSTextContainer,wxT("Text system already initalized! BAD PROGRAMMER!"));
// [sm_cocoaNSTextContainer release]; [sm_cocoaNSTextContainer retain];
}
-void wxDC::CocoaShutdownTextSystem()
+void wxCocoaDCImpl::CocoaShutdownTextSystem()
{
[sm_cocoaNSTextContainer release]; sm_cocoaNSTextContainer = nil;
[sm_cocoaNSLayoutManager release]; sm_cocoaNSLayoutManager = nil;
[sm_cocoaNSTextStorage release]; sm_cocoaNSTextStorage = nil;
}
-void wxDC::CocoaUnwindStackAndLoseFocus()
+void wxCocoaDCImpl::CocoaUnwindStackAndLoseFocus()
{
wxCocoaDCStack::compatibility_iterator ourNode=sm_cocoaDCStack.Find(this);
if(ourNode)
wxCocoaDCStack::compatibility_iterator node=sm_cocoaDCStack.GetFirst();
for(;node!=ourNode; node=sm_cocoaDCStack.GetFirst())
{
- wxDC *dc = node->GetData();
+ wxCocoaDCImpl *dc = node->GetData();
wxASSERT(dc);
wxASSERT(dc!=this);
if(!dc->CocoaUnlockFocus())
}
}
-bool wxDC::CocoaUnwindStackAndTakeFocus()
+bool wxCocoaDCImpl::CocoaUnwindStackAndTakeFocus()
{
wxCocoaDCStack::compatibility_iterator node=sm_cocoaDCStack.GetFirst();
for(;node;node = sm_cocoaDCStack.GetFirst())
{
- wxDC *dc = node->GetData();
+ wxCocoaDCImpl *dc = node->GetData();
wxASSERT(dc);
// If we're on the stack, then it's unwound enough and we have focus
if(dc==this)
return CocoaLockFocus();
}
-wxDC::wxDC(void)
+wxCocoaDCImpl::wxCocoaDCImpl(wxDC *owner)
+: wxDCImpl(owner)
{
m_cocoaWxToBoundsTransform = nil;
m_pen = *wxBLACK_PEN;
}
-wxDC::~wxDC(void)
+wxCocoaDCImpl::~wxDC(void)
{
[m_cocoaWxToBoundsTransform release];
}
-bool wxDC::CocoaLockFocus()
+bool wxCocoaDCImpl::CocoaLockFocus()
{
return false;
}
-bool wxDC::CocoaUnlockFocus()
+bool wxCocoaDCImpl::CocoaUnlockFocus()
{
return false;
}
-/*static*/ WX_NSAffineTransform wxDC::CocoaGetWxToBoundsTransform(bool isFlipped, float height)
+/*static*/ WX_NSAffineTransform wxCocoaDCImpl::CocoaGetWxToBoundsTransform(bool isFlipped, float height)
{
NSAffineTransform *transform = nil;
// This transform flips the graphics since wxDC uses top-left origin
return transform;
}
-void wxDC::CocoaApplyTransformations()
+void wxCocoaDCImpl::CocoaApplyTransformations()
{
[m_cocoaWxToBoundsTransform concat];
// TODO: Apply device/logical/user position/scaling transformations
}
-void wxDC::CocoaUnapplyTransformations()
+void wxCocoaDCImpl::CocoaUnapplyTransformations()
{
// NOTE: You *must* call this with focus held.
// Undo all transforms so we're back in true Cocoa coords with
[invertTransform release];
}
-bool wxDC::CocoaGetBounds(void *rectData)
+bool wxCocoaDCImpl::CocoaGetBounds(void *rectData)
{
// We don't know what we are so we can't return anything.
return false;
}
-void wxDC::DoDrawRectangle(wxCoord x, wxCoord y, wxCoord width, wxCoord height)
+void wxCocoaDCImpl::DoDrawRectangle(wxCoord x, wxCoord y, wxCoord width, wxCoord height)
{
wxAutoNSAutoreleasePool pool;
if(!CocoaTakeFocus()) return;
[bezpath fill];
}
-void wxDC::DoDrawLine(wxCoord x1, wxCoord y1, wxCoord x2, wxCoord y2)
+void wxCocoaDCImpl::DoDrawLine(wxCoord x1, wxCoord y1, wxCoord x2, wxCoord y2)
{
wxAutoNSAutoreleasePool pool;
if(!CocoaTakeFocus()) return;
[bezpath stroke];
}
-void wxDC::DoGetTextExtent(const wxString& text, wxCoord *x, wxCoord *y, wxCoord *descent, wxCoord *externalLeading, const wxFont *theFont) const
+void wxCocoaDCImpl::DoGetTextExtent(const wxString& text, wxCoord *x, wxCoord *y, wxCoord *descent, wxCoord *externalLeading, const wxFont *theFont) const
{
wxAutoNSAutoreleasePool pool;
// FIXME: Cache this so it can be used for DoDrawText
*externalLeading=0;
}
-void wxDC::DoDrawText(const wxString& text, wxCoord x, wxCoord y)
+void wxCocoaDCImpl::DoDrawText(const wxString& text, wxCoord x, wxCoord y)
{
wxAutoNSAutoreleasePool pool;
if(!CocoaTakeFocus()) return;
// wxDC
//-----------------------------------------------------------------------------
-void wxDC::DoDrawIcon( const wxIcon &WXUNUSED(icon), int WXUNUSED(x), int WXUNUSED(y) )
+void wxCocoaDCImpl::DoDrawIcon( const wxIcon &WXUNUSED(icon), int WXUNUSED(x), int WXUNUSED(y) )
{
};
-void wxDC::DoDrawPoint( int x, int y )
+void wxCocoaDCImpl::DoDrawPoint( int x, int y )
{
};
-void wxDC::DoDrawPolygon( int, wxPoint *, int, int, int)
+void wxCocoaDCImpl::DoDrawPolygon( int, wxPoint *, int, int, int)
{
};
-void wxDC::DoDrawLines( int, wxPoint *, int, int )
+void wxCocoaDCImpl::DoDrawLines( int, wxPoint *, int, int )
{
}
-int wxDC::GetDepth() const
+int wxCocoaDCImpl::GetDepth() const
{
return 0;
}
-wxSize wxDC::GetPPI() const
+wxSize wxCocoaDCImpl::GetPPI() const
{
return wxSize(0,0);
}
-bool wxDC::CanGetTextExtent() const
+bool wxCocoaDCImpl::CanGetTextExtent() const
{
return false;
}
-wxCoord wxDC::GetCharHeight() const
+wxCoord wxCocoaDCImpl::GetCharHeight() const
{
return 0;
}
-wxCoord wxDC::GetCharWidth() const
+wxCoord wxCocoaDCImpl::GetCharWidth() const
{
return 0;
}
-bool wxDC::CanDrawBitmap() const
+bool wxCocoaDCImpl::CanDrawBitmap() const
{
return true;
}
-bool wxDC::DoGetPixel(wxCoord x, wxCoord y, wxColour *col) const
+bool wxCocoaDCImpl::DoGetPixel(wxCoord x, wxCoord y, wxColour *col) const
{
return false;
}
-void wxDC::DoDrawArc(wxCoord x1, wxCoord y1, wxCoord x2, wxCoord y2, wxCoord xc, wxCoord yc)
+void wxCocoaDCImpl::DoDrawArc(wxCoord x1, wxCoord y1, wxCoord x2, wxCoord y2, wxCoord xc, wxCoord yc)
{
}
-void wxDC::SetFont(const wxFont& font)
+void wxCocoaDCImpl::SetFont(const wxFont& font)
{
m_font = font;
}
-void wxDC::SetPen(const wxPen& pen)
+void wxCocoaDCImpl::SetPen(const wxPen& pen)
{
m_pen = pen;
}
-void wxDC::SetBrush(const wxBrush& brush)
+void wxCocoaDCImpl::SetBrush(const wxBrush& brush)
{
m_brush = brush;
}
-void wxDC::DoSetClippingRegionAsRegion(const wxRegion& region)
+void wxCocoaDCImpl::DoSetClippingRegionAsRegion(const wxRegion& region)
{
}
-void wxDC::DoSetClippingRegion(wxCoord x, wxCoord y, wxCoord width, wxCoord height)
+void wxCocoaDCImpl::DoSetClippingRegion(wxCoord x, wxCoord y, wxCoord width, wxCoord height)
{
}
-void wxDC::DestroyClippingRegion()
+void wxCocoaDCImpl::DestroyClippingRegion()
{
}
-void wxDC::DoDrawRoundedRectangle(wxCoord x, wxCoord y, wxCoord width, wxCoord height, double radius)
+void wxCocoaDCImpl::DoDrawRoundedRectangle(wxCoord x, wxCoord y, wxCoord width, wxCoord height, double radius)
{
}
-void wxDC::DoDrawRotatedText(const wxString& text, wxCoord x, wxCoord y, double angle)
+void wxCocoaDCImpl::DoDrawRotatedText(const wxString& text, wxCoord x, wxCoord y, double angle)
{
}
-void wxDC::DoDrawEllipticArc(wxCoord x, wxCoord y, wxCoord w, wxCoord h, double sa, double ea)
+void wxCocoaDCImpl::DoDrawEllipticArc(wxCoord x, wxCoord y, wxCoord w, wxCoord h, double sa, double ea)
{
}
-void wxDC::DoDrawEllipse(wxCoord x, wxCoord y, wxCoord width, wxCoord height)
+void wxCocoaDCImpl::DoDrawEllipse(wxCoord x, wxCoord y, wxCoord width, wxCoord height)
{
}
-void wxDC::DoDrawBitmap(const wxBitmap &bmp, wxCoord x, wxCoord y, bool useMask)
+void wxCocoaDCImpl::DoDrawBitmap(const wxBitmap &bmp, wxCoord x, wxCoord y, bool useMask)
{
wxAutoNSAutoreleasePool pool;
if(!CocoaTakeFocus()) return;
[context restoreGraphicsState];
}
-bool wxDC::DoFloodFill(wxCoord x, wxCoord y, const wxColour& col, int style)
+bool wxCocoaDCImpl::DoFloodFill(wxCoord x, wxCoord y, const wxColour& col, int style)
{
return false;
}
-void wxDC::DoCrossHair(wxCoord x, wxCoord y)
+void wxCocoaDCImpl::DoCrossHair(wxCoord x, wxCoord y)
{
}
-bool wxDC::DoBlit(wxCoord xdest, wxCoord ydest, wxCoord width, wxCoord height, wxDC *source, wxCoord xsrc, wxCoord ysrc, int rop, bool useMask , wxCoord xsrcMask, wxCoord ysrcMask)
+bool wxCocoaDCImpl::DoBlit(wxCoord xdest, wxCoord ydest, wxCoord width, wxCoord height, wxDC *source, wxCoord xsrc, wxCoord ysrc, int rop, bool useMask , wxCoord xsrcMask, wxCoord ysrcMask)
{
if(!CocoaTakeFocus()) return false;
if(!source) return false;
- return source->CocoaDoBlitOnFocusedDC(xdest,ydest,width,height,
+ wxCocoaDCImpl *sourceImpl = static_cast<wxCocoaDCImpl*>(source->GetImpl());
+ return sourceImpl->CocoaDoBlitOnFocusedDC(xdest,ydest,width,height,
xsrc, ysrc, rop, useMask, xsrcMask, ysrcMask);
}
-bool wxDC::CocoaDoBlitOnFocusedDC(wxCoord xdest, wxCoord ydest,
+bool wxCocoaDCImpl::CocoaDoBlitOnFocusedDC(wxCoord xdest, wxCoord ydest,
wxCoord width, wxCoord height, wxCoord xsrc, wxCoord ysrc,
int logicalFunc, bool useMask, wxCoord xsrcMask, wxCoord ysrcMask)
{
return false;
}
-void wxDC::DoGetSize( int* width, int* height ) const
+void wxCocoaDCImpl::DoGetSize( int* width, int* height ) const
{
*width = m_maxX-m_minX;
*height = m_maxY-m_minY;
};
-void wxDC::DoGetSizeMM( int* width, int* height ) const
+void wxCocoaDCImpl::DoGetSizeMM( int* width, int* height ) const
{
int w = 0;
int h = 0;
- GetSize( &w, &h );
+ DoGetSize( &w, &h );
};
-void wxDC::SetTextForeground( const wxColour &col )
+void wxCocoaDCImpl::SetTextForeground( const wxColour &col )
{
- if (!Ok()) return;
+// if (!Ok()) return;
m_textForegroundColour = col;
};
-void wxDC::SetTextBackground( const wxColour &col )
+void wxCocoaDCImpl::SetTextBackground( const wxColour &col )
{
- if (!Ok()) return;
+// if (!Ok()) return;
m_textBackgroundColour = col;
};
-void wxDC::Clear()
+void wxCocoaDCImpl::Clear()
{
if(!CocoaTakeFocus()) return;
[context restoreGraphicsState];
}
-void wxDC::SetBackground(const wxBrush& brush)
+void wxCocoaDCImpl::SetBackground(const wxBrush& brush)
{
m_backgroundBrush = brush;
}
-void wxDC::SetPalette(const wxPalette&)
+void wxCocoaDCImpl::SetPalette(const wxPalette&)
{
}
-void wxDC::SetLogicalFunction(int)
+void wxCocoaDCImpl::SetLogicalFunction(int)
{
}
-void wxDC::SetMapMode( int mode )
+void wxCocoaDCImpl::SetMapMode( int mode )
{
switch (mode)
{
};
};
-void wxDC::SetUserScale( double x, double y )
+void wxCocoaDCImpl::SetUserScale( double x, double y )
{
// allow negative ? -> no
m_userScaleX = x;
ComputeScaleAndOrigin();
};
-void wxDC::SetLogicalScale( double x, double y )
+void wxCocoaDCImpl::SetLogicalScale( double x, double y )
{
// allow negative ?
m_logicalScaleX = x;
ComputeScaleAndOrigin();
};
-void wxDC::SetLogicalOrigin( wxCoord x, wxCoord y )
+void wxCocoaDCImpl::SetLogicalOrigin( wxCoord x, wxCoord y )
{
m_logicalOriginX = x * m_signX; // is this still correct ?
m_logicalOriginY = y * m_signY;
ComputeScaleAndOrigin();
};
-void wxDC::SetDeviceOrigin( wxCoord x, wxCoord y )
+void wxCocoaDCImpl::SetDeviceOrigin( wxCoord x, wxCoord y )
{
ComputeScaleAndOrigin();
};
-void wxDC::SetAxisOrientation( bool xLeftRight, bool yBottomUp )
+void wxCocoaDCImpl::SetAxisOrientation( bool xLeftRight, bool yBottomUp )
{
m_signX = (xLeftRight ? 1 : -1);
m_signY = (yBottomUp ? -1 : 1);
ComputeScaleAndOrigin();
};
-void wxDC::ComputeScaleAndOrigin(void)
+void wxCocoaDCImpl::ComputeScaleAndOrigin(void)
{
// CMB: copy scale to see if it changes
double origScaleX = m_scaleX;
// CMB: if scale has changed call SetPen to recalulate the line width
if (m_scaleX != origScaleX || m_scaleY != origScaleY)
{
+#if 0
// this is a bit artificial, but we need to force wxDC to think
// the pen has changed
const wxPen* pen = & GetPen();
wxPen tempPen;
m_pen = tempPen;
SetPen(* pen);
+#endif
}
};
/////////////////////////////////////////////////////////////////////////////
// Name: src/cocoa/dcclient.mm
-// Purpose: wxWindowDC, wxPaintDC, and wxClientDC classes
+// Purpose: wxWindowDCImpl, wxPaintDCImpl, and wxClientDCImpl classes
// Author: David Elliott
// Modified by:
// Created: 2003/04/01
#ifndef WX_PRECOMP
#include "wx/log.h"
#include "wx/window.h"
- #include "wx/dcclient.h"
#endif //WX_PRECOMP
+#include "wx/cocoa/dcclient.h"
+
#import <AppKit/NSView.h>
#import <AppKit/NSAffineTransform.h>
#import <AppKit/NSColor.h>
#import <AppKit/NSWindow.h>
/*
- * wxWindowDC
+ * wxWindowDCImpl
*/
-IMPLEMENT_DYNAMIC_CLASS(wxWindowDC, wxDC)
+IMPLEMENT_ABSTRACT_CLASS(wxWindowDCImpl, wxCocoaDCImpl)
-wxWindowDC::wxWindowDC(void)
-: m_window(NULL)
+wxWindowDCImpl::wxWindowDCImpl(wxDC *owner)
+: wxCocoaDCImpl(owner)
+, m_window(NULL)
, m_lockedNSView(NULL)
{
};
-wxWindowDC::wxWindowDC( wxWindow *window )
-: m_window(window)
+wxWindowDCImpl::wxWindowDCImpl(wxDC *owner, wxWindow *window)
+: wxCocoaDCImpl(owner)
+, m_window(window)
, m_lockedNSView(NULL)
{
wxLogDebug(wxT("non-client window DC's are not supported, oh well"));
};
-wxWindowDC::~wxWindowDC(void)
+wxWindowDCImpl::~wxWindowDCImpl(void)
{
CocoaUnwindStackAndLoseFocus();
};
-bool wxWindowDC::CocoaLockFocusOnNSView(WX_NSView nsview)
+bool wxWindowDCImpl::CocoaLockFocusOnNSView(WX_NSView nsview)
{
if([nsview lockFocusIfCanDraw])
{
return false;
}
-bool wxWindowDC::CocoaUnlockFocusOnNSView()
+bool wxWindowDCImpl::CocoaUnlockFocusOnNSView()
{
[[m_lockedNSView window] flushWindow];
[m_lockedNSView unlockFocus];
return true;
}
-bool wxWindowDC::CocoaLockFocus()
+bool wxWindowDCImpl::CocoaLockFocus()
{
- wxLogTrace(wxTRACE_COCOA,wxT("Locking focus on wxWindowDC=%p, NSView=%p"),this, m_window->GetNonClientNSView());
+ wxLogTrace(wxTRACE_COCOA,wxT("Locking focus on wxWindowDCImpl=%p, NSView=%p"),this, m_window->GetNonClientNSView());
NSAffineTransform *newTransform = CocoaGetWxToBoundsTransform([m_window->GetNonClientNSView() isFlipped], [m_window->GetNonClientNSView() bounds].size.height);
[newTransform retain];
[m_cocoaWxToBoundsTransform release];
return CocoaLockFocusOnNSView(m_window->GetNonClientNSView());
}
-bool wxWindowDC::CocoaUnlockFocus()
+bool wxWindowDCImpl::CocoaUnlockFocus()
{
- wxLogTrace(wxTRACE_COCOA,wxT("Unlocking focus on wxWindowDC=%p, NSView=%p"),this, m_window->GetNonClientNSView());
+ wxLogTrace(wxTRACE_COCOA,wxT("Unlocking focus on wxWindowDCImpl=%p, NSView=%p"),this, m_window->GetNonClientNSView());
return CocoaUnlockFocusOnNSView();
}
-bool wxWindowDC::CocoaGetBounds(void *rectData)
+bool wxWindowDCImpl::CocoaGetBounds(void *rectData)
{
if(!rectData)
return false;
}
/*
- * wxClientDC
+ * wxClientDCImpl
*/
-IMPLEMENT_DYNAMIC_CLASS(wxClientDC, wxWindowDC)
+IMPLEMENT_ABSTRACT_CLASS(wxClientDCImpl, wxWindowDCImpl)
-wxClientDC::wxClientDC(void)
+wxClientDCImpl::wxClientDCImpl(wxDC *owner)
+: wxWindowDCImpl(owner)
{
};
-wxClientDC::wxClientDC( wxWindow *window )
+wxClientDCImpl::wxClientDCImpl(wxDC *owner, wxWindow *window)
+: wxWindowDCImpl(owner)
{
m_window = window;
};
-wxClientDC::~wxClientDC(void)
+wxClientDCImpl::~wxClientDCImpl(void)
{
CocoaUnwindStackAndLoseFocus();
};
-bool wxClientDC::CocoaLockFocus()
+bool wxClientDCImpl::CocoaLockFocus()
{
- wxLogTrace(wxTRACE_COCOA,wxT("Locking focus on wxClientDC=%p, NSView=%p"),this, m_window->GetNSView());
+ wxLogTrace(wxTRACE_COCOA,wxT("Locking focus on wxClientDCImpl=%p, NSView=%p"),this, m_window->GetNSView());
NSAffineTransform *newTransform = m_window->CocoaGetWxToBoundsTransform();
[newTransform retain];
[m_cocoaWxToBoundsTransform release];
return CocoaLockFocusOnNSView(m_window->GetNSView());
}
-bool wxClientDC::CocoaUnlockFocus()
+bool wxClientDCImpl::CocoaUnlockFocus()
{
- wxLogTrace(wxTRACE_COCOA,wxT("Unlocking focus on wxClientDC=%p, NSView=%p"),this, m_window->GetNSView());
+ wxLogTrace(wxTRACE_COCOA,wxT("Unlocking focus on wxClientDCImpl=%p, NSView=%p"),this, m_window->GetNSView());
return CocoaUnlockFocusOnNSView();
}
/*
- * wxPaintDC
+ * wxPaintDCImpl
*/
-IMPLEMENT_DYNAMIC_CLASS(wxPaintDC, wxWindowDC)
+IMPLEMENT_ABSTRACT_CLASS(wxPaintDCImpl, wxWindowDCImpl)
-wxPaintDC::wxPaintDC(void)
+wxPaintDCImpl::wxPaintDCImpl(wxDC *owner)
+: wxWindowDCImpl(owner)
{
};
-wxPaintDC::wxPaintDC( wxWindow *window )
+wxPaintDCImpl::wxPaintDCImpl(wxDC *owner, wxWindow *window)
+: wxWindowDCImpl(owner)
{
m_window = 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"));
+ wxASSERT_MSG([NSView focusView]==window->GetNSView(), wxT("PaintDC's NSView does not have focus. Please use wxPaintDCImpl only as the first DC created in a paint handler"));
sm_cocoaDCStack.Insert(this);
m_lockedNSView = window->GetNSView();
NSAffineTransform *newTransform = window->CocoaGetWxToBoundsTransform();
CocoaApplyTransformations();
};
-wxPaintDC::~wxPaintDC(void)
+wxPaintDCImpl::~wxPaintDCImpl(void)
{
CocoaUnwindStackAndLoseFocus();
};
-bool wxPaintDC::CocoaLockFocus()
+bool wxPaintDCImpl::CocoaLockFocus()
{
- wxFAIL_MSG(wxT("wxPaintDC cannot be asked to lock focus!"));
+ wxFAIL_MSG(wxT("wxPaintDCImpl cannot be asked to lock focus!"));
return false;
}
-bool wxPaintDC::CocoaUnlockFocus()
+bool wxPaintDCImpl::CocoaUnlockFocus()
{
- // wxPaintDC focus can never be unlocked.
+ // wxPaintDCImpl focus can never be unlocked.
return false;
}
/////////////////////////////////////////////////////////////////////////////
// Name: src/cocoa/dcmemory.mm
-// Purpose: wxMemoryDC class
+// Purpose: wxMemoryDCImpl class
// Author: David Elliott
// Modified by:
// Created: 2003/03/16
#ifndef WX_PRECOMP
#include "wx/log.h"
- #include "wx/dcmemory.h"
#endif //WX_PRECOMP
+#include "wx/cocoa/dcmemory.h"
#include "wx/cocoa/autorelease.h"
#import <AppKit/NSImage.h>
#import <AppKit/NSBezierPath.h>
//-----------------------------------------------------------------------------
-// wxMemoryDC
+// wxMemoryDCImpl
//-----------------------------------------------------------------------------
-IMPLEMENT_DYNAMIC_CLASS(wxMemoryDC,wxDC)
+IMPLEMENT_ABSTRACT_CLASS(wxMemoryDCImpl,wxCocoaDCImpl)
-void wxMemoryDC::Init()
+void wxMemoryDCImpl::Init()
{
m_cocoaNSImage = NULL;
m_ok = false;
}
-wxMemoryDC::wxMemoryDC( wxDC *WXUNUSED(dc) )
+wxMemoryDCImpl::wxMemoryDCImpl(wxMemoryDC *owner, wxDC *WXUNUSED(dc))
+: wxCocoaDCImpl(owner)
{
Init();
}
-wxMemoryDC::~wxMemoryDC(void)
+wxMemoryDCImpl::~wxMemoryDCImpl(void)
{
CocoaUnwindStackAndLoseFocus();
[m_cocoaNSImage release];
}
-bool wxMemoryDC::CocoaLockFocus()
+bool wxMemoryDCImpl::CocoaLockFocus()
{
if(m_cocoaNSImage)
{
return false;
}
-bool wxMemoryDC::CocoaUnlockFocus()
+bool wxMemoryDCImpl::CocoaUnlockFocus()
{
[m_cocoaNSImage unlockFocus];
return true;
// NOTE: The AppKit is unable to draw onto an NSBitmapImageRep so we must
// instead copy the data to an offscreen window, then copy it back
-void wxMemoryDC::DoSelect( const wxBitmap& bitmap )
+void wxMemoryDCImpl::DoSelect( const wxBitmap& bitmap )
{
wxAutoNSAutoreleasePool pool;
if(m_selectedBitmap.Ok())
}
}
-void wxMemoryDC::DoGetSize( int *width, int *height ) const
+void wxMemoryDCImpl::DoGetSize( int *width, int *height ) const
{
if(width)
*width = m_selectedBitmap.GetWidth();
*height = m_selectedBitmap.GetHeight();
}
-bool wxMemoryDC::CocoaDoBlitOnFocusedDC(wxCoord xdest, wxCoord ydest,
+bool wxMemoryDCImpl::CocoaDoBlitOnFocusedDC(wxCoord xdest, wxCoord ydest,
wxCoord width, wxCoord height, wxCoord xsrc, wxCoord ysrc,
int logicalFunc, bool useMask, wxCoord xsrcMask, wxCoord ysrcMask)
{
return false;
}
-bool wxMemoryDC::CocoaGetBounds(void *rectData)
+bool wxMemoryDCImpl::CocoaGetBounds(void *rectData)
{
if(!rectData)
return false;
/////////////////////////////////////////////////////////////////////////////
// Name: src/cocoa/dcscreen.cpp
-// Purpose: wxScreenDC class
+// Purpose: wxScreenDCImpl class
// Author: David Elliott
// Modified by:
// Created: 2003/03/16
#include "wx/wxprec.h"
-#include "wx/dcscreen.h"
+#include "wx/cocoa/dcscreen.h"
#ifndef WX_PRECOMP
#endif //WX_PRECOMP
// wxMemoryDC
//-----------------------------------------------------------------------------
-IMPLEMENT_DYNAMIC_CLASS(wxScreenDC,wxDC)
+IMPLEMENT_ABSTRACT_CLASS(wxScreenDCImpl,wxCocoaDCImpl)
-wxScreenDC::wxScreenDC(void)
+wxScreenDCImpl::wxScreenDCImpl(wxScreenDC *owner)
+: wxCocoaDCImpl(owner)
{
m_ok = false;
}
-wxScreenDC::wxScreenDC( wxDC *WXUNUSED(dc) )
+wxScreenDCImpl::wxScreenDCImpl(wxScreenDC *owner, wxDC *WXUNUSED(dc) )
+: wxCocoaDCImpl(owner)
{
m_ok = false;
}
-wxScreenDC::~wxScreenDC(void)
+wxScreenDCImpl::~wxScreenDCImpl(void)
{
}
#include "wx/log.h"
#include "wx/window.h"
#include "wx/dc.h"
+ #include "wx/dcclient.h"
#include "wx/utils.h"
#endif //WX_PRECOMP
#include "wx/tooltip.h"
+#include "wx/cocoa/dc.h"
#include "wx/cocoa/autorelease.h"
#include "wx/cocoa/string.h"
#include "wx/cocoa/trackingrectmanager.h"
WX_NSAffineTransform wxWindowCocoa::CocoaGetWxToBoundsTransform()
{
// TODO: Handle scrolling offset
- NSAffineTransform *transform = wxDC::CocoaGetWxToBoundsTransform([GetNSView() isFlipped], [GetNSView() bounds].size.height);
+ NSAffineTransform *transform = wxCocoaDCImpl::CocoaGetWxToBoundsTransform([GetNSView() isFlipped], [GetNSView() bounds].size.height);
return transform;
}
// transformations. However, it's better than nothing.
// We don't create a wxClientDC because we don't want to accidently be able to use
// it for drawing.
- wxDC tmpdc;
+ wxClientDC tmpdc(const_cast<wxWindow*>(this));
return tmpdc.GetTextExtent(string, outX, outY, outDescent, outExternalLeading, inFont);
}
#include "wx/mac/dcscreen.h"
#endif
+#ifdef __WXCOCOA__
+ #include "wx/cocoa/dcclient.h"
+ #include "wx/cocoa/dcmemory.h"
+ #include "wx/cocoa/dcscreen.h"
+#endif
+
#ifdef __WXX11__
#include "wx/x11/dcclient.h"
#include "wx/x11/dcmemory.h"