X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/655719367ac5e131d9642e5783f3ecf64d1a3385..69c695466d495aca6ab44e3d8e4219fc00ff2146:/src/mac/carbon/dc.cpp diff --git a/src/mac/carbon/dc.cpp b/src/mac/carbon/dc.cpp index 3084e7224c..6485dc81e5 100644 --- a/src/mac/carbon/dc.cpp +++ b/src/mac/carbon/dc.cpp @@ -23,7 +23,7 @@ #include "wx/log.h" #if __MSL__ >= 0x6000 -#include "math.h" +namespace std {} using namespace std ; #endif @@ -40,17 +40,6 @@ IMPLEMENT_ABSTRACT_CLASS(wxDC, wxObject) // constants //----------------------------------------------------------------------------- -#define mm2inches 0.0393700787402 -#define inches2mm 25.4 -#define mm2twips 56.6929133859 -#define twips2mm 0.0176388888889 -#define mm2pt 2.83464566929 -#define pt2mm 0.352777777778 -#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 ; @@ -76,23 +65,23 @@ wxMacPortSetter::~wxMacPortSetter() class wxMacFastPortSetter { public : - wxMacFastPortSetter( const wxDC *dc ) + wxMacFastPortSetter( const wxDC *dc ) { - wxASSERT( dc->Ok() ) ; - m_swapped = QDSwapPort( (GrafPtr) dc->m_macPort , &m_oldPort ) ; - m_clipRgn = NewRgn() ; - GetClip( m_clipRgn ) ; - m_dc = dc ; - dc->MacSetupPort( NULL ) ; + wxASSERT( dc->Ok() ) ; + m_swapped = QDSwapPort( (GrafPtr) dc->m_macPort , &m_oldPort ) ; + m_clipRgn = NewRgn() ; + GetClip( m_clipRgn ) ; + m_dc = dc ; + dc->MacSetupPort( NULL ) ; } ~wxMacFastPortSetter() { // SetPort( (GrafPtr) m_dc->m_macPort ) ; SetClip( m_clipRgn ) ; if ( m_swapped ) - SetPort( m_oldPort ) ; - m_dc->MacCleanupPort( NULL ) ; - DisposeRgn( m_clipRgn ) ; + SetPort( m_oldPort ) ; + m_dc->MacCleanupPort( NULL ) ; + DisposeRgn( m_clipRgn ) ; } private : bool m_swapped ; @@ -112,7 +101,7 @@ wxMacWindowClipper::wxMacWindowClipper( const wxWindow* win ) : m_formerClip = NewRgn() ; m_newClip = NewRgn() ; GetClip( m_formerClip ) ; - + if ( win ) { int x = 0 , y = 0; @@ -126,7 +115,7 @@ wxMacWindowClipper::wxMacWindowClipper( const wxWindow* win ) : } } -wxMacWindowClipper::~wxMacWindowClipper() +wxMacWindowClipper::~wxMacWindowClipper() { SetPort( m_newPort ) ; SetClip( m_formerClip ) ; @@ -142,7 +131,7 @@ wxMacWindowStateSaver::wxMacWindowStateSaver( const wxWindow* win ) : GetThemeDrawingState( &m_themeDrawingState ) ; } -wxMacWindowStateSaver::~wxMacWindowStateSaver() +wxMacWindowStateSaver::~wxMacWindowStateSaver() { SetPort( m_newPort ) ; SetThemeDrawingState( m_themeDrawingState , true ) ; @@ -248,8 +237,8 @@ void wxMacCalculateColour( int logical_func , const RGBColor &srcColor , RGBColo wxDC::wxDC() { - m_ok = FALSE; - m_colour = TRUE; + m_ok = false; + m_colour = true; m_mm_to_pix_x = mm2pt; m_mm_to_pix_y = mm2pt; m_internalDeviceOriginX = 0; @@ -262,11 +251,11 @@ wxDC::wxDC() m_userScaleY = 1.0; m_scaleX = 1.0; m_scaleY = 1.0; - m_needComputeScaleX = FALSE; - m_needComputeScaleY = FALSE; + m_needComputeScaleX = false; + m_needComputeScaleY = false; m_macPort = NULL ; m_macMask = NULL ; - m_ok = FALSE ; + m_ok = false ; m_macFontInstalled = false ; m_macBrushInstalled = false ; m_macPenInstalled = false ; @@ -279,7 +268,7 @@ wxDC::wxDC() 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 + // needed to debug possible errors with two active drawing methods at the same time on // the same DC m_macCurrentPortStateHelper = NULL ; #endif @@ -452,7 +441,7 @@ void wxDC::DoSetClippingRegion( wxCoord x, wxCoord y, wxCoord width, wxCoord hei } else { - m_clipping = TRUE; + m_clipping = true; m_clipX1 = xx; m_clipY1 = yy; m_clipX2 = xx + ww; @@ -499,7 +488,7 @@ void wxDC::DoSetClippingRegionAsRegion( const wxRegion ®ion ) } else { - m_clipping = TRUE; + m_clipping = true; m_clipX1 = xx; m_clipY1 = yy; m_clipX2 = xx + ww; @@ -561,8 +550,8 @@ void wxDC::SetMapMode( int mode ) } if (mode != wxMM_TEXT) { - m_needComputeScaleX = TRUE; - m_needComputeScaleY = TRUE; + m_needComputeScaleX = true; + m_needComputeScaleY = true; } } @@ -781,8 +770,8 @@ void wxDC::DoCrossHair( wxCoord x, wxCoord y ) static double wxConvertWXangleToMACangle(double angle) { double newAngle = 90 - angle ; - if ( newAngle < 0 ) - newAngle += 360 ; + while ( newAngle > 360 ) newAngle -= 360 ; + while ( newAngle < 0 ) newAngle += 360 ; return newAngle ; } @@ -823,9 +812,8 @@ void wxDC::DoDrawArc( wxCoord x1, wxCoord y1, } wxCoord alpha2 = wxCoord(radius2 - radius1); wxCoord alpha1 = wxCoord(wxConvertWXangleToMACangle(radius1)); - if( (xx1 > xx2) || (yy1 > yy2) ) { - alpha2 *= -1; - } + while( alpha2 < 0 ) alpha2 += 360 ; + alpha2 = -alpha2 ; Rect r = { yyc - rad, xxc - rad, yyc + rad, xxc + rad }; if(m_brush.GetStyle() != wxTRANSPARENT) { MacInstallBrush(); @@ -1064,7 +1052,7 @@ bool wxDC::DoBlit(wxCoord xdest, wxCoord ydest, wxCoord width, wxCoord height, wxCHECK_MSG(Ok(), false, wxT("wxDC::DoBlit Illegal dc")); wxCHECK_MSG(source->Ok(), false, wxT("wxDC::DoBlit Illegal source DC")); if ( logical_func == wxNO_OP ) - return TRUE ; + return true ; if (xsrcMask == -1 && ysrcMask == -1) { xsrcMask = xsrc; ysrcMask = ysrc; @@ -1143,7 +1131,7 @@ bool wxDC::DoBlit(wxCoord xdest, wxCoord ydest, wxCoord width, wxCoord height, if ( mode == kUnsupportedMode ) { wxFAIL_MSG(wxT("unsupported blitting mode" )); - return FALSE ; + return false ; } CGrafPtr sourcePort = (CGrafPtr) source->m_macPort ; PixMapHandle bmappixels = GetGWorldPixMap( sourcePort ) ; @@ -1302,7 +1290,7 @@ bool wxDC::DoBlit(wxCoord xdest, wxCoord ydest, wxCoord width, wxCoord height, m_macPenInstalled = false ; m_macBrushInstalled = false ; m_macFontInstalled = false ; - return TRUE; + return true; } #ifndef FixedToInt @@ -1321,17 +1309,12 @@ inline int FixedToInt( Fixed inFixed ) void wxDC::DoDrawRotatedText(const wxString& str, wxCoord x, wxCoord y, double angle) { + // TODO support text background color (only possible by hand, ATSUI does not support it) wxCHECK_RET( Ok(), wxT("wxDC::DoDrawRotatedText Invalid window dc") ); -/* - if (angle == 0.0 ) - { - DrawText(str, x, y); - return; - } if ( str.Length() == 0 ) return ; -*/ + wxMacFastPortSetter helper(this) ; MacInstallFont() ; @@ -1346,16 +1329,16 @@ void wxDC::DoDrawRotatedText(const wxString& str, wxCoord x, wxCoord y, UniCharCount chars = str.Length() ; UniChar* ubuf = NULL ; #if SIZEOF_WCHAR_T == 4 - wxMBConvUTF16BE converter ; + wxMBConvUTF16BE converter ; #if wxUSE_UNICODE - size_t unicharlen = converter.WC2MB( NULL , str.wc_str() , 0 ) ; - ubuf = (UniChar*) malloc( unicharlen + 2 ) ; - converter.WC2MB( (char*) ubuf , str.wc_str(), unicharlen + 2 ) ; + size_t unicharlen = converter.WC2MB( NULL , str.wc_str() , 0 ) ; + ubuf = (UniChar*) malloc( unicharlen + 2 ) ; + converter.WC2MB( (char*) ubuf , str.wc_str(), unicharlen + 2 ) ; #else const wxWCharBuffer wchar = str.wc_str( wxConvLocal ) ; - size_t unicharlen = converter.WC2MB( NULL , wchar.data() , 0 ) ; - ubuf = (UniChar*) malloc( unicharlen + 2 ) ; - converter.WC2MB( (char*) ubuf , wchar.data() , unicharlen + 2 ) ; + size_t unicharlen = converter.WC2MB( NULL , wchar.data() , 0 ) ; + ubuf = (UniChar*) malloc( unicharlen + 2 ) ; + converter.WC2MB( (char*) ubuf , wchar.data() , unicharlen + 2 ) ; #endif chars = unicharlen / 2 ; #else @@ -1375,13 +1358,13 @@ void wxDC::DoDrawRotatedText(const wxString& str, wxCoord x, wxCoord y, int iAngle = int( angle ); int drawX = XLOG2DEVMAC(x) ; int drawY = YLOG2DEVMAC(y) ; - + ATSUTextMeasurement textBefore ; ATSUTextMeasurement textAfter ; ATSUTextMeasurement ascent ; ATSUTextMeasurement descent ; - - + + if ( abs(iAngle) > 0 ) { Fixed atsuAngle = IntToFixed( iAngle ) ; @@ -1402,7 +1385,7 @@ void wxDC::DoDrawRotatedText(const wxString& str, wxCoord x, wxCoord y, } status = ::ATSUMeasureText( atsuLayout, kATSUFromTextBeginning, kATSUToTextEnd, &textBefore , &textAfter, &ascent , &descent ); - + drawX += (int)(sin(angle/RAD2DEG) * FixedToInt(ascent)); drawY += (int)(cos(angle/RAD2DEG) * FixedToInt(ascent)); status = ::ATSUDrawText( atsuLayout, kATSUFromTextBeginning, kATSUToTextEnd, @@ -1434,12 +1417,7 @@ void wxDC::DoDrawText(const wxString& strtext, wxCoord x, wxCoord y) useDrawThemeText = false ; #endif MacInstallFont() ; - if ( 0 ) - { - m_macFormerAliasState = IsAntiAliasedTextEnabled(&m_macFormerAliasSize); - SetAntiAliasedTextEnabled(true, 8); - m_macAliasWasEnabled = true ; - } + FontInfo fi ; ::GetFontInfo( &fi ) ; #if TARGET_CARBON @@ -1490,15 +1468,7 @@ void wxDC::DoDrawText(const wxString& strtext, wxCoord x, wxCoord y) else #endif { - wxCharBuffer text = linetext.mb_str(wxConvLocal) ; - if ( m_backgroundMode != wxTRANSPARENT ) - { - Rect frame = { yy - fi.ascent + line*(fi.descent + fi.ascent + fi.leading) ,xx , yy - fi.ascent + (line+1)*(fi.descent + fi.ascent + fi.leading) , xx + 10000 } ; - short width = ::TextWidth( text , 0 , strlen(text) ) ; - frame.right = frame.left + width ; - - ::EraseRect( &frame ) ; - } + wxCharBuffer text = linetext.mb_str(wxConvLocal) ; ::DrawText( text , 0 , strlen(text) ) ; } } @@ -1526,7 +1496,7 @@ void wxDC::DoGetTextExtent( const wxString &strtext, wxCoord *width, wxCoord *h MacInstallFont() ; FontInfo fi ; ::GetFontInfo( &fi ) ; -#if TARGET_CARBON +#if TARGET_CARBON bool useGetThemeText = ( GetThemeTextDimensions != (void*) kUnresolvedCFragSymbolAddress ) ; if ( UMAGetSystemVersion() < 0x1000 || IsKindOf(CLASSINFO( wxPrinterDC ) ) || ((wxFont*)&m_font)->GetNoAntiAliasing() ) useGetThemeText = false ; @@ -1560,7 +1530,7 @@ void wxDC::DoGetTextExtent( const wxString &strtext, wxCoord *width, wxCoord *h } else { - wxCharBuffer text = linetext.mb_str(wxConvLocal) ; + wxCharBuffer text = linetext.mb_str(wxConvLocal) ; curwidth = ::TextWidth( text , 0 , strlen(text) ) ; } if ( curwidth > *width ) @@ -1584,10 +1554,10 @@ bool wxDC::DoGetPartialTextExtents(const wxString& text, wxArrayInt& widths) con if (text.Length() == 0) return false; - + wxMacFastPortSetter helper(this) ; MacInstallFont() ; -#if TARGET_CARBON +#if TARGET_CARBON bool useGetThemeText = ( GetThemeTextDimensions != (void*) kUnresolvedCFragSymbolAddress ) ; if ( UMAGetSystemVersion() < 0x1000 || IsKindOf(CLASSINFO( wxPrinterDC ) ) || ((wxFont*)&m_font)->GetNoAntiAliasing() ) useGetThemeText = false ; @@ -1614,7 +1584,7 @@ bool wxDC::DoGetPartialTextExtents(const wxString& text, wxArrayInt& widths) con widths[i] = XDEV2LOGREL(bounds.h); } } - else + else #endif { wxCharBuffer buff = text.mb_str(wxConvLocal); @@ -1628,7 +1598,7 @@ bool wxDC::DoGetPartialTextExtents(const wxString& text, wxArrayInt& widths) con for (size_t i=0; i