# HG changeset patch # User sbr # Date 1375248446 -7200 # Wed Jul 31 07:27:26 2013 +0200 # Node ID 6c56ff28be2850152d879e0156f64771ba3858f2 # Parent b26cab0455824c202c1091ae9e4fa41419db9471 -Fix (r15819): Right-align NWidgetHorizontal children when drawing in RTL mode. diff --git a/src/widget.cpp b/src/widget.cpp --- a/src/widget.cpp +++ b/src/widget.cpp @@ -1247,17 +1247,18 @@ void NWidgetHorizontal::AssignSizePositi assert(num_changing_childs == 0); /* Third loop: Compute position and call the child. */ - uint position = 0; // Place to put next child relative to origin of the container. - NWidgetBase *child_wid = rtl ? this->tail : this->head; + uint position = rtl ? this->current_x : 0; // Place to put next child relative to origin of the container. + NWidgetBase *child_wid = this->head; while (child_wid != NULL) { uint child_width = child_wid->current_x; - uint child_x = x + position + (rtl ? child_wid->padding_right : child_wid->padding_left); + uint child_x = x + position + (rtl ? -child_width - child_wid->padding_left : child_wid->padding_left); uint child_y = y + child_wid->padding_top; child_wid->AssignSizePosition(sizing, child_x, child_y, child_width, child_wid->current_y, rtl); - position += child_width + child_wid->padding_right + child_wid->padding_left; + uint padded_child_width = child_width + child_wid->padding_right + child_wid->padding_left; + position += rtl ? -padded_child_width : padded_child_width; - child_wid = rtl ? child_wid->prev : child_wid->next; + child_wid = child_wid->next; } }