+void wxCanvas::ScrollWindow( int dx, int dy, const wxRect* rect )
+{
+ UpdateNow();
+
+ CalcUnscrolledPosition( 0, 0, &m_bufferX, &m_bufferY );
+
+ unsigned char* data = m_buffer.GetData();
+
+ if (dy != 0)
+ {
+ if (dy > 0)
+ {
+ unsigned char *source = data;
+ unsigned char *dest = data + (dy * m_buffer.GetWidth() * 3);
+ size_t count = (size_t) (m_buffer.GetWidth() * 3 * (m_buffer.GetHeight()-dy));
+ memmove( dest, source, count );
+
+ Update( m_bufferX, m_bufferY, m_buffer.GetWidth(), dy, FALSE );
+ }
+ else
+ {
+ unsigned char *dest = data;
+ unsigned char *source = data + (-dy * m_buffer.GetWidth() * 3);
+ size_t count = (size_t) (m_buffer.GetWidth() * 3 * (m_buffer.GetHeight()+dy));
+ memmove( dest, source, count );
+
+ Update( m_bufferX, m_bufferY+m_buffer.GetHeight()+dy, m_buffer.GetWidth(), -dy, FALSE );
+ }
+ }
+
+ if (dx != 0)
+ {
+ }
+
+ wxWindow::ScrollWindow( dx, dy, rect );
+}
+