- case wxAND: // src AND dst
- mode = srcOr ; // ok
- break ;
- case wxAND_INVERT: // (NOT src) AND dst
- mode = notSrcOr ; // ok
- break ;
- case wxAND_REVERSE:// src AND (NOT dst)
- invertDestinationFirst = true ;
- mode = srcOr ;
- break ;
- case wxCLEAR: // 0
- mode = kEmulatedMode ;
- break ;
- case wxCOPY: // src
- mode = srcCopy ; // ok
- break ;
- case wxEQUIV: // (NOT src) XOR dst
- mode = srcXor ; // ok
- break ;
- case wxINVERT: // NOT dst
- mode = kEmulatedMode ; //or hilite ;
- break ;
- case wxNAND: // (NOT src) OR (NOT dst)
- invertDestinationFirst = true ;
- mode = srcBic ;
- break ;
- case wxNOR: // (NOT src) AND (NOT dst)
- invertDestinationFirst = true ;
- mode = notSrcOr ;
- break ;
- case wxNO_OP: // dst
- mode = kEmulatedMode ; // this has already been handled upon entry
- break ;
- case wxOR: // src OR dst
- mode = notSrcBic ;
- break ;
- case wxOR_INVERT: // (NOT src) OR dst
- mode = srcBic ;
- break ;
- case wxOR_REVERSE: // src OR (NOT dst)
- invertDestinationFirst = true ;
- mode = notSrcBic ;
- break ;
- case wxSET: // 1
- mode = kEmulatedMode ;
- break ;
- case wxSRC_INVERT: // (NOT src)
- mode = notSrcCopy ; // ok
- break ;
- case wxXOR: // src XOR dst
- mode = notSrcXor ; // ok
- break ;
-
- default :
- break ;
-
+ hh = -hh;
+ yy = yy - hh;
+ }
+
+ Rect rect = { yy , xx , yy + hh , xx + ww } ;
+
+ if (m_brush.GetStyle() != wxTRANSPARENT)
+ {
+ MacInstallBrush() ;
+ ::PaintRoundRect( &rect , int(radius * 2) , int(radius * 2) ) ;
+ }
+
+ if (m_pen.GetStyle() != wxTRANSPARENT)
+ {
+ MacInstallPen() ;
+ ::FrameRoundRect( &rect , int(radius * 2) , int(radius * 2) ) ;
+ }
+}
+
+void wxDC::DoDrawEllipse(wxCoord x, wxCoord y, wxCoord width, wxCoord height)
+{
+ wxCHECK_RET(Ok(), wxT("wxDC::DoDrawEllipse - invalid DC"));
+
+ wxMacFastPortSetter helper(this) ;
+
+ wxCoord xx = XLOG2DEVMAC(x);
+ wxCoord yy = YLOG2DEVMAC(y);
+ wxCoord ww = m_signX * XLOG2DEVREL(width);
+ wxCoord hh = m_signY * YLOG2DEVREL(height);
+
+ // CMB: draw nothing if transformed w or h is 0
+ if (ww == 0 || hh == 0)
+ return;
+
+ // CMB: handle -ve width and/or height
+ if (ww < 0)
+ {
+ ww = -ww;
+ xx = xx - ww;
+ }
+
+ if (hh < 0)
+ {
+ hh = -hh;
+ yy = yy - hh;
+ }
+
+ Rect rect = { yy , xx , yy + hh , xx + ww } ;
+
+ if (m_brush.GetStyle() != wxTRANSPARENT)
+ {
+ MacInstallBrush() ;
+ ::PaintOval( &rect ) ;
+ }
+
+ if (m_pen.GetStyle() != wxTRANSPARENT)
+ {
+ MacInstallPen() ;
+ ::FrameOval( &rect ) ;
+ }
+}
+
+bool wxDC::CanDrawBitmap(void) const
+{
+ return true ;
+}
+
+bool wxDC::DoBlit(wxCoord xdest, wxCoord ydest, wxCoord width, wxCoord height,
+ wxDC *source, wxCoord xsrc, wxCoord ysrc, int logical_func , bool useMask,
+ wxCoord xsrcMask, wxCoord ysrcMask )
+{
+ wxCHECK_MSG(Ok(), false, wxT("wxDC::DoBlit - invalid DC"));
+ wxCHECK_MSG(source->Ok(), false, wxT("wxDC::DoBlit - invalid source DC"));
+
+ if ( logical_func == wxNO_OP )
+ return true ;
+
+ if (xsrcMask == -1 && ysrcMask == -1)
+ {
+ xsrcMask = xsrc;
+ ysrcMask = ysrc;
+ }
+
+ // correct the parameter in case this dc does not have a mask at all
+ if ( useMask && !source->m_macMask )
+ useMask = false ;
+
+ Rect srcrect , dstrect ;
+ srcrect.top = source->YLOG2DEVMAC(ysrc) ;
+ srcrect.left = source->XLOG2DEVMAC(xsrc) ;
+ srcrect.right = source->XLOG2DEVMAC(xsrc + width ) ;
+ srcrect.bottom = source->YLOG2DEVMAC(ysrc + height) ;
+ dstrect.top = YLOG2DEVMAC(ydest) ;
+ dstrect.left = XLOG2DEVMAC(xdest) ;
+ dstrect.bottom = YLOG2DEVMAC(ydest + height ) ;
+ dstrect.right = XLOG2DEVMAC(xdest + width ) ;
+ short mode = kUnsupportedMode ;
+ bool invertDestinationFirst = false ;
+
+ switch ( logical_func )
+ {
+ case wxAND: // src AND dst
+ mode = adMin ; // ok
+ break ;
+
+ case wxAND_INVERT: // (NOT src) AND dst
+ mode = notSrcOr ; // ok
+ break ;
+
+ case wxAND_REVERSE:// src AND (NOT dst)
+ invertDestinationFirst = true ;
+ mode = srcOr ;
+ break ;
+
+ case wxCLEAR: // 0
+ mode = kEmulatedMode ;
+ break ;
+
+ case wxCOPY: // src
+ mode = srcCopy ; // ok
+ break ;
+
+ case wxEQUIV: // (NOT src) XOR dst
+ mode = srcXor ; // ok
+ break ;
+
+ case wxINVERT: // NOT dst
+ mode = kEmulatedMode ; //or hilite ;
+ break ;
+
+ case wxNAND: // (NOT src) OR (NOT dst)
+ invertDestinationFirst = true ;
+ mode = srcBic ;
+ break ;
+
+ case wxNOR: // (NOT src) AND (NOT dst)
+ invertDestinationFirst = true ;
+ mode = notSrcOr ;
+ break ;
+
+ case wxNO_OP: // dst
+ mode = kEmulatedMode ; // this has already been handled upon entry
+ break ;
+
+ case wxOR: // src OR dst
+ mode = notSrcBic ;
+ break ;
+
+ case wxOR_INVERT: // (NOT src) OR dst
+ mode = srcBic ;
+ break ;
+
+ case wxOR_REVERSE: // src OR (NOT dst)
+ invertDestinationFirst = true ;
+ mode = notSrcBic ;
+ break ;
+
+ case wxSET: // 1
+ mode = kEmulatedMode ;
+ break ;
+
+ case wxSRC_INVERT: // (NOT src)
+ mode = notSrcCopy ; // ok
+ break ;
+
+ case wxXOR: // src XOR dst
+ mode = notSrcXor ; // ok
+ break ;
+
+ default :
+ break ;