X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/eb1a7cf93d320fd775f82ca237b28e91bdc7314f..e7445ff8ee26e39fab1e35455e1bef954bdf636f:/src/mac/carbon/dc.cpp diff --git a/src/mac/carbon/dc.cpp b/src/mac/carbon/dc.cpp index 7a42cdb52e..76717f4b4c 100644 --- a/src/mac/carbon/dc.cpp +++ b/src/mac/carbon/dc.cpp @@ -1,5 +1,5 @@ ///////////////////////////////////////////////////////////////////////////// -// Name: dc.cpp +// Name: src/mac/carbon/dc.cpp // Purpose: wxDC class // Author: Stefan Csomor // Modified by: @@ -14,13 +14,17 @@ #include "wx/dc.h" #if !wxMAC_USE_CORE_GRAPHICS -#include "wx/app.h" + +#ifndef WX_PRECOMP + #include "wx/log.h" + #include "wx/app.h" + #include "wx/dcmemory.h" + #include "wx/dcprint.h" +#endif + #include "wx/mac/uma.h" -#include "wx/dcmemory.h" -#include "wx/dcprint.h" #include "wx/region.h" #include "wx/image.h" -#include "wx/log.h" #ifdef __MSL__ #if __MSL__ >= 0x6000 @@ -36,6 +40,11 @@ #include #endif + +// set to 0 if problems arise +#define wxMAC_EXPERIMENTAL_DC 1 + + IMPLEMENT_ABSTRACT_CLASS(wxDC, wxObject) //----------------------------------------------------------------------------- @@ -48,8 +57,6 @@ const short kUnsupportedMode = -2 ; extern TECObjectRef s_TECNativeCToUnicode ; -// set to 0 if problems arise -#define wxMAC_EXPERIMENTAL_DC 1 wxMacPortSetter::wxMacPortSetter( const wxDC* dc ) : m_ph( (GrafPtr) dc->m_macPort ) @@ -113,7 +120,7 @@ wxMacWindowClipper::wxMacWindowClipper( const wxWindow* win ) : if ( win->GetPeer() ) { int x = 0 , y = 0; - win->MacWindowToRootWindow( &x,&y ) ; + win->MacWindowToRootWindow( &x, &y ) ; // get area including focus rect CopyRgn( (RgnHandle) ((wxWindow*)win)->MacGetVisibleRegion(true).GetWXHRGN() , m_newClip ) ; @@ -405,8 +412,8 @@ void wxDC::DoDrawBitmap( const wxBitmap &bmp, wxCoord x, wxCoord y, bool useMask } else { - RGBColor white = { 0xFFFF, 0xFFFF, 0xFFFF} ; - RGBColor black = { 0, 0, 0} ; + RGBColor white = { 0xFFFF, 0xFFFF, 0xFFFF } ; + RGBColor black = { 0, 0, 0 } ; RGBForeColor( &black ) ; RGBBackColor( &white ) ; } @@ -458,7 +465,7 @@ void wxDC::DoDrawIcon( const wxIcon &icon, wxCoord x, wxCoord y ) wxCoord ww = XLOG2DEVREL(w); wxCoord hh = YLOG2DEVREL(h); - Rect r = { yy , xx, yy + hh , xx + ww } ; + Rect r = { yy , xx, yy + hh, xx + ww } ; PlotIconRef( &r , kAlignNone , kTransformNone , kPlotIconRefNormalFlags , MAC_WXHICON( icon.GetHICON() ) ) ; } @@ -478,8 +485,8 @@ void wxDC::DoSetClippingRegion( wxCoord x, wxCoord y, wxCoord width, wxCoord hei { m_clipX1 = wxMax( m_clipX1 , xx ); m_clipY1 = wxMax( m_clipY1 , yy ); - m_clipX2 = wxMin( m_clipX2, (xx + ww)); - m_clipY2 = wxMin( m_clipY2, (yy + hh)); + m_clipX2 = wxMin( m_clipX2, (xx + ww) ); + m_clipY2 = wxMin( m_clipY2, (yy + hh) ); } else { @@ -491,7 +498,7 @@ void wxDC::DoSetClippingRegion( wxCoord x, wxCoord y, wxCoord width, wxCoord hei } } -void wxDC::DoSetClippingRegionAsRegion( const wxRegion ®ion ) +void wxDC::DoSetClippingRegionAsRegion( const wxRegion ®ion ) { wxCHECK_RET(Ok(), wxT("wxDC::DoSetClippingRegionAsRegion - invalid DC")); @@ -521,8 +528,8 @@ void wxDC::DoSetClippingRegionAsRegion( const wxRegion ®ion ) { m_clipX1 = wxMax( m_clipX1 , xx ); m_clipY1 = wxMax( m_clipY1 , yy ); - m_clipX2 = wxMin( m_clipX2, (xx + ww)); - m_clipY2 = wxMin( m_clipY2, (yy + hh)); + m_clipX2 = wxMin( m_clipX2, (xx + ww) ); + m_clipY2 = wxMin( m_clipY2, (yy + hh) ); } else { @@ -749,9 +756,7 @@ bool wxDC::DoGetPixel( wxCoord x, wxCoord y, wxColour *col ) const GetCPixel( XLOG2DEVMAC(x), YLOG2DEVMAC(y), &colour ); // convert from Mac colour to wx - col->Set( colour.red >> 8, - colour.green >> 8, - colour.blue >> 8); + col->Set( colour.red >> 8, colour.green >> 8, colour.blue >> 8); return true ; } @@ -766,7 +771,7 @@ void wxDC::DoDrawLine( wxCoord x1, wxCoord y1, wxCoord x2, wxCoord y2 ) { MacInstallPen() ; wxCoord offset = ( (m_pen.GetWidth() == 0 ? 1 : - m_pen.GetWidth() ) * (wxCoord)m_scaleX - 1) / 2; + m_pen.GetWidth() ) * (wxCoord)m_scaleX - 1) / 2; wxCoord xx1 = XLOG2DEVMAC(x1) - offset; wxCoord yy1 = YLOG2DEVMAC(y1) - offset; wxCoord xx2 = XLOG2DEVMAC(x2) - offset; @@ -861,7 +866,7 @@ void wxDC::DoDrawArc( wxCoord x1, wxCoord y1, double dx = xx1 - xxc; double dy = yy1 - yyc; - double radius = sqrt((double)(dx*dx+dy*dy)); + double radius = sqrt((double)(dx * dx + dy * dy)); wxCoord rad = (wxCoord)radius; double radius1, radius2; @@ -878,10 +883,10 @@ void wxDC::DoDrawArc( wxCoord x1, wxCoord y1, { radius1 = (xx1 - xxc == 0) ? (yy1 - yyc < 0) ? 90.0 : -90.0 : - -atan2(double(yy1-yyc), double(xx1-xxc)) * RAD2DEG; + -atan2(double(yy1 - yyc), double(xx1 - xxc)) * RAD2DEG; radius2 = (xx2 - xxc == 0) ? (yy2 - yyc < 0) ? 90.0 : -90.0 : - -atan2(double(yy2-yyc), double(xx2-xxc)) * RAD2DEG; + -atan2(double(yy2 - yyc), double(xx2 - xxc)) * RAD2DEG; } wxCoord alpha2 = wxCoord(radius2 - radius1); @@ -985,11 +990,12 @@ void wxDC::DoDrawLines(int n, wxPoint points[], MacInstallPen() ; wxCoord offset = ( (m_pen.GetWidth() == 0 ? 1 : m_pen.GetWidth() ) * (wxCoord)m_scaleX - 1) / 2 ; + wxCoord x1, x2 , y1 , y2 ; x1 = XLOG2DEVMAC(points[0].x + xoffset); y1 = YLOG2DEVMAC(points[0].y + yoffset); - ::MoveTo(x1 - offset, y1 - offset ); + ::MoveTo( x1 - offset, y1 - offset ); for (int i = 0; i < n-1; i++) { x2 = XLOG2DEVMAC(points[i + 1].x + xoffset); @@ -1006,7 +1012,7 @@ void wxDC::DoDrawPolygon(int n, wxPoint points[], if ( m_brush.GetStyle() == wxTRANSPARENT && m_pen.GetStyle() == wxTRANSPARENT ) return ; - + wxMacFastPortSetter helper(this) ; wxCoord x1, x2 , y1 , y2 ; @@ -1024,7 +1030,7 @@ void wxDC::DoDrawPolygon(int n, wxPoint points[], // close the polyline if necessary if ( x1 != x2 || y1 != y2 ) - ::LineTo(x1, y1 ) ; + ::LineTo( x1, y1 ) ; ClosePoly(); if (m_brush.GetStyle() != wxTRANSPARENT) @@ -1145,7 +1151,7 @@ void wxDC::DoDrawEllipse(wxCoord x, wxCoord y, wxCoord width, wxCoord height) // CMB: draw nothing if transformed w or h is 0 if (ww == 0 || hh == 0) return; - + // CMB: handle -ve width and/or height if (ww < 0) { @@ -1181,7 +1187,7 @@ bool wxDC::CanDrawBitmap(void) const bool wxDC::DoBlit(wxCoord xdest, wxCoord ydest, wxCoord width, wxCoord height, wxDC *source, wxCoord xsrc, wxCoord ysrc, int logical_func , bool useMask, - wxCoord xsrcMask, wxCoord ysrcMask ) + wxCoord xsrcMask, wxCoord ysrcMask ) { wxCHECK_MSG(Ok(), false, wxT("wxDC::DoBlit - invalid DC")); wxCHECK_MSG(source->Ok(), false, wxT("wxDC::DoBlit - invalid source DC")); @@ -1306,8 +1312,8 @@ bool wxDC::DoBlit(wxCoord xdest, wxCoord ydest, wxCoord width, wxCoord height, else { // the modes need this, otherwise we'll end up having really nice colors... - RGBColor white = { 0xFFFF, 0xFFFF, 0xFFFF} ; - RGBColor black = { 0, 0, 0} ; + RGBColor white = { 0xFFFF, 0xFFFF, 0xFFFF } ; + RGBColor black = { 0, 0, 0 } ; RGBForeColor( &black ) ; RGBBackColor( &white ) ; @@ -1372,7 +1378,7 @@ bool wxDC::DoBlit(wxCoord xdest, wxCoord ydest, wxCoord width, wxCoord height, GetCPixel( srcPoint.h , srcPoint.v , &srcColor ) ; SetPort( (GrafPtr) m_macPort ) ; GetCPixel( dstPoint.h , dstPoint.v , &dstColor ) ; - wxMacCalculateColour( logical_func , srcColor , dstColor ) ; + wxMacCalculateColour( logical_func , srcColor , dstColor ) ; SetCPixel( dstPoint.h , dstPoint.v , &dstColor ) ; } } @@ -1435,7 +1441,7 @@ bool wxDC::DoBlit(wxCoord xdest, wxCoord ydest, wxCoord width, wxCoord height, GetCPixel( srcPoint.h , srcPoint.v , &srcColor) ; SetPort( (GrafPtr) m_macPort ) ; GetCPixel( dstPoint.h , dstPoint.v , &dstColor ) ; - wxMacCalculateColour( logical_func , srcColor , dstColor ) ; + wxMacCalculateColour( logical_func , srcColor , dstColor ) ; SetCPixel( dstPoint.h , dstPoint.v , &dstColor ) ; } } @@ -1471,7 +1477,7 @@ void wxDC::DoDrawRotatedText(const wxString& str, wxCoord x, wxCoord y, // TODO: support text background color (only possible by hand, ATSUI does not support it) wxCHECK_RET( Ok(), wxT("wxDC::DoDrawRotatedText - invalid DC") ); - if ( str.Length() == 0 ) + if ( str.empty() ) return ; wxMacFastPortSetter helper(this) ; @@ -1488,7 +1494,7 @@ void wxDC::DoDrawRotatedText(const wxString& str, wxCoord x, wxCoord y, OSStatus status = noErr ; ATSUTextLayout atsuLayout ; - UniCharCount chars = str.Length() ; + UniCharCount chars = str.length() ; UniChar* ubuf = NULL ; #if SIZEOF_WCHAR_T == 4 @@ -1499,7 +1505,7 @@ void wxDC::DoDrawRotatedText(const wxString& str, wxCoord x, wxCoord y, 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 ) ; + size_t unicharlen = converter.WC2MB( NULL , wchar.data() , 0 ) ; ubuf = (UniChar*) malloc( unicharlen + 2 ) ; converter.WC2MB( (char*) ubuf , wchar.data() , unicharlen + 2 ) ; #endif @@ -1553,8 +1559,8 @@ 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)); + drawX += (int)(sin(angle / RAD2DEG) * FixedToInt(ascent)); + drawY += (int)(cos(angle / RAD2DEG) * FixedToInt(ascent)); status = ::ATSUDrawText( atsuLayout, kATSUFromTextBeginning, kATSUToTextEnd, IntToFixed(drawX) , IntToFixed(drawY) ); @@ -1564,6 +1570,7 @@ void wxDC::DoDrawRotatedText(const wxString& str, wxCoord x, wxCoord y, status = ::ATSUMeasureTextImage( atsuLayout, kATSUFromTextBeginning, kATSUToTextEnd, IntToFixed(drawX) , IntToFixed(drawY) , &rect ); wxASSERT_MSG( status == noErr , wxT("couldn't measure the rotated text") ); + OffsetRect( &rect , -m_macLocalOrigin.x , -m_macLocalOrigin.y ) ; CalcBoundingBox(XDEV2LOG(rect.left), YDEV2LOG(rect.top) ); CalcBoundingBox(XDEV2LOG(rect.right), YDEV2LOG(rect.bottom) ); @@ -1731,9 +1738,9 @@ bool wxDC::DoGetPartialTextExtents(const wxString& text, wxArrayInt& widths) con wxCHECK_MSG(Ok(), false, wxT("wxDC::DoGetPartialTextExtents - invalid DC")); widths.Empty(); - widths.Add(0, text.Length()); + widths.Add(0, text.length()); - if (text.Length() == 0) + if (text.length() == 0) return false; wxMacFastPortSetter helper(this) ; @@ -1749,9 +1756,9 @@ bool wxDC::DoGetPartialTextExtents(const wxString& text, wxArrayInt& widths) con // If anybody knows how to do this more efficiently yet still handle // the fractional glyph widths that may be present when using AA // fonts, please change it. Currently it is measuring from the - // begining of the string for each succeding substring, which is much + // beginning of the string for each succeeding substring, which is much // slower than this should be. - for (size_t i=0; i