From a45cc0a048cceab8b6ea35bb505d3066f2843651 Mon Sep 17 00:00:00 2001 From: "Jasper St. Pierre" Date: Mon, 12 Aug 2013 08:36:38 -0400 Subject: [PATCH] panel: Use an hbox to lay out the app menu contents This will make it easier to add the arrow to the app menu without having to do the allocation logic ourselves. https://bugzilla.gnome.org/show_bug.cgi?id=705845 --- js/ui/panel.js | 40 +++++++++++++--------------------------- 1 file changed, 13 insertions(+), 27 deletions(-) diff --git a/js/ui/panel.js b/js/ui/panel.js index 55c991929..27456f718 100644 --- a/js/ui/panel.js +++ b/js/ui/panel.js @@ -207,8 +207,13 @@ const AppMenuButton = new Lang.Class({ this._iconBox.connect('notify::allocation', Lang.bind(this, this._updateIconBoxClip)); this._container.add_actor(this._iconBox); + + this._hbox = new St.BoxLayout(); + this._container.add_actor(this._hbox); + this._label = new TextShadower(); - this._container.add_actor(this._label.actor); + this._label.actor.y_align = Clutter.ActorAlign.CENTER; + this._hbox.add_actor(this._label.actor); this._iconBottomClip = 0; @@ -286,9 +291,8 @@ const AppMenuButton = new Lang.Class({ return; this._spinnerIcon = icon; this._spinner = new Animation.AnimatedIcon(this._spinnerIcon, PANEL_ICON_SIZE); - this._container.add_actor(this._spinner.actor); + this._hbox.add_actor(this._spinner.actor); this._spinner.actor.hide(); - this._spinner.actor.lower_bottom(); }, _onIconBoxStyleChanged: function() { @@ -357,7 +361,7 @@ const AppMenuButton = new Lang.Class({ let [minSize, naturalSize] = this._iconBox.get_preferred_width(forHeight); alloc.min_size = minSize; alloc.natural_size = naturalSize; - [minSize, naturalSize] = this._label.actor.get_preferred_width(forHeight); + [minSize, naturalSize] = this._hbox.get_preferred_width(forHeight); alloc.min_size = alloc.min_size + Math.max(0, minSize - Math.floor(alloc.min_size / 2)); alloc.natural_size = alloc.natural_size + Math.max(0, naturalSize - Math.floor(alloc.natural_size / 2)); }, @@ -366,7 +370,7 @@ const AppMenuButton = new Lang.Class({ let [minSize, naturalSize] = this._iconBox.get_preferred_height(forWidth); alloc.min_size = minSize; alloc.natural_size = naturalSize; - [minSize, naturalSize] = this._label.actor.get_preferred_height(forWidth); + [minSize, naturalSize] = this._hbox.get_preferred_height(forWidth); if (minSize > alloc.min_size) alloc.min_size = minSize; if (naturalSize > alloc.natural_size) @@ -396,11 +400,10 @@ const AppMenuButton = new Lang.Class({ let iconWidth = childBox.x2 - childBox.x1; - [minWidth, minHeight, naturalWidth, naturalHeight] = this._label.actor.get_preferred_size(); + [minWidth, naturalWidth] = this._hbox.get_preferred_width(-1); - yPadding = Math.floor(Math.max(0, allocHeight - naturalHeight) / 2); - childBox.y1 = yPadding; - childBox.y2 = childBox.y1 + Math.min(naturalHeight, allocHeight); + childBox.y1 = 0; + childBox.y2 = allocHeight; if (direction == Clutter.TextDirection.LTR) { childBox.x1 = Math.floor(iconWidth / 2); @@ -409,24 +412,7 @@ const AppMenuButton = new Lang.Class({ childBox.x2 = allocWidth - Math.floor(iconWidth / 2); childBox.x1 = Math.max(0, childBox.x2 - naturalWidth); } - this._label.actor.allocate(childBox, flags); - - if (this._spinner == null) - return; - - if (direction == Clutter.TextDirection.LTR) { - childBox.x1 = Math.floor(iconWidth / 2) + this._label.actor.width; - childBox.x2 = childBox.x1 + this._spinner.actor.width; - childBox.y1 = box.y1; - childBox.y2 = box.y2 - 1; - this._spinner.actor.allocate(childBox, flags); - } else { - childBox.x1 = -this._spinner.actor.width; - childBox.x2 = childBox.x1 + this._spinner.actor.width; - childBox.y1 = box.y1; - childBox.y2 = box.y2 - 1; - this._spinner.actor.allocate(childBox, flags); - } + this._hbox.allocate(childBox, flags); }, _onAppStateChanged: function(appSys, app) {