- short mode = patCopy ;
- // todo :
- switch( m_logicalFunction )
- {
- case wxCOPY: // only foreground color, leave background (thus not patCopy)
- mode = patOr ;
- break ;
- case wxINVERT: // NOT dst
- // ::PenPat(GetQDGlobalsBlack(&blackColor));
- mode = patXor ;
- break ;
- case wxXOR: // src XOR dst
- mode = patXor ;
- break ;
- case wxOR_REVERSE: // src OR (NOT dst)
- mode = notPatOr ;
- break ;
- case wxSRC_INVERT: // (NOT src)
- mode = notPatCopy ;
- break ;
- case wxAND: // src AND dst
- mode = adMin ;
- break ;
- // unsupported TODO
- case wxCLEAR: // 0
- case wxAND_REVERSE:// src AND (NOT dst)
- case wxAND_INVERT: // (NOT src) AND dst
- case wxNO_OP: // dst
- case wxNOR: // (NOT src) AND (NOT dst)
- case wxEQUIV: // (NOT src) XOR dst
- case wxOR_INVERT: // (NOT src) OR dst
- case wxNAND: // (NOT src) OR (NOT dst)
- case wxOR: // src OR dst
- case wxSET: // 1
- // case wxSRC_OR: // source _bitmap_ OR destination
- // case wxSRC_AND: // source _bitmap_ AND destination
- break ;
- }
- ::PenMode( mode ) ;
- m_macPenInstalled = true ;
- m_macBrushInstalled = false ;
- m_macFontInstalled = false ;
-*/
-}
-
-void wxDC::MacSetupBackgroundForCurrentPort(const wxBrush& background )
-{
- Pattern whiteColor ;
- switch( background.MacGetBrushKind() )
- {
- case kwxMacBrushTheme :
- {
- ::SetThemeBackground( background.MacGetTheme() , wxDisplayDepth() , true ) ;
- break ;
- }
- case kwxMacBrushThemeBackground :
- {
- Rect extent ;
- ThemeBackgroundKind bg = background.MacGetThemeBackground( &extent ) ;
- ::ApplyThemeBackground( bg , &extent ,kThemeStateActive , wxDisplayDepth() , true ) ;
- break ;
- }
- case kwxMacBrushColour :
- {
- ::RGBBackColor( &MAC_WXCOLORREF( background.GetColour().GetPixel()) );
- int brushStyle = background.GetStyle();
- if (brushStyle == wxSOLID)
- ::BackPat(GetQDGlobalsWhite(&whiteColor));
- else if (IS_HATCH(brushStyle))
- {
- Pattern pat ;
- wxMacGetPattern(brushStyle, &pat);
- ::BackPat(&pat);
- }
- else
- {
- ::BackPat(GetQDGlobalsWhite(&whiteColor));
- }
- break ;
- }
- }
-}
-
-void wxDC::MacInstallBrush() const
-{
- wxCHECK_RET(Ok(), wxT("Invalid DC"));
- Pattern blackColor ;
- // if ( m_macBrushInstalled )
- // return ;
- // foreground
- 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 ;
- wxMacGetPattern(brushStyle, &pat);
- ::PenPat(&pat);
- }
- else if ( m_brush.GetStyle() == wxSTIPPLE || m_brush.GetStyle() == wxSTIPPLE_MASK_OPAQUE )
- {
- // we force this in order to be compliant with wxMSW
- backgroundTransparent = false ;
- // for these the text fore (and back for MASK_OPAQUE) colors are used
- wxBitmap* bitmap = m_brush.GetStipple() ;
- int width = bitmap->GetWidth() ;
- int height = bitmap->GetHeight() ;
- GWorldPtr gw = NULL ;
- if ( m_brush.GetStyle() == wxSTIPPLE )
- gw = MAC_WXHBITMAP(bitmap->GetHBITMAP()) ;
- else
- gw = MAC_WXHBITMAP(bitmap->GetMask()->GetMaskBitmap()) ;
- PixMapHandle gwpixmaphandle = GetGWorldPixMap( gw ) ;
- LockPixels( gwpixmaphandle ) ;
- bool isMonochrome = !IsPortColor( gw ) ;
- if ( !isMonochrome )
- {
- if ( (**gwpixmaphandle).pixelSize == 1 )
- isMonochrome = true ;
- }
- if ( isMonochrome && width == 8 && height == 8 )
- {
- ::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 ;
- int alignment = gwbitmap->rowBytes & 0x7FFF ;
- Pattern pat ;
- for ( int i = 0 ; i < 8 ; ++i )
- {
- pat.pat[i] = gwbits[i*alignment+0] ;
- }
- UnlockPixels( GetGWorldPixMap( gw ) ) ;
- ::PenPat( &pat ) ;
- }
- else
- {
- // this will be the code to handle power of 2 patterns, we will have to arrive at a nice
- // caching scheme before putting this into production
- Handle image;
- long imageSize;
- PixPatHandle pixpat = NewPixPat() ;
- CopyPixMap(gwpixmaphandle, (**pixpat).patMap);
- imageSize = GetPixRowBytes((**pixpat).patMap) *
- ((**(**pixpat).patMap).bounds.bottom -
- (**(**pixpat).patMap).bounds.top);
- PtrToHand( (**gwpixmaphandle).baseAddr, &image, imageSize );
- (**pixpat).patData = image;
- if ( isMonochrome )
- {
- CTabHandle ctable = ((**((**pixpat).patMap)).pmTable) ;
- ColorSpecPtr ctspec = (ColorSpecPtr) &(**ctable).ctTable ;
- if ( ctspec[0].rgb.red == 0x0000 )
- {
- ctspec[1].rgb = MAC_WXCOLORREF( m_textBackgroundColour.GetPixel()) ;
- ctspec[0].rgb = MAC_WXCOLORREF( m_textForegroundColour.GetPixel()) ;
- }
- else
- {
- ctspec[0].rgb = MAC_WXCOLORREF( m_textBackgroundColour.GetPixel()) ;
- ctspec[1].rgb = MAC_WXCOLORREF( m_textForegroundColour.GetPixel()) ;
- }
- ::CTabChanged( ctable ) ;
- }
- ::PenPixPat(pixpat);
- m_macForegroundPixMap = pixpat ;
- }
- UnlockPixels( gwpixmaphandle ) ;
- }
- else
- {
- ::PenPat(GetQDGlobalsBlack(&blackColor));
- }
- short mode = patCopy ;
- switch( m_logicalFunction )
- {
- case wxCOPY: // src
- if ( backgroundTransparent )
- mode = patOr ;
- else
- mode = patCopy ;
- break ;
- case wxINVERT: // NOT dst
- if ( !backgroundTransparent )
- {
- ::PenPat(GetQDGlobalsBlack(&blackColor));
- }
- mode = patXor ;
- break ;
- case wxXOR: // src XOR dst
- mode = patXor ;
- break ;
- case wxOR_REVERSE: // src OR (NOT dst)
- mode = notPatOr ;
- break ;
- case wxSRC_INVERT: // (NOT src)
- mode = notPatCopy ;
- break ;
- case wxAND: // src AND dst
- mode = adMin ;
- break ;
- // unsupported TODO
- case wxCLEAR: // 0
- case wxAND_REVERSE:// src AND (NOT dst)
- case wxAND_INVERT: // (NOT src) AND dst
- case wxNO_OP: // dst
- case wxNOR: // (NOT src) AND (NOT dst)
- case wxEQUIV: // (NOT src) XOR dst
- case wxOR_INVERT: // (NOT src) OR dst
- case wxNAND: // (NOT src) OR (NOT dst)
- case wxOR: // src OR dst
- case wxSET: // 1
- // case wxSRC_OR: // source _bitmap_ OR destination
- // case wxSRC_AND: // source _bitmap_ AND destination
- break ;
- }
- ::PenMode( mode ) ;
- m_macBrushInstalled = true ;
- m_macPenInstalled = false ;
- m_macFontInstalled = false ;