+int wxSplitterWindow::GetWindowSize() const
+{
+ wxSize size = GetClientSize();
+
+ return m_splitMode == wxSPLIT_VERTICAL ? size.x : size.y;
+}
+
+int wxSplitterWindow::AdjustSashPosition(int sashPos) const
+{
+ int window_size = GetWindowSize();
+
+ // VZ: dirty fix, 20 is the initial window size under wxGTK, this is
+ // going to be replaced with the correct Vaclav's code soon (FIXME)
+ if ( window_size <= 20 )
+ {
+ // don't do anything before the window has a valid size, otherwise we
+ // put the sash to 0 at the very beginning and it doesn't move from
+ // there any more
+ return sashPos;
+ }
+
+ wxWindow *win;
+
+ win = GetWindow1();
+ if ( win )
+ {
+ // the window shouldn't be smaller than its own minimal size nor
+ // smaller than the minimual pane size specified for this splitter
+ int minSize = m_splitMode == wxSPLIT_VERTICAL ? win->GetMinWidth()
+ : win->GetMinHeight();
+
+ if ( minSize == -1 || m_minimumPaneSize > minSize )
+ minSize = m_minimumPaneSize;
+
+ minSize += GetBorderSize();
+
+ if ( sashPos < minSize )
+ sashPos = minSize;
+ }
+
+ win = GetWindow2();
+ if ( win )
+ {
+ int minSize = m_splitMode == wxSPLIT_VERTICAL ? win->GetMinWidth()
+ : win->GetMinHeight();
+
+ if ( minSize == -1 || m_minimumPaneSize > minSize )
+ minSize = m_minimumPaneSize;
+
+ int maxSize = window_size - minSize - GetBorderSize();
+ if ( sashPos > maxSize )
+ sashPos = maxSize;
+ }
+
+ return sashPos;
+}
+