X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/66a09d4776b8ae390d5aa51dbd678b694f2c81d6..c8b751aa27764b6deb21e56f09c5403f230b0ce3:/src/mac/carbon/dc.cpp?ds=inline diff --git a/src/mac/carbon/dc.cpp b/src/mac/carbon/dc.cpp index aaabc6607b..4a044f2887 100644 --- a/src/mac/carbon/dc.cpp +++ b/src/mac/carbon/dc.cpp @@ -19,6 +19,7 @@ #include "wx/dcmemory.h" #include "wx/region.h" #include "wx/image.h" +#include "wx/log.h" #if __MSL__ >= 0x6000 @@ -52,8 +53,6 @@ const double RAD2DEG = 180.0 / M_PI; const short kEmulatedMode = -1 ; const short kUnsupportedMode = -2 ; -#define wxMAC_EXPERIMENTAL_PATTERN 0 - wxMacPortSetter::wxMacPortSetter( const wxDC* dc ) : m_ph( (GrafPtr) dc->m_macPort ) { @@ -250,14 +249,14 @@ void wxDC::MacCleanupPort(wxMacPortStateHelper* help) const { Pattern blackColor ; ::PenPat(GetQDGlobalsBlack(&blackColor)); - DisposePixMap( (PixMapHandle) m_macForegroundPixMap ) ; + DisposePixPat( (PixPatHandle) m_macForegroundPixMap ) ; m_macForegroundPixMap = NULL ; } if ( m_macBackgroundPixMap ) { Pattern whiteColor ; ::BackPat(GetQDGlobalsWhite(&whiteColor)); - DisposePixMap( (PixMapHandle) m_macBackgroundPixMap ) ; + DisposePixPat( (PixPatHandle) m_macBackgroundPixMap ) ; m_macBackgroundPixMap = NULL ; } } @@ -563,7 +562,11 @@ wxSize wxDC::GetPPI() const int wxDC::GetDepth() const { - return wxDisplayDepth() ; + if ( IsPortColor( (CGrafPtr) m_macPort ) ) + { + return ( (**GetPortPixMap( (CGrafPtr) m_macPort)).pixelSize ) ; + } + return 1 ; } void wxDC::ComputeScaleAndOrigin() @@ -649,8 +652,37 @@ void wxDC::SetLogicalFunction( int function ) void wxDC::DoFloodFill( wxCoord x, wxCoord y, const wxColour& col, int style ) { + if (GetBrush().GetStyle() == wxTRANSPARENT) + { + wxLogDebug(wxT("In FloodFill, Current Brush is transparent, no filling done")); + return ; + } + int height = 0; + int width = 0; + this->GetSize(&width, &height); + //it would be nice to fail if we don't get a sensible size... + if (width < 1 || height < 1) + { + wxLogError(wxT("In FloodFill, dc.GetSize routine failed, method not supported by this DC")); + return ; + } + + //this is much faster than doing the individual pixels + wxMemoryDC memdc; + wxBitmap bitmap(width, height); + memdc.SelectObject(bitmap); + memdc.Blit(0, 0, width, height, (wxDC*) this, 0, 0); + memdc.SelectObject(wxNullBitmap); + + wxImage image = bitmap.ConvertToImage() ; + image.DoFloodFill (x,y, GetBrush(), col, style, GetLogicalFunction()); + bitmap = wxBitmap(image); + memdc.SelectObject(bitmap); + this->Blit(0, 0, width, height, &memdc, 0, 0); + memdc.SelectObject(wxNullBitmap); } + bool wxDC::DoGetPixel( wxCoord x, wxCoord y, wxColour *col ) const { wxCHECK_MSG( Ok(), false, wxT("wxDC::DoGetPixel Invalid DC") ); @@ -1786,11 +1818,21 @@ void wxDC::MacInstallFont() const } +Pattern gHatchPatterns[] = +{ + { 0xFF , 0xFF , 0xFF , 0xFF , 0xFF , 0xFF , 0xFF , 0xFF } , + { 0x01 , 0x02 , 0x04 , 0x08 , 0x10 , 0x20 , 0x40 , 0x80 } , + { 0x80 , 0x40 , 0x20 , 0x10 , 0x08 , 0x04 , 0x02 , 0x01 } , + { 0x10 , 0x10 , 0x10 , 0xFF , 0x10 , 0x10 , 0x10 , 0x10 } , + { 0x00 , 0x00 , 0x00 , 0xFF , 0x00 , 0x00 , 0x00 , 0x00 } , + { 0x10 , 0x10 , 0x10 , 0x10 , 0x10 , 0x10 , 0x10 , 0x10 } , + { 0x81 , 0x42 , 0x24 , 0x18 , 0x18 , 0x24 , 0x42 , 0x81 } , +} ; + static void wxMacGetHatchPattern(int hatchStyle, Pattern *pattern) { - // we have our own pattern list now - int thePatListID = 128; - int theIndex; + int theIndex = 1 ; + switch(hatchStyle) { case wxBDIAGONAL_HATCH: @@ -1815,7 +1857,7 @@ static void wxMacGetHatchPattern(int hatchStyle, Pattern *pattern) theIndex = 1; // solid pattern break; } - GetIndPattern( pattern, thePatListID, theIndex); + *pattern = gHatchPatterns[theIndex-1] ; } void wxDC::MacInstallPen() const