]> git.saurik.com Git - wxWidgets.git/blobdiff - src/msw/dc.cpp
Tex2RTF: underscores now only checked for if syntax checking is on.
[wxWidgets.git] / src / msw / dc.cpp
index 0598c60773db239a58ebed2e1953955853413ac5..2a79ff7f852b3f7dcdb7377773630e8c9bc8743a 100644 (file)
@@ -200,10 +200,15 @@ wxDC::~wxDC()
         }
         else // we don't own our HDC
         {
-            // this is not supposed to happen as we can't free the HDC then
-            wxCHECK_RET( m_canvas, _T("no canvas in not owning ~wxDC?") );
-
-            ::ReleaseDC(GetHwndOf(m_canvas), GetHdc());
+            if (m_canvas)
+            {
+                ::ReleaseDC(GetHwndOf(m_canvas), GetHdc());
+            }
+            else
+            {
+                // Must have been a wxScreenDC
+                ::ReleaseDC((HWND) NULL, GetHdc());
+            }
         }
     }
 }
@@ -273,9 +278,22 @@ void wxDC::SelectOldObjects(WXHDC dc)
 void wxDC::DoSetClippingRegion(wxCoord cx, wxCoord cy, wxCoord cw, wxCoord ch)
 {
     m_clipping = TRUE;
-    IntersectClipRect(GetHdc(), XLOG2DEV(cx), YLOG2DEV(cy),
+
+    HRGN hrgn = ::CreateRectRgn(XLOG2DEV(cx), YLOG2DEV(cy),
                                 XLOG2DEV(cx + cw), YLOG2DEV(cy + ch));
-    DO_SET_CLIPPING_BOX()
+    if ( !hrgn )
+    {
+        wxLogLastError(_T("CreateRectRgn"));
+    }
+    else
+    {
+        if ( ::SelectClipRgn(GetHdc(), hrgn) == ERROR )
+        {
+            wxLogLastError(_T("SelectClipRgn"));
+        }
+
+        DO_SET_CLIPPING_BOX()
+    }
 }
 
 void wxDC::DoSetClippingRegionAsRegion(const wxRegion& region)
@@ -1166,7 +1184,7 @@ void wxDC::SetRop(WXHDC dc)
     SetROP2(GetHdc(), rop);
 }
 
-bool wxDC::StartDoc(const wxString& message)
+bool wxDC::StartDoc(const wxString& WXUNUSED(message))
 {
     // We might be previewing, so return TRUE to let it continue.
     return TRUE;
@@ -1208,22 +1226,35 @@ wxCoord wxDC::GetCharWidth() const
 
 void wxDC::DoGetTextExtent(const wxString& string, wxCoord *x, wxCoord *y,
                            wxCoord *descent, wxCoord *externalLeading,
-                           wxFont *theFont) const
+                           wxFont *font) const
 {
-    wxFont *fontToUse = (wxFont*) theFont;
-    if (!fontToUse)
-        fontToUse = (wxFont*) &m_font;
+    HFONT hfontOld;
+    if ( font )
+    {
+        wxASSERT_MSG( font->Ok(), _T("invalid font in wxDC::GetTextExtent") );
+
+        hfontOld = (HFONT)::SelectObject(GetHdc(), GetHfontOf(*font));
+    }
+    else // don't change the font
+    {
+        hfontOld = 0;
+    }
 
     SIZE sizeRect;
     TEXTMETRIC tm;
 
-    GetTextExtentPoint(GetHdc(), WXSTRINGCAST string, wxStrlen(WXSTRINGCAST string), &sizeRect);
+    GetTextExtentPoint(GetHdc(), string, string.length(), &sizeRect);
     GetTextMetrics(GetHdc(), &tm);
 
     if (x) *x = XDEV2LOGREL(sizeRect.cx);
     if (y) *y = YDEV2LOGREL(sizeRect.cy);
     if (descent) *descent = tm.tmDescent;
     if (externalLeading) *externalLeading = tm.tmExternalLeading;
+
+    if ( hfontOld )
+    {
+        ::SelectObject(GetHdc(), hfontOld);
+    }
 }
 
 void wxDC::SetMapMode(int mode)