]> git.saurik.com Git - wxWidgets.git/blobdiff - src/univ/winuniv.cpp
use GetCharHeight in GetHeight() instead of creating temporary wxClientDC
[wxWidgets.git] / src / univ / winuniv.cpp
index 11a647cdf84081749efbec10d05c0c34822abd4f..c0b7f7a02cdcf3d381dee5cecd94e55f67e0878b 100644 (file)
@@ -71,6 +71,8 @@
     IMPLEMENT_DYNAMIC_CLASS(wxWindow, wxWindowGTK)
 #elif defined(__WXMGL__)
     IMPLEMENT_DYNAMIC_CLASS(wxWindow, wxWindowMGL)
+#elif defined(__WXDFB__)
+    IMPLEMENT_DYNAMIC_CLASS(wxWindow, wxWindowDFB)
 #elif defined(__WXX11__)
     IMPLEMENT_DYNAMIC_CLASS(wxWindow, wxWindowX11)
 #elif defined(__WXPM__)
@@ -100,8 +102,10 @@ END_EVENT_TABLE()
 
 void wxWindow::Init()
 {
+#if wxUSE_SCROLLBAR
     m_scrollbarVert =
     m_scrollbarHorz = (wxScrollBar *)NULL;
+#endif // wxUSE_SCROLLBAR
 
     m_isCurrent = false;
 
@@ -145,9 +149,11 @@ bool wxWindow::Create(wxWindow *parent,
 #if wxUSE_TWO_WINDOWS
         SetInsertIntoMain( true );
 #endif
+#if wxUSE_SCROLLBAR
         m_scrollbarVert = new wxScrollBar(this, wxID_ANY,
                                           wxDefaultPosition, wxDefaultSize,
                                           wxSB_VERTICAL);
+#endif // wxUSE_SCROLLBAR
 #if wxUSE_TWO_WINDOWS
         SetInsertIntoMain( false );
 #endif
@@ -159,19 +165,23 @@ bool wxWindow::Create(wxWindow *parent,
 #if wxUSE_TWO_WINDOWS
         SetInsertIntoMain( true );
 #endif
+#if wxUSE_SCROLLBAR
         m_scrollbarHorz = new wxScrollBar(this, wxID_ANY,
                                           wxDefaultPosition, wxDefaultSize,
                                           wxSB_HORIZONTAL);
+#endif // wxUSE_SCROLLBAR
 #if wxUSE_TWO_WINDOWS
         SetInsertIntoMain( false );
 #endif
     }
 
+#if wxUSE_SCROLLBAR
     if (m_scrollbarHorz || m_scrollbarVert)
     {
         // position it/them
         PositionScrollbars();
     }
+#endif // wxUSE_SCROLLBAR
 
     return true;
 }
@@ -225,13 +235,9 @@ void wxWindow::OnNcPaint(wxNcPaintEvent& WXUNUSED(event))
     if ( m_renderer )
     {
         // get the window rect
-        wxRect rect;
-        wxSize size = GetSize();
-        rect.x =
-        rect.y = 0;
-        rect.width = size.x;
-        rect.height = size.y;
+        wxRect rect(GetSize());
 
+#if wxUSE_SCROLLBAR
         // if the scrollbars are outside the border, we must adjust the rect to
         // exclude them
         if ( !m_renderer->AreScrollbarsInsideBorder() )
@@ -244,6 +250,7 @@ void wxWindow::OnNcPaint(wxNcPaintEvent& WXUNUSED(event))
             if ( scrollbar )
                 rect.height -= scrollbar->GetSize().y;
         }
+#endif // wxUSE_SCROLLBAR
 
         // get the DC and draw the border on it
         wxWindowDC dc(this);
@@ -281,6 +288,7 @@ void wxWindow::OnErase(wxEraseEvent& event)
 
     DoDrawBackground(*event.GetDC());
 
+#if wxUSE_SCROLLBAR
     // if we have both scrollbars, we also have a square in the corner between
     // them which we must paint
     if ( m_scrollbarVert && m_scrollbarHorz )
@@ -300,6 +308,7 @@ void wxWindow::OnErase(wxEraseEvent& event)
             m_renderer->DrawScrollCorner(*event.GetDC(), rectCorner);
         }
     }
+#endif // wxUSE_SCROLLBAR
 }
 
 bool wxWindow::DoDrawBackground(wxDC& dc)
@@ -533,10 +542,12 @@ void wxWindow::OnSize(wxSizeEvent& event)
 {
     event.Skip();
 
+#if wxUSE_SCROLLBAR
     if ( m_scrollbarVert || m_scrollbarHorz )
     {
         PositionScrollbars();
     }
+#endif // wxUSE_SCROLLBAR
 
 #if 0   // ndef __WXMSW__
     // Refresh the area (strip) previously occupied by the border
@@ -697,13 +708,19 @@ void wxWindow::DoGetClientSize(int *width, int *height) const
 
     if ( width )
     {
+#if wxUSE_SCROLLBAR
         // in any case, take account of the scrollbar
         if ( m_scrollbarVert )
             w -= m_scrollbarVert->GetSize().x;
+#endif // wxUSE_SCROLLBAR
 
         // if we don't have scrollbar or if it is outside the border (and not
         // blended into it), take account of the right border as well
-        if ( !m_scrollbarVert || inside )
+        if (
+#if wxUSE_SCROLLBAR
+             !m_scrollbarVert ||
+#endif // wxUSE_SCROLLBAR
+             inside )
             w -= rectBorder.width;
 
         // and always account for the left border
@@ -716,10 +733,16 @@ void wxWindow::DoGetClientSize(int *width, int *height) const
 
     if ( height )
     {
+#if wxUSE_SCROLLBAR
         if ( m_scrollbarHorz )
             h -= m_scrollbarHorz->GetSize().y;
+#endif // wxUSE_SCROLLBAR
 
-        if ( !m_scrollbarHorz || inside )
+        if (
+#if wxUSE_SCROLLBAR
+            !m_scrollbarHorz ||
+#endif // wxUSE_SCROLLBAR
+            inside )
             h -= rectBorder.height;
 
         *height = h - rectBorder.y;
@@ -742,14 +765,26 @@ void wxWindow::DoSetClientSize(int width, int height)
     // had been called before)
     bool inside = m_renderer->AreScrollbarsInsideBorder();
     wxSize size = GetSize();
+#if wxUSE_SCROLLBAR
     if ( m_scrollbarVert )
         width += size.x - m_scrollbarVert->GetPosition().x;
-    if ( !m_scrollbarVert || inside )
+#endif // wxUSE_SCROLLBAR
+    if (
+#if wxUSE_SCROLLBAR
+        !m_scrollbarVert ||
+#endif // wxUSE_SCROLLBAR
+        inside )
         width += rectBorder.width;
 
+#if wxUSE_SCROLLBAR
     if ( m_scrollbarHorz )
         height += size.y - m_scrollbarHorz->GetPosition().y;
-    if ( !m_scrollbarHorz || inside )
+#endif // wxUSE_SCROLLBAR
+    if (
+#if wxUSE_SCROLLBAR
+        !m_scrollbarHorz ||
+#endif // wxUSE_SCROLLBAR
+        inside )
         height += rectBorder.height;
 
     wxWindowNative::DoSetClientSize(width, height);
@@ -758,6 +793,8 @@ void wxWindow::DoSetClientSize(int width, int height)
 wxHitTest wxWindow::DoHitTest(wxCoord x, wxCoord y) const
 {
     wxHitTest ht = wxWindowNative::DoHitTest(x, y);
+
+#if wxUSE_SCROLLBAR
     if ( ht == wxHT_WINDOW_INSIDE )
     {
         if ( m_scrollbarVert && x >= m_scrollbarVert->GetPosition().x )
@@ -772,6 +809,7 @@ wxHitTest wxWindow::DoHitTest(wxCoord x, wxCoord y) const
                                                   : wxHT_WINDOW_HORZ_SCROLLBAR;
         }
     }
+#endif // wxUSE_SCROLLBAR
 
     return ht;
 }
@@ -784,15 +822,18 @@ wxHitTest wxWindow::DoHitTest(wxCoord x, wxCoord y) const
 
 void wxWindow::RefreshScrollbars()
 {
+#if wxUSE_SCROLLBAR
     if ( m_scrollbarHorz )
         m_scrollbarHorz->Refresh();
 
     if ( m_scrollbarVert )
         m_scrollbarVert->Refresh();
+#endif // wxUSE_SCROLLBAR
 }
 
 void wxWindow::PositionScrollbars()
 {
+#if wxUSE_SCROLLBAR
     // do not use GetClientSize/Rect as it relies on the scrollbars being
     // correctly positioned
 
@@ -838,6 +879,7 @@ void wxWindow::PositionScrollbars()
     }
 
     RefreshScrollbars();
+#endif // wxUSE_SCROLLBAR
 }
 
 void wxWindow::SetScrollbar(int orient,
@@ -846,6 +888,7 @@ void wxWindow::SetScrollbar(int orient,
                             int range,
                             bool refresh)
 {
+#if wxUSE_SCROLLBAR
     wxASSERT_MSG( pageSize <= range,
                     _T("page size can't be greater than range") );
 
@@ -926,14 +969,22 @@ void wxWindow::SetScrollbar(int orient,
         (void)GetEventHandler()->ProcessEvent(event);
 #endif
     }
+#else
+    wxUnusedVar(orient);
+    wxUnusedVar(pos);
+    wxUnusedVar(pageSize);
+    wxUnusedVar(range);
+    wxUnusedVar(refresh);
+#endif // wxUSE_SCROLLBAR
 }
 
 void wxWindow::SetScrollPos(int orient, int pos, bool WXUNUSED(refresh))
 {
+#if wxUSE_SCROLLBAR
     wxScrollBar *scrollbar = GetScrollbar(orient);
-    wxCHECK_RET( scrollbar, _T("no scrollbar to set position for") );
 
-    scrollbar->SetThumbPosition(pos);
+    if (scrollbar)
+        scrollbar->SetThumbPosition(pos);
 
     // VZ: I think we can safely ignore this as we always refresh it
     //     automatically whenever the value chanegs
@@ -941,24 +992,43 @@ void wxWindow::SetScrollPos(int orient, int pos, bool WXUNUSED(refresh))
     if ( refresh )
         Refresh();
 #endif
+#else
+    wxUnusedVar(orient);
+    wxUnusedVar(pos);
+#endif // wxUSE_SCROLLBAR
 }
 
 int wxWindow::GetScrollPos(int orient) const
 {
+#if wxUSE_SCROLLBAR
     wxScrollBar *scrollbar = GetScrollbar(orient);
     return scrollbar ? scrollbar->GetThumbPosition() : 0;
+#else
+    wxUnusedVar(orient);
+    return 0;
+#endif // wxUSE_SCROLLBAR
 }
 
 int wxWindow::GetScrollThumb(int orient) const
 {
+#if wxUSE_SCROLLBAR
     wxScrollBar *scrollbar = GetScrollbar(orient);
     return scrollbar ? scrollbar->GetThumbSize() : 0;
+#else
+    wxUnusedVar(orient);
+    return 0;
+#endif // wxUSE_SCROLLBAR
 }
 
 int wxWindow::GetScrollRange(int orient) const
 {
+#if wxUSE_SCROLLBAR
     wxScrollBar *scrollbar = GetScrollbar(orient);
     return scrollbar ? scrollbar->GetRange() : 0;
+#else
+    wxUnusedVar(orient);
+    return 0;
+#endif // wxUSE_SCROLLBAR
 }
 
 void wxWindow::ScrollWindow(int dx, int dy, const wxRect *rect)
@@ -995,8 +1065,10 @@ void wxWindow::ScrollWindow(int dx, int dy, const wxRect *rect)
          node; node = node->GetNext())
     {
         wxWindow *child = node->GetData();
+#if wxUSE_SCROLLBAR
         if ( child == m_scrollbarVert || child == m_scrollbarHorz )
             continue;
+#endif // wxUSE_SCROLLBAR
 
         // VS: Scrolling children has non-trivial semantics. If rect=NULL then
         //     it is easy: we scroll all children. Otherwise it gets