X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/a91b47e800c78dbf8e91191ce3977d148a13f1fe..0616b8382daeca5373484e5a22ec1f322c025c95:/src/generic/scrolwin.cpp diff --git a/src/generic/scrolwin.cpp b/src/generic/scrolwin.cpp index 139f45ed39..8078c767b4 100644 --- a/src/generic/scrolwin.cpp +++ b/src/generic/scrolwin.cpp @@ -25,15 +25,16 @@ #endif #include "wx/generic/scrolwin.h" +#include "wx/panel.h" #if !USE_SHARED_LIBRARY -BEGIN_EVENT_TABLE(wxScrolledWindow, wxWindow) - EVT_SCROLL(wxScrolledWindow::OnScroll) +BEGIN_EVENT_TABLE(wxScrolledWindow, wxPanel) + EVT_SCROLLWIN(wxScrolledWindow::OnScroll) EVT_SIZE(wxScrolledWindow::OnSize) EVT_PAINT(wxScrolledWindow::OnPaint) END_EVENT_TABLE() -IMPLEMENT_DYNAMIC_CLASS(wxScrolledWindow, wxWindow) +IMPLEMENT_DYNAMIC_CLASS(wxScrolledWindow, wxPanel) #endif #ifdef __WXMSW__ @@ -45,7 +46,7 @@ IMPLEMENT_DYNAMIC_CLASS(wxScrolledWindow, wxWindow) #include #endif -wxScrolledWindow::wxScrolledWindow(void) +wxScrolledWindow::wxScrolledWindow() { m_xScrollPixelsPerLine = 0; m_yScrollPixelsPerLine = 0; @@ -80,7 +81,7 @@ bool wxScrolledWindow::Create(wxWindow *parent, wxWindowID id, m_scaleX = 1.0; m_scaleY = 1.0; - return wxWindow::Create(parent, id, pos, size, style, name); + return wxPanel::Create(parent, id, pos, size, style, name); } /* @@ -94,9 +95,9 @@ void wxScrolledWindow::SetScrollbars (int pixelsPerUnitX, int pixelsPerUnitY, bool do_refresh = ( (noUnitsX != 0 && m_xScrollLines == 0) || - (noUnitsX < m_xScrollPosition) || + (noUnitsX < m_xScrollLines) || (noUnitsY != 0 && m_yScrollLines == 0) || - (noUnitsY < m_yScrollPosition) || + (noUnitsY < m_yScrollLines) || (xPos != m_xScrollPosition) || (yPos != m_yScrollPosition) || (pixelsPerUnitX != m_xScrollPixelsPerLine) || @@ -145,7 +146,8 @@ void wxScrolledWindow::SetScrollbars (int pixelsPerUnitX, int pixelsPerUnitY, AdjustScrollbars(); - if (do_refresh && !noRefresh) Refresh(); + if (do_refresh && !noRefresh) + Refresh(); #ifdef __WXMSW__ // Necessary? @@ -153,7 +155,7 @@ void wxScrolledWindow::SetScrollbars (int pixelsPerUnitX, int pixelsPerUnitY, #endif } -void wxScrolledWindow::OnScroll(wxScrollEvent& event) +void wxScrolledWindow::OnScroll(wxScrollWinEvent& event) { int orient = event.GetOrientation(); @@ -196,7 +198,7 @@ void wxScrolledWindow::OnScroll(wxScrollEvent& event) } } -int wxScrolledWindow::CalcScrollInc(wxScrollEvent& event) +int wxScrolledWindow::CalcScrollInc(wxScrollWinEvent& event) { int pos = event.GetPosition(); int orient = event.GetOrientation(); @@ -204,7 +206,7 @@ int wxScrolledWindow::CalcScrollInc(wxScrollEvent& event) int nScrollInc = 0; switch (event.GetEventType()) { - case wxEVT_SCROLL_TOP: + case wxEVT_SCROLLWIN_TOP: { if (orient == wxHORIZONTAL) nScrollInc = - m_xScrollPosition; @@ -212,7 +214,7 @@ int wxScrolledWindow::CalcScrollInc(wxScrollEvent& event) nScrollInc = - m_yScrollPosition; break; } - case wxEVT_SCROLL_BOTTOM: + case wxEVT_SCROLLWIN_BOTTOM: { if (orient == wxHORIZONTAL) nScrollInc = m_xScrollLines - m_xScrollPosition; @@ -220,17 +222,17 @@ int wxScrolledWindow::CalcScrollInc(wxScrollEvent& event) nScrollInc = m_yScrollLines - m_yScrollPosition; break; } - case wxEVT_SCROLL_LINEUP: + case wxEVT_SCROLLWIN_LINEUP: { nScrollInc = -1; break; } - case wxEVT_SCROLL_LINEDOWN: + case wxEVT_SCROLLWIN_LINEDOWN: { nScrollInc = 1; break; } - case wxEVT_SCROLL_PAGEUP: + case wxEVT_SCROLLWIN_PAGEUP: { if (orient == wxHORIZONTAL) nScrollInc = -GetScrollPageSize(wxHORIZONTAL); @@ -238,7 +240,7 @@ int wxScrolledWindow::CalcScrollInc(wxScrollEvent& event) nScrollInc = -GetScrollPageSize(wxVERTICAL); break; } - case wxEVT_SCROLL_PAGEDOWN: + case wxEVT_SCROLLWIN_PAGEDOWN: { if (orient == wxHORIZONTAL) nScrollInc = GetScrollPageSize(wxHORIZONTAL); @@ -246,7 +248,7 @@ int wxScrolledWindow::CalcScrollInc(wxScrollEvent& event) nScrollInc = GetScrollPageSize(wxVERTICAL); break; } - case wxEVT_SCROLL_THUMBTRACK: + case wxEVT_SCROLLWIN_THUMBTRACK: { if (orient == wxHORIZONTAL) nScrollInc = pos - m_xScrollPosition; @@ -388,12 +390,22 @@ void wxScrolledWindow::GetScrollUnitsPerPage (int *x_page, int *y_page) const *x_page = GetScrollPageSize(wxHORIZONTAL); *y_page = GetScrollPageSize(wxVERTICAL); } -#endif + +void wxScrolledWindow::CalcUnscrolledPosition(int x, int y, float *xx, float *yy) const +{ + if ( xx ) + *xx = (float)(x + m_xScrollPosition * m_xScrollPixelsPerLine); + if ( yy ) + *yy = (float)(y + m_yScrollPosition * m_yScrollPixelsPerLine); +} +#endif // WXWIN_COMPATIBILITY void wxScrolledWindow::GetScrollPixelsPerUnit (int *x_unit, int *y_unit) const { - *x_unit = m_xScrollPixelsPerLine; - *y_unit = m_yScrollPixelsPerLine; + if ( x_unit ) + *x_unit = m_xScrollPixelsPerLine; + if ( y_unit ) + *y_unit = m_yScrollPixelsPerLine; } int wxScrolledWindow::GetScrollPageSize(int orient) const @@ -456,7 +468,8 @@ void wxScrolledWindow::Scroll( int x_pos, int y_pos ) SetScrollPos( wxVERTICAL, m_yScrollPosition, TRUE ); } - Refresh(); + // BAD, BAD, can cause event loops if called from OnPaint(). KB. + // Refresh(); #ifdef __WXMSW__ // Necessary? @@ -472,27 +485,33 @@ void wxScrolledWindow::EnableScrolling (bool x_scroll, bool y_scroll) void wxScrolledWindow::GetVirtualSize (int *x, int *y) const { - *x = m_xScrollPixelsPerLine * m_xScrollLines; - *y = m_yScrollPixelsPerLine * m_yScrollLines; + if ( x ) + *x = m_xScrollPixelsPerLine * m_xScrollLines; + if ( y ) + *y = m_yScrollPixelsPerLine * m_yScrollLines; } // Where the current view starts from void wxScrolledWindow::ViewStart (int *x, int *y) const { - *x = m_xScrollPosition; - *y = m_yScrollPosition; + if ( x ) + *x = m_xScrollPosition; + if ( y ) + *y = m_yScrollPosition; } void wxScrolledWindow::CalcScrolledPosition(int x, int y, int *xx, int *yy) const { - *xx = x - m_xScrollPosition * m_xScrollPixelsPerLine; - *yy = y - m_yScrollPosition * m_yScrollPixelsPerLine; + if ( xx ) + *xx = x - m_xScrollPosition * m_xScrollPixelsPerLine; + if ( yy ) + *yy = y - m_yScrollPosition * m_yScrollPixelsPerLine; } -void wxScrolledWindow::CalcUnscrolledPosition(int x, int y, float *xx, float *yy) const +void wxScrolledWindow::CalcUnscrolledPosition(int x, int y, int *xx, int *yy) const { - *xx = (float)(x + m_xScrollPosition * m_xScrollPixelsPerLine); - *yy = (float)(y + m_yScrollPosition * m_yScrollPixelsPerLine); + if ( xx ) + *xx = x + m_xScrollPosition * m_xScrollPixelsPerLine; + if ( yy ) + *yy = y + m_yScrollPosition * m_yScrollPixelsPerLine; } - -