]> git.saurik.com Git - wxWidgets.git/blobdiff - src/mac/dc.cpp
Carbon Event Mouse Moved handler changes
[wxWidgets.git] / src / mac / dc.cpp
index 9bcf525f260cbaefdb8bea58547b81951be66a6a..836279295e2d56070dd5aab2e76310d057dcafb3 100644 (file)
@@ -31,6 +31,7 @@ using namespace std ;
 #include "ATSUnicode.h"
 #include "TextCommon.h"
 #include "TextEncodingConverter.h"
+#include "FixMath.h"
 #if !USE_SHARED_LIBRARY
 IMPLEMENT_ABSTRACT_CLASS(wxDC, wxObject)
 #endif
@@ -45,9 +46,11 @@ IMPLEMENT_ABSTRACT_CLASS(wxDC, wxObject)
 #define twips2mm        0.0176388888889
 #define mm2pt            2.83464566929
 #define pt2mm            0.352777777778
-#ifndef __DARWIN__
+#if !defined( __DARWIN__ ) || defined(__MWERKS__)
+#ifndef M_PI
 const double M_PI = 3.14159265358979 ;
 #endif
+#endif
 const double RAD2DEG  = 180.0 / M_PI;
 const short kEmulatedMode = -1 ;
 const short kUnsupportedMode = -2 ;
@@ -89,12 +92,13 @@ wxMacWindowClipper::wxMacWindowClipper( const wxWindow* win )
         OffsetRgn( m_newClip , x , y ) ;
         SetClip( m_newClip ) ;
         DisposeRgn( insidergn ) ;
-#endif
+#else
         int x = 0 , y = 0;
         win->MacWindowToRootWindow( &x,&y ) ;
         CopyRgn( (RgnHandle) ((wxWindow*)win)->MacGetVisibleRegion().GetWXHRGN() , m_newClip ) ;
         OffsetRgn( m_newClip , x , y ) ;
         SetClip( m_newClip ) ;
+#endif  
     }
 }
 
@@ -235,7 +239,11 @@ wxDC::wxDC()
     m_pen = *wxBLACK_PEN;
     m_font = *wxNORMAL_FONT;
     m_brush = *wxWHITE_BRUSH;
+#ifdef __WXDEBUG__
+    // needed to debug possible errors with two active drawing methods at the same time on 
+    // the same DC
     m_macCurrentPortStateHelper = NULL ;
+#endif
     m_macATSUIStyle = NULL ;
     m_macAliasWasEnabled = false;
     m_macForegroundPixMap = NULL ;
@@ -250,8 +258,10 @@ wxDC::~wxDC(void)
 
 void wxDC::MacSetupPort(wxMacPortStateHelper* help) const
 {
+#ifdef __WXDEBUG__
     wxASSERT( m_macCurrentPortStateHelper == NULL ) ;
     m_macCurrentPortStateHelper = help ;
+#endif
     SetClip( (RgnHandle) m_macCurrentClipRgn);
     m_macFontInstalled = false ;
     m_macBrushInstalled = false ;
@@ -260,8 +270,10 @@ void wxDC::MacSetupPort(wxMacPortStateHelper* help) const
 
 void wxDC::MacCleanupPort(wxMacPortStateHelper* help) const
 {
+#ifdef __WXDEBUG__
     wxASSERT( m_macCurrentPortStateHelper == help ) ;
     m_macCurrentPortStateHelper = NULL ;
+#endif
     if( m_macATSUIStyle )
     {
         ::ATSUDisposeStyle((ATSUStyle)m_macATSUIStyle);
@@ -411,12 +423,12 @@ void wxDC::DoSetClippingRegion( wxCoord x, wxCoord y, wxCoord width, wxCoord hei
 void wxDC::DoSetClippingRegionAsRegion( const wxRegion &region  )
 {
     wxCHECK_RET( Ok(), wxT("invalid window dc") ) ;
-      wxMacPortSetter helper(this) ;
     if (region.Empty())
     {
         DestroyClippingRegion();
         return;
     }
+    wxMacPortSetter helper(this) ;
     wxCoord x, y, w, h;
     region.GetBox( x, y, w, h );
     wxCoord xx, yy, ww, hh;
@@ -463,12 +475,6 @@ void wxDC::DestroyClippingRegion()
     m_clipping = FALSE;
 }
 
-void wxDC::DoGetSize( int* width, int* height ) const
-{
-    *width = m_maxX-m_minX;
-    *height = m_maxY-m_minY;
-}
-
 void wxDC::DoGetSizeMM( int* width, int* height ) const
 {
     int w = 0;
@@ -1274,6 +1280,8 @@ bool  wxDC::DoBlit(wxCoord xdest, wxCoord ydest, wxCoord width, wxCoord height,
     return TRUE;
 }
 
+#ifndef FixedToInt
+// as macro in FixMath.h for 10.3
 inline Fixed    IntToFixed( int inInt )
 {
     return (((SInt32) inInt) << 16);
@@ -1283,16 +1291,19 @@ inline int    FixedToInt( Fixed inFixed )
 {
     return (((SInt32) inFixed) >> 16);
 }
+#endif
 
 void  wxDC::DoDrawRotatedText(const wxString& str, wxCoord x, wxCoord y,
                               double angle)
 {
     wxCHECK_RET( Ok(), wxT("wxDC::DoDrawRotatedText  Invalid window dc") );
+
     if (angle == 0.0 )
     {
         DrawText(str, x, y);
         return;
     }
+
     if ( str.Length() == 0 )
         return ;
         
@@ -1314,8 +1325,11 @@ void  wxDC::DoDrawRotatedText(const wxString& str, wxCoord x, wxCoord y,
         &chars , (ATSUStyle*) &m_macATSUIStyle , &atsuLayout ) ;
 #else
     TECObjectRef ec;
-    status = TECCreateConverter(&ec, 
-       wxApp::s_macDefaultEncodingIsPC ? kTextEncodingWindowsLatin1 : kTextEncodingMacRoman, kTextEncodingUnicodeDefault);
+    status = TECCreateConverter(&ec,
+                                wxApp::s_macDefaultEncodingIsPC
+                                    ? (int)kTextEncodingWindowsLatin1
+                                    : (int)kTextEncodingMacRoman,
+                                kTextEncodingUnicodeDefault);
        
     wxASSERT_MSG( status == noErr , wxT("couldn't start converter") ) ;
     ByteCount byteOutLen ;
@@ -1362,8 +1376,8 @@ void  wxDC::DoDrawRotatedText(const wxString& str, wxCoord x, wxCoord y,
     status = ::ATSUMeasureText( atsuLayout, kATSUFromTextBeginning, kATSUToTextEnd,
         &textBefore , &textAfter, &ascent , &descent );
     
-    drawX += sin(angle/RAD2DEG) * FixedToInt(ascent) ;
-    drawY += cos(angle/RAD2DEG) * FixedToInt(ascent) ;
+    drawX += (int)(sin(angle/RAD2DEG) * FixedToInt(ascent));
+    drawY += (int)(cos(angle/RAD2DEG) * FixedToInt(ascent));
     status = ::ATSUDrawText( atsuLayout, kATSUFromTextBeginning, kATSUToTextEnd,
         IntToFixed(drawX) , IntToFixed(drawY) );
     wxASSERT_MSG( status == noErr , wxT("couldn't draw the rotated text") );
@@ -1384,10 +1398,12 @@ void  wxDC::DoDrawRotatedText(const wxString& str, wxCoord x, wxCoord y,
 void  wxDC::DoDrawText(const wxString& strtext, wxCoord x, wxCoord y)
 {
     wxCHECK_RET(Ok(), wxT("wxDC::DoDrawText  Invalid DC"));
+
     wxMacPortSetter helper(this) ;
     long xx = XLOG2DEVMAC(x);
     long yy = YLOG2DEVMAC(y);
 #if TARGET_CARBON
+
     bool useDrawThemeText = ( DrawThemeTextBox != (void*) kUnresolvedCFragSymbolAddress ) ;
     if ( IsKindOf(CLASSINFO( wxPrinterDC ) ) || m_font.GetNoAntiAliasing() )
         useDrawThemeText = false ;
@@ -1769,7 +1785,7 @@ void wxDC::MacInstallFont() const
     Fixed atsuSize = IntToFixed( int(m_scaleY * font->m_macFontSize) ) ;
     Style qdStyle = font->m_macFontStyle ;
     ATSUFontID    atsuFont = font->m_macATSUFontID ;
-    status = ::ATSUCreateStyle(&(ATSUStyle)m_macATSUIStyle) ;
+    status = ::ATSUCreateStyle((ATSUStyle *)&m_macATSUIStyle) ;
     wxASSERT_MSG( status == noErr , wxT("couldn't create ATSU style") ) ;
     ATSUAttributeTag atsuTags[] =
     {
@@ -1799,7 +1815,7 @@ void wxDC::MacInstallFont() const
     } ;
     Boolean kTrue = true ;
     Boolean kFalse = false ;
-    BslnBaselineClass kBaselineDefault = kBSLNHangingBaseline ;
+    //BslnBaselineClass kBaselineDefault = kBSLNHangingBaseline ;
     ATSUVerticalCharacterType kHorizontal = kATSUStronglyHorizontal;
     ATSUAttributeValuePtr    atsuValues[sizeof(atsuTags)/sizeof(ATSUAttributeTag)] =
     {
@@ -1814,7 +1830,7 @@ void wxDC::MacInstallFont() const
             (qdStyle & condense) ? &kTrue : &kFalse ,
             (qdStyle & extend) ? &kTrue : &kFalse ,
     } ;
-    status = ::ATSUSetAttributes((ATSUStyle)m_macATSUIStyle, sizeof(atsuTags)/sizeof(ATSUAttributeTag),
+    status = ::ATSUSetAttributes((ATSUStyle)m_macATSUIStyle, sizeof(atsuTags)/sizeof(ATSUAttributeTag) ,
         atsuTags, atsuSizes, atsuValues);
     wxASSERT_MSG( status == noErr , wxT("couldn't set create ATSU style") ) ;
 }
@@ -1871,7 +1887,7 @@ void wxDC::MacInstallPen() const
     ::RGBForeColor( &forecolor );
     ::RGBBackColor( &backcolor );
     ::PenNormal() ;
-    int penWidth = m_pen.GetWidth() * (int) m_scaleX ;
+    int penWidth = (int) (m_pen.GetWidth() * m_scaleX) ; ;
     // null means only one pixel, at whatever resolution
     if ( penWidth == 0 )
         penWidth = 1 ;