]> git.saurik.com Git - wxWidgets.git/blobdiff - src/mgl/dc.cpp
Project file corrections, doc corrections
[wxWidgets.git] / src / mgl / dc.cpp
index c37533c8dd23da39e85aee877b156d95522e09df..6d1111607dbdcbea5ba0e0e9950c491ee819a048 100644 (file)
@@ -182,16 +182,9 @@ void wxDC::SetMGLDC(MGLDevCtx *mgldc, bool OwnsMGLDC)
     m_MGLDC = mgldc;
     m_OwnsMGLDC = OwnsMGLDC;
        m_ok = TRUE;
-    
-    if ( mgldc->getDC()->a.clipRegion )
-    {
-        MGLRegion clip;
-        mgldc->getClipRegion(clip);
-        m_globalClippingRegion = wxRegion(clip);
-        // FIXME_MGL -- reuse wxWindows::m_updateRegion ?
-        m_currentClippingRegion = m_globalClippingRegion;
-        m_clipping = TRUE;
-    }
+
+    if ( !m_globalClippingRegion.IsNull() )
+        SetClippingRegion(m_globalClippingRegion);
     
     InitializeMGLDC();
 }
@@ -288,7 +281,7 @@ void wxDC::DestroyClippingRegion()
     }
     else
     {
-        m_MGLDC->setClipRect(MGLRect(0, 0, m_MGLDC->sizex(), m_MGLDC->sizey()));
+        m_MGLDC->setClipRect(MGLRect(0, 0, m_MGLDC->sizex()+1, m_MGLDC->sizey()+1));
         m_clipping = FALSE;
         m_currentClippingRegion.Clear();
     }
@@ -329,7 +322,7 @@ void wxDC::Clear()
         SetBrush(m_backgroundBrush);
         SelectBrush();
         GetSize(&w, &h);
-        m_MGLDC->fillRect(0, 0, w-1, h-1);
+        m_MGLDC->fillRect(0, 0, w, h);
         SetBrush(oldb);
     }
 }
@@ -344,7 +337,7 @@ bool wxDC::DoGetPixel(wxCoord x, wxCoord y, wxColour *col) const
     wxCHECK_MSG( col, FALSE, _T("NULL colour parameter in wxDC::GetPixel"));
 
     uchar r, g, b;
-    m_MGLDC->unpackColorFast(m_MGLDC->getPixel(XLOG2DEV(x), XLOG2DEV(y)), 
+    m_MGLDC->unpackColorFast(m_MGLDC->getPixel(XLOG2DEV(x), YLOG2DEV(y)), 
                              r, g, b);
     col->Set(r, g, b);
     return TRUE;
@@ -380,8 +373,8 @@ void wxDC::DoDrawLine(wxCoord x1, wxCoord y1, wxCoord x2, wxCoord y2)
         m_MGLDC->makeCurrent(); // will go away with MGL6.0
         if ( !m_penSelected ) 
             SelectPen();
-        m_MGLDC->line(XLOG2DEV(x1) + m_penOfsX, XLOG2DEV(y1) + m_penOfsY, 
-                      XLOG2DEV(x2) + m_penOfsX, XLOG2DEV(y2) + m_penOfsY);
+        m_MGLDC->lineExt(XLOG2DEV(x1) + m_penOfsX, YLOG2DEV(y1) + m_penOfsY, 
+                      XLOG2DEV(x2) + m_penOfsX, YLOG2DEV(y2) + m_penOfsY,FALSE);
         CalcBoundingBox(x1, y1);
         CalcBoundingBox(x2, y2);
     }
@@ -751,25 +744,42 @@ void wxDC::DrawAnyText(const wxString& text, wxCoord x, wxCoord y)
 
     SelectMGLFont();
 
-    m_MGLDC->setColor(m_MGLDC->packColorFast(m_textForegroundColour.Red(),
-            m_textForegroundColour.Green(), m_textForegroundColour.Blue()));
-    m_MGLDC->setBackColor(m_MGLDC->packColorFast(m_textBackgroundColour.Red(),
-            m_textBackgroundColour.Green(), m_textBackgroundColour.Blue()));
-
     // Render the text:
     wxCoord xx = XLOG2DEV(x);
     wxCoord yy = YLOG2DEV(y);
-
+    
     m_MGLDC->setLineStyle(MGL_LINE_STIPPLE);
     m_MGLDC->setLineStipple(0xFFFF);
     m_MGLDC->setPenSize(1, 1);
     m_MGLDC->setPenStyle(MGL_BITMAP_SOLID);
-    
+
 #if wxUSE_UNICODE
     const wchar_t *c_text = text.c_str();
 #else
     const char *c_text = text.c_str();
 #endif
+
+#if 1 
+    // FIXME_MGL - this is a temporary hack in absence of proper 
+    //             implementation of solid text background in MGL. Once 
+    //             the bug in MGL is fixed, this code should be nuked
+    //             immediately. Note that the code is not 100% correct;
+    //             it only works with wxCOPY logical function
+    if ( m_backgroundMode == wxSOLID )
+    {
+        int w = m_MGLDC->textWidth(c_text);
+        int h = m_MGLDC->textHeight();
+        m_MGLDC->setColor(m_MGLDC->packColorFast(m_textBackgroundColour.Red(),
+                m_textBackgroundColour.Green(), m_textBackgroundColour.Blue()));
+        m_MGLDC->fillRect(xx, yy, xx+w, yy+h);
+    }
+#endif
+
+    m_MGLDC->setColor(m_MGLDC->packColorFast(m_textForegroundColour.Red(),
+            m_textForegroundColour.Green(), m_textForegroundColour.Blue()));
+    m_MGLDC->setBackColor(m_MGLDC->packColorFast(m_textBackgroundColour.Red(),
+            m_textBackgroundColour.Green(), m_textBackgroundColour.Blue()));
+    
     m_MGLDC->drawStr(xx, yy, c_text);
     
     // Render underline:
@@ -1234,7 +1244,7 @@ void wxDC::DoGetTextExtent(const wxString& string, wxCoord *x, wxCoord *y,
         *descent = YDEV2LOGREL(m_mglFont->descent);
     if ( externalLeading )
         *externalLeading = YDEV2LOGREL(m_mglFont->leading);
-    
+
     if ( theFont != NULL )
         wxConstCast(this, wxDC)->SetFont(oldFont);
 }
@@ -1370,8 +1380,8 @@ wxCoord wxDCBase::LogicalToDeviceYRel(wxCoord y) const
 
 void wxDC::DoGetSize(int *w, int *h) const
 {
-    if (w) *w = m_MGLDC->sizex();
-    if (h) *h = m_MGLDC->sizey();
+    if (w) *w = m_MGLDC->sizex()+1;
+    if (h) *h = m_MGLDC->sizey()+1;
 }
 
 void wxDC::DoGetSizeMM(int *width, int *height) const