X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/de6185e212ebc37ff11ff70278e3c4f68419b097..47e59154157bb013ce255a4efa7a615574c974f7:/src/generic/scrlwing.cpp?ds=sidebyside diff --git a/src/generic/scrlwing.cpp b/src/generic/scrlwing.cpp index 69c534470d..ad1b381399 100644 --- a/src/generic/scrlwing.cpp +++ b/src/generic/scrlwing.cpp @@ -1,5 +1,5 @@ ///////////////////////////////////////////////////////////////////////////// -// Name: src/generic/scrolwin.cpp +// Name: src/generic/scrlwing.cpp // Purpose: wxScrolledWindow implementation // Author: Julian Smart // Modified by: Vadim Zeitlin on 31.08.00: wxScrollHelper allows to implement. @@ -33,15 +33,14 @@ #ifndef WX_PRECOMP #include "wx/utils.h" + #include "wx/panel.h" + #include "wx/dcclient.h" + #if wxUSE_TIMER + #include "wx/timer.h" + #endif + #include "wx/sizer.h" #endif -#include "wx/dcclient.h" - -#include "wx/panel.h" -#if wxUSE_TIMER -#include "wx/timer.h" -#endif -#include "wx/sizer.h" #include "wx/recguard.h" #ifdef __WXMSW__ @@ -937,7 +936,33 @@ void wxScrollHelper::GetViewStart (int *x, int *y) const void wxScrollHelper::DoCalcScrolledPosition(int x, int y, int *xx, int *yy) const { if ( xx ) - *xx = x - m_xScrollPosition * m_xScrollPixelsPerLine; + { + if ((m_xScrollLines == 0) || (m_xScrollPixelsPerLine == 0)) + { + // nothing to do + *xx = x; + } + else + { +#ifdef __WXGTK__ + if (m_win->GetLayoutDirection() == wxLayout_RightToLeft) + { + int w = 0, h = 0; + GetTargetSize(&w, &h); + + // Calculate page size i.e. number of scroll units you get on the + // current client window + int noPagePositions = w/m_xScrollPixelsPerLine; + if (noPagePositions < 1) noPagePositions = 1; + *xx = x - ((m_xScrollLines - noPagePositions - m_xScrollPosition) * m_xScrollPixelsPerLine); + } + else +#endif + { + *xx = x - m_xScrollPosition * m_xScrollPixelsPerLine; + } + } + } if ( yy ) *yy = y - m_yScrollPosition * m_yScrollPixelsPerLine; } @@ -945,7 +970,33 @@ void wxScrollHelper::DoCalcScrolledPosition(int x, int y, int *xx, int *yy) cons void wxScrollHelper::DoCalcUnscrolledPosition(int x, int y, int *xx, int *yy) const { if ( xx ) - *xx = x + m_xScrollPosition * m_xScrollPixelsPerLine; + { + if ((m_xScrollLines == 0) || (m_xScrollPixelsPerLine == 0)) + { + // nothing to do + *xx = x; + } + else + { +#ifdef __WXGTK__ + if (m_win->GetLayoutDirection() == wxLayout_RightToLeft) + { + int w = 0, h = 0; + GetTargetSize(&w, &h); + + // Calculate page size i.e. number of scroll units you get on the + // current client window + int noPagePositions = w/m_xScrollPixelsPerLine; + if (noPagePositions < 1) noPagePositions = 1; + *xx = x + ((m_xScrollLines - noPagePositions - m_xScrollPosition) * m_xScrollPixelsPerLine); + } + else +#endif + { + *xx = x + m_xScrollPosition * m_xScrollPixelsPerLine; + } + } + } if ( yy ) *yy = y + m_yScrollPosition * m_yScrollPixelsPerLine; }