]> git.saurik.com Git - wxWidgets.git/blobdiff - src/dfb/dc.cpp
Add scrollbars if the columns exceed the horizontal space for the control, also,...
[wxWidgets.git] / src / dfb / dc.cpp
index 4e171feb3d47fbc41ea6e2d4e0c146c5a7439e7a..d8d9176e836d8e73cf6828a4c83bbe93f1fee12d 100644 (file)
@@ -53,10 +53,10 @@ wxDC::wxDC()
 
 wxDC::wxDC(const wxIDirectFBSurfacePtr& surface)
 {
 
 wxDC::wxDC(const wxIDirectFBSurfacePtr& surface)
 {
-    Init(surface);
+    DFBInit(surface);
 }
 
 }
 
-void wxDC::Init(const wxIDirectFBSurfacePtr& surface)
+void wxDC::DFBInit(const wxIDirectFBSurfacePtr& surface)
 {
     m_ok = (surface != NULL);
     wxCHECK_RET( surface != NULL, _T("invalid surface") );
 {
     m_ok = (surface != NULL);
     wxCHECK_RET( surface != NULL, _T("invalid surface") );
@@ -180,8 +180,32 @@ void wxDC::DoDrawLine(wxCoord x1, wxCoord y1, wxCoord x2, wxCoord y2)
     if ( m_pen.GetStyle() == wxTRANSPARENT )
         return;
 
     if ( m_pen.GetStyle() == wxTRANSPARENT )
         return;
 
-    m_surface->DrawLine(XLOG2DEV(x1), YLOG2DEV(y1),
-                        XLOG2DEV(x2), YLOG2DEV(y2));
+    wxCoord xx1 = XLOG2DEV(x1);
+    wxCoord yy1 = YLOG2DEV(y1);
+    wxCoord xx2 = XLOG2DEV(x2);
+    wxCoord yy2 = YLOG2DEV(y2);
+
+    // FIXME: DrawLine() shouldn't draw the last pixel, but DFB's DrawLine()
+    //        does draw it. We should undo any change to the last pixel by
+    //        using GetPixel() and PutPixel(), but until they are implemented,
+    //        handle at least the special case of vertical and horizontal
+    //        lines correctly:
+    if ( xx1 == xx2 )
+    {
+        if ( yy1 < yy2 )
+            yy2--;
+        else if ( yy1 > yy2 )
+            yy2++;
+    }
+    if ( yy1 == yy2 )
+    {
+        if ( xx1 < xx2 )
+            xx2--;
+        else if ( xx1 > xx2 )
+            xx2++;
+    }
+
+    m_surface->DrawLine(xx1, yy1, xx2, yy2);
 
     CalcBoundingBox(x1, y1);
     CalcBoundingBox(x2, y2);
 
     CalcBoundingBox(x1, y1);
     CalcBoundingBox(x2, y2);