-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,
+void wxDC::DoDrawEllipticArc(wxCoord x,wxCoord y,wxCoord w,wxCoord h,double sa,double ea)
+{
+ COLORREF colFgOld = 0,
+ colBgOld = 0;
+
+ if ( m_brush.GetStyle() == wxSTIPPLE_MASK_OPAQUE )
+ {
+ colFgOld = ::GetTextColor(GetHdc());
+ colBgOld = ::GetBkColor(GetHdc());
+
+ if ( m_textForegroundColour.Ok() )
+ {
+ // just the oposite from what is expected see help on pattern brush
+ // 1 in mask becomes bk color
+ ::SetBkColor(GetHdc(), m_textForegroundColour.GetPixel());
+ }
+
+ if ( m_textBackgroundColour.Ok() )
+ {
+ // 0 in mask becomes text color
+ ::SetTextColor(GetHdc(), m_textBackgroundColour.GetPixel());
+ }
+
+ // VZ: IMHO this does strictly nothing here
+ SetBkMode(GetHdc(), m_backgroundMode == wxTRANSPARENT ? TRANSPARENT
+ : OPAQUE);
+ }
+
+ wxCoord x2 = (x+w);
+ wxCoord y2 = (y+h);
+
+ int rx1 = XLOG2DEV(x+w/2);
+ int ry1 = YLOG2DEV(y+h/2);
+ int rx2 = rx1;
+ int ry2 = ry1;
+
+ sa = DegToRad(sa);
+ ea = DegToRad(ea);
+
+ rx1 += (int)(100.0 * abs(w) * cos(sa));
+ ry1 -= (int)(100.0 * abs(h) * m_signY * sin(sa));
+ rx2 += (int)(100.0 * abs(w) * cos(ea));
+ ry2 -= (int)(100.0 * abs(h) * m_signY * sin(ea));
+
+ // 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(GetHdc(), (HPEN) ::GetStockObject(NULL_PEN));
+ if (m_signY > 0)
+ {
+ (void)Pie(GetHdc(), XLOG2DEV(x), YLOG2DEV(y), XLOG2DEV(x2)+1, YLOG2DEV(y2)+1,
+ rx1, ry1, rx2, ry2);
+ }
+ else
+ {
+ (void)Pie(GetHdc(), XLOG2DEV(x), YLOG2DEV(y)-1, XLOG2DEV(x2)+1, YLOG2DEV(y2),
+ rx1, ry1-1, rx2, ry2-1);
+ }
+ ::SelectObject(GetHdc(), orig_pen);
+ (void)Arc(GetHdc(), XLOG2DEV(x), YLOG2DEV(y), XLOG2DEV(x2), YLOG2DEV(y2),