}
CalcBoundingBox(x, y);
-
+
return success;
#endif
}
wxCoord xc, wxCoord yc)
{
#ifdef __WXWINCE__
- // FIXME: emulate Arc
+ // Slower emulation since WinCE doesn't support Pie and Arc
+ double r = sqrt( (x1-xc)*(x1-xc) + (y1-yc)*(y1-yc) );
+ double sa = acos((x1-xc)/r)/M_PI*180; // between 0 and 180
+ if( y1>yc ) sa = -sa; // below center
+ double ea = atan2(yc-y2, x2-xc)/M_PI*180;
+ DoDrawEllipticArcRot( xc-r, yc-r, 2*r, 2*r, sa, ea );
#else
#ifdef __WXMICROWIN__
}
}
+void
+wxDC::DoDrawPolyPolygon(int n,
+ int start[],
+ wxPoint points[],
+ wxCoord xoffset,
+ wxCoord yoffset,
+ int fillStyle)
+{
+#ifdef __WXMICROWIN__
+ if (!GetHDC()) return;
+#endif
+
+ wxColourChanger cc(*this); // needed for wxSTIPPLE_MASK_OPAQUE handling
+ int i, cnt;
+ for (i = cnt = 0; i < n; i++)
+ cnt += start[i];
+
+ // Do things less efficiently if we have offsets
+ if (xoffset != 0 || yoffset != 0)
+ {
+ POINT *cpoints = new POINT[cnt];
+ for (i = 0; i < cnt; i++)
+ {
+ cpoints[i].x = (int)(points[i].x + xoffset);
+ cpoints[i].y = (int)(points[i].y + yoffset);
+
+ CalcBoundingBox(cpoints[i].x, cpoints[i].y);
+ }
+ int prev = SetPolyFillMode(GetHdc(),fillStyle==wxODDEVEN_RULE?ALTERNATE:WINDING);
+ (void)PolyPolygon(GetHdc(), cpoints, start, n);
+ SetPolyFillMode(GetHdc(),prev);
+ delete[] cpoints;
+ }
+ else
+ {
+ for (i = 0; i < cnt; i++)
+ CalcBoundingBox(points[i].x, points[i].y);
+
+ int prev = SetPolyFillMode(GetHdc(),fillStyle==wxODDEVEN_RULE?ALTERNATE:WINDING);
+ (void)PolyPolygon(GetHdc(), (POINT*) points, start, n);
+ SetPolyFillMode(GetHdc(),prev);
+ }
+}
+
void wxDC::DoDrawLines(int n, wxPoint points[], wxCoord xoffset, wxCoord yoffset)
{
#ifdef __WXMICROWIN__
if (radius < 0.0)
{
- double smallest = 0.0;
- if (width < height)
- smallest = width;
- else
- smallest = height;
+ double smallest = (width < height) ? width : height;
radius = (- radius * smallest);
}
void wxDC::DoDrawEllipticArc(wxCoord x,wxCoord y,wxCoord w,wxCoord h,double sa,double ea)
{
#ifdef __WXWINCE__
- // FIXME
+ DoDrawEllipticArcRot( x, y, w, h, sa, ea );
#else
#ifdef __WXMICROWIN__
if ( m_brush.GetResourceHandle() )
{
- HBRUSH b = 0;
- b = (HBRUSH) ::SelectObject(GetHdc(), (HBRUSH)m_brush.GetResourceHandle());
+ HBRUSH b = (HBRUSH) ::SelectObject(GetHdc(), (HBRUSH)m_brush.GetResourceHandle());
if (!m_oldBrush)
m_oldBrush = (WXHBRUSH) b;
}
::SetBkColor(GetHdc(), m_textBackgroundColour.GetPixel() );
}
- DWORD dwRop = SRCCOPY;
+ DWORD dwRop;
switch (rop)
{
case wxXOR: dwRop = SRCINVERT; break;
{
StretchBltModeChanger changeMode(GetHdc(), COLORONCOLOR);
+ // Figure out what co-ordinate system we're supposed to specify
+ // ysrc in.
+ const LONG hDIB = ds.dsBmih.biHeight;
+ if ( hDIB > 0 )
+ {
+ // reflect ysrc
+ ysrc = hDIB - (ysrc + height);
+ }
+
if ( ::StretchDIBits(GetHdc(),
xdest, ydest,
width, height,
- 0, 0,
+ xsrc, ysrc,
width, height,
ds.dsBm.bmBits,
(LPBITMAPINFO)&ds.dsBmih,
}
if ( !success && (caps & RC_STRETCHBLT) )
+#endif
+ // __WXWINCE__
{
+#ifndef __WXWINCE__
StretchBltModeChanger changeMode(GetHdc(), COLORONCOLOR);
+#endif
if ( !::StretchBlt
(
success = TRUE;
}
}
-#endif
- // __WXWINCE__
}
::SetTextColor(GetHdc(), old_textground);