///////////////////////////////////////////////////////////////////////////////
-// Name: univ/window.cpp
+// Name: src/univ/window.cpp
// Purpose: implementation of extra wxWindow methods for wxUniv port
// Author: Vadim Zeitlin
// Modified by:
#pragma hdrstop
#endif
+#include "wx/window.h"
+
#ifndef WX_PRECOMP
#include "wx/app.h"
- #include "wx/window.h"
#include "wx/dcclient.h"
#include "wx/dcmemory.h"
#include "wx/event.h"
#include "wx/scrolbar.h"
#include "wx/menu.h"
#include "wx/frame.h"
+ #include "wx/log.h"
#endif // WX_PRECOMP
-#include "wx/log.h"
#include "wx/univ/colschem.h"
#include "wx/univ/renderer.h"
#include "wx/univ/theme.h"
void wxWindow::Init()
{
+#if wxUSE_SCROLLBAR
m_scrollbarVert =
m_scrollbarHorz = (wxScrollBar *)NULL;
+#endif // wxUSE_SCROLLBAR
m_isCurrent = false;
#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
#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;
}
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() )
if ( scrollbar )
rect.height -= scrollbar->GetSize().y;
}
+#endif // wxUSE_SCROLLBAR
// get the DC and draw the border on it
wxWindowDC dc(this);
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 )
m_renderer->DrawScrollCorner(*event.GetDC(), rectCorner);
}
}
+#endif // wxUSE_SCROLLBAR
}
bool wxWindow::DoDrawBackground(wxDC& dc)
bool wxWindow::IsFocused() const
{
- wxWindow *self = wxConstCast(this, wxWindow);
- return self->FindFocus() == self;
+ return FindFocus() == this;
}
bool wxWindow::IsPressed() const
{
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
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
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;
// 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);
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 )
: wxHT_WINDOW_HORZ_SCROLLBAR;
}
}
+#endif // wxUSE_SCROLLBAR
return ht;
}
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
}
RefreshScrollbars();
+#endif // wxUSE_SCROLLBAR
}
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") );
(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
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)
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
}
#endif // __WXMSW__
-