X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/4f74e0d132e73250ef422c06175dcf7e4146ec57..7471064e1d9916e3a81d747c4c130fb7ba19539b:/src/mac/carbon/dccg.cpp?ds=sidebyside diff --git a/src/mac/carbon/dccg.cpp b/src/mac/carbon/dccg.cpp index 4a175030d9..01514f90f2 100755 --- a/src/mac/carbon/dccg.cpp +++ b/src/mac/carbon/dccg.cpp @@ -17,16 +17,12 @@ #ifndef WX_PRECOMP #include "wx/log.h" - #include "wx/app.h" #include "wx/dcmemory.h" - #include "wx/dcprint.h" #include "wx/region.h" - #include "wx/image.h" #endif #include "wx/mac/uma.h" - #ifdef __MSL__ #if __MSL__ >= 0x6000 #include "math.h" @@ -38,7 +34,6 @@ #include "wx/mac/private.h" -IMPLEMENT_ABSTRACT_CLASS(wxDC, wxObject) #ifndef wxMAC_USE_CORE_GRAPHICS_BLEND_MODES #define wxMAC_USE_CORE_GRAPHICS_BLEND_MODES 0 @@ -58,11 +53,7 @@ const double M_PI = 3.14159265358979 ; #endif #endif -const double RAD2DEG = 180.0 / M_PI; -const short kEmulatedMode = -1 ; -const short kUnsupportedMode = -2 ; - -extern TECObjectRef s_TECNativeCToUnicode ; +static const double RAD2DEG = 180.0 / M_PI; #ifndef __LP64__ @@ -119,6 +110,7 @@ wxMacWindowStateSaver::~wxMacWindowStateSaver() // minimal implementation only used for appearance drawing < 10.3 +#ifndef wxMAC_USE_CORE_GRAPHICS wxMacPortSetter::wxMacPortSetter( const wxDC* dc ) : m_ph( (GrafPtr) dc->m_macPort ) { @@ -132,14 +124,15 @@ wxMacPortSetter::~wxMacPortSetter() { // m_dc->MacCleanupPort(&m_ph) ; } + +#endif + #endif //----------------------------------------------------------------------------- // Local functions //----------------------------------------------------------------------------- -static inline double dmin(double a, double b) { return a < b ? a : b; } -static inline double dmax(double a, double b) { return a > b ? a : b; } static inline double DegToRad(double deg) { return (deg * M_PI) / 180.0; } //----------------------------------------------------------------------------- @@ -158,6 +151,10 @@ static inline double DegToRad(double deg) { return (deg * M_PI) / 180.0; } // wxGraphicPath implementation //----------------------------------------------------------------------------- +#if !wxUSE_GRAPHICS_CONTEXT + +IMPLEMENT_ABSTRACT_CLASS(wxDC, wxObject) + wxMacCGPath::wxMacCGPath() { m_path = CGPathCreateMutable() ; @@ -485,7 +482,7 @@ const CGPatternCallbacks wxMacCGPattern::ms_Callbacks = { 0, &wxMacCGPattern::_R class ImagePattern : public wxMacCGPattern { public : - ImagePattern( const wxBitmap* bmp , CGAffineTransform transform ) + ImagePattern( const wxBitmap* bmp , const CGAffineTransform& transform ) { wxASSERT( bmp && bmp->Ok() ) ; @@ -493,7 +490,7 @@ public : } // ImagePattern takes ownership of CGImageRef passed in - ImagePattern( CGImageRef image , CGAffineTransform transform ) + ImagePattern( CGImageRef image , const CGAffineTransform& transform ) { if ( image ) CFRetain( image ) ; @@ -508,7 +505,7 @@ public : } protected : - void Init( CGImageRef image, CGAffineTransform transform ) + void Init( CGImageRef image, const CGAffineTransform& transform ) { m_image = image ; if ( m_image ) @@ -534,7 +531,7 @@ protected : class HatchPattern : public wxMacCGPattern { public : - HatchPattern( int hatchstyle, CGAffineTransform transform ) + HatchPattern( int hatchstyle, const CGAffineTransform& transform ) { m_hatch = hatchstyle ; m_imageBounds = CGRectMake( 0.0, 0.0, 8.0 , 8.0 ) ; @@ -658,7 +655,7 @@ void wxMacCGContext::SetPen( const wxPen &pen ) CGContextSetShouldAntialias( m_cgContext , false ) ; #endif - if ( fill | stroke ) + if ( fill || stroke ) { // set up brushes m_mode = kCGPathFill ; // just a default @@ -835,7 +832,7 @@ void wxMacCGContext::SetBrush( const wxBrush &brush ) CGContextSetShouldAntialias( m_cgContext , false ) ; #endif - if ( fill | stroke ) + if ( fill || stroke ) { // setup brushes m_mode = kCGPathFill ; // just a default @@ -1102,8 +1099,7 @@ void wxMacCGContext::GetPartialTextExtents(const wxString& text, wxArrayInt& wid #endif #endif - OSStatus status; - status = ::ATSUCreateTextLayoutWithTextPtr( (UniCharArrayPtr) ubuf , 0 , chars , chars , 1 , + ::ATSUCreateTextLayoutWithTextPtr( (UniCharArrayPtr) ubuf , 0 , chars , chars , 1 , &chars , (ATSUStyle*) &m_macATSUIStyle , &atsuLayout ) ; for ( int pos = 0; pos < (int)chars; pos ++ ) @@ -1318,13 +1314,6 @@ void wxDC::DoSetClippingRegionAsRegion( const wxRegion ®ion ) } else { -#if 0 - CopyRgn( (RgnHandle) region.GetWXHRGN() , (RgnHandle) m_macCurrentClipRgn ) ; - if ( xx != x || yy != y ) - OffsetRgn( (RgnHandle) m_macCurrentClipRgn , xx - x , yy - y ) ; - SectRgn( (RgnHandle)m_macCurrentClipRgn , (RgnHandle)m_macBoundaryClipRgn , (RgnHandle)m_macCurrentClipRgn ) ; -#endif - if ( m_clipping ) { m_clipX1 = wxMax( m_clipX1, xx ); @@ -1346,8 +1335,6 @@ void wxDC::DoSetClippingRegionAsRegion( const wxRegion ®ion ) void wxDC::DestroyClippingRegion() { -// CopyRgn( (RgnHandle) m_macBoundaryClipRgn , (RgnHandle) m_macCurrentClipRgn ) ; - CGContextRef cgContext = ((wxMacCGContext*)(m_graphicContext))->GetNativeContext() ; CGContextRestoreGState( cgContext ); CGContextSaveGState( cgContext ); @@ -2142,7 +2129,6 @@ void wxDC::DoGetTextExtent( const wxString &str, wxCoord *width, wxCoord *height { wxCHECK_RET( Ok(), wxT("wxDC(cg)::DoGetTextExtent - invalid DC") ); - wxFont formerFont = m_font ; if ( theFont ) { m_graphicContext->SetFont( *theFont ) ; @@ -2272,50 +2258,98 @@ void wxDC::Clear(void) } } +#endif + #pragma mark - // --------------------------------------------------------------------------- // coordinates transformations // --------------------------------------------------------------------------- +/* + wxCoord XLOG2DEVMAC(wxCoord x) const + { + long new_x = x - m_logicalOriginX; + if (new_x > 0) + return (wxCoord)((double)new_x * m_scaleX + 0.5) * m_signX + m_deviceOriginX + m_macLocalOrigin.x; + else + return (wxCoord)((double)new_x * m_scaleX - 0.5) * m_signX + m_deviceOriginX + m_macLocalOrigin.x; + } + wxCoord YLOG2DEVMAC(wxCoord y) const + { + long new_y = y - m_logicalOriginY; + if (new_y > 0) + return (wxCoord)((double)new_y * m_scaleY + 0.5) * m_signY + m_deviceOriginY + m_macLocalOrigin.y; + else + return (wxCoord)((double)new_y * m_scaleY - 0.5) * m_signY + m_deviceOriginY + m_macLocalOrigin.y; + } +*/ // TODO wxCoord wxDCBase::DeviceToLogicalX(wxCoord x) const { - return ((wxDC *)this)->XDEV2LOG(x); + long new_x = x - m_deviceOriginX; + if (new_x > 0) + return (wxCoord)((double)new_x / m_scaleX + 0.5) * m_signX + m_logicalOriginX; + else + return (wxCoord)((double)new_x / m_scaleX - 0.5) * m_signX + m_logicalOriginX; } wxCoord wxDCBase::DeviceToLogicalY(wxCoord y) const { - return ((wxDC *)this)->YDEV2LOG(y); + long new_y = y - m_deviceOriginY; + if (new_y > 0) + return (wxCoord)((double)new_y / m_scaleY + 0.5) * m_signY + m_logicalOriginY; + else + return (wxCoord)((double)new_y / m_scaleY - 0.5) * m_signY + m_logicalOriginY; } wxCoord wxDCBase::DeviceToLogicalXRel(wxCoord x) const { - return ((wxDC *)this)->XDEV2LOGREL(x); + if (x > 0) + return (wxCoord)((double)x / m_scaleX + 0.5); + else + return (wxCoord)((double)x / m_scaleX - 0.5); } wxCoord wxDCBase::DeviceToLogicalYRel(wxCoord y) const { - return ((wxDC *)this)->YDEV2LOGREL(y); + if (y > 0) + return (wxCoord)((double)y / m_scaleY + 0.5); + else + return (wxCoord)((double)y / m_scaleY - 0.5); } wxCoord wxDCBase::LogicalToDeviceX(wxCoord x) const { - return ((wxDC *)this)->XLOG2DEV(x); + long new_x = x - m_logicalOriginX; + if (new_x > 0) + return (wxCoord)((double)new_x * m_scaleX + 0.5) * m_signX + m_deviceOriginX; + else + return (wxCoord)((double)new_x * m_scaleX - 0.5) * m_signX + m_deviceOriginX; } wxCoord wxDCBase::LogicalToDeviceY(wxCoord y) const { - return ((wxDC *)this)->YLOG2DEV(y); + long new_y = y - m_logicalOriginY; + if (new_y > 0) + return (wxCoord)((double)new_y * m_scaleY + 0.5) * m_signY + m_deviceOriginY; + else + return (wxCoord)((double)new_y * m_scaleY - 0.5) * m_signY + m_deviceOriginY; } wxCoord wxDCBase::LogicalToDeviceXRel(wxCoord x) const { - return ((wxDC *)this)->XLOG2DEVREL(x); + if (x > 0) + return (wxCoord)((double)x * m_scaleX + 0.5); + else + return (wxCoord)((double)x * m_scaleX - 0.5); } wxCoord wxDCBase::LogicalToDeviceYRel(wxCoord y) const { - return ((wxDC *)this)->YLOG2DEVREL(y); + if (y > 0) + return (wxCoord)((double)y * m_scaleY + 0.5); + else + return (wxCoord)((double)y * m_scaleY - 0.5); } #endif // wxMAC_USE_CORE_GRAPHICS