Make wxCocoa compile with new pImpl wxDC.
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@50462 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
@@ -14,22 +14,24 @@
|
|||||||
|
|
||||||
DECLARE_WXCOCOA_OBJC_CLASS(NSAffineTransform);
|
DECLARE_WXCOCOA_OBJC_CLASS(NSAffineTransform);
|
||||||
|
|
||||||
class WXDLLIMPEXP_FWD_CORE wxDC;
|
#include "wx/dc.h"
|
||||||
WX_DECLARE_LIST(wxDC, wxCocoaDCStack);
|
|
||||||
|
class WXDLLIMPEXP_FWD_CORE wxCocoaDCImpl;
|
||||||
|
WX_DECLARE_LIST(wxCocoaDCImpl, wxCocoaDCStack);
|
||||||
|
|
||||||
//=========================================================================
|
//=========================================================================
|
||||||
// wxDC
|
// wxDC
|
||||||
//=========================================================================
|
//=========================================================================
|
||||||
class WXDLLEXPORT wxDC: public wxDCBase
|
class WXDLLIMPEXP_CORE wxCocoaDCImpl: public wxDCImpl
|
||||||
{
|
{
|
||||||
DECLARE_DYNAMIC_CLASS(wxDC)
|
DECLARE_ABSTRACT_CLASS(wxCocoaDCImpl)
|
||||||
DECLARE_NO_COPY_CLASS(wxDC)
|
DECLARE_NO_COPY_CLASS(wxCocoaDCImpl)
|
||||||
//-------------------------------------------------------------------------
|
//-------------------------------------------------------------------------
|
||||||
// Initialization
|
// Initialization
|
||||||
//-------------------------------------------------------------------------
|
//-------------------------------------------------------------------------
|
||||||
public:
|
public:
|
||||||
wxDC();
|
wxCocoaDCImpl(wxDC *owner);
|
||||||
virtual ~wxDC();
|
virtual ~wxCocoaDCImpl();
|
||||||
|
|
||||||
//-------------------------------------------------------------------------
|
//-------------------------------------------------------------------------
|
||||||
// wxCocoa specifics
|
// wxCocoa specifics
|
||||||
|
@@ -1,6 +1,6 @@
|
|||||||
/////////////////////////////////////////////////////////////////////////////
|
/////////////////////////////////////////////////////////////////////////////
|
||||||
// Name: wx/cocoa/dcclient.h
|
// Name: wx/cocoa/dcclient.h
|
||||||
// Purpose: wxClientDC, wxPaintDC and wxWindowDC classes
|
// Purpose: wxClientDCImpl, wxPaintDCImpl and wxWindowDCImpl classes
|
||||||
// Author: David Elliott
|
// Author: David Elliott
|
||||||
// Modified by:
|
// Modified by:
|
||||||
// Created: 2003/04/01
|
// Created: 2003/04/01
|
||||||
@@ -12,20 +12,20 @@
|
|||||||
#ifndef __WX_COCOA_DCCLIENT_H__
|
#ifndef __WX_COCOA_DCCLIENT_H__
|
||||||
#define __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
|
// 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
|
// NSView of the content view seems to return the entire window rectangle
|
||||||
// (including decorations). Of course, that is not at all part of the
|
// (including decorations). Of course, that is not at all part of the
|
||||||
// Cocoa or OpenStep APIs, but it might be a neat hack.
|
// 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:
|
public:
|
||||||
wxWindowDC(void);
|
wxWindowDCImpl(wxDC *owner);
|
||||||
// Create a DC corresponding to a window
|
// Create a DC corresponding to a window
|
||||||
wxWindowDC(wxWindow *win);
|
wxWindowDCImpl(wxDC *owner, wxWindow *win);
|
||||||
virtual ~wxWindowDC(void);
|
virtual ~wxWindowDCImpl(void);
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
wxWindow *m_window;
|
wxWindow *m_window;
|
||||||
@@ -38,28 +38,28 @@ protected:
|
|||||||
virtual bool CocoaGetBounds(void *rectData);
|
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:
|
public:
|
||||||
wxClientDC(void);
|
wxClientDCImpl(wxDC *owner);
|
||||||
// Create a DC corresponding to a window
|
// Create a DC corresponding to a window
|
||||||
wxClientDC(wxWindow *win);
|
wxClientDCImpl(wxDC *owner, wxWindow *win);
|
||||||
virtual ~wxClientDC(void);
|
virtual ~wxClientDCImpl(void);
|
||||||
protected:
|
protected:
|
||||||
// DC stack
|
// DC stack
|
||||||
virtual bool CocoaLockFocus();
|
virtual bool CocoaLockFocus();
|
||||||
virtual bool CocoaUnlockFocus();
|
virtual bool CocoaUnlockFocus();
|
||||||
};
|
};
|
||||||
|
|
||||||
class WXDLLIMPEXP_CORE wxPaintDC: public wxWindowDC
|
class WXDLLIMPEXP_CORE wxPaintDCImpl: public wxWindowDCImpl
|
||||||
{
|
{
|
||||||
DECLARE_DYNAMIC_CLASS(wxPaintDC)
|
DECLARE_DYNAMIC_CLASS(wxPaintDCImpl)
|
||||||
public:
|
public:
|
||||||
wxPaintDC(void);
|
wxPaintDCImpl(wxDC *owner);
|
||||||
// Create a DC corresponding to a window
|
// Create a DC corresponding to a window
|
||||||
wxPaintDC(wxWindow *win);
|
wxPaintDCImpl(wxDC *owner, wxWindow *win);
|
||||||
virtual ~wxPaintDC(void);
|
virtual ~wxPaintDCImpl(void);
|
||||||
protected:
|
protected:
|
||||||
// DC stack
|
// DC stack
|
||||||
virtual bool CocoaLockFocus();
|
virtual bool CocoaLockFocus();
|
||||||
|
@@ -1,6 +1,6 @@
|
|||||||
/////////////////////////////////////////////////////////////////////////////
|
/////////////////////////////////////////////////////////////////////////////
|
||||||
// Name: wx/cocoa/dcmemory.h
|
// Name: wx/cocoa/dcmemory.h
|
||||||
// Purpose: wxMemoryDC class
|
// Purpose: wxMemoryDCImpl class
|
||||||
// Author: David Elliott
|
// Author: David Elliott
|
||||||
// Modified by:
|
// Modified by:
|
||||||
// Created: 2003/03/16
|
// Created: 2003/03/16
|
||||||
@@ -12,17 +12,25 @@
|
|||||||
#ifndef __WX_COCOA_DCMEMORY_H__
|
#ifndef __WX_COCOA_DCMEMORY_H__
|
||||||
#define __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:
|
public:
|
||||||
wxMemoryDC() { Init(); }
|
wxMemoryDCImpl(wxMemoryDC *owner)
|
||||||
wxMemoryDC(wxBitmap& bitmap) { Init(); SelectObject(bitmap); }
|
: wxCocoaDCImpl(owner)
|
||||||
wxMemoryDC( wxDC *dc ); // Create compatible DC
|
{ Init(); }
|
||||||
virtual ~wxMemoryDC(void);
|
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 DoGetSize(int *width, int *height) const;
|
||||||
virtual void DoSelect(const wxBitmap& bitmap);
|
virtual void DoSelect(const wxBitmap& bitmap);
|
||||||
|
@@ -1,6 +1,6 @@
|
|||||||
/////////////////////////////////////////////////////////////////////////////
|
/////////////////////////////////////////////////////////////////////////////
|
||||||
// Name: wx/cocoa/dcscreen.h
|
// Name: wx/cocoa/dcscreen.h
|
||||||
// Purpose: wxScreenDC class
|
// Purpose: wxScreenDCImpl class
|
||||||
// Author: David Elliott
|
// Author: David Elliott
|
||||||
// Modified by:
|
// Modified by:
|
||||||
// Created: 2003/03/16
|
// Created: 2003/03/16
|
||||||
@@ -12,15 +12,16 @@
|
|||||||
#ifndef __WX_COCOA_DCSCREEN_H__
|
#ifndef __WX_COCOA_DCSCREEN_H__
|
||||||
#define __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:
|
public:
|
||||||
wxScreenDC(void);
|
wxScreenDCImpl(wxScreenDC *owner);
|
||||||
wxScreenDC( wxDC *dc ); // Create compatible DC
|
wxScreenDCImpl(wxScreenDC *owner, wxDC *dc ); // Create compatible DC
|
||||||
virtual ~wxScreenDC(void);
|
virtual ~wxScreenDCImpl(void);
|
||||||
|
|
||||||
// Compatibility with X's requirements for drawing on top of all windows
|
// Compatibility with X's requirements for drawing on top of all windows
|
||||||
static bool StartDrawingOnTop(wxWindow* WXUNUSED(window)) { return true; }
|
static bool StartDrawingOnTop(wxWindow* WXUNUSED(window)) { return true; }
|
||||||
|
@@ -15,7 +15,6 @@
|
|||||||
#include "wx/app.h"
|
#include "wx/app.h"
|
||||||
|
|
||||||
#ifndef WX_PRECOMP
|
#ifndef WX_PRECOMP
|
||||||
#include "wx/dc.h"
|
|
||||||
#include "wx/intl.h"
|
#include "wx/intl.h"
|
||||||
#include "wx/log.h"
|
#include "wx/log.h"
|
||||||
#include "wx/module.h"
|
#include "wx/module.h"
|
||||||
@@ -26,6 +25,8 @@
|
|||||||
#include "wx/cocoa/mbarman.h"
|
#include "wx/cocoa/mbarman.h"
|
||||||
#include "wx/cocoa/NSApplication.h"
|
#include "wx/cocoa/NSApplication.h"
|
||||||
|
|
||||||
|
#include "wx/cocoa/dc.h"
|
||||||
|
|
||||||
#import <AppKit/NSApplication.h>
|
#import <AppKit/NSApplication.h>
|
||||||
#import <Foundation/NSRunLoop.h>
|
#import <Foundation/NSRunLoop.h>
|
||||||
#import <Foundation/NSThread.h>
|
#import <Foundation/NSThread.h>
|
||||||
@@ -162,7 +163,7 @@ void wxApp::CleanUp()
|
|||||||
{
|
{
|
||||||
wxAutoNSAutoreleasePool pool;
|
wxAutoNSAutoreleasePool pool;
|
||||||
|
|
||||||
wxDC::CocoaShutdownTextSystem();
|
wxCocoaDCImpl::CocoaShutdownTextSystem();
|
||||||
wxMenuBarManager::DestroyInstance();
|
wxMenuBarManager::DestroyInstance();
|
||||||
|
|
||||||
[[NSNotificationCenter defaultCenter] removeObserver:sg_cocoaAppObserver];
|
[[NSNotificationCenter defaultCenter] removeObserver:sg_cocoaAppObserver];
|
||||||
@@ -257,7 +258,7 @@ bool wxApp::OnInitGui()
|
|||||||
if(!sm_isEmbedded)
|
if(!sm_isEmbedded)
|
||||||
wxMenuBarManager::CreateInstance();
|
wxMenuBarManager::CreateInstance();
|
||||||
|
|
||||||
wxDC::CocoaInitializeTextSystem();
|
wxCocoaDCImpl::CocoaInitializeTextSystem();
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
145
src/cocoa/dc.mm
145
src/cocoa/dc.mm
@@ -11,7 +11,7 @@
|
|||||||
|
|
||||||
#include "wx/wxprec.h"
|
#include "wx/wxprec.h"
|
||||||
|
|
||||||
#include "wx/dc.h"
|
#include "wx/cocoa/dc.h"
|
||||||
|
|
||||||
#ifndef WX_PRECOMP
|
#ifndef WX_PRECOMP
|
||||||
#include "wx/log.h"
|
#include "wx/log.h"
|
||||||
@@ -34,11 +34,12 @@
|
|||||||
#include "wx/listimpl.cpp"
|
#include "wx/listimpl.cpp"
|
||||||
WX_DEFINE_LIST(wxCocoaDCStack);
|
WX_DEFINE_LIST(wxCocoaDCStack);
|
||||||
|
|
||||||
IMPLEMENT_ABSTRACT_CLASS(wxDC, wxObject)
|
IMPLEMENT_ABSTRACT_CLASS(wxCocoaDCImpl, wxDCImpl)
|
||||||
WX_NSTextStorage wxDC::sm_cocoaNSTextStorage = nil;
|
|
||||||
WX_NSLayoutManager wxDC::sm_cocoaNSLayoutManager = nil;
|
WX_NSTextStorage wxCocoaDCImpl::sm_cocoaNSTextStorage = nil;
|
||||||
WX_NSTextContainer wxDC::sm_cocoaNSTextContainer = nil;
|
WX_NSLayoutManager wxCocoaDCImpl::sm_cocoaNSLayoutManager = nil;
|
||||||
wxCocoaDCStack wxDC::sm_cocoaDCStack;
|
WX_NSTextContainer wxCocoaDCImpl::sm_cocoaNSTextContainer = nil;
|
||||||
|
wxCocoaDCStack wxCocoaDCImpl::sm_cocoaDCStack;
|
||||||
|
|
||||||
inline void CocoaSetPenForNSBezierPath(wxPen &pen, NSBezierPath *bezpath)
|
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!"));
|
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];
|
// [sm_cocoaNSTextContainer release]; [sm_cocoaNSTextContainer retain];
|
||||||
}
|
}
|
||||||
|
|
||||||
void wxDC::CocoaShutdownTextSystem()
|
void wxCocoaDCImpl::CocoaShutdownTextSystem()
|
||||||
{
|
{
|
||||||
[sm_cocoaNSTextContainer release]; sm_cocoaNSTextContainer = nil;
|
[sm_cocoaNSTextContainer release]; sm_cocoaNSTextContainer = nil;
|
||||||
[sm_cocoaNSLayoutManager release]; sm_cocoaNSLayoutManager = nil;
|
[sm_cocoaNSLayoutManager release]; sm_cocoaNSLayoutManager = nil;
|
||||||
[sm_cocoaNSTextStorage release]; sm_cocoaNSTextStorage = nil;
|
[sm_cocoaNSTextStorage release]; sm_cocoaNSTextStorage = nil;
|
||||||
}
|
}
|
||||||
|
|
||||||
void wxDC::CocoaUnwindStackAndLoseFocus()
|
void wxCocoaDCImpl::CocoaUnwindStackAndLoseFocus()
|
||||||
{
|
{
|
||||||
wxCocoaDCStack::compatibility_iterator ourNode=sm_cocoaDCStack.Find(this);
|
wxCocoaDCStack::compatibility_iterator ourNode=sm_cocoaDCStack.Find(this);
|
||||||
if(ourNode)
|
if(ourNode)
|
||||||
@@ -107,7 +108,7 @@ void wxDC::CocoaUnwindStackAndLoseFocus()
|
|||||||
wxCocoaDCStack::compatibility_iterator node=sm_cocoaDCStack.GetFirst();
|
wxCocoaDCStack::compatibility_iterator node=sm_cocoaDCStack.GetFirst();
|
||||||
for(;node!=ourNode; node=sm_cocoaDCStack.GetFirst())
|
for(;node!=ourNode; node=sm_cocoaDCStack.GetFirst())
|
||||||
{
|
{
|
||||||
wxDC *dc = node->GetData();
|
wxCocoaDCImpl *dc = node->GetData();
|
||||||
wxASSERT(dc);
|
wxASSERT(dc);
|
||||||
wxASSERT(dc!=this);
|
wxASSERT(dc!=this);
|
||||||
if(!dc->CocoaUnlockFocus())
|
if(!dc->CocoaUnlockFocus())
|
||||||
@@ -123,12 +124,12 @@ void wxDC::CocoaUnwindStackAndLoseFocus()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
bool wxDC::CocoaUnwindStackAndTakeFocus()
|
bool wxCocoaDCImpl::CocoaUnwindStackAndTakeFocus()
|
||||||
{
|
{
|
||||||
wxCocoaDCStack::compatibility_iterator node=sm_cocoaDCStack.GetFirst();
|
wxCocoaDCStack::compatibility_iterator node=sm_cocoaDCStack.GetFirst();
|
||||||
for(;node;node = sm_cocoaDCStack.GetFirst())
|
for(;node;node = sm_cocoaDCStack.GetFirst())
|
||||||
{
|
{
|
||||||
wxDC *dc = node->GetData();
|
wxCocoaDCImpl *dc = node->GetData();
|
||||||
wxASSERT(dc);
|
wxASSERT(dc);
|
||||||
// If we're on the stack, then it's unwound enough and we have focus
|
// If we're on the stack, then it's unwound enough and we have focus
|
||||||
if(dc==this)
|
if(dc==this)
|
||||||
@@ -141,28 +142,29 @@ bool wxDC::CocoaUnwindStackAndTakeFocus()
|
|||||||
return CocoaLockFocus();
|
return CocoaLockFocus();
|
||||||
}
|
}
|
||||||
|
|
||||||
wxDC::wxDC(void)
|
wxCocoaDCImpl::wxCocoaDCImpl(wxDC *owner)
|
||||||
|
: wxDCImpl(owner)
|
||||||
{
|
{
|
||||||
m_cocoaWxToBoundsTransform = nil;
|
m_cocoaWxToBoundsTransform = nil;
|
||||||
m_pen = *wxBLACK_PEN;
|
m_pen = *wxBLACK_PEN;
|
||||||
}
|
}
|
||||||
|
|
||||||
wxDC::~wxDC(void)
|
wxCocoaDCImpl::~wxDC(void)
|
||||||
{
|
{
|
||||||
[m_cocoaWxToBoundsTransform release];
|
[m_cocoaWxToBoundsTransform release];
|
||||||
}
|
}
|
||||||
|
|
||||||
bool wxDC::CocoaLockFocus()
|
bool wxCocoaDCImpl::CocoaLockFocus()
|
||||||
{
|
{
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool wxDC::CocoaUnlockFocus()
|
bool wxCocoaDCImpl::CocoaUnlockFocus()
|
||||||
{
|
{
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*static*/ WX_NSAffineTransform wxDC::CocoaGetWxToBoundsTransform(bool isFlipped, float height)
|
/*static*/ WX_NSAffineTransform wxCocoaDCImpl::CocoaGetWxToBoundsTransform(bool isFlipped, float height)
|
||||||
{
|
{
|
||||||
NSAffineTransform *transform = nil;
|
NSAffineTransform *transform = nil;
|
||||||
// This transform flips the graphics since wxDC uses top-left origin
|
// This transform flips the graphics since wxDC uses top-left origin
|
||||||
@@ -183,13 +185,13 @@ bool wxDC::CocoaUnlockFocus()
|
|||||||
return transform;
|
return transform;
|
||||||
}
|
}
|
||||||
|
|
||||||
void wxDC::CocoaApplyTransformations()
|
void wxCocoaDCImpl::CocoaApplyTransformations()
|
||||||
{
|
{
|
||||||
[m_cocoaWxToBoundsTransform concat];
|
[m_cocoaWxToBoundsTransform concat];
|
||||||
// TODO: Apply device/logical/user position/scaling transformations
|
// TODO: Apply device/logical/user position/scaling transformations
|
||||||
}
|
}
|
||||||
|
|
||||||
void wxDC::CocoaUnapplyTransformations()
|
void wxCocoaDCImpl::CocoaUnapplyTransformations()
|
||||||
{
|
{
|
||||||
// NOTE: You *must* call this with focus held.
|
// NOTE: You *must* call this with focus held.
|
||||||
// Undo all transforms so we're back in true Cocoa coords with
|
// Undo all transforms so we're back in true Cocoa coords with
|
||||||
@@ -201,13 +203,13 @@ void wxDC::CocoaUnapplyTransformations()
|
|||||||
[invertTransform release];
|
[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.
|
// We don't know what we are so we can't return anything.
|
||||||
return false;
|
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;
|
wxAutoNSAutoreleasePool pool;
|
||||||
if(!CocoaTakeFocus()) return;
|
if(!CocoaTakeFocus()) return;
|
||||||
@@ -218,7 +220,7 @@ void wxDC::DoDrawRectangle(wxCoord x, wxCoord y, wxCoord width, wxCoord height)
|
|||||||
[bezpath fill];
|
[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;
|
wxAutoNSAutoreleasePool pool;
|
||||||
if(!CocoaTakeFocus()) return;
|
if(!CocoaTakeFocus()) return;
|
||||||
@@ -230,7 +232,7 @@ void wxDC::DoDrawLine(wxCoord x1, wxCoord y1, wxCoord x2, wxCoord y2)
|
|||||||
[bezpath stroke];
|
[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;
|
wxAutoNSAutoreleasePool pool;
|
||||||
// FIXME: Cache this so it can be used for DoDrawText
|
// 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;
|
*externalLeading=0;
|
||||||
}
|
}
|
||||||
|
|
||||||
void wxDC::DoDrawText(const wxString& text, wxCoord x, wxCoord y)
|
void wxCocoaDCImpl::DoDrawText(const wxString& text, wxCoord x, wxCoord y)
|
||||||
{
|
{
|
||||||
wxAutoNSAutoreleasePool pool;
|
wxAutoNSAutoreleasePool pool;
|
||||||
if(!CocoaTakeFocus()) return;
|
if(!CocoaTakeFocus()) return;
|
||||||
@@ -345,105 +347,105 @@ void wxDC::DoDrawText(const wxString& text, wxCoord x, wxCoord y)
|
|||||||
// wxDC
|
// 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;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
wxSize wxDC::GetPPI() const
|
wxSize wxCocoaDCImpl::GetPPI() const
|
||||||
{
|
{
|
||||||
return wxSize(0,0);
|
return wxSize(0,0);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool wxDC::CanGetTextExtent() const
|
bool wxCocoaDCImpl::CanGetTextExtent() const
|
||||||
{
|
{
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
wxCoord wxDC::GetCharHeight() const
|
wxCoord wxCocoaDCImpl::GetCharHeight() const
|
||||||
{
|
{
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
wxCoord wxDC::GetCharWidth() const
|
wxCoord wxCocoaDCImpl::GetCharWidth() const
|
||||||
{
|
{
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool wxDC::CanDrawBitmap() const
|
bool wxCocoaDCImpl::CanDrawBitmap() const
|
||||||
{
|
{
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool wxDC::DoGetPixel(wxCoord x, wxCoord y, wxColour *col) const
|
bool wxCocoaDCImpl::DoGetPixel(wxCoord x, wxCoord y, wxColour *col) const
|
||||||
{
|
{
|
||||||
return false;
|
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;
|
m_font = font;
|
||||||
}
|
}
|
||||||
|
|
||||||
void wxDC::SetPen(const wxPen& pen)
|
void wxCocoaDCImpl::SetPen(const wxPen& pen)
|
||||||
{
|
{
|
||||||
m_pen = pen;
|
m_pen = pen;
|
||||||
}
|
}
|
||||||
|
|
||||||
void wxDC::SetBrush(const wxBrush& brush)
|
void wxCocoaDCImpl::SetBrush(const wxBrush& brush)
|
||||||
{
|
{
|
||||||
m_brush = 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;
|
wxAutoNSAutoreleasePool pool;
|
||||||
if(!CocoaTakeFocus()) return;
|
if(!CocoaTakeFocus()) return;
|
||||||
@@ -490,57 +492,58 @@ void wxDC::DoDrawBitmap(const wxBitmap &bmp, wxCoord x, wxCoord y, bool useMask)
|
|||||||
[context restoreGraphicsState];
|
[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;
|
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(!CocoaTakeFocus()) return false;
|
||||||
if(!source) 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);
|
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,
|
wxCoord width, wxCoord height, wxCoord xsrc, wxCoord ysrc,
|
||||||
int logicalFunc, bool useMask, wxCoord xsrcMask, wxCoord ysrcMask)
|
int logicalFunc, bool useMask, wxCoord xsrcMask, wxCoord ysrcMask)
|
||||||
{
|
{
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
void wxDC::DoGetSize( int* width, int* height ) const
|
void wxCocoaDCImpl::DoGetSize( int* width, int* height ) const
|
||||||
{
|
{
|
||||||
*width = m_maxX-m_minX;
|
*width = m_maxX-m_minX;
|
||||||
*height = m_maxY-m_minY;
|
*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 w = 0;
|
||||||
int h = 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;
|
m_textForegroundColour = col;
|
||||||
};
|
};
|
||||||
|
|
||||||
void wxDC::SetTextBackground( const wxColour &col )
|
void wxCocoaDCImpl::SetTextBackground( const wxColour &col )
|
||||||
{
|
{
|
||||||
if (!Ok()) return;
|
// if (!Ok()) return;
|
||||||
m_textBackgroundColour = col;
|
m_textBackgroundColour = col;
|
||||||
};
|
};
|
||||||
|
|
||||||
void wxDC::Clear()
|
void wxCocoaDCImpl::Clear()
|
||||||
{
|
{
|
||||||
if(!CocoaTakeFocus()) return;
|
if(!CocoaTakeFocus()) return;
|
||||||
|
|
||||||
@@ -560,21 +563,21 @@ void wxDC::Clear()
|
|||||||
[context restoreGraphicsState];
|
[context restoreGraphicsState];
|
||||||
}
|
}
|
||||||
|
|
||||||
void wxDC::SetBackground(const wxBrush& brush)
|
void wxCocoaDCImpl::SetBackground(const wxBrush& brush)
|
||||||
{
|
{
|
||||||
m_backgroundBrush = 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)
|
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
|
// allow negative ? -> no
|
||||||
m_userScaleX = x;
|
m_userScaleX = x;
|
||||||
@@ -604,7 +607,7 @@ void wxDC::SetUserScale( double x, double y )
|
|||||||
ComputeScaleAndOrigin();
|
ComputeScaleAndOrigin();
|
||||||
};
|
};
|
||||||
|
|
||||||
void wxDC::SetLogicalScale( double x, double y )
|
void wxCocoaDCImpl::SetLogicalScale( double x, double y )
|
||||||
{
|
{
|
||||||
// allow negative ?
|
// allow negative ?
|
||||||
m_logicalScaleX = x;
|
m_logicalScaleX = x;
|
||||||
@@ -612,26 +615,26 @@ void wxDC::SetLogicalScale( double x, double y )
|
|||||||
ComputeScaleAndOrigin();
|
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_logicalOriginX = x * m_signX; // is this still correct ?
|
||||||
m_logicalOriginY = y * m_signY;
|
m_logicalOriginY = y * m_signY;
|
||||||
ComputeScaleAndOrigin();
|
ComputeScaleAndOrigin();
|
||||||
};
|
};
|
||||||
|
|
||||||
void wxDC::SetDeviceOrigin( wxCoord x, wxCoord y )
|
void wxCocoaDCImpl::SetDeviceOrigin( wxCoord x, wxCoord y )
|
||||||
{
|
{
|
||||||
ComputeScaleAndOrigin();
|
ComputeScaleAndOrigin();
|
||||||
};
|
};
|
||||||
|
|
||||||
void wxDC::SetAxisOrientation( bool xLeftRight, bool yBottomUp )
|
void wxCocoaDCImpl::SetAxisOrientation( bool xLeftRight, bool yBottomUp )
|
||||||
{
|
{
|
||||||
m_signX = (xLeftRight ? 1 : -1);
|
m_signX = (xLeftRight ? 1 : -1);
|
||||||
m_signY = (yBottomUp ? -1 : 1);
|
m_signY = (yBottomUp ? -1 : 1);
|
||||||
ComputeScaleAndOrigin();
|
ComputeScaleAndOrigin();
|
||||||
};
|
};
|
||||||
|
|
||||||
void wxDC::ComputeScaleAndOrigin(void)
|
void wxCocoaDCImpl::ComputeScaleAndOrigin(void)
|
||||||
{
|
{
|
||||||
// CMB: copy scale to see if it changes
|
// CMB: copy scale to see if it changes
|
||||||
double origScaleX = m_scaleX;
|
double origScaleX = m_scaleX;
|
||||||
@@ -643,11 +646,13 @@ void wxDC::ComputeScaleAndOrigin(void)
|
|||||||
// CMB: if scale has changed call SetPen to recalulate the line width
|
// CMB: if scale has changed call SetPen to recalulate the line width
|
||||||
if (m_scaleX != origScaleX || m_scaleY != origScaleY)
|
if (m_scaleX != origScaleX || m_scaleY != origScaleY)
|
||||||
{
|
{
|
||||||
|
#if 0
|
||||||
// this is a bit artificial, but we need to force wxDC to think
|
// this is a bit artificial, but we need to force wxDC to think
|
||||||
// the pen has changed
|
// the pen has changed
|
||||||
const wxPen* pen = & GetPen();
|
const wxPen* pen = & GetPen();
|
||||||
wxPen tempPen;
|
wxPen tempPen;
|
||||||
m_pen = tempPen;
|
m_pen = tempPen;
|
||||||
SetPen(* pen);
|
SetPen(* pen);
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
@@ -1,6 +1,6 @@
|
|||||||
/////////////////////////////////////////////////////////////////////////////
|
/////////////////////////////////////////////////////////////////////////////
|
||||||
// Name: src/cocoa/dcclient.mm
|
// Name: src/cocoa/dcclient.mm
|
||||||
// Purpose: wxWindowDC, wxPaintDC, and wxClientDC classes
|
// Purpose: wxWindowDCImpl, wxPaintDCImpl, and wxClientDCImpl classes
|
||||||
// Author: David Elliott
|
// Author: David Elliott
|
||||||
// Modified by:
|
// Modified by:
|
||||||
// Created: 2003/04/01
|
// Created: 2003/04/01
|
||||||
@@ -13,9 +13,10 @@
|
|||||||
#ifndef WX_PRECOMP
|
#ifndef WX_PRECOMP
|
||||||
#include "wx/log.h"
|
#include "wx/log.h"
|
||||||
#include "wx/window.h"
|
#include "wx/window.h"
|
||||||
#include "wx/dcclient.h"
|
|
||||||
#endif //WX_PRECOMP
|
#endif //WX_PRECOMP
|
||||||
|
|
||||||
|
#include "wx/cocoa/dcclient.h"
|
||||||
|
|
||||||
#import <AppKit/NSView.h>
|
#import <AppKit/NSView.h>
|
||||||
#import <AppKit/NSAffineTransform.h>
|
#import <AppKit/NSAffineTransform.h>
|
||||||
#import <AppKit/NSColor.h>
|
#import <AppKit/NSColor.h>
|
||||||
@@ -24,29 +25,31 @@
|
|||||||
#import <AppKit/NSWindow.h>
|
#import <AppKit/NSWindow.h>
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* wxWindowDC
|
* wxWindowDCImpl
|
||||||
*/
|
*/
|
||||||
IMPLEMENT_DYNAMIC_CLASS(wxWindowDC, wxDC)
|
IMPLEMENT_ABSTRACT_CLASS(wxWindowDCImpl, wxCocoaDCImpl)
|
||||||
|
|
||||||
wxWindowDC::wxWindowDC(void)
|
wxWindowDCImpl::wxWindowDCImpl(wxDC *owner)
|
||||||
: m_window(NULL)
|
: wxCocoaDCImpl(owner)
|
||||||
|
, m_window(NULL)
|
||||||
, m_lockedNSView(NULL)
|
, m_lockedNSView(NULL)
|
||||||
{
|
{
|
||||||
};
|
};
|
||||||
|
|
||||||
wxWindowDC::wxWindowDC( wxWindow *window )
|
wxWindowDCImpl::wxWindowDCImpl(wxDC *owner, wxWindow *window)
|
||||||
: m_window(window)
|
: wxCocoaDCImpl(owner)
|
||||||
|
, m_window(window)
|
||||||
, m_lockedNSView(NULL)
|
, m_lockedNSView(NULL)
|
||||||
{
|
{
|
||||||
wxLogDebug(wxT("non-client window DC's are not supported, oh well"));
|
wxLogDebug(wxT("non-client window DC's are not supported, oh well"));
|
||||||
};
|
};
|
||||||
|
|
||||||
wxWindowDC::~wxWindowDC(void)
|
wxWindowDCImpl::~wxWindowDCImpl(void)
|
||||||
{
|
{
|
||||||
CocoaUnwindStackAndLoseFocus();
|
CocoaUnwindStackAndLoseFocus();
|
||||||
};
|
};
|
||||||
|
|
||||||
bool wxWindowDC::CocoaLockFocusOnNSView(WX_NSView nsview)
|
bool wxWindowDCImpl::CocoaLockFocusOnNSView(WX_NSView nsview)
|
||||||
{
|
{
|
||||||
if([nsview lockFocusIfCanDraw])
|
if([nsview lockFocusIfCanDraw])
|
||||||
{
|
{
|
||||||
@@ -59,7 +62,7 @@ bool wxWindowDC::CocoaLockFocusOnNSView(WX_NSView nsview)
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool wxWindowDC::CocoaUnlockFocusOnNSView()
|
bool wxWindowDCImpl::CocoaUnlockFocusOnNSView()
|
||||||
{
|
{
|
||||||
[[m_lockedNSView window] flushWindow];
|
[[m_lockedNSView window] flushWindow];
|
||||||
[m_lockedNSView unlockFocus];
|
[m_lockedNSView unlockFocus];
|
||||||
@@ -67,9 +70,9 @@ bool wxWindowDC::CocoaUnlockFocusOnNSView()
|
|||||||
return true;
|
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);
|
NSAffineTransform *newTransform = CocoaGetWxToBoundsTransform([m_window->GetNonClientNSView() isFlipped], [m_window->GetNonClientNSView() bounds].size.height);
|
||||||
[newTransform retain];
|
[newTransform retain];
|
||||||
[m_cocoaWxToBoundsTransform release];
|
[m_cocoaWxToBoundsTransform release];
|
||||||
@@ -77,13 +80,13 @@ bool wxWindowDC::CocoaLockFocus()
|
|||||||
return CocoaLockFocusOnNSView(m_window->GetNonClientNSView());
|
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();
|
return CocoaUnlockFocusOnNSView();
|
||||||
}
|
}
|
||||||
|
|
||||||
bool wxWindowDC::CocoaGetBounds(void *rectData)
|
bool wxWindowDCImpl::CocoaGetBounds(void *rectData)
|
||||||
{
|
{
|
||||||
if(!rectData)
|
if(!rectData)
|
||||||
return false;
|
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;
|
m_window = window;
|
||||||
};
|
};
|
||||||
|
|
||||||
wxClientDC::~wxClientDC(void)
|
wxClientDCImpl::~wxClientDCImpl(void)
|
||||||
{
|
{
|
||||||
CocoaUnwindStackAndLoseFocus();
|
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();
|
NSAffineTransform *newTransform = m_window->CocoaGetWxToBoundsTransform();
|
||||||
[newTransform retain];
|
[newTransform retain];
|
||||||
[m_cocoaWxToBoundsTransform release];
|
[m_cocoaWxToBoundsTransform release];
|
||||||
@@ -123,25 +128,27 @@ bool wxClientDC::CocoaLockFocus()
|
|||||||
return CocoaLockFocusOnNSView(m_window->GetNSView());
|
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();
|
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;
|
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);
|
sm_cocoaDCStack.Insert(this);
|
||||||
m_lockedNSView = window->GetNSView();
|
m_lockedNSView = window->GetNSView();
|
||||||
NSAffineTransform *newTransform = window->CocoaGetWxToBoundsTransform();
|
NSAffineTransform *newTransform = window->CocoaGetWxToBoundsTransform();
|
||||||
@@ -151,20 +158,20 @@ wxPaintDC::wxPaintDC( wxWindow *window )
|
|||||||
CocoaApplyTransformations();
|
CocoaApplyTransformations();
|
||||||
};
|
};
|
||||||
|
|
||||||
wxPaintDC::~wxPaintDC(void)
|
wxPaintDCImpl::~wxPaintDCImpl(void)
|
||||||
{
|
{
|
||||||
CocoaUnwindStackAndLoseFocus();
|
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;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool wxPaintDC::CocoaUnlockFocus()
|
bool wxPaintDCImpl::CocoaUnlockFocus()
|
||||||
{
|
{
|
||||||
// wxPaintDC focus can never be unlocked.
|
// wxPaintDCImpl focus can never be unlocked.
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -1,6 +1,6 @@
|
|||||||
/////////////////////////////////////////////////////////////////////////////
|
/////////////////////////////////////////////////////////////////////////////
|
||||||
// Name: src/cocoa/dcmemory.mm
|
// Name: src/cocoa/dcmemory.mm
|
||||||
// Purpose: wxMemoryDC class
|
// Purpose: wxMemoryDCImpl class
|
||||||
// Author: David Elliott
|
// Author: David Elliott
|
||||||
// Modified by:
|
// Modified by:
|
||||||
// Created: 2003/03/16
|
// Created: 2003/03/16
|
||||||
@@ -13,9 +13,9 @@
|
|||||||
|
|
||||||
#ifndef WX_PRECOMP
|
#ifndef WX_PRECOMP
|
||||||
#include "wx/log.h"
|
#include "wx/log.h"
|
||||||
#include "wx/dcmemory.h"
|
|
||||||
#endif //WX_PRECOMP
|
#endif //WX_PRECOMP
|
||||||
|
|
||||||
|
#include "wx/cocoa/dcmemory.h"
|
||||||
#include "wx/cocoa/autorelease.h"
|
#include "wx/cocoa/autorelease.h"
|
||||||
|
|
||||||
#import <AppKit/NSImage.h>
|
#import <AppKit/NSImage.h>
|
||||||
@@ -25,29 +25,30 @@
|
|||||||
#import <AppKit/NSBezierPath.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_cocoaNSImage = NULL;
|
||||||
m_ok = false;
|
m_ok = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
wxMemoryDC::wxMemoryDC( wxDC *WXUNUSED(dc) )
|
wxMemoryDCImpl::wxMemoryDCImpl(wxMemoryDC *owner, wxDC *WXUNUSED(dc))
|
||||||
|
: wxCocoaDCImpl(owner)
|
||||||
{
|
{
|
||||||
Init();
|
Init();
|
||||||
}
|
}
|
||||||
|
|
||||||
wxMemoryDC::~wxMemoryDC(void)
|
wxMemoryDCImpl::~wxMemoryDCImpl(void)
|
||||||
{
|
{
|
||||||
CocoaUnwindStackAndLoseFocus();
|
CocoaUnwindStackAndLoseFocus();
|
||||||
[m_cocoaNSImage release];
|
[m_cocoaNSImage release];
|
||||||
}
|
}
|
||||||
|
|
||||||
bool wxMemoryDC::CocoaLockFocus()
|
bool wxMemoryDCImpl::CocoaLockFocus()
|
||||||
{
|
{
|
||||||
if(m_cocoaNSImage)
|
if(m_cocoaNSImage)
|
||||||
{
|
{
|
||||||
@@ -63,7 +64,7 @@ bool wxMemoryDC::CocoaLockFocus()
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool wxMemoryDC::CocoaUnlockFocus()
|
bool wxMemoryDCImpl::CocoaUnlockFocus()
|
||||||
{
|
{
|
||||||
[m_cocoaNSImage unlockFocus];
|
[m_cocoaNSImage unlockFocus];
|
||||||
return true;
|
return true;
|
||||||
@@ -71,7 +72,7 @@ bool wxMemoryDC::CocoaUnlockFocus()
|
|||||||
|
|
||||||
// NOTE: The AppKit is unable to draw onto an NSBitmapImageRep so we must
|
// 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
|
// 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;
|
wxAutoNSAutoreleasePool pool;
|
||||||
if(m_selectedBitmap.Ok())
|
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)
|
if(width)
|
||||||
*width = m_selectedBitmap.GetWidth();
|
*width = m_selectedBitmap.GetWidth();
|
||||||
@@ -132,7 +133,7 @@ void wxMemoryDC::DoGetSize( int *width, int *height ) const
|
|||||||
*height = m_selectedBitmap.GetHeight();
|
*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,
|
wxCoord width, wxCoord height, wxCoord xsrc, wxCoord ysrc,
|
||||||
int logicalFunc, bool useMask, wxCoord xsrcMask, wxCoord ysrcMask)
|
int logicalFunc, bool useMask, wxCoord xsrcMask, wxCoord ysrcMask)
|
||||||
{
|
{
|
||||||
@@ -204,7 +205,7 @@ bool wxMemoryDC::CocoaDoBlitOnFocusedDC(wxCoord xdest, wxCoord ydest,
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool wxMemoryDC::CocoaGetBounds(void *rectData)
|
bool wxMemoryDCImpl::CocoaGetBounds(void *rectData)
|
||||||
{
|
{
|
||||||
if(!rectData)
|
if(!rectData)
|
||||||
return false;
|
return false;
|
||||||
|
@@ -1,6 +1,6 @@
|
|||||||
/////////////////////////////////////////////////////////////////////////////
|
/////////////////////////////////////////////////////////////////////////////
|
||||||
// Name: src/cocoa/dcscreen.cpp
|
// Name: src/cocoa/dcscreen.cpp
|
||||||
// Purpose: wxScreenDC class
|
// Purpose: wxScreenDCImpl class
|
||||||
// Author: David Elliott
|
// Author: David Elliott
|
||||||
// Modified by:
|
// Modified by:
|
||||||
// Created: 2003/03/16
|
// Created: 2003/03/16
|
||||||
@@ -11,7 +11,7 @@
|
|||||||
|
|
||||||
#include "wx/wxprec.h"
|
#include "wx/wxprec.h"
|
||||||
|
|
||||||
#include "wx/dcscreen.h"
|
#include "wx/cocoa/dcscreen.h"
|
||||||
|
|
||||||
#ifndef WX_PRECOMP
|
#ifndef WX_PRECOMP
|
||||||
#endif //WX_PRECOMP
|
#endif //WX_PRECOMP
|
||||||
@@ -20,18 +20,20 @@
|
|||||||
// wxMemoryDC
|
// wxMemoryDC
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
|
|
||||||
IMPLEMENT_DYNAMIC_CLASS(wxScreenDC,wxDC)
|
IMPLEMENT_ABSTRACT_CLASS(wxScreenDCImpl,wxCocoaDCImpl)
|
||||||
|
|
||||||
wxScreenDC::wxScreenDC(void)
|
wxScreenDCImpl::wxScreenDCImpl(wxScreenDC *owner)
|
||||||
|
: wxCocoaDCImpl(owner)
|
||||||
{
|
{
|
||||||
m_ok = false;
|
m_ok = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
wxScreenDC::wxScreenDC( wxDC *WXUNUSED(dc) )
|
wxScreenDCImpl::wxScreenDCImpl(wxScreenDC *owner, wxDC *WXUNUSED(dc) )
|
||||||
|
: wxCocoaDCImpl(owner)
|
||||||
{
|
{
|
||||||
m_ok = false;
|
m_ok = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
wxScreenDC::~wxScreenDC(void)
|
wxScreenDCImpl::~wxScreenDCImpl(void)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
@@ -15,11 +15,13 @@
|
|||||||
#include "wx/log.h"
|
#include "wx/log.h"
|
||||||
#include "wx/window.h"
|
#include "wx/window.h"
|
||||||
#include "wx/dc.h"
|
#include "wx/dc.h"
|
||||||
|
#include "wx/dcclient.h"
|
||||||
#include "wx/utils.h"
|
#include "wx/utils.h"
|
||||||
#endif //WX_PRECOMP
|
#endif //WX_PRECOMP
|
||||||
|
|
||||||
#include "wx/tooltip.h"
|
#include "wx/tooltip.h"
|
||||||
|
|
||||||
|
#include "wx/cocoa/dc.h"
|
||||||
#include "wx/cocoa/autorelease.h"
|
#include "wx/cocoa/autorelease.h"
|
||||||
#include "wx/cocoa/string.h"
|
#include "wx/cocoa/string.h"
|
||||||
#include "wx/cocoa/trackingrectmanager.h"
|
#include "wx/cocoa/trackingrectmanager.h"
|
||||||
@@ -1157,7 +1159,7 @@ NSRect wxWindowCocoa::CocoaTransformWxToBounds(NSRect rectWx)
|
|||||||
WX_NSAffineTransform wxWindowCocoa::CocoaGetWxToBoundsTransform()
|
WX_NSAffineTransform wxWindowCocoa::CocoaGetWxToBoundsTransform()
|
||||||
{
|
{
|
||||||
// TODO: Handle scrolling offset
|
// 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;
|
return transform;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1782,7 +1784,7 @@ void wxWindow::GetTextExtent(const wxString& string, int *outX, int *outY,
|
|||||||
// transformations. However, it's better than nothing.
|
// transformations. However, it's better than nothing.
|
||||||
// We don't create a wxClientDC because we don't want to accidently be able to use
|
// We don't create a wxClientDC because we don't want to accidently be able to use
|
||||||
// it for drawing.
|
// it for drawing.
|
||||||
wxDC tmpdc;
|
wxClientDC tmpdc(const_cast<wxWindow*>(this));
|
||||||
return tmpdc.GetTextExtent(string, outX, outY, outDescent, outExternalLeading, inFont);
|
return tmpdc.GetTextExtent(string, outX, outY, outDescent, outExternalLeading, inFont);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -54,6 +54,12 @@
|
|||||||
#include "wx/mac/dcscreen.h"
|
#include "wx/mac/dcscreen.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifdef __WXCOCOA__
|
||||||
|
#include "wx/cocoa/dcclient.h"
|
||||||
|
#include "wx/cocoa/dcmemory.h"
|
||||||
|
#include "wx/cocoa/dcscreen.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifdef __WXX11__
|
#ifdef __WXX11__
|
||||||
#include "wx/x11/dcclient.h"
|
#include "wx/x11/dcclient.h"
|
||||||
#include "wx/x11/dcmemory.h"
|
#include "wx/x11/dcmemory.h"
|
||||||
|
Reference in New Issue
Block a user