#include "wx/dc.h"
-#if !USE_SHARED_LIBRARY
IMPLEMENT_ABSTRACT_CLASS(wxDC, wxObject)
-#endif
//-----------------------------------------------------------------------------
// constants
// m_palette = wxAPP_COLOURMAP;
m_macPort = NULL ;
+ m_macMask = NULL ;
m_ok = FALSE ;
m_macFontInstalled = false ;
RGBColor black = { 0,0,0} ;
RGBForeColor( &black ) ;
RGBBackColor( &white ) ;
- // RGBForeColor( &m_textForegroundColour.GetPixel() ) ;
- // RGBBackColor( &m_textBackgroundColour.GetPixel() ) ;
bmappixels = GetGWorldPixMap( bmapworld ) ;
if ( LockPixels(bmappixels) )
dest.left = XLOG2DEV(x) ;
dest.bottom = YLOG2DEV(y + bmap->m_height ) ;
dest.right = XLOG2DEV(x + bmap->m_width ) ;
- // ::ClipRect(&m_macClipRect);
- CopyBits( &GrafPtr( bmapworld )->portBits , &GrafPtr( m_macPort )->portBits ,
- &source, &dest, srcCopy, NULL ) ;
- /*
- if ( m_clipping )
- {
- long x1 = XLOG2DEV(m_clipX1);
- long y1 = YLOG2DEV(m_clipY1);
- long x2 = XLOG2DEV(m_clipX2);
- long y2 = YLOG2DEV(m_clipY2);
- Rect clip = { y1 , x1 , y2 , x2 } ;
- ::ClipRect(&clip);
+ if ( useMask && bmp.GetMask() )
+ {
+ if ( LockPixels( GetGWorldPixMap( bmp.GetMask()->GetMaskBitmap( ) ) ) )
+ {
+ CopyMask( &GrafPtr( bmapworld )->portBits , &GrafPtr( bmp.GetMask()->GetMaskBitmap( ) )->portBits , &GrafPtr( m_macPort )->portBits ,
+ &source, &source , &dest ) ;
+ UnlockPixels( GetGWorldPixMap( bmp.GetMask()->GetMaskBitmap( ) ) ) ;
+ }
}
- */
+ else
+ CopyBits( &GrafPtr( bmapworld )->portBits , &GrafPtr( m_macPort )->portBits ,
+ &source, &dest, srcCopy, NULL ) ;
+
UnlockPixels( bmappixels ) ;
}
m_macPenInstalled = false ;
DrawSpline( &list );
};
-void wxDC::SetClippingRegion( long x, long y, long width, long height )
+void wxDC::SetClippingRegion( wxCoord x, wxCoord y, wxCoord width, wxCoord height )
{
MacVerifySetup() ;
if( m_clipping )
};
+void wxDC::SetClippingRegion(const wxRect& rect)
+{
+ SetClippingRegion(rect.x, rect.y, rect.width, rect.height);
+}
+
void wxDC::DestroyClippingRegion(void)
{
MacVerifySetup() ;
::ClipRect(&m_macClipRect);
};
+void wxDC::GetClippingBox( wxCoord *x, wxCoord *y, wxCoord *width, wxCoord *height ) const
+{
+ if (m_clipping)
+ {
+ if (x) *x = m_clipX1;
+ if (y) *y = m_clipY1;
+ if (width) *width = (m_clipX2 - m_clipX1);
+ if (height) *height = (m_clipY2 - m_clipY1);
+ }
+ else
+ *x = *y = *width = *height = 0;
+};
+
void wxDC::GetClippingBox( long *x, long *y, long *width, long *height ) const
{
if (m_clipping)
*x = *y = *width = *height = 0;
};
+void wxDC::GetClippingBox(wxRect& rect) const
+{
+ // Necessary to use intermediate variables for 16-bit compilation
+ wxCoord x, y, w, h;
+ GetClippingBox(&x, &y, &w, &h);
+ rect.x = x; rect.y = y; rect.width = w; rect.height = h;
+}
+
void wxDC::GetSize( int* width, int* height ) const
{
*width = m_maxX-m_minX;
PixMapHandle bmappixels = GetGWorldPixMap( sourcePort ) ;
RGBColor white = { 0xFFFF, 0xFFFF,0xFFFF} ;
RGBColor black = { 0,0,0} ;
-// RGBForeColor( &black ) ;
-// RGBBackColor( &white ) ;
RGBForeColor( &m_textForegroundColour.GetPixel() ) ;
RGBBackColor( &m_textBackgroundColour.GetPixel() ) ;
dstrect.left = XLOG2DEV(xdest) ;
dstrect.bottom = YLOG2DEV(ydest + height ) ;
dstrect.right = XLOG2DEV(xdest + width ) ;
-// ::ClipRect(&m_macClipRect);
+
+ short mode = (logical_func == wxCOPY ? srcCopy :
+ // logical_func == wxCLEAR ? WHITENESS :
+ // logical_func == wxSET ? BLACKNESS :
+ logical_func == wxINVERT ? hilite :
+ // logical_func == wxAND ? MERGECOPY :
+ logical_func == wxOR ? srcOr :
+ logical_func == wxSRC_INVERT ? notSrcCopy :
+ logical_func == wxXOR ? srcXor :
+ // logical_func == wxOR_REVERSE ? MERGEPAINT :
+ // logical_func == wxAND_REVERSE ? SRCERASE :
+ logical_func == wxSRC_OR ? srcOr :
+ // logical_func == wxSRC_AND ? SRCAND :
+ srcCopy );
+
+ if ( useMask && source->m_macMask )
+ {
+ wxASSERT( mode == srcCopy ) ;
+ if ( LockPixels( GetGWorldPixMap( source->m_macMask ) ) )
+ {
+ CopyMask( &GrafPtr( sourcePort )->portBits , &GrafPtr( source->m_macMask )->portBits , &GrafPtr( m_macPort )->portBits ,
+ &srcrect, &srcrect , &dstrect ) ;
+ UnlockPixels( GetGWorldPixMap( source->m_macMask ) ) ;
+ }
+ }
+ else
+ {
CopyBits( &GrafPtr( sourcePort )->portBits , &GrafPtr( m_macPort )->portBits ,
- &srcrect, &dstrect, srcCopy, NULL ) ;
-/*
- if ( m_clipping )
- {
- long x1 = XLOG2DEV(m_clipX1);
- long y1 = YLOG2DEV(m_clipY1);
- long x2 = XLOG2DEV(m_clipX2);
- long y2 = YLOG2DEV(m_clipY2);
-
- Rect clip = { y1 , x1 , y2 , x2 } ;
- ::ClipRect(&clip);
- }
-*/
+ &srcrect, &dstrect, mode, NULL ) ;
+ }
UnlockPixels( bmappixels ) ;
}
}
}
-long wxDC::GetCharWidth(void)
+wxCoord wxDC::GetCharWidth(void) const
{
if (!Ok())
return 1;
return (fi.descent + fi.ascent) / 2 ;
}
-long wxDC::GetCharHeight(void)
+wxCoord wxDC::GetCharHeight(void) const
{
if (!Ok())
return 1;