Replace dc.cpp with dc.mm and dcclient.cpp with dc.mm
Update app.mm to call wxDC text system startup and cleanup code git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@20000 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
@@ -23,6 +23,7 @@
|
|||||||
#include "wx/app.h"
|
#include "wx/app.h"
|
||||||
#include "wx/frame.h"
|
#include "wx/frame.h"
|
||||||
#include "wx/dialog.h"
|
#include "wx/dialog.h"
|
||||||
|
#include "wx/dc.h"
|
||||||
#include "wx/intl.h"
|
#include "wx/intl.h"
|
||||||
#include "wx/log.h"
|
#include "wx/log.h"
|
||||||
#include "wx/cocoa/ObjcPose.h"
|
#include "wx/cocoa/ObjcPose.h"
|
||||||
@@ -311,6 +312,7 @@ END_EVENT_TABLE()
|
|||||||
// wxDebugContext::SetStream(NULL, NULL);
|
// wxDebugContext::SetStream(NULL, NULL);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
wxDC::CocoaShutdownTextSystem();
|
||||||
#if wxUSE_LOG
|
#if wxUSE_LOG
|
||||||
// do it as the very last thing because everything else can log messages
|
// do it as the very last thing because everything else can log messages
|
||||||
delete wxLog::SetActiveTarget(NULL);
|
delete wxLog::SetActiveTarget(NULL);
|
||||||
@@ -352,6 +354,7 @@ bool wxApp::OnInitGui()
|
|||||||
|
|
||||||
// Create the app using the sharedApplication method
|
// Create the app using the sharedApplication method
|
||||||
m_cocoaApp = [NSApplication sharedApplication];
|
m_cocoaApp = [NSApplication sharedApplication];
|
||||||
|
wxDC::CocoaInitializeTextSystem();
|
||||||
// [ m_cocoaApp setDelegate:m_cocoaApp ];
|
// [ m_cocoaApp setDelegate:m_cocoaApp ];
|
||||||
#if 0
|
#if 0
|
||||||
wxLogDebug("Just for kicks");
|
wxLogDebug("Just for kicks");
|
||||||
|
@@ -1,25 +1,153 @@
|
|||||||
/////////////////////////////////////////////////////////////////////////////
|
/////////////////////////////////////////////////////////////////////////////
|
||||||
// Name: dc.cpp
|
// Name: src/cocoa/dc.mm
|
||||||
// Purpose: wxDC class
|
// Purpose: wxDC
|
||||||
// Author: AUTHOR
|
// Author: David Elliott
|
||||||
// Modified by:
|
// Modified by:
|
||||||
// Created: 01/02/97
|
// Created: 2003/04/01
|
||||||
// RCS-ID: $Id$
|
// RCS-ID: $Id$
|
||||||
// Copyright: (c) AUTHOR
|
// Copyright: (c) 2003 David Elliott
|
||||||
// Licence: wxWindows licence
|
// Licence: wxWindows license
|
||||||
/////////////////////////////////////////////////////////////////////////////
|
/////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
#ifdef __GNUG__
|
|
||||||
#pragma implementation "dc.h"
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#include "wx/dc.h"
|
#include "wx/dc.h"
|
||||||
#include "wx/bitmap.h"
|
|
||||||
#include "wx/log.h"
|
#include "wx/log.h"
|
||||||
|
|
||||||
#if !USE_SHARED_LIBRARY
|
#import <AppKit/NSBezierPath.h>
|
||||||
|
#import <AppKit/NSTextStorage.h>
|
||||||
|
#import <AppKit/NSLayoutManager.h>
|
||||||
|
#import <AppKit/NSTextContainer.h>
|
||||||
|
#import <AppKit/NSGraphicsContext.h>
|
||||||
|
#import <AppKit/NSAffineTransform.h>
|
||||||
|
#import <AppKit/NSColor.h>
|
||||||
|
#import <AppKit/NSTypeSetter.h>
|
||||||
|
|
||||||
IMPLEMENT_ABSTRACT_CLASS(wxDC, wxObject)
|
IMPLEMENT_ABSTRACT_CLASS(wxDC, wxObject)
|
||||||
#endif
|
wxDC *wxDC::sm_focusedDC = NULL;
|
||||||
|
WX_NSTextStorage wxDC::sm_cocoaNSTextStorage = nil;
|
||||||
|
WX_NSLayoutManager wxDC::sm_cocoaNSLayoutManager = nil;
|
||||||
|
WX_NSTextContainer wxDC::sm_cocoaNSTextContainer = nil;
|
||||||
|
|
||||||
|
void wxDC::CocoaInitializeTextSystem()
|
||||||
|
{
|
||||||
|
wxASSERT_MSG(!sm_cocoaNSTextStorage && !sm_cocoaNSLayoutManager && !sm_cocoaNSTextContainer,"Text system already initalized! BAD PROGRAMMER!");
|
||||||
|
|
||||||
|
sm_cocoaNSTextStorage = [[NSTextStorage alloc] init];
|
||||||
|
|
||||||
|
sm_cocoaNSLayoutManager = [[NSLayoutManager alloc] init];
|
||||||
|
[sm_cocoaNSTextStorage addLayoutManager:sm_cocoaNSLayoutManager];
|
||||||
|
// NSTextStorage retains NSLayoutManager, but so do we
|
||||||
|
// [sm_cocoaNSLayoutManager release]; [sm_cocoaNSLayoutManager retain];
|
||||||
|
|
||||||
|
// NOTE: initWithContainerSize is the designated initializer, but the
|
||||||
|
// Apple CircleView sample gets away with just calling init, which
|
||||||
|
// is all we really need for our purposes.
|
||||||
|
sm_cocoaNSTextContainer = [[NSTextContainer alloc] init];
|
||||||
|
[sm_cocoaNSLayoutManager addTextContainer:sm_cocoaNSTextContainer];
|
||||||
|
// NSLayoutManager retains NSTextContainer, but so do we
|
||||||
|
// [sm_cocoaNSTextContainer release]; [sm_cocoaNSTextContainer retain];
|
||||||
|
}
|
||||||
|
|
||||||
|
void wxDC::CocoaShutdownTextSystem()
|
||||||
|
{
|
||||||
|
[sm_cocoaNSTextContainer release]; sm_cocoaNSTextContainer = nil;
|
||||||
|
[sm_cocoaNSLayoutManager release]; sm_cocoaNSLayoutManager = nil;
|
||||||
|
[sm_cocoaNSTextStorage release]; sm_cocoaNSTextStorage = nil;
|
||||||
|
}
|
||||||
|
|
||||||
|
wxDC::wxDC(void)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
wxDC::~wxDC(void)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
void wxDC::DoDrawRectangle(wxCoord x, wxCoord y, wxCoord width, wxCoord height)
|
||||||
|
{
|
||||||
|
NSBezierPath *bezpath = [NSBezierPath bezierPathWithRect:NSMakeRect(x,y,width,height)];
|
||||||
|
[bezpath stroke];
|
||||||
|
}
|
||||||
|
|
||||||
|
void wxDC::DoDrawLine(wxCoord x1, wxCoord y1, wxCoord x2, wxCoord y2)
|
||||||
|
{
|
||||||
|
NSBezierPath *bezpath = [NSBezierPath bezierPath];
|
||||||
|
[bezpath moveToPoint:NSMakePoint(x1,y1)];
|
||||||
|
[bezpath lineToPoint:NSMakePoint(x2,y2)];
|
||||||
|
[bezpath stroke];
|
||||||
|
}
|
||||||
|
|
||||||
|
void wxDC::DoGetTextExtent(const wxString& text, wxCoord *x, wxCoord *y, wxCoord *descent, wxCoord *externalLeading, wxFont *theFont) const
|
||||||
|
{
|
||||||
|
// FIXME: Cache this so it can be used for DoDrawText
|
||||||
|
wxASSERT_MSG(sm_cocoaNSTextStorage && sm_cocoaNSLayoutManager && sm_cocoaNSTextContainer, "Text system has not been initialized. BAD PROGRAMMER!");
|
||||||
|
NSAttributedString *attributedString = [[NSAttributedString alloc]
|
||||||
|
initWithString:[NSString stringWithCString:text.c_str()]];
|
||||||
|
[sm_cocoaNSTextStorage setAttributedString:attributedString];
|
||||||
|
[attributedString release];
|
||||||
|
|
||||||
|
NSRange glyphRange = [sm_cocoaNSLayoutManager glyphRangeForTextContainer:sm_cocoaNSTextContainer];
|
||||||
|
NSRect usedRect = [sm_cocoaNSLayoutManager usedRectForTextContainer:sm_cocoaNSTextContainer];
|
||||||
|
if(x)
|
||||||
|
*x=usedRect.size.width;
|
||||||
|
if(y)
|
||||||
|
*y=usedRect.size.height;
|
||||||
|
if(descent)
|
||||||
|
*descent=0;
|
||||||
|
if(externalLeading)
|
||||||
|
*externalLeading=0;
|
||||||
|
}
|
||||||
|
|
||||||
|
void wxDC::DoDrawText(const wxString& text, wxCoord x, wxCoord y)
|
||||||
|
{
|
||||||
|
wxASSERT_MSG(sm_cocoaNSTextStorage && sm_cocoaNSLayoutManager && sm_cocoaNSTextContainer, "Text system has not been initialized. BAD PROGRAMMER!");
|
||||||
|
NSAttributedString *attributedString = [[NSAttributedString alloc]
|
||||||
|
initWithString:[NSString stringWithCString:text.c_str()]];
|
||||||
|
[sm_cocoaNSTextStorage setAttributedString:attributedString];
|
||||||
|
[attributedString release];
|
||||||
|
|
||||||
|
NSRange glyphRange = [sm_cocoaNSLayoutManager glyphRangeForTextContainer:sm_cocoaNSTextContainer];
|
||||||
|
NSRect usedRect = [sm_cocoaNSLayoutManager usedRectForTextContainer:sm_cocoaNSTextContainer];
|
||||||
|
|
||||||
|
|
||||||
|
NSAffineTransform *transform = [NSAffineTransform transform];
|
||||||
|
[transform translateXBy:x yBy:y];
|
||||||
|
|
||||||
|
NSAffineTransform *flipTransform = [NSAffineTransform transform];
|
||||||
|
/* x' = 1x + 0y + 0
|
||||||
|
y' = 0x + -1y + window's height
|
||||||
|
*/
|
||||||
|
NSAffineTransformStruct matrix = {
|
||||||
|
1, 0
|
||||||
|
, 0, -1
|
||||||
|
, 0, usedRect.size.height
|
||||||
|
};
|
||||||
|
[flipTransform setTransformStruct: matrix];
|
||||||
|
|
||||||
|
NSGraphicsContext *context = [NSGraphicsContext currentContext];
|
||||||
|
[context saveGraphicsState];
|
||||||
|
[transform concat];
|
||||||
|
[flipTransform concat];
|
||||||
|
// Draw+fill a rectangle so we can see where the shit is supposed to be.
|
||||||
|
wxLogDebug("(%f,%f) (%fx%f)",usedRect.origin.x,usedRect.origin.y,usedRect.size.width,usedRect.size.height);
|
||||||
|
NSBezierPath *bezpath = [NSBezierPath bezierPathWithRect:NSMakeRect(0,0,usedRect.size.width,usedRect.size.height)];
|
||||||
|
[[NSColor blackColor] set];
|
||||||
|
[bezpath stroke];
|
||||||
|
[[NSColor blueColor] set];
|
||||||
|
[bezpath fill];
|
||||||
|
|
||||||
|
NSPoint layoutLocation = [sm_cocoaNSLayoutManager locationForGlyphAtIndex:0];
|
||||||
|
layoutLocation.x = 0.0;
|
||||||
|
layoutLocation.y *= -1.0;
|
||||||
|
layoutLocation.y += [[sm_cocoaNSLayoutManager typesetter] baselineOffsetInLayoutManager:sm_cocoaNSLayoutManager glyphIndex:0];
|
||||||
|
// NOTE: That's NSMakePoint, not NSMakePint (working on that though)
|
||||||
|
[sm_cocoaNSLayoutManager drawGlyphsForGlyphRange:glyphRange atPoint:layoutLocation];
|
||||||
|
|
||||||
|
[context restoreGraphicsState];
|
||||||
|
}
|
||||||
|
|
||||||
|
///////////////////////////////////////////////////////////////////////////
|
||||||
|
// cut here, the rest is stubs
|
||||||
|
///////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
// constants
|
// constants
|
||||||
@@ -36,50 +164,6 @@ IMPLEMENT_ABSTRACT_CLASS(wxDC, wxObject)
|
|||||||
// wxDC
|
// wxDC
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
|
|
||||||
wxDC::wxDC(void)
|
|
||||||
{
|
|
||||||
m_ok = FALSE;
|
|
||||||
m_colour = TRUE;
|
|
||||||
m_clipping = FALSE;
|
|
||||||
|
|
||||||
m_logicalOriginX = 0;
|
|
||||||
m_logicalOriginY = 0;
|
|
||||||
m_deviceOriginX = 0;
|
|
||||||
m_deviceOriginY = 0;
|
|
||||||
|
|
||||||
m_logicalScaleX = 1.0;
|
|
||||||
m_logicalScaleY = 1.0;
|
|
||||||
m_userScaleX = 1.0;
|
|
||||||
m_userScaleY = 1.0;
|
|
||||||
m_scaleX = 1.0;
|
|
||||||
m_scaleY = 1.0;
|
|
||||||
|
|
||||||
m_mappingMode = wxMM_TEXT;
|
|
||||||
|
|
||||||
m_signX = 1; // default x-axis left to right
|
|
||||||
m_signY = 1; // default y-axis top down
|
|
||||||
|
|
||||||
m_maxX = m_maxY = -100000;
|
|
||||||
m_minY = m_minY = 100000;
|
|
||||||
|
|
||||||
m_logicalFunction = wxCOPY;
|
|
||||||
// m_textAlignment = wxALIGN_TOP_LEFT;
|
|
||||||
m_backgroundMode = wxTRANSPARENT;
|
|
||||||
|
|
||||||
m_textForegroundColour = *wxBLACK;
|
|
||||||
m_textBackgroundColour = *wxWHITE;
|
|
||||||
m_pen = *wxBLACK_PEN;
|
|
||||||
m_font = *wxNORMAL_FONT;
|
|
||||||
m_brush = *wxTRANSPARENT_BRUSH;
|
|
||||||
m_backgroundBrush = *wxWHITE_BRUSH;
|
|
||||||
|
|
||||||
// m_palette = wxAPP_COLOURMAP;
|
|
||||||
};
|
|
||||||
|
|
||||||
wxDC::~wxDC(void)
|
|
||||||
{
|
|
||||||
};
|
|
||||||
|
|
||||||
void wxDC::DoDrawIcon( const wxIcon &WXUNUSED(icon), int WXUNUSED(x), int WXUNUSED(y) )
|
void wxDC::DoDrawIcon( const wxIcon &WXUNUSED(icon), int WXUNUSED(x), int WXUNUSED(y) )
|
||||||
{
|
{
|
||||||
};
|
};
|
||||||
@@ -96,10 +180,6 @@ void wxDC::DoDrawLines( int, wxPoint *, int, int )
|
|||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
void wxDC::DoDrawLine(wxCoord x1, wxCoord y1, wxCoord x2, wxCoord y2)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
int wxDC::GetDepth() const
|
int wxDC::GetDepth() const
|
||||||
{
|
{
|
||||||
return 0;
|
return 0;
|
||||||
@@ -115,19 +195,6 @@ bool wxDC::CanGetTextExtent() const
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
void wxDC::DoGetTextExtent(const wxString& string, wxCoord *x, wxCoord *y, wxCoord *descent, wxCoord *externalLeading, wxFont *theFont) const
|
|
||||||
{
|
|
||||||
wxLogDebug("wxDC::DoGetTextExtent(%s)",string.c_str());
|
|
||||||
if(x)
|
|
||||||
*x=0;
|
|
||||||
if(y)
|
|
||||||
*y=0;
|
|
||||||
if(descent)
|
|
||||||
*descent=0;
|
|
||||||
if(externalLeading)
|
|
||||||
*externalLeading=0;
|
|
||||||
}
|
|
||||||
|
|
||||||
wxCoord wxDC::GetCharHeight() const
|
wxCoord wxDC::GetCharHeight() const
|
||||||
{
|
{
|
||||||
return 0;
|
return 0;
|
||||||
@@ -184,10 +251,6 @@ void wxDC::DoDrawEllipticArc(wxCoord x, wxCoord y, wxCoord w, wxCoord h, double
|
|||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
void wxDC::DoDrawRectangle(wxCoord x, wxCoord y, wxCoord width, wxCoord height)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
void wxDC::DoDrawEllipse(wxCoord x, wxCoord y, wxCoord width, wxCoord height)
|
void wxDC::DoDrawEllipse(wxCoord x, wxCoord y, wxCoord width, wxCoord height)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
@@ -205,10 +268,6 @@ void wxDC::DoCrossHair(wxCoord x, wxCoord y)
|
|||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
void wxDC::DoDrawText(const wxString& text, 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 wxDC::DoBlit(wxCoord xdest, wxCoord ydest, wxCoord width, wxCoord height, wxDC *source, wxCoord xsrc, wxCoord ysrc, int rop, bool useMask , wxCoord xsrcMask, wxCoord ysrcMask)
|
||||||
{
|
{
|
||||||
@@ -345,4 +404,3 @@ int wxDCBase::DeviceToLogicalY(int y) const
|
|||||||
return y;
|
return y;
|
||||||
}
|
}
|
||||||
|
|
||||||
// vim:sts=4:sw=4:et
|
|
@@ -1,84 +0,0 @@
|
|||||||
/////////////////////////////////////////////////////////////////////////////
|
|
||||||
// Name: dcclient.cpp
|
|
||||||
// Purpose: wxClientDC class
|
|
||||||
// Author: AUTHOR
|
|
||||||
// Modified by:
|
|
||||||
// Created: 01/02/97
|
|
||||||
// RCS-ID: $Id$
|
|
||||||
// Copyright: (c) AUTHOR
|
|
||||||
// Licence: wxWindows licence
|
|
||||||
/////////////////////////////////////////////////////////////////////////////
|
|
||||||
|
|
||||||
#ifdef __GNUG__
|
|
||||||
#pragma implementation "dcclient.h"
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#include "wx/dcclient.h"
|
|
||||||
#include "wx/dcmemory.h"
|
|
||||||
#include "wx/region.h"
|
|
||||||
#include <math.h>
|
|
||||||
|
|
||||||
//-----------------------------------------------------------------------------
|
|
||||||
// constants
|
|
||||||
//-----------------------------------------------------------------------------
|
|
||||||
|
|
||||||
#define RAD2DEG 57.2957795131
|
|
||||||
|
|
||||||
//-----------------------------------------------------------------------------
|
|
||||||
// wxPaintDC
|
|
||||||
//-----------------------------------------------------------------------------
|
|
||||||
|
|
||||||
#if !USE_SHARED_LIBRARY
|
|
||||||
IMPLEMENT_DYNAMIC_CLASS(wxWindowDC, wxDC)
|
|
||||||
IMPLEMENT_DYNAMIC_CLASS(wxClientDC, wxWindowDC)
|
|
||||||
IMPLEMENT_DYNAMIC_CLASS(wxPaintDC, wxWindowDC)
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/*
|
|
||||||
* wxWindowDC
|
|
||||||
*/
|
|
||||||
|
|
||||||
wxWindowDC::wxWindowDC(void)
|
|
||||||
{
|
|
||||||
};
|
|
||||||
|
|
||||||
wxWindowDC::wxWindowDC( wxWindow *window )
|
|
||||||
{
|
|
||||||
};
|
|
||||||
|
|
||||||
wxWindowDC::~wxWindowDC(void)
|
|
||||||
{
|
|
||||||
};
|
|
||||||
|
|
||||||
/*
|
|
||||||
* wxClientDC
|
|
||||||
*/
|
|
||||||
|
|
||||||
wxClientDC::wxClientDC(void)
|
|
||||||
{
|
|
||||||
};
|
|
||||||
|
|
||||||
wxClientDC::wxClientDC( wxWindow *window )
|
|
||||||
{
|
|
||||||
};
|
|
||||||
|
|
||||||
wxClientDC::~wxClientDC(void)
|
|
||||||
{
|
|
||||||
};
|
|
||||||
|
|
||||||
/*
|
|
||||||
* wxPaintDC
|
|
||||||
*/
|
|
||||||
|
|
||||||
wxPaintDC::wxPaintDC(void)
|
|
||||||
{
|
|
||||||
};
|
|
||||||
|
|
||||||
wxPaintDC::wxPaintDC( wxWindow *window )
|
|
||||||
{
|
|
||||||
};
|
|
||||||
|
|
||||||
wxPaintDC::~wxPaintDC(void)
|
|
||||||
{
|
|
||||||
};
|
|
||||||
|
|
92
src/cocoa/dcclient.mm
Normal file
92
src/cocoa/dcclient.mm
Normal file
@@ -0,0 +1,92 @@
|
|||||||
|
/////////////////////////////////////////////////////////////////////////////
|
||||||
|
// Name: src/cocoa/dcclient.mm
|
||||||
|
// Purpose: wxWindowDC, wxPaintDC, and wxClientDC classes
|
||||||
|
// Author: David Elliott
|
||||||
|
// Modified by:
|
||||||
|
// Created: 2003/04/01
|
||||||
|
// RCS-ID: $Id$
|
||||||
|
// Copyright: (c) 2003 David Elliott
|
||||||
|
// Licence: wxWindows license
|
||||||
|
/////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
#include "wx/dcclient.h"
|
||||||
|
#include "wx/window.h"
|
||||||
|
|
||||||
|
#import <AppKit/NSView.h>
|
||||||
|
#import <AppKit/NSAffineTransform.h>
|
||||||
|
|
||||||
|
/*
|
||||||
|
* wxWindowDC
|
||||||
|
*/
|
||||||
|
IMPLEMENT_DYNAMIC_CLASS(wxWindowDC, wxDC)
|
||||||
|
|
||||||
|
wxWindowDC::wxWindowDC(void)
|
||||||
|
{
|
||||||
|
};
|
||||||
|
|
||||||
|
wxWindowDC::wxWindowDC( wxWindow *window )
|
||||||
|
{
|
||||||
|
wxFAIL_MSG("non-client window DC's are not supported");
|
||||||
|
};
|
||||||
|
|
||||||
|
wxWindowDC::~wxWindowDC(void)
|
||||||
|
{
|
||||||
|
};
|
||||||
|
|
||||||
|
/*
|
||||||
|
* wxClientDC
|
||||||
|
*/
|
||||||
|
IMPLEMENT_DYNAMIC_CLASS(wxClientDC, wxWindowDC)
|
||||||
|
|
||||||
|
wxClientDC::wxClientDC(void)
|
||||||
|
{
|
||||||
|
};
|
||||||
|
|
||||||
|
wxClientDC::wxClientDC( wxWindow *window )
|
||||||
|
{
|
||||||
|
};
|
||||||
|
|
||||||
|
wxClientDC::~wxClientDC(void)
|
||||||
|
{
|
||||||
|
};
|
||||||
|
|
||||||
|
/*
|
||||||
|
* wxPaintDC
|
||||||
|
*/
|
||||||
|
IMPLEMENT_DYNAMIC_CLASS(wxPaintDC, wxWindowDC)
|
||||||
|
|
||||||
|
wxPaintDC::wxPaintDC(void)
|
||||||
|
{
|
||||||
|
};
|
||||||
|
|
||||||
|
wxPaintDC::wxPaintDC( wxWindow *window )
|
||||||
|
{
|
||||||
|
wxASSERT_MSG(!sm_focusedDC,"Found another wxDC with focus. Do not use wxPaintDC outside of paint handlers!");
|
||||||
|
wxASSERT_MSG([NSView focusView]==window->GetNSView(), "PaintDC's NSView does not have focus. Please use wxPaintDC only as the first DC created in a paint handler");
|
||||||
|
sm_focusedDC=this;
|
||||||
|
// This transform flips the graphics since wxDC uses top-left origin
|
||||||
|
if(![window->GetNSView() isFlipped])
|
||||||
|
{
|
||||||
|
// The transform is auto released
|
||||||
|
NSAffineTransform *transform = [NSAffineTransform transform];
|
||||||
|
/* x' = 1x + 0y + 0
|
||||||
|
y' = 0x + -1y + window's height
|
||||||
|
*/
|
||||||
|
NSAffineTransformStruct matrix = {
|
||||||
|
1, 0
|
||||||
|
, 0, -1
|
||||||
|
, 0, [window->GetNSView() bounds].size.height
|
||||||
|
};
|
||||||
|
[transform setTransformStruct: matrix];
|
||||||
|
// Apply the transform
|
||||||
|
[transform concat];
|
||||||
|
}
|
||||||
|
// TODO: Apply scaling transformation
|
||||||
|
};
|
||||||
|
|
||||||
|
wxPaintDC::~wxPaintDC(void)
|
||||||
|
{
|
||||||
|
if(sm_focusedDC==this)
|
||||||
|
sm_focusedDC=NULL;
|
||||||
|
};
|
||||||
|
|
@@ -199,8 +199,8 @@ ALL_SOURCES = \
|
|||||||
cocoa/control.mm \
|
cocoa/control.mm \
|
||||||
cocoa/cursor.mm \
|
cocoa/cursor.mm \
|
||||||
cocoa/data.cpp \
|
cocoa/data.cpp \
|
||||||
cocoa/dc.cpp \
|
cocoa/dc.mm \
|
||||||
cocoa/dcclient.cpp \
|
cocoa/dcclient.mm \
|
||||||
cocoa/dcmemory.cpp \
|
cocoa/dcmemory.cpp \
|
||||||
cocoa/dcscreen.cpp \
|
cocoa/dcscreen.cpp \
|
||||||
cocoa/dialog.mm \
|
cocoa/dialog.mm \
|
||||||
|
Reference in New Issue
Block a user