#include "wx/utils.h"
#include "wx/dcclient.h"
-#ifdef __WINDOWS__
+#ifdef __WXMSW__
#include "windows.h"
#endif
m_yScrollLines = 0;
m_xScrollLinesPerPage = 0;
m_yScrollLinesPerPage = 0;
+ m_scaleX = 1.0;
+ m_scaleY = 1.0;
}
-bool wxScrolledWindow::Create(wxWindow *parent, const wxWindowID id,
+bool wxScrolledWindow::Create(wxWindow *parent, wxWindowID id,
const wxPoint& pos,
const wxSize& size,
- const long style,
+ long style,
const wxString& name)
{
m_xScrollPixelsPerLine = 0;
m_yScrollLines = 0;
m_xScrollLinesPerPage = 0;
m_yScrollLinesPerPage = 0;
+ m_scaleX = 1.0;
+ m_scaleY = 1.0;
return wxWindow::Create(parent, id, pos, size, style, name);
}
* pixelsPerUnitX/pixelsPerUnitY: number of pixels per unit (e.g. pixels per text line)
* noUnitsX/noUnitsY: : no. units per scrollbar
*/
-void wxScrolledWindow::SetScrollbars (const int pixelsPerUnitX, const int pixelsPerUnitY,
- const int noUnitsX, const int noUnitsY,
- const int xPos, const int yPos, const bool noRefresh )
+void wxScrolledWindow::SetScrollbars (int pixelsPerUnitX, int pixelsPerUnitY,
+ int noUnitsX, int noUnitsY,
+ int xPos, int yPos, bool noRefresh )
{
bool do_refresh =
(
m_xScrollPixelsPerLine = pixelsPerUnitX;
m_yScrollPixelsPerLine = pixelsPerUnitY;
+ m_xScrollPosition = xPos;
+ m_yScrollPosition = yPos;
m_xScrollLines = noUnitsX;
m_yScrollLines = noUnitsY;
-
+
AdjustScrollbars();
if (do_refresh && !noRefresh) Refresh();
-#ifdef __WINDOWS__
+#ifdef __WXMSW__
UpdateWindow ((HWND) GetHWND());
#endif
}
if (orient == wxHORIZONTAL)
{
if (m_xScrollingEnabled)
- ScrollWindow(-m_xScrollPixelsPerLine * nScrollInc, 0, NULL);
+ ScrollWindow(-m_xScrollPixelsPerLine * nScrollInc, 0, (const wxRect *) NULL);
else
Refresh();
}
else
{
if (m_yScrollingEnabled)
- ScrollWindow(0, -m_yScrollPixelsPerLine * nScrollInc, NULL);
+ ScrollWindow(0, -m_yScrollPixelsPerLine * nScrollInc, (const wxRect *) NULL);
else
Refresh();
}
}
if (orient == wxHORIZONTAL)
{
- int w, h;
- GetClientSize(&w, &h);
-
- int nMaxWidth = m_xScrollLines*m_xScrollPixelsPerLine;
- int noPositions = (int) ( ((nMaxWidth - w)/(float)m_xScrollPixelsPerLine) + 0.5 );
- if (noPositions < 0)
- noPositions = 0;
-
- if ( (m_xScrollPosition + nScrollInc) < 0 )
- nScrollInc = -m_xScrollPosition; // As -ve as we can go
- else if ( (m_xScrollPosition + nScrollInc) > noPositions )
- nScrollInc = noPositions - m_xScrollPosition; // As +ve as we can go
-
- return nScrollInc;
+ if (m_xScrollPixelsPerLine > 0) {
+ int w, h;
+ GetClientSize(&w, &h);
+
+ int nMaxWidth = m_xScrollLines*m_xScrollPixelsPerLine;
+ int noPositions = (int) ( ((nMaxWidth - w)/(float)m_xScrollPixelsPerLine) + 0.5 );
+ if (noPositions < 0)
+ noPositions = 0;
+
+ if ( (m_xScrollPosition + nScrollInc) < 0 )
+ nScrollInc = -m_xScrollPosition; // As -ve as we can go
+ else if ( (m_xScrollPosition + nScrollInc) > noPositions )
+ nScrollInc = noPositions - m_xScrollPosition; // As +ve as we can go
+ }
+ else
+ Refresh();
}
else
{
- int w, h;
- GetClientSize(&w, &h);
-
- int nMaxHeight = m_yScrollLines*m_yScrollPixelsPerLine;
- int noPositions = (int) ( ((nMaxHeight - h)/(float)m_yScrollPixelsPerLine) + 0.5 );
- if (noPositions < 0)
- noPositions = 0;
-
- if ( (m_yScrollPosition + nScrollInc) < 0 )
- nScrollInc = -m_yScrollPosition; // As -ve as we can go
- else if ( (m_yScrollPosition + nScrollInc) > noPositions )
- nScrollInc = noPositions - m_yScrollPosition; // As +ve as we can go
-
- return nScrollInc;
+ if (m_yScrollPixelsPerLine > 0) {
+ int w, h;
+ GetClientSize(&w, &h);
+
+ int nMaxHeight = m_yScrollLines*m_yScrollPixelsPerLine;
+ int noPositions = (int) ( ((nMaxHeight - h)/(float)m_yScrollPixelsPerLine) + 0.5 );
+ if (noPositions < 0)
+ noPositions = 0;
+
+ if ( (m_yScrollPosition + nScrollInc) < 0 )
+ nScrollInc = -m_yScrollPosition; // As -ve as we can go
+ else if ( (m_yScrollPosition + nScrollInc) > noPositions )
+ nScrollInc = noPositions - m_yScrollPosition; // As +ve as we can go
+ }
+ else
+ Refresh();
}
+
+ return nScrollInc;
}
// Adjust the scrollbars - new version.
// Default OnSize resets scrollbars, if any
void wxScrolledWindow::OnSize(wxSizeEvent& WXUNUSED(event))
{
-#if USE_CONSTRAINTS
+#if wxUSE_CONSTRAINTS
if (GetAutoLayout())
Layout();
#endif
void wxScrolledWindow::PrepareDC(wxDC& dc)
{
dc.SetDeviceOrigin(- m_xScrollPosition * m_xScrollPixelsPerLine, - m_yScrollPosition * m_yScrollPixelsPerLine);
+ dc.SetUserScale(m_scaleX, m_scaleY);
}
#if WXWIN_COMPATIBILITY
/*
* Scroll to given position (scroll position, not pixel position)
*/
-void wxScrolledWindow::Scroll (const int x_pos, const int y_pos)
+void wxScrolledWindow::Scroll (int x_pos, int y_pos)
{
int old_x, old_y;
ViewStart (&old_x, &old_y);
SetScrollPos (wxVERTICAL, y_pos, TRUE);
}
Refresh();
-#ifdef __WINDOWS__
+#ifdef __WXMSW__
::UpdateWindow ((HWND) GetHWND());
#endif
}
-void wxScrolledWindow::EnableScrolling (const bool x_scroll, const bool y_scroll)
+void wxScrolledWindow::EnableScrolling (bool x_scroll, bool y_scroll)
{
m_xScrollingEnabled = x_scroll;
m_yScrollingEnabled = y_scroll;
*y = m_yScrollPosition;
}
-void wxScrolledWindow::CalcScrolledPosition(const int x, const int y, int *xx, int *yy) const
+void wxScrolledWindow::CalcScrolledPosition(int x, int y, int *xx, int *yy) const
{
*xx = x - m_xScrollPosition * m_xScrollPixelsPerLine;
*yy = y - m_yScrollPosition * m_yScrollPixelsPerLine;
}
-void wxScrolledWindow::CalcUnscrolledPosition(const int x, const int y, float *xx, float *yy) const
+void wxScrolledWindow::CalcUnscrolledPosition(int x, int y, float *xx, float *yy) const
{
*xx = (float)(x + m_xScrollPosition * m_xScrollPixelsPerLine);
*yy = (float)(y + m_yScrollPosition * m_yScrollPixelsPerLine);