corrected the non masked blitting code, brush hatched colors corrected

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@13388 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Stefan Csomor
2002-01-05 16:40:58 +00:00
parent 573ac9dc6e
commit 0d54461f4e
2 changed files with 116 additions and 42 deletions

View File

@@ -1229,7 +1229,6 @@ bool wxDC::DoBlit(wxCoord xdest, wxCoord ydest, wxCoord width, wxCoord height,
} }
} }
} }
// wxFAIL_MSG("unimplemented emulated mode") ;
} }
} }
else else
@@ -1247,28 +1246,65 @@ bool wxDC::DoBlit(wxCoord xdest, wxCoord ydest, wxCoord width, wxCoord height,
} }
else else
{ {
RgnHandle clipRgn = NewRgn() ;
SetRectRgn( clipRgn , dstrect.left , dstrect.top , dstrect.right , dstrect.bottom ) ;
if ( mode == kEmulatedMode ) if ( mode == kEmulatedMode )
{ {
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
{
if ( invertDestinationFirst )
{
MacInvertRgn( clipRgn ) ;
}
CopyBits( GetPortBitMapForCopyBits( sourcePort ) , CopyBits( GetPortBitMapForCopyBits( sourcePort ) ,
GetPortBitMapForCopyBits( MAC_WXHBITMAP(m_macPort) ) , GetPortBitMapForCopyBits( MAC_WXHBITMAP(m_macPort) ) ,
&srcrect, &dstrect, mode, NULL ) ; &srcrect, &dstrect, mode, NULL ) ;
} }
else DisposeRgn( clipRgn ) ;
{
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 ) ;
}
} }
UnlockPixels( bmappixels ) ; UnlockPixels( bmappixels ) ;
} }
@@ -1871,10 +1907,13 @@ void wxDC::MacInstallBrush() const
bool backgroundTransparent = (GetBackgroundMode() == wxTRANSPARENT) ; bool backgroundTransparent = (GetBackgroundMode() == wxTRANSPARENT) ;
::RGBForeColor( &MAC_WXCOLORREF( m_brush.GetColour().GetPixel()) ); ::RGBForeColor( &MAC_WXCOLORREF( m_brush.GetColour().GetPixel()) );
::RGBBackColor( &MAC_WXCOLORREF( m_backgroundBrush.GetColour().GetPixel()) );
int brushStyle = m_brush.GetStyle(); int brushStyle = m_brush.GetStyle();
if (brushStyle == wxSOLID) if (brushStyle == wxSOLID)
{
::PenPat(GetQDGlobalsBlack(&blackColor)); ::PenPat(GetQDGlobalsBlack(&blackColor));
}
else if (IS_HATCH(brushStyle)) else if (IS_HATCH(brushStyle))
{ {
Pattern pat ; Pattern pat ;
@@ -1911,6 +1950,7 @@ void wxDC::MacInstallBrush() const
if ( isMonochrome ) if ( isMonochrome )
{ {
::RGBForeColor( &MAC_WXCOLORREF( m_textForegroundColour.GetPixel()) ); ::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 BitMap* gwbitmap = (BitMap*) *gwpixmaphandle ; // since the color depth is 1 it is a BitMap
UInt8 *gwbits = (UInt8*) gwbitmap->baseAddr ; UInt8 *gwbits = (UInt8*) gwbitmap->baseAddr ;
@@ -1969,9 +2009,6 @@ void wxDC::MacInstallBrush() const
::PenPat(GetQDGlobalsBlack(&blackColor)); ::PenPat(GetQDGlobalsBlack(&blackColor));
} }
if ( !backgroundTransparent )
::RGBBackColor( &MAC_WXCOLORREF( m_textBackgroundColour.GetPixel()) ) ;
short mode = patCopy ; short mode = patCopy ;
switch( m_logicalFunction ) switch( m_logicalFunction )
{ {

View File

@@ -1229,7 +1229,6 @@ bool wxDC::DoBlit(wxCoord xdest, wxCoord ydest, wxCoord width, wxCoord height,
} }
} }
} }
// wxFAIL_MSG("unimplemented emulated mode") ;
} }
} }
else else
@@ -1247,28 +1246,65 @@ bool wxDC::DoBlit(wxCoord xdest, wxCoord ydest, wxCoord width, wxCoord height,
} }
else else
{ {
RgnHandle clipRgn = NewRgn() ;
SetRectRgn( clipRgn , dstrect.left , dstrect.top , dstrect.right , dstrect.bottom ) ;
if ( mode == kEmulatedMode ) if ( mode == kEmulatedMode )
{ {
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
{
if ( invertDestinationFirst )
{
MacInvertRgn( clipRgn ) ;
}
CopyBits( GetPortBitMapForCopyBits( sourcePort ) , CopyBits( GetPortBitMapForCopyBits( sourcePort ) ,
GetPortBitMapForCopyBits( MAC_WXHBITMAP(m_macPort) ) , GetPortBitMapForCopyBits( MAC_WXHBITMAP(m_macPort) ) ,
&srcrect, &dstrect, mode, NULL ) ; &srcrect, &dstrect, mode, NULL ) ;
} }
else DisposeRgn( clipRgn ) ;
{
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 ) ;
}
} }
UnlockPixels( bmappixels ) ; UnlockPixels( bmappixels ) ;
} }
@@ -1871,10 +1907,13 @@ void wxDC::MacInstallBrush() const
bool backgroundTransparent = (GetBackgroundMode() == wxTRANSPARENT) ; bool backgroundTransparent = (GetBackgroundMode() == wxTRANSPARENT) ;
::RGBForeColor( &MAC_WXCOLORREF( m_brush.GetColour().GetPixel()) ); ::RGBForeColor( &MAC_WXCOLORREF( m_brush.GetColour().GetPixel()) );
::RGBBackColor( &MAC_WXCOLORREF( m_backgroundBrush.GetColour().GetPixel()) );
int brushStyle = m_brush.GetStyle(); int brushStyle = m_brush.GetStyle();
if (brushStyle == wxSOLID) if (brushStyle == wxSOLID)
{
::PenPat(GetQDGlobalsBlack(&blackColor)); ::PenPat(GetQDGlobalsBlack(&blackColor));
}
else if (IS_HATCH(brushStyle)) else if (IS_HATCH(brushStyle))
{ {
Pattern pat ; Pattern pat ;
@@ -1911,6 +1950,7 @@ void wxDC::MacInstallBrush() const
if ( isMonochrome ) if ( isMonochrome )
{ {
::RGBForeColor( &MAC_WXCOLORREF( m_textForegroundColour.GetPixel()) ); ::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 BitMap* gwbitmap = (BitMap*) *gwpixmaphandle ; // since the color depth is 1 it is a BitMap
UInt8 *gwbits = (UInt8*) gwbitmap->baseAddr ; UInt8 *gwbits = (UInt8*) gwbitmap->baseAddr ;
@@ -1969,9 +2009,6 @@ void wxDC::MacInstallBrush() const
::PenPat(GetQDGlobalsBlack(&blackColor)); ::PenPat(GetQDGlobalsBlack(&blackColor));
} }
if ( !backgroundTransparent )
::RGBBackColor( &MAC_WXCOLORREF( m_textBackgroundColour.GetPixel()) ) ;
short mode = patCopy ; short mode = patCopy ;
switch( m_logicalFunction ) switch( m_logicalFunction )
{ {