X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/76a5e5d21ee1a6230d777ce0209b2df4c6075f0f..2ed76cd9b7d5922971093514f585fcaf65ed792c:/src/mac/carbon/dc.cpp?ds=sidebyside diff --git a/src/mac/carbon/dc.cpp b/src/mac/carbon/dc.cpp index 5e62998da3..55578a324f 100644 --- a/src/mac/carbon/dc.cpp +++ b/src/mac/carbon/dc.cpp @@ -20,12 +20,15 @@ #include "wx/region.h" #include "wx/image.h" -#include "wx/mac/private.h" #if __MSL__ >= 0x6000 #include "math.h" +using namespace std ; #endif +#include "wx/mac/private.h" + + #if !USE_SHARED_LIBRARY IMPLEMENT_ABSTRACT_CLASS(wxDC, wxObject) #endif @@ -1226,7 +1229,6 @@ bool wxDC::DoBlit(wxCoord xdest, wxCoord ydest, wxCoord width, wxCoord height, } } } - // wxFAIL_MSG("unimplemented emulated mode") ; } } else @@ -1244,28 +1246,65 @@ bool wxDC::DoBlit(wxCoord xdest, wxCoord ydest, wxCoord width, wxCoord height, } else { + RgnHandle clipRgn = NewRgn() ; + SetRectRgn( clipRgn , dstrect.left , dstrect.top , dstrect.right , dstrect.bottom ) ; if ( mode == kEmulatedMode ) { - CopyBits( GetPortBitMapForCopyBits( sourcePort ) , - GetPortBitMapForCopyBits( MAC_WXHBITMAP(m_macPort) ) , - &srcrect, &dstrect, mode, NULL ) ; + Pattern pat ; + ::PenPat(GetQDGlobalsBlack(&pat)); + if ( logical_func == wxSET ) + { + RGBColor col= { 0xFFFF, 0xFFFF, 0xFFFF } ; + ::RGBForeColor( &col ) ; + ::PaintRgn( clipRgn ) ; + } + else if ( logical_func == wxCLEAR ) + { + RGBColor col= { 0x0000, 0x0000, 0x0000 } ; + ::RGBForeColor( &col ) ; + ::PaintRgn( clipRgn ) ; + } + else if ( logical_func == wxINVERT ) + { + MacInvertRgn( clipRgn ) ; + } + else + { + for ( int y = 0 ; y < srcrect.right - srcrect.left ; ++y ) + { + for ( int x = 0 ; x < srcrect.bottom - srcrect.top ; ++x ) + { + Point dstPoint = { dstrect.top + y , dstrect.left + x } ; + Point srcPoint = { srcrect.top + y , srcrect.left + x } ; + + { + RGBColor srcColor ; + RGBColor dstColor ; + + SetPort( (GrafPtr) sourcePort ) ; + GetCPixel( srcPoint.h , srcPoint.v , &srcColor) ; + SetPort( (GrafPtr) m_macPort ) ; + GetCPixel( dstPoint.h , dstPoint.v , &dstColor ) ; + + wxMacCalculateColour( logical_func , srcColor , dstColor ) ; + SetCPixel( dstPoint.h , dstPoint.v , &dstColor ) ; + } + } + } + } + } else { - Pattern pat ; - ::PenPat(GetQDGlobalsBlack(&pat)); - if ( logical_func == wxSET ) - { - RGBColor col= { 0xFFFF, 0xFFFF, 0xFFFF } ; - ::RGBForeColor( &col ) ; - } - else - { - RGBColor col= { 0x0000, 0x0000, 0x0000 } ; - ::RGBForeColor( &col ) ; - } - ::PaintRect( &dstrect ) ; + if ( invertDestinationFirst ) + { + MacInvertRgn( clipRgn ) ; + } + CopyBits( GetPortBitMapForCopyBits( sourcePort ) , + GetPortBitMapForCopyBits( MAC_WXHBITMAP(m_macPort) ) , + &srcrect, &dstrect, mode, NULL ) ; } + DisposeRgn( clipRgn ) ; } UnlockPixels( bmappixels ) ; } @@ -1868,10 +1907,13 @@ void wxDC::MacInstallBrush() const bool backgroundTransparent = (GetBackgroundMode() == wxTRANSPARENT) ; ::RGBForeColor( &MAC_WXCOLORREF( m_brush.GetColour().GetPixel()) ); + ::RGBBackColor( &MAC_WXCOLORREF( m_backgroundBrush.GetColour().GetPixel()) ); int brushStyle = m_brush.GetStyle(); if (brushStyle == wxSOLID) + { ::PenPat(GetQDGlobalsBlack(&blackColor)); + } else if (IS_HATCH(brushStyle)) { Pattern pat ; @@ -1908,6 +1950,7 @@ void wxDC::MacInstallBrush() const if ( isMonochrome ) { ::RGBForeColor( &MAC_WXCOLORREF( m_textForegroundColour.GetPixel()) ); + ::RGBForeColor( &MAC_WXCOLORREF( m_textBackgroundColour.GetPixel()) ); BitMap* gwbitmap = (BitMap*) *gwpixmaphandle ; // since the color depth is 1 it is a BitMap UInt8 *gwbits = (UInt8*) gwbitmap->baseAddr ; @@ -1965,10 +2008,7 @@ void wxDC::MacInstallBrush() const { ::PenPat(GetQDGlobalsBlack(&blackColor)); } - - if ( !backgroundTransparent ) - ::RGBBackColor( &MAC_WXCOLORREF( m_textBackgroundColour.GetPixel()) ) ; - + short mode = patCopy ; switch( m_logicalFunction ) {