scroll-view: Make scrollbar position locale aware

In RTL locales, the vertical scrollbar should be located on the
left, so take the widget's text direction into account when
allocating the view's elements.

https://bugzilla.gnome.org/show_bug.cgi?id=643156
This commit is contained in:
Florian Müllner 2011-02-24 01:34:44 +01:00
parent 6d6ec46f25
commit d15122c4b2

View File

@ -595,9 +595,17 @@ st_scroll_view_allocate (ClutterActor *actor,
/* Vertical scrollbar */ /* Vertical scrollbar */
if (CLUTTER_ACTOR_IS_VISIBLE (priv->vscroll)) if (CLUTTER_ACTOR_IS_VISIBLE (priv->vscroll))
{ {
child_box.x1 = content_box.x2 - sb_width; if (st_widget_get_direction (ST_WIDGET (actor)) == ST_TEXT_DIRECTION_RTL)
{
child_box.x1 = content_box.x1;
child_box.x2 = content_box.x1 + sb_width;
}
else
{
child_box.x1 = content_box.x2 - sb_width;
child_box.x2 = content_box.x2;
}
child_box.y1 = content_box.y1; child_box.y1 = content_box.y1;
child_box.x2 = content_box.x2;
child_box.y2 = content_box.y2 - (hscrollbar_visible ? sb_height : 0); child_box.y2 = content_box.y2 - (hscrollbar_visible ? sb_height : 0);
clutter_actor_allocate (priv->vscroll, &child_box, flags); clutter_actor_allocate (priv->vscroll, &child_box, flags);
@ -606,9 +614,17 @@ st_scroll_view_allocate (ClutterActor *actor,
/* Horizontal scrollbar */ /* Horizontal scrollbar */
if (CLUTTER_ACTOR_IS_VISIBLE (priv->hscroll)) if (CLUTTER_ACTOR_IS_VISIBLE (priv->hscroll))
{ {
child_box.x1 = content_box.x1; if (st_widget_get_direction (ST_WIDGET (actor)) == ST_TEXT_DIRECTION_RTL)
{
child_box.x1 = content_box.x1 + (vscrollbar_visible ? sb_width : 0);
child_box.x2 = content_box.x2;
}
else
{
child_box.x1 = content_box.x1;
child_box.x2 = content_box.x2 - (vscrollbar_visible ? sb_width : 0);
}
child_box.y1 = content_box.y2 - sb_height; child_box.y1 = content_box.y2 - sb_height;
child_box.x2 = content_box.x2 - (vscrollbar_visible ? sb_width : 0);
child_box.y2 = content_box.y2; child_box.y2 = content_box.y2;
clutter_actor_allocate (priv->hscroll, &child_box, flags); clutter_actor_allocate (priv->hscroll, &child_box, flags);
@ -623,9 +639,17 @@ st_scroll_view_allocate (ClutterActor *actor,
sb_width = 0; sb_width = 0;
/* Child */ /* Child */
child_box.x1 = content_box.x1; if (st_widget_get_direction (ST_WIDGET (actor)) == ST_TEXT_DIRECTION_RTL)
{
child_box.x1 = content_box.x1 + sb_width;
child_box.x2 = content_box.x2;
}
else
{
child_box.x1 = content_box.x1;
child_box.x2 = content_box.x2 - sb_width;
}
child_box.y1 = content_box.y1; child_box.y1 = content_box.y1;
child_box.x2 = content_box.x2 - sb_width;
child_box.y2 = content_box.y2 - sb_height; child_box.y2 = content_box.y2 - sb_height;
if (priv->child) if (priv->child)