-// Chris Breeze 20/5/98: first implementation of DrawEllipticArc on Windows
-void wxDC::DrawEllipticArc(long x,long y,long w,long h,double sa,double ea)
-{
- long x2 = (x+w);
- long y2 = (y+h);
-
- const double deg2rad = 3.14159265359 / 180.0;
- int rx1 = XLOG2DEV(x+w/2);
- int ry1 = YLOG2DEV(y+h/2);
- int rx2 = rx1;
- int ry2 = ry1;
- rx1 += (int)(100.0 * abs(w) * cos(sa * deg2rad));
- ry1 -= (int)(100.0 * abs(h) * m_signY * sin(sa * deg2rad));
- rx2 += (int)(100.0 * abs(w) * cos(ea * deg2rad));
- ry2 -= (int)(100.0 * abs(h) * m_signY * sin(ea * deg2rad));
-
- // draw pie with NULL_PEN first and then outline otherwise a line is
- // drawn from the start and end points to the centre
- HPEN orig_pen = (HPEN) ::SelectObject((HDC) m_hDC, (HPEN) ::GetStockObject(NULL_PEN));
- if (m_signY > 0)
- {
- (void)Pie((HDC) m_hDC, XLOG2DEV(x), YLOG2DEV(y), XLOG2DEV(x2)+1, YLOG2DEV(y2)+1,
- rx1, ry1, rx2, ry2);
- }
- else
- {
- (void)Pie((HDC) m_hDC, XLOG2DEV(x), YLOG2DEV(y)-1, XLOG2DEV(x2)+1, YLOG2DEV(y2),
- rx1, ry1-1, rx2, ry2-1);
- }
- ::SelectObject((HDC) m_hDC, orig_pen);
- (void)Arc((HDC) m_hDC, XLOG2DEV(x), YLOG2DEV(y), XLOG2DEV(x2), YLOG2DEV(y2),
- rx1, ry1, rx2, ry2);
-
- CalcBoundingBox(x, y);
- CalcBoundingBox(x2, y2);
-}
-
-void wxDC::DrawIcon(const wxIcon& icon, long x, long y)
-{
- ::DrawIcon((HDC) m_hDC, XLOG2DEV(x), YLOG2DEV(y), (HICON) icon.GetHICON());
- CalcBoundingBox(x, y);
- CalcBoundingBox(x+icon.GetWidth(), y+icon.GetHeight());
-}
-
-void wxDC::DrawBitmap( const wxBitmap &bmp, long x, long y, bool useMask )
-{
- if (!bmp.Ok())
- return;
+void wxDC::DoDrawBitmap( const wxBitmap &bmp, wxCoord x, wxCoord y, bool useMask )
+{
+#ifdef __WXMICROWIN__
+ if (!GetHDC()) return;
+#endif
+
+ wxCHECK_RET( bmp.Ok(), _T("invalid bitmap in wxDC::DrawBitmap") );
+
+ int width = bmp.GetWidth(),
+ height = bmp.GetHeight();