m_cmap = (GdkColormap *) NULL;
m_owner = (wxWindow *)NULL;
m_isMemDC = FALSE;
+ m_font = window->GetFont();
wxASSERT_MSG( window, _T("DC needs a window") );
if (!m_window) return;
gint width = m_pen.GetWidth();
- // CMB: if width is non-zero scale it with the dc
if (width <= 0)
{
+ // CMB: if width is non-zero scale it with the dc
width = 1;
}
else
width = (int)w;
}
+ const static char dotted[] = {1, 1};
+ const static char short_dashed[] = {2, 2};
+ const static char long_dashed[] = {2, 4};
+ const static char dotted_dashed[] = {3, 3, 1, 3};
+
+ // We express dash pattern in pen width unit, so we are
+ // independent of zoom factor and so on...
+ int req_nb_dash;
+ const char *req_dash;
+
GdkLineStyle lineStyle = GDK_LINE_SOLID;
switch (m_pen.GetStyle())
{
- case wxSOLID: { lineStyle = GDK_LINE_SOLID; break; }
- case wxDOT: { lineStyle = GDK_LINE_ON_OFF_DASH; break; }
- case wxLONG_DASH: { lineStyle = GDK_LINE_ON_OFF_DASH; break; }
- case wxSHORT_DASH: { lineStyle = GDK_LINE_ON_OFF_DASH; break; }
- case wxDOT_DASH: { lineStyle = GDK_LINE_DOUBLE_DASH; break; }
+ case wxUSER_DASH:
+ {
+ lineStyle = GDK_LINE_ON_OFF_DASH;
+ req_nb_dash = m_pen.GetDashCount();
+ req_dash = m_pen.GetDash();
+ break;
+ }
+ case wxDOT:
+ {
+ lineStyle = GDK_LINE_ON_OFF_DASH;
+ req_nb_dash = 2;
+ req_dash = dotted;
+ break;
+ }
+ case wxLONG_DASH:
+ {
+ lineStyle = GDK_LINE_ON_OFF_DASH;
+ req_nb_dash = 2;
+ req_dash = long_dashed;
+ break;
+ }
+ case wxSHORT_DASH:
+ {
+ lineStyle = GDK_LINE_ON_OFF_DASH;
+ req_nb_dash = 2;
+ req_dash = short_dashed;
+ break;
+ }
+ case wxDOT_DASH:
+ {
+// lineStyle = GDK_LINE_DOUBLE_DASH;
+ lineStyle = GDK_LINE_ON_OFF_DASH;
+ req_nb_dash = 4;
+ req_dash = dotted_dashed;
+ break;
+ }
+
+ case wxTRANSPARENT:
+ case wxSTIPPLE:
+ case wxSOLID:
+ default:
+ {
+ lineStyle = GDK_LINE_SOLID;
+ req_dash = (wxDash*)NULL;
+ req_nb_dash = 0;
+ break;
+ }
}
+ if (req_dash && req_nb_dash)
+ {
+ char *real_req_dash = new char[req_nb_dash];
+ if (real_req_dash)
+ {
+ for (int i = 0; i < req_nb_dash; i++)
+ real_req_dash[i] = req_dash[i] * width;
+ gdk_gc_set_dashes( m_penGC, 0, real_req_dash, req_nb_dash );
+ delete[] real_req_dash;
+ }
+ else
+ {
+ // No Memory. We use non-scaled dash pattern...
+ gdk_gc_set_dashes( m_penGC, 0, (char*)req_dash, req_nb_dash );
+ }
+ }
+
GdkCapStyle capStyle = GDK_CAP_ROUND;
switch (m_pen.GetCap())
{
m_brush = wxNullBrush;
SetBrush( tmp_brush );
+/*
tmp_brush = m_backgroundBrush;
m_backgroundBrush = wxNullBrush;
SetBackground( tmp_brush );
+*/
+ tmp_brush = m_backgroundBrush;
+ m_backgroundBrush = wxNullBrush;
+ SetBackground( *wxWHITE_BRUSH );
+ m_backgroundBrush = tmp_brush;
if (!hatch_bitmap)
{