]> git.saurik.com Git - wxWidgets.git/blobdiff - src/mac/carbon/dc.cpp
don't declare inline function with dllexport declaration, this provokes mingw32 warni...
[wxWidgets.git] / src / mac / carbon / dc.cpp
index 6f8ecf23dfa9a95c91c47bd524a24b5e1c71a2bf..fbd3f8f89a7801bc82b3a165b8b5a553d0d7a117 100644 (file)
     #include "wx/dcmemory.h"
     #include "wx/dcprint.h"
     #include "wx/region.h"
     #include "wx/dcmemory.h"
     #include "wx/dcprint.h"
     #include "wx/region.h"
+    #include "wx/image.h"
 #endif
 
 #include "wx/mac/uma.h"
 #endif
 
 #include "wx/mac/uma.h"
-#include "wx/image.h"
 
 #ifdef __MSL__
     #if __MSL__ >= 0x6000
 
 #ifdef __MSL__
     #if __MSL__ >= 0x6000
@@ -55,9 +55,6 @@ const double RAD2DEG  = 180.0 / M_PI;
 const short kEmulatedMode = -1 ;
 const short kUnsupportedMode = -2 ;
 
 const short kEmulatedMode = -1 ;
 const short kUnsupportedMode = -2 ;
 
-extern TECObjectRef s_TECNativeCToUnicode ;
-
-
 wxMacPortSetter::wxMacPortSetter( const wxDC* dc ) :
     m_ph( (GrafPtr) dc->m_macPort )
 {
 wxMacPortSetter::wxMacPortSetter( const wxDC* dc ) :
     m_ph( (GrafPtr) dc->m_macPort )
 {
@@ -154,13 +151,6 @@ wxMacWindowStateSaver::~wxMacWindowStateSaver()
     SetThemeDrawingState( m_themeDrawingState , true ) ;
 }
 
     SetThemeDrawingState( m_themeDrawingState , true ) ;
 }
 
-//-----------------------------------------------------------------------------
-// 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; }
-
 //-----------------------------------------------------------------------------
 // wxDC
 //-----------------------------------------------------------------------------
 //-----------------------------------------------------------------------------
 // wxDC
 //-----------------------------------------------------------------------------
@@ -756,7 +746,7 @@ bool wxDC::DoGetPixel( wxCoord x, wxCoord y, wxColour *col ) const
     GetCPixel( XLOG2DEVMAC(x), YLOG2DEVMAC(y), &colour );
 
     // convert from Mac colour to wx
     GetCPixel( XLOG2DEVMAC(x), YLOG2DEVMAC(y), &colour );
 
     // convert from Mac colour to wx
-    col->Set( colour.red >> 8, colour.green >> 8, colour.blue >> 8);
+    *col = colour;
 
     return true ;
 }
 
     return true ;
 }
@@ -1185,12 +1175,26 @@ bool wxDC::CanDrawBitmap(void) const
     return true ;
 }
 
     return true ;
 }
 
-bool wxDC::DoBlit(wxCoord xdest, wxCoord ydest, wxCoord width, wxCoord height,
+bool wxDC::DoBlit(wxCoord xdest, wxCoord ydest, wxCoord dstWidth, wxCoord dstHeight,
                    wxDC *source, wxCoord xsrc, wxCoord ysrc, int logical_func , bool useMask,
                    wxCoord xsrcMask, wxCoord ysrcMask )
 {
                    wxDC *source, wxCoord xsrc, wxCoord ysrc, int logical_func , bool useMask,
                    wxCoord xsrcMask, wxCoord ysrcMask )
 {
-    wxCHECK_MSG(Ok(), false, wxT("wxDC::DoBlit - invalid DC"));
-    wxCHECK_MSG(source->Ok(), false, wxT("wxDC::DoBlit - invalid source DC"));
+    return DoStretchBlit( xdest, ydest, dstWidth, dstHeight,
+                           source, xsrc, ysrc, dstWidth, dstHeight, 
+                           logical_func, useMask,
+                           xsrcMask, ysrcMask );
+}
+
+bool wxDC::DoStretchBlit(wxCoord xdest, wxCoord ydest,
+                         wxCoord dstWidth, wxCoord dstHeight,
+                         wxDC *source,
+                         wxCoord xsrc, wxCoord ysrc,
+                         wxCoord srcWidth, wxCoord srcHeight,
+                         int logical_func, bool useMask,
+                         wxCoord xsrcMask, wxCoord ysrcMask)
+{
+    wxCHECK_MSG(Ok(), false, wxT("wxDC::DoStretchBlit - invalid DC"));
+    wxCHECK_MSG(source->Ok(), false, wxT("wxDC::DoStretchBlit - invalid source DC"));
 
     if ( logical_func == wxNO_OP )
         return true ;
 
     if ( logical_func == wxNO_OP )
         return true ;
@@ -1208,12 +1212,12 @@ bool wxDC::DoBlit(wxCoord xdest, wxCoord ydest, wxCoord width, wxCoord height,
     Rect srcrect , dstrect ;
     srcrect.top = source->YLOG2DEVMAC(ysrc) ;
     srcrect.left = source->XLOG2DEVMAC(xsrc)  ;
     Rect srcrect , dstrect ;
     srcrect.top = source->YLOG2DEVMAC(ysrc) ;
     srcrect.left = source->XLOG2DEVMAC(xsrc)  ;
-    srcrect.right = source->XLOG2DEVMAC(xsrc + width ) ;
-    srcrect.bottom = source->YLOG2DEVMAC(ysrc + height) ;
+    srcrect.right = source->XLOG2DEVMAC(xsrc + srcWidth ) ;
+    srcrect.bottom = source->YLOG2DEVMAC(ysrc + srcHeight) ;
     dstrect.top = YLOG2DEVMAC(ydest) ;
     dstrect.left = XLOG2DEVMAC(xdest) ;
     dstrect.top = YLOG2DEVMAC(ydest) ;
     dstrect.left = XLOG2DEVMAC(xdest) ;
-    dstrect.bottom = YLOG2DEVMAC(ydest + height )  ;
-    dstrect.right = XLOG2DEVMAC(xdest + width ) ;
+    dstrect.bottom = YLOG2DEVMAC(ydest + dstHeight )  ;
+    dstrect.right = XLOG2DEVMAC(xdest + dstWidth ) ;
     short mode = kUnsupportedMode ;
     bool invertDestinationFirst = false ;
 
     short mode = kUnsupportedMode ;
     bool invertDestinationFirst = false ;
 
@@ -1487,7 +1491,7 @@ void wxDC::DoDrawRotatedText(const wxString& str, wxCoord x, wxCoord y,
 
     wxMacUniCharBuffer unibuf( str ) ;
     UniCharCount chars = unibuf.GetChars() ;
 
     wxMacUniCharBuffer unibuf( str ) ;
     UniCharCount chars = unibuf.GetChars() ;
-    
+
     status = ::ATSUCreateTextLayoutWithTextPtr( unibuf.GetBuffer() , 0 , chars , chars , 1 ,
         &chars , (ATSUStyle*) &m_macATSUIStyle , &atsuLayout ) ;
 
     status = ::ATSUCreateTextLayoutWithTextPtr( unibuf.GetBuffer() , 0 , chars , chars , 1 ,
         &chars , (ATSUStyle*) &m_macATSUIStyle , &atsuLayout ) ;
 
@@ -1504,12 +1508,12 @@ void wxDC::DoDrawRotatedText(const wxString& str, wxCoord x, wxCoord y,
     ATSUTextMeasurement ascent, descent ;
 
     ATSLineLayoutOptions layoutOptions = kATSLineNoLayoutOptions ;
     ATSUTextMeasurement ascent, descent ;
 
     ATSLineLayoutOptions layoutOptions = kATSLineNoLayoutOptions ;
-    
+
     if (m_font.GetNoAntiAliasing())
     {
         layoutOptions |= kATSLineNoAntiAliasing ;
     }
     if (m_font.GetNoAntiAliasing())
     {
         layoutOptions |= kATSLineNoAntiAliasing ;
     }
-    
+
     Fixed atsuAngle = IntToFixed( iAngle ) ;
 
     ATSUAttributeTag atsuTags[] =
     Fixed atsuAngle = IntToFixed( iAngle ) ;
 
     ATSUAttributeTag atsuTags[] =
@@ -1517,28 +1521,28 @@ void wxDC::DoDrawRotatedText(const wxString& str, wxCoord x, wxCoord y,
         kATSULineLayoutOptionsTag ,
         kATSULineRotationTag ,
     } ;
         kATSULineLayoutOptionsTag ,
         kATSULineRotationTag ,
     } ;
-    
+
     ByteCount atsuSizes[sizeof(atsuTags)/sizeof(ATSUAttributeTag)] =
     {
         sizeof( ATSLineLayoutOptions ) ,
         sizeof( Fixed ) ,
     } ;
     ByteCount atsuSizes[sizeof(atsuTags)/sizeof(ATSUAttributeTag)] =
     {
         sizeof( ATSLineLayoutOptions ) ,
         sizeof( Fixed ) ,
     } ;
-    
+
     ATSUAttributeValuePtr    atsuValues[sizeof(atsuTags)/sizeof(ATSUAttributeTag)] =
     {
         &layoutOptions ,
         &atsuAngle ,
     } ;
     ATSUAttributeValuePtr    atsuValues[sizeof(atsuTags)/sizeof(ATSUAttributeTag)] =
     {
         &layoutOptions ,
         &atsuAngle ,
     } ;
-    
+
     status = ::ATSUSetLayoutControls(atsuLayout , sizeof(atsuTags)/sizeof(ATSUAttributeTag) - ( abs(iAngle) > 0.001 ? 0 : 1),
             atsuTags, atsuSizes, atsuValues ) ;
 
     status = ::ATSUMeasureText( atsuLayout, kATSUFromTextBeginning, kATSUToTextEnd,
         &textBefore , &textAfter, &ascent , &descent );
     wxASSERT_MSG( status == noErr , wxT("couldn't measure the rotated text") );
     status = ::ATSUSetLayoutControls(atsuLayout , sizeof(atsuTags)/sizeof(ATSUAttributeTag) - ( abs(iAngle) > 0.001 ? 0 : 1),
             atsuTags, atsuSizes, atsuValues ) ;
 
     status = ::ATSUMeasureText( atsuLayout, kATSUFromTextBeginning, kATSUToTextEnd,
         &textBefore , &textAfter, &ascent , &descent );
     wxASSERT_MSG( status == noErr , wxT("couldn't measure the rotated text") );
-    
+
     if ( m_backgroundMode == wxSOLID )
     if ( m_backgroundMode == wxSOLID )
-    {      
+    {
         // background painting must be done by hand, cannot be done by ATSUI
         wxCoord x2 , y2 ;
         PolyHandle polygon = OpenPoly();
         // background painting must be done by hand, cannot be done by ATSUI
         wxCoord x2 , y2 ;
         PolyHandle polygon = OpenPoly();
@@ -1613,10 +1617,10 @@ void wxDC::DoGetTextExtent( const wxString &str, wxCoord *width, wxCoord *height
 
     OSStatus status = noErr ;
     ATSUTextLayout atsuLayout ;
 
     OSStatus status = noErr ;
     ATSUTextLayout atsuLayout ;
-    
+
     wxMacUniCharBuffer unibuf( str ) ;
     UniCharCount chars = unibuf.GetChars() ;
     wxMacUniCharBuffer unibuf( str ) ;
     UniCharCount chars = unibuf.GetChars() ;
-    
+
     status = ::ATSUCreateTextLayoutWithTextPtr( unibuf.GetBuffer() , 0 , chars , chars , 1 ,
         &chars , (ATSUStyle*) &m_macATSUIStyle , &atsuLayout ) ;
 
     status = ::ATSUCreateTextLayoutWithTextPtr( unibuf.GetBuffer() , 0 , chars , chars , 1 ,
         &chars , (ATSUStyle*) &m_macATSUIStyle , &atsuLayout ) ;
 
@@ -1626,30 +1630,30 @@ void wxDC::DoGetTextExtent( const wxString &str, wxCoord *width, wxCoord *height
     wxASSERT_MSG( status == noErr , wxT("couldn't setup transient font matching") );
 
     ATSLineLayoutOptions layoutOptions = kATSLineNoLayoutOptions ;
     wxASSERT_MSG( status == noErr , wxT("couldn't setup transient font matching") );
 
     ATSLineLayoutOptions layoutOptions = kATSLineNoLayoutOptions ;
-    
+
     if (m_font.GetNoAntiAliasing())
     {
         layoutOptions |= kATSLineNoAntiAliasing ;
     }
     if (m_font.GetNoAntiAliasing())
     {
         layoutOptions |= kATSLineNoAntiAliasing ;
     }
-    
+
     ATSUAttributeTag atsuTags[] =
     {
         kATSULineLayoutOptionsTag ,
     } ;
     ATSUAttributeTag atsuTags[] =
     {
         kATSULineLayoutOptionsTag ,
     } ;
-    
+
     ByteCount atsuSizes[sizeof(atsuTags)/sizeof(ATSUAttributeTag)] =
     {
         sizeof( ATSLineLayoutOptions ) ,
     } ;
     ByteCount atsuSizes[sizeof(atsuTags)/sizeof(ATSUAttributeTag)] =
     {
         sizeof( ATSLineLayoutOptions ) ,
     } ;
-    
+
     ATSUAttributeValuePtr    atsuValues[sizeof(atsuTags)/sizeof(ATSUAttributeTag)] =
     {
         &layoutOptions ,
     } ;
     ATSUAttributeValuePtr    atsuValues[sizeof(atsuTags)/sizeof(ATSUAttributeTag)] =
     {
         &layoutOptions ,
     } ;
-    
+
     status = ::ATSUSetLayoutControls(atsuLayout , sizeof(atsuTags)/sizeof(ATSUAttributeTag) ,
             atsuTags, atsuSizes, atsuValues ) ;
     status = ::ATSUSetLayoutControls(atsuLayout , sizeof(atsuTags)/sizeof(ATSUAttributeTag) ,
             atsuTags, atsuSizes, atsuValues ) ;
-            
+
     ATSUTextMeasurement textBefore, textAfter ;
     ATSUTextMeasurement textAscent, textDescent ;
 
     ATSUTextMeasurement textBefore, textAfter ;
     ATSUTextMeasurement textAscent, textDescent ;
 
@@ -1691,10 +1695,10 @@ bool wxDC::DoGetPartialTextExtents(const wxString& text, wxArrayInt& widths) con
 
     OSStatus status = noErr ;
     ATSUTextLayout atsuLayout ;
 
     OSStatus status = noErr ;
     ATSUTextLayout atsuLayout ;
-    
+
     wxMacUniCharBuffer unibuf( text ) ;
     UniCharCount chars = unibuf.GetChars() ;
     wxMacUniCharBuffer unibuf( text ) ;
     UniCharCount chars = unibuf.GetChars() ;
-    
+
     status = ::ATSUCreateTextLayoutWithTextPtr( unibuf.GetBuffer() , 0 , chars , chars , 1 ,
         &chars , (ATSUStyle*) &m_macATSUIStyle , &atsuLayout ) ;
 
     status = ::ATSUCreateTextLayoutWithTextPtr( unibuf.GetBuffer() , 0 , chars , chars , 1 ,
         &chars , (ATSUStyle*) &m_macATSUIStyle , &atsuLayout ) ;
 
@@ -1704,30 +1708,30 @@ bool wxDC::DoGetPartialTextExtents(const wxString& text, wxArrayInt& widths) con
     wxASSERT_MSG( status == noErr , wxT("couldn't setup transient font matching") );
 
     ATSLineLayoutOptions layoutOptions = kATSLineNoLayoutOptions ;
     wxASSERT_MSG( status == noErr , wxT("couldn't setup transient font matching") );
 
     ATSLineLayoutOptions layoutOptions = kATSLineNoLayoutOptions ;
-    
+
     if (m_font.GetNoAntiAliasing())
     {
         layoutOptions |= kATSLineNoAntiAliasing ;
     }
     if (m_font.GetNoAntiAliasing())
     {
         layoutOptions |= kATSLineNoAntiAliasing ;
     }
-    
+
     ATSUAttributeTag atsuTags[] =
     {
         kATSULineLayoutOptionsTag ,
     } ;
     ATSUAttributeTag atsuTags[] =
     {
         kATSULineLayoutOptionsTag ,
     } ;
-    
+
     ByteCount atsuSizes[sizeof(atsuTags)/sizeof(ATSUAttributeTag)] =
     {
         sizeof( ATSLineLayoutOptions ) ,
     } ;
     ByteCount atsuSizes[sizeof(atsuTags)/sizeof(ATSUAttributeTag)] =
     {
         sizeof( ATSLineLayoutOptions ) ,
     } ;
-    
+
     ATSUAttributeValuePtr    atsuValues[sizeof(atsuTags)/sizeof(ATSUAttributeTag)] =
     {
         &layoutOptions ,
     } ;
     ATSUAttributeValuePtr    atsuValues[sizeof(atsuTags)/sizeof(ATSUAttributeTag)] =
     {
         &layoutOptions ,
     } ;
-    
+
     status = ::ATSUSetLayoutControls(atsuLayout , sizeof(atsuTags)/sizeof(ATSUAttributeTag) ,
             atsuTags, atsuSizes, atsuValues ) ;
     status = ::ATSUSetLayoutControls(atsuLayout , sizeof(atsuTags)/sizeof(ATSUAttributeTag) ,
             atsuTags, atsuSizes, atsuValues ) ;
-            
+
     for ( int pos = 0; pos < (int)chars ; pos ++ )
     {
         unsigned long actualNumberOfBounds = 0;
     for ( int pos = 0; pos < (int)chars ; pos ++ )
     {
         unsigned long actualNumberOfBounds = 0;