]> git.saurik.com Git - wxWidgets.git/commitdiff
Make wxCocoa compile with new pImpl wxDC.
authorDavid Elliott <dfe@tgwbd.org>
Tue, 4 Dec 2007 04:22:16 +0000 (04:22 +0000)
committerDavid Elliott <dfe@tgwbd.org>
Tue, 4 Dec 2007 04:22:16 +0000 (04:22 +0000)
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@50462 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

include/wx/cocoa/dc.h
include/wx/cocoa/dcclient.h
include/wx/cocoa/dcmemory.h
include/wx/cocoa/dcscreen.h
src/cocoa/app.mm
src/cocoa/dc.mm
src/cocoa/dcclient.mm
src/cocoa/dcmemory.mm
src/cocoa/dcscreen.cpp
src/cocoa/window.mm
src/common/dcbase.cpp

index 7fcc9be39c4faeab2df2031b5124a41ee159c75d..2dbe2e32a172d32063e41bc454e57a94756b5453 100644 (file)
 
 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
index 9987cc3e5d540c09b08a6d3488e968697be4d998..d3b9beda71466f71c14f0e4bc369c06066a25211 100644 (file)
@@ -1,6 +1,6 @@
 /////////////////////////////////////////////////////////////////////////////
 // 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;
@@ -38,28 +38,28 @@ protected:
     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();
index f71534cfcb2de23b861b5999dc306b947f884c00..1e6f66ed71f99f124c44ace139b20f102597bfea 100644 (file)
@@ -1,6 +1,6 @@
 /////////////////////////////////////////////////////////////////////////////
 // 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);
index 8c330c5b6f37c76a86ff979822bc6227bb17cd53..0ba2e5713339223c22724a4c9e4ad7b599c5c8ef 100644 (file)
@@ -1,6 +1,6 @@
 /////////////////////////////////////////////////////////////////////////////
 // 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; }
index d71f815fc321a9078f236244451eeb9d3970770c..444cccfb895b8ce535e4d188b28850f717d62a4e 100644 (file)
@@ -15,7 +15,6 @@
 #include "wx/app.h"
 
 #ifndef WX_PRECOMP
-    #include "wx/dc.h"
     #include "wx/intl.h"
     #include "wx/log.h"
     #include "wx/module.h"
@@ -26,6 +25,8 @@
 #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>
@@ -162,7 +163,7 @@ void wxApp::CleanUp()
 {
     wxAutoNSAutoreleasePool pool;
 
-    wxDC::CocoaShutdownTextSystem();
+    wxCocoaDCImpl::CocoaShutdownTextSystem();
     wxMenuBarManager::DestroyInstance();
 
     [[NSNotificationCenter defaultCenter] removeObserver:sg_cocoaAppObserver];
@@ -257,7 +258,7 @@ bool wxApp::OnInitGui()
     if(!sm_isEmbedded)
         wxMenuBarManager::CreateInstance();
 
-    wxDC::CocoaInitializeTextSystem();
+    wxCocoaDCImpl::CocoaInitializeTextSystem();
     return true;
 }
 
index a56a4fa6ca6c7e6908db485574ea0b0273c48d4b..e371df92cd4e145ea43e663b989881fd1c7f4707 100644 (file)
@@ -11,7 +11,7 @@
 
 #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)
 {
@@ -72,7 +73,7 @@ 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!"));
 
@@ -92,14 +93,14 @@ void wxDC::CocoaInitializeTextSystem()
     // [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)
@@ -107,7 +108,7 @@ void wxDC::CocoaUnwindStackAndLoseFocus()
         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())
@@ -123,12 +124,12 @@ void wxDC::CocoaUnwindStackAndLoseFocus()
     }
 }
 
-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)
@@ -141,28 +142,29 @@ bool wxDC::CocoaUnwindStackAndTakeFocus()
     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
@@ -183,13 +185,13 @@ bool wxDC::CocoaUnlockFocus()
     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
@@ -201,13 +203,13 @@ void wxDC::CocoaUnapplyTransformations()
     [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;
@@ -218,7 +220,7 @@ void wxDC::DoDrawRectangle(wxCoord x, wxCoord y, wxCoord width, wxCoord height)
     [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;
@@ -230,7 +232,7 @@ void wxDC::DoDrawLine(wxCoord x1, wxCoord y1, wxCoord x2, wxCoord y2)
     [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
@@ -252,7 +254,7 @@ void wxDC::DoGetTextExtent(const wxString& text, wxCoord *x, wxCoord *y, wxCoord
         *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;
@@ -345,105 +347,105 @@ void wxDC::DoDrawText(const wxString& text, wxCoord x, wxCoord y)
 // 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;
@@ -490,57 +492,58 @@ void wxDC::DoDrawBitmap(const wxBitmap &bmp, wxCoord x, wxCoord y, bool useMask)
     [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;
 
@@ -560,21 +563,21 @@ void wxDC::Clear()
     [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)
   {
@@ -596,7 +599,7 @@ void wxDC::SetMapMode( int mode )
   };
 };
 
-void wxDC::SetUserScale( double x, double y )
+void wxCocoaDCImpl::SetUserScale( double x, double y )
 {
   // allow negative ? -> no
   m_userScaleX = x;
@@ -604,7 +607,7 @@ void wxDC::SetUserScale( double x, double y )
   ComputeScaleAndOrigin();
 };
 
-void wxDC::SetLogicalScale( double x, double y )
+void wxCocoaDCImpl::SetLogicalScale( double x, double y )
 {
   // allow negative ?
   m_logicalScaleX = x;
@@ -612,26 +615,26 @@ void wxDC::SetLogicalScale( double x, double y )
   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;
@@ -643,11 +646,13 @@ void wxDC::ComputeScaleAndOrigin(void)
   // 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
   }
 };
index c22214c824b220d247296da22fc007a18edd957d..eabd5cda1204939849c0112eeb3facb295b4c8fd 100644 (file)
@@ -1,6 +1,6 @@
 /////////////////////////////////////////////////////////////////////////////
 // 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])
     {
@@ -59,7 +62,7 @@ bool wxWindowDC::CocoaLockFocusOnNSView(WX_NSView nsview)
     return false;
 }
 
-bool wxWindowDC::CocoaUnlockFocusOnNSView()
+bool wxWindowDCImpl::CocoaUnlockFocusOnNSView()
 {
     [[m_lockedNSView window] flushWindow];
     [m_lockedNSView unlockFocus];
@@ -67,9 +70,9 @@ bool wxWindowDC::CocoaUnlockFocusOnNSView()
     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];
@@ -77,13 +80,13 @@ bool wxWindowDC::CocoaLockFocus()
     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;
@@ -95,27 +98,29 @@ bool wxWindowDC::CocoaGetBounds(void *rectData)
 }
 
 /*
- * 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];
@@ -123,25 +128,27 @@ bool wxClientDC::CocoaLockFocus()
     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();
@@ -151,20 +158,20 @@ wxPaintDC::wxPaintDC( wxWindow *window )
     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;
 }
 
index 9b1a0e9f8534d6b44a291ca4602819dc67bc5e28..0eb5905b14faca218e4678017dbb921d8c390064 100644 (file)
@@ -1,6 +1,6 @@
 /////////////////////////////////////////////////////////////////////////////
 // Name:        src/cocoa/dcmemory.mm
-// Purpose:     wxMemoryDC class
+// Purpose:     wxMemoryDCImpl class
 // Author:      David Elliott
 // Modified by:
 // Created:     2003/03/16
@@ -13,9 +13,9 @@
 
 #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)
     {
@@ -63,7 +64,7 @@ bool wxMemoryDC::CocoaLockFocus()
     return false;
 }
 
-bool wxMemoryDC::CocoaUnlockFocus()
+bool wxMemoryDCImpl::CocoaUnlockFocus()
 {
     [m_cocoaNSImage unlockFocus];
     return true;
@@ -71,7 +72,7 @@ bool wxMemoryDC::CocoaUnlockFocus()
 
 // 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())
@@ -124,7 +125,7 @@ void wxMemoryDC::DoSelect( const wxBitmap& bitmap )
     }
 }
 
-void wxMemoryDC::DoGetSize( int *width, int *height ) const
+void wxMemoryDCImpl::DoGetSize( int *width, int *height ) const
 {
     if(width)
         *width = m_selectedBitmap.GetWidth();
@@ -132,7 +133,7 @@ void wxMemoryDC::DoGetSize( int *width, int *height ) const
         *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)
 {
@@ -204,7 +205,7 @@ bool wxMemoryDC::CocoaDoBlitOnFocusedDC(wxCoord xdest, wxCoord ydest,
     return false;
 }
 
-bool wxMemoryDC::CocoaGetBounds(void *rectData)
+bool wxMemoryDCImpl::CocoaGetBounds(void *rectData)
 {
     if(!rectData)
         return false;
index d809bb7ee505f2e3c2c2eb65fdf230cda8459ec5..44b3aa093f6fa78e56c3fbfc5e52b96c9de4a123 100644 (file)
@@ -1,6 +1,6 @@
 /////////////////////////////////////////////////////////////////////////////
 // Name:        src/cocoa/dcscreen.cpp
-// Purpose:     wxScreenDC class
+// Purpose:     wxScreenDCImpl class
 // Author:      David Elliott
 // Modified by:
 // Created:     2003/03/16
@@ -11,7 +11,7 @@
 
 #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)
 {
 }
index 5fdc4548dd584bed48aaefa195bb35ddc3c5b682..8bb0a6567cf9c94cd1c26be114425904b5f3f23d 100644 (file)
     #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"
@@ -1157,7 +1159,7 @@ NSRect wxWindowCocoa::CocoaTransformWxToBounds(NSRect rectWx)
 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;
 }
 
@@ -1782,7 +1784,7 @@ void wxWindow::GetTextExtent(const wxString& string, int *outX, int *outY,
     // 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);
 }
 
index 0989ecc110811d6899c734af1bf8112e376c0f85..e48e874e07134d5e50d7ed076234589b1528d2c7 100644 (file)
     #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"