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;
}
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;
}
if ((win->m_wxwindow) && (win->GetLayoutDirection() == wxLayout_RightToLeft))
{
// origin in the upper right corner
- int virtual_width = win->GetVirtualSize().x;
int window_width = gtk_pizza_get_rtl_offset( GTK_PIZZA(win->m_wxwindow) );
- //wxPrintf( wxT("event.m_x %d virtual_width %d window_width %d m_xoffset %d\n"),
- // event.m_x, virtual_width, window_width, GTK_PIZZA(win->m_wxwindow)->m_xoffset );
event.m_x = window_width - event.m_x;
}