From 639aa5b39bb76d1b2b7d9b3228903207498d43ee Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jaakko=20Ker=C3=A4nen?= Date: Fri, 22 Apr 2016 10:22:59 +0300 Subject: [PATCH] UI|Home: Smoothly animate heights of menu items --- .../client/src/ui/home/panelbuttonwidget.cpp | 6 +++--- .../client/src/ui/widgets/homeitemwidget.cpp | 16 +++++++++------- 2 files changed, 12 insertions(+), 10 deletions(-) diff --git a/doomsday/apps/client/src/ui/home/panelbuttonwidget.cpp b/doomsday/apps/client/src/ui/home/panelbuttonwidget.cpp index eee11ab8cc..c2c49d1cc4 100644 --- a/doomsday/apps/client/src/ui/home/panelbuttonwidget.cpp +++ b/doomsday/apps/client/src/ui/home/panelbuttonwidget.cpp @@ -38,11 +38,11 @@ PanelButtonWidget::PanelButtonWidget(String const &name) setBehavior(Focusable); d->drawer->rule() - .setInput(Rule::Top, label().rule().bottom()) + .setInput(Rule::Top, icon().rule().bottom()) .setInput(Rule::Left, rule().left()); - rule().setInput(Rule::Height, label().rule().height() + - d->drawer->rule().height()); + rule().setInput(Rule::Height, new AnimationRule(label().rule().height() + + d->drawer->rule().height(), 0.3)); } PanelWidget &PanelButtonWidget::panel() diff --git a/doomsday/apps/client/src/ui/widgets/homeitemwidget.cpp b/doomsday/apps/client/src/ui/widgets/homeitemwidget.cpp index e99dffb30c..c49fed7f4f 100644 --- a/doomsday/apps/client/src/ui/widgets/homeitemwidget.cpp +++ b/doomsday/apps/client/src/ui/widgets/homeitemwidget.cpp @@ -186,21 +186,23 @@ HomeItemWidget::HomeItemWidget(String const &name) : GuiWidget(name) , d(new Instance(this)) { - setBehavior(Focusable); + setBehavior(Focusable | ContentClipping); addEventHandler(new Instance::ClickHandler(*this)); Rule const &iconSize = d->label->margins().height() + style().fonts().font("default").height() + style().fonts().font("default").lineSpacing(); + AutoRef smoothHeight(new AnimationRule(d->label->rule().height(), 0.3)); + d->background->rule() .setInput(Rule::Top, rule().top()) + .setInput(Rule::Height, smoothHeight) .setInput(Rule::Left, d->icon->rule().right()) - .setInput(Rule::Right, rule().right()) - .setInput(Rule::Bottom, d->label->rule().bottom()); + .setInput(Rule::Right, rule().right()); d->icon->rule() - .setSize(iconSize, d->label->rule().height()) + .setSize(iconSize, smoothHeight) .setInput(Rule::Left, rule().left()) .setInput(Rule::Top, rule().top()); d->icon->set(Background(Background::BorderGlow, @@ -210,10 +212,10 @@ HomeItemWidget::HomeItemWidget(String const &name) .setInput(Rule::Top, rule().top()) .setInput(Rule::Left, d->icon->rule().right()) .setInput(Rule::Right, rule().right()); - d->label->margins().setRight(*d->labelRightMargin + - rule("gap")); + d->label->margins().setRight(*d->labelRightMargin + rule("gap")); - rule().setInput(Rule::Height, d->label->rule().height()); + // Use an animated height rule for smoother list layout behavior. + rule().setInput(Rule::Height, smoothHeight); } AssetGroup &HomeItemWidget::assets()