- if (orient == wxHORIZONTAL)
- {
- int max = (int)(m_hAdjust->upper - m_hAdjust->page_size + 0.5);
- if (max < 0) max = 0;
-
- if (pos > max) pos = 0;
- if (pos < 0) pos = 0;
-
- if (pos == (int)(m_hAdjust->value+0.5)) return;
- m_hAdjust->value = pos;
- }
- else
- {
- int max = (int)(m_vAdjust->upper - m_vAdjust->page_size + 0.5);
- if (max < 0) max = 0;
-
- if (pos > max) pos = 0;
- if (pos < 0) pos = 0;
-
- if (pos == (int)(m_vAdjust->value+0.5)) return;
- m_vAdjust->value = pos;
- }
-
- if (m_wxwindow->window)
- {
- if (orient == wxHORIZONTAL)
- {
- // Just update the scrollbar, don't send any wxWindows event
- GtkHDisconnectEvent();
- gtk_signal_emit_by_name( GTK_OBJECT(m_hAdjust), "value_changed" );
- GtkHConnectEvent();
- }
- else
- {
- // Just update the scrollbar, don't send any wxWindows event
- GtkVDisconnectEvent();
- gtk_signal_emit_by_name( GTK_OBJECT(m_vAdjust), "value_changed" );
- GtkVConnectEvent();
- }
- }
-}
-
-void wxScrolledWindow::GtkVConnectEvent()
-{
- gtk_signal_connect( GTK_OBJECT(m_vAdjust), "value_changed",
- (GtkSignalFunc) gtk_scrolled_window_vscroll_callback, (gpointer) this );
-}
-
-void wxScrolledWindow::GtkHConnectEvent()
-{
- gtk_signal_connect( GTK_OBJECT(m_hAdjust), "value_changed",
- (GtkSignalFunc) gtk_scrolled_window_hscroll_callback, (gpointer) this );
-}
-
-void wxScrolledWindow::GtkHDisconnectEvent()
-{
- gtk_signal_disconnect_by_func( GTK_OBJECT(m_hAdjust),
- (GtkSignalFunc) gtk_scrolled_window_hscroll_callback, (gpointer) this );
-}
-
-void wxScrolledWindow::GtkVDisconnectEvent()
-{
- gtk_signal_disconnect_by_func( GTK_OBJECT(m_vAdjust),
- (GtkSignalFunc) gtk_scrolled_window_vscroll_callback, (gpointer) this );
-}
-
-// ----------------------------------------------------------------------------
-// event handlers
-// ----------------------------------------------------------------------------
-
-// Default OnSize resets scrollbars, if any
-void wxScrolledWindow::OnSize(wxSizeEvent& WXUNUSED(event))
-{
-#if wxUSE_CONSTRAINTS
- if (GetAutoLayout())
- Layout();
-#endif
-
- AdjustScrollbars();
-}
-
-// This calls OnDraw, having adjusted the origin according to the current
-// scroll position
-void wxScrolledWindow::OnPaint(wxPaintEvent& WXUNUSED(event))
-{
- wxPaintDC dc(this);
- PrepareDC(dc);
-
- OnDraw(dc);
-}
-
-// kbd handling: notice that we use OnChar() and not OnKeyDown() for
-// compatibility here - if we used OnKeyDown(), the programs which process
-// arrows themselves in their OnChar() would never get the message and like
-// this they always have the priority
-void wxScrolledWindow::OnChar(wxKeyEvent& event)
-{
- int stx, sty, // view origin
- szx, szy, // view size (total)
- clix, cliy; // view size (on screen)
-
- ViewStart(&stx, &sty);
- GetClientSize(&clix, &cliy);
- GetVirtualSize(&szx, &szy);
-
- if( m_xScrollPixelsPerLine )
- {
- clix /= m_xScrollPixelsPerLine;
- szx /= m_xScrollPixelsPerLine;
- }
- else
- {
- clix = 0;
- szx = -1;
- }
- if( m_yScrollPixelsPerLine )
- {
- cliy /= m_yScrollPixelsPerLine;
- szy /= m_yScrollPixelsPerLine;
- }
- else
- {
- cliy = 0;
- szy = -1;
- }
-
- int dsty;
- switch ( event.KeyCode() )
- {
- case WXK_PAGEUP:
- case WXK_PRIOR:
- dsty = sty - (5 * cliy / 6);
- Scroll(-1, (dsty == -1) ? 0 : dsty);
- break;
-
- case WXK_PAGEDOWN:
- case WXK_NEXT:
- Scroll(-1, sty + (5 * cliy / 6));
- break;
-
- case WXK_HOME:
- Scroll(0, event.ControlDown() ? 0 : -1);
- break;
-
- case WXK_END:
- Scroll(szx - clix, event.ControlDown() ? szy - cliy : -1);
- break;
-
- case WXK_UP:
- Scroll(-1, sty - 1);
- break;
-
- case WXK_DOWN:
- Scroll(-1, sty + 1);
- break;
-
- case WXK_LEFT:
- Scroll(stx - 1, -1);
- break;
-
- case WXK_RIGHT:
- Scroll(stx + 1, -1);
- break;
-
- default:
- // not for us
- event.Skip();
- }