- gdk_draw_line( m_window, m_penGC, 0, yy, XLOG2DEVREL(w), yy );
- gdk_draw_line( m_window, m_penGC, xx, 0, xx, YLOG2DEVREL(h) );
+ if (m_window)
+ {
+ gdk_draw_line( m_window, m_penGC, 0, yy, XLOG2DEVREL(w), yy );
+ gdk_draw_line( m_window, m_penGC, xx, 0, xx, YLOG2DEVREL(h) );
+ }
- if (m_brush.GetStyle() != wxTRANSPARENT)
- gdk_draw_arc( m_window, m_brushGC, TRUE, xxc-r, yyc-r, 2*r,2*r, alpha1, alpha2 );
+ if (m_window)
+ {
+ if (m_brush.GetStyle() != wxTRANSPARENT)
+ gdk_draw_arc( m_window, m_brushGC, TRUE, xxc-r, yyc-r, 2*r,2*r, alpha1, alpha2 );
- if (m_pen.GetStyle() != wxTRANSPARENT)
- gdk_draw_arc( m_window, m_penGC, FALSE, xxc-r, yyc-r, 2*r,2*r, alpha1, alpha2 );
+ if (m_pen.GetStyle() != wxTRANSPARENT)
+ gdk_draw_arc( m_window, m_penGC, FALSE, xxc-r, yyc-r, 2*r,2*r, alpha1, alpha2 );
+ }
- long start = long(sa * 64.0);
- long end = long(ea * 64.0);
- if (m_brush.GetStyle() != wxTRANSPARENT)
- gdk_draw_arc( m_window, m_brushGC, TRUE, xx, yy, ww, hh, start, end );
+ if (m_window)
+ {
+ long start = long(sa * 64.0);
+ long end = long(ea * 64.0);
+
+ if (m_brush.GetStyle() != wxTRANSPARENT)
+ gdk_draw_arc( m_window, m_brushGC, TRUE, xx, yy, ww, hh, start, end );
- if (m_pen.GetStyle() != wxTRANSPARENT)
- gdk_draw_arc( m_window, m_penGC, FALSE, xx, yy, ww, hh, start, end );
+ if (m_pen.GetStyle() != wxTRANSPARENT)
+ gdk_draw_arc( m_window, m_penGC, FALSE, xx, yy, ww, hh, start, end );
+ }
- gdk_draw_rectangle( m_window, m_brushGC, TRUE, xx+rr, yy, ww-dd+1, hh );
- gdk_draw_rectangle( m_window, m_brushGC, TRUE, xx, yy+rr, ww, hh-dd+1 );
- gdk_draw_arc( m_window, m_brushGC, TRUE, xx, yy, dd, dd, 90*64, 90*64 );
- gdk_draw_arc( m_window, m_brushGC, TRUE, xx+ww-dd, yy, dd, dd, 0, 90*64 );
- gdk_draw_arc( m_window, m_brushGC, TRUE, xx+ww-dd, yy+hh-dd, dd, dd, 270*64, 90*64 );
- gdk_draw_arc( m_window, m_brushGC, TRUE, xx, yy+hh-dd, dd, dd, 180*64, 90*64 );
- }
+ // CMB: ensure dd is not larger than rectangle otherwise we
+ // get an hour glass shape
+ long dd = 2 * rr;
+ if (dd > ww) dd = ww;
+ if (dd > hh) dd = hh;
+ rr = dd / 2;
+
+ if (m_brush.GetStyle() != wxTRANSPARENT)
+ {
+ gdk_draw_rectangle( m_window, m_brushGC, TRUE, xx+rr, yy, ww-dd+1, hh );
+ gdk_draw_rectangle( m_window, m_brushGC, TRUE, xx, yy+rr, ww, hh-dd+1 );
+ gdk_draw_arc( m_window, m_brushGC, TRUE, xx, yy, dd, dd, 90*64, 90*64 );
+ gdk_draw_arc( m_window, m_brushGC, TRUE, xx+ww-dd, yy, dd, dd, 0, 90*64 );
+ gdk_draw_arc( m_window, m_brushGC, TRUE, xx+ww-dd, yy+hh-dd, dd, dd, 270*64, 90*64 );
+ gdk_draw_arc( m_window, m_brushGC, TRUE, xx, yy+hh-dd, dd, dd, 180*64, 90*64 );
+ }
- if (m_pen.GetStyle() != wxTRANSPARENT)
- {
- gdk_draw_line( m_window, m_penGC, xx+rr, yy, xx+ww-rr, yy );
- gdk_draw_line( m_window, m_penGC, xx+rr, yy+hh, xx+ww-rr, yy+hh );
- gdk_draw_line( m_window, m_penGC, xx, yy+rr, xx, yy+hh-rr );
- gdk_draw_line( m_window, m_penGC, xx+ww, yy+rr, xx+ww, yy+hh-rr );
- gdk_draw_arc( m_window, m_penGC, FALSE, xx, yy, dd, dd, 90*64, 90*64 );
- gdk_draw_arc( m_window, m_penGC, FALSE, xx+ww-dd, yy, dd, dd, 0, 90*64 );
- gdk_draw_arc( m_window, m_penGC, FALSE, xx+ww-dd, yy+hh-dd, dd, dd, 270*64, 90*64 );
- gdk_draw_arc( m_window, m_penGC, FALSE, xx, yy+hh-dd, dd, dd, 180*64, 90*64 );
+ if (m_pen.GetStyle() != wxTRANSPARENT)
+ {
+ gdk_draw_line( m_window, m_penGC, xx+rr, yy, xx+ww-rr, yy );
+ gdk_draw_line( m_window, m_penGC, xx+rr, yy+hh, xx+ww-rr, yy+hh );
+ gdk_draw_line( m_window, m_penGC, xx, yy+rr, xx, yy+hh-rr );
+ gdk_draw_line( m_window, m_penGC, xx+ww, yy+rr, xx+ww, yy+hh-rr );
+ gdk_draw_arc( m_window, m_penGC, FALSE, xx, yy, dd, dd, 90*64, 90*64 );
+ gdk_draw_arc( m_window, m_penGC, FALSE, xx+ww-dd, yy, dd, dd, 0, 90*64 );
+ gdk_draw_arc( m_window, m_penGC, FALSE, xx+ww-dd, yy+hh-dd, dd, dd, 270*64, 90*64 );
+ gdk_draw_arc( m_window, m_penGC, FALSE, xx, yy+hh-dd, dd, dd, 180*64, 90*64 );
+ }
- if (m_brush.GetStyle() != wxTRANSPARENT)
- gdk_draw_arc( m_window, m_brushGC, TRUE, xx, yy, ww, hh, 0, 360*64 );
+ if (m_window)
+ {
+ if (m_brush.GetStyle() != wxTRANSPARENT)
+ gdk_draw_arc( m_window, m_brushGC, TRUE, xx, yy, ww, hh, 0, 360*64 );
- if (m_pen.GetStyle() != wxTRANSPARENT)
- gdk_draw_arc( m_window, m_penGC, FALSE, xx, yy, ww, hh, 0, 360*64 );
+ if (m_pen.GetStyle() != wxTRANSPARENT)
+ gdk_draw_arc( m_window, m_penGC, FALSE, xx, yy, ww, hh, 0, 360*64 );
+ }