]> git.saurik.com Git - wxWidgets.git/blobdiff - src/mgl/dc.cpp
changed wxImage::ComputeHistogram to use wxHashMap
[wxWidgets.git] / src / mgl / dc.cpp
index 452ded710ba284b3ed23066bbc8b74d761813554..e9a24c404e497a4208bc0f0c79dd5b88c2b4f205 100644 (file)
 // constants
 //-----------------------------------------------------------------------------
 
+#ifndef M_PI
+#define M_PI 3.14159265358979323846
+#endif
+
 const double mm2inches      = 0.0393700787402;
 const double inches2mm      = 25.4;
 const double mm2twips       = 56.6929133859;
@@ -337,7 +341,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;
@@ -373,8 +377,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->lineExt(XLOG2DEV(x1) + m_penOfsX, XLOG2DEV(y1) + m_penOfsY, 
-                      XLOG2DEV(x2) + m_penOfsX, XLOG2DEV(y2) + m_penOfsY,FALSE);
+        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);
     }
@@ -553,8 +557,16 @@ void wxDC::DoDrawRectangle(wxCoord x, wxCoord y, wxCoord width, wxCoord height)
     {
         if ( !m_penSelected ) 
             SelectPen();
-        m_MGLDC->rect(xx + m_penOfsX, yy + m_penOfsY, 
-                      xx + ww + m_penOfsX, yy + hh + m_penOfsY);
+
+        // VS: MGLDC::rect() does not render rectangles that have width
+        //     or height equal to 1, so we have to use MGLDC::line()
+        //     instead...
+        if ( hh == 1 || ww == 1 )
+            m_MGLDC->line(xx + m_penOfsX, yy + m_penOfsY, 
+                          xx + ww-1 + m_penOfsX, yy + hh-1 + m_penOfsY);
+        else
+            m_MGLDC->rect(xx + m_penOfsX, yy + m_penOfsY, 
+                          xx + ww + m_penOfsX, yy + hh + m_penOfsY);
     }    
 
     CalcBoundingBox(x, y);
@@ -744,25 +756,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:
@@ -1080,7 +1109,8 @@ void wxDC::SetPalette(const wxPalette& palette)
     
     if ( palette == wxNullPalette )
     {
-        SetPalette(m_oldPalette);
+        if ( m_oldPalette.Ok() )
+            SetPalette(m_oldPalette);
         return;
     }
 
@@ -1097,9 +1127,11 @@ void wxDC::SetPalette(const wxPalette& palette)
 
 void wxDC::SetFont(const wxFont& font)
 {
-    wxCHECK_RET( font.Ok(), wxT("invalid font") );
-    m_font = font;
-    m_mglFont = NULL;
+    if ( font.Ok() )
+    {
+        m_font = font;
+        m_mglFont = NULL;
+    }
 }
 
 void wxDC::SetBackground(const wxBrush& brush)