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:
parent
6d6ec46f25
commit
d15122c4b2
@ -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)
|
||||||
|
Loading…
Reference in New Issue
Block a user