]> git.saurik.com Git - wxWidgets.git/commitdiff
implemented wxWindowDC and wxClientDC::GetSize() properly (fixes bug #503022)
authorVadim Zeitlin <vadim@wxwidgets.org>
Sat, 23 Feb 2002 21:32:45 +0000 (21:32 +0000)
committerVadim Zeitlin <vadim@wxwidgets.org>
Sat, 23 Feb 2002 21:32:45 +0000 (21:32 +0000)
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@14372 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

docs/changes.txt
include/wx/msw/dcclient.h
src/msw/dc.cpp
src/msw/dcclient.cpp

index 36a00a6cc10084c46f0e4ef1cba2121a3bdd75fa..9d5f89ae377842bf99beaacf4d446b778f43b925 100644 (file)
@@ -123,6 +123,7 @@ wxMSW:
 - showing a dialog from EVT_RADIOBUTTON handler doesn't lead to an infinite
   recursion any more
 - wxTextCtrl with wxTE_RICH flag scrolls to the end when text is appended to it
+- wxWindowDC and wxClientDC::GetSize() works correctly now
 
 wxGTK:
 
index 0c2cca05858a4d1aaca46b02379735e1e9c4d0a6..ccf5927bf2e01091cf926c57d87997c5ada4b675 100644 (file)
@@ -49,6 +49,9 @@ protected:
     // intiialize the newly created DC
     void InitDC();
 
+    // override some base class virtuals
+    virtual void DoGetSize(int *width, int *height) const;
+
 private:
     DECLARE_DYNAMIC_CLASS(wxWindowDC)
 };
@@ -67,6 +70,9 @@ public:
 protected:
     void InitDC();
 
+    // override some base class virtuals
+    virtual void DoGetSize(int *width, int *height) const;
+
 private:
     DECLARE_DYNAMIC_CLASS(wxClientDC)
 };
index 0a75fced54be38aa24f82bd810bfb889e74a8edb..09d21ad3d03a48040fd1e786f42e600422756cdc 100644 (file)
@@ -1923,8 +1923,30 @@ void wxDC::DoGetSizeMM(int *w, int *h) const
     if (!GetHDC()) return;
 #endif
 
-    if ( w ) *w = ::GetDeviceCaps(GetHdc(), HORZSIZE);
-    if ( h ) *h = ::GetDeviceCaps(GetHdc(), VERTSIZE);
+    // if we implement it in terms of DoGetSize() instead of directly using the
+    // results returned by GetDeviceCaps(HORZ/VERTSIZE) as was done before, it
+    // will also work for wxWindowDC and wxClientDC even though their size is
+    // not the same as the total size of the screen
+    int wPixels, hPixels;
+    DoGetSize(&wPixels, &hPixels);
+
+    if ( w )
+    {
+        int wTotal = ::GetDeviceCaps(GetHdc(), HORZRES);
+
+        wxCHECK_RET( wTotal, _T("0 width device?") );
+
+        *w = (wPixels * ::GetDeviceCaps(GetHdc(), HORZSIZE)) / wTotal;
+    }
+
+    if ( h )
+    {
+        int hTotal = ::GetDeviceCaps(GetHdc(), VERTRES);
+
+        wxCHECK_RET( hTotal, _T("0 height device?") );
+
+        *h = (hPixels * ::GetDeviceCaps(GetHdc(), VERTSIZE)) / hTotal;
+    }
 }
 
 wxSize wxDC::GetPPI() const
index 6d5df17f484938b49ad871ffd07347b9eae9a8f0..720398ea5dd5bad42cd11ecdb532a092f13cf192 100644 (file)
@@ -120,6 +120,13 @@ void wxWindowDC::InitDC()
 #endif
 }
 
+void wxWindowDC::DoGetSize(int *width, int *height) const
+{
+    wxCHECK_RET( m_canvas, _T("wxWindowDC without a window?") );
+
+    m_canvas->GetSize(width, height);
+}
+
 // ----------------------------------------------------------------------------
 // wxClientDC
 // ----------------------------------------------------------------------------
@@ -165,6 +172,13 @@ wxClientDC::~wxClientDC()
 {
 }
 
+void wxClientDC::DoGetSize(int *width, int *height) const
+{
+    wxCHECK_RET( m_canvas, _T("wxClientDC without a window?") );
+
+    m_canvas->GetClientSize(width, height);
+}
+
 // ----------------------------------------------------------------------------
 // wxPaintDC
 // ----------------------------------------------------------------------------