diff options
| author | Nick Dedekind <nicholas.dedekind@gmail.com> | 2012-09-13 12:43:46 +0100 |
|---|---|---|
| committer | Nick Dedekind <nicholas.dedekind@gmail.com> | 2012-09-13 12:43:46 +0100 |
| commit | b2d39cdf4d9e3032d7cad6838043d9e3749b1dc1 (patch) | |
| tree | 6b4d074bd6b4cb05c951efdfe68aca9ad89cbe5d | |
| parent | 5bc7ab468221a113f4b9cf7114b62c27b830ae5a (diff) | |
Added extra-text to preview actions (for price tags).
(bzr r2684.2.1)
| -rw-r--r-- | dash/previews/ActionButton.cpp | 41 | ||||
| -rw-r--r-- | dash/previews/ActionButton.h | 6 | ||||
| -rw-r--r-- | dash/previews/Preview.cpp | 4 | ||||
| -rw-r--r-- | dash/previews/StandaloneApplicationPreview.cpp | 25 | ||||
| -rw-r--r-- | unity-shared/PreviewStyle.cpp | 9 | ||||
| -rw-r--r-- | unity-shared/PreviewStyle.h | 3 |
6 files changed, 76 insertions, 12 deletions
diff --git a/dash/previews/ActionButton.cpp b/dash/previews/ActionButton.cpp index 822697087..bdeb4260e 100644 --- a/dash/previews/ActionButton.cpp +++ b/dash/previews/ActionButton.cpp @@ -50,7 +50,7 @@ ActionButton::ActionButton(std::string const& action_hint, std::string const& la SetAcceptKeyNavFocusOnMouseDown(false); SetAcceptKeyNavFocusOnMouseEnter(false); Init(); - BuildLayout(label, icon_hint); + BuildLayout(label, icon_hint, ""); } ActionButton::~ActionButton() @@ -105,7 +105,19 @@ void ActionButton::InitTheme() SetMinimumWidth(kMinButtonWidth); } -void ActionButton::BuildLayout(std::string const& label, std::string const& icon_hint) +void ActionButton::SetExtraHint(std::string const& extra_hint, std::string const& font_hint) +{ + extra_font_hint_= font_hint; + if (extra_text_) + { + extra_text_->SetFont(extra_font_hint_); + ComputeContentSize(); + QueueDraw(); + } + BuildLayout(label_, icon_hint_, extra_hint); +} + +void ActionButton::BuildLayout(std::string const& label, std::string const& icon_hint, std::string const& extra_hint) { if (icon_hint != icon_hint_) { @@ -121,7 +133,7 @@ void ActionButton::BuildLayout(std::string const& label, std::string const& icon image_ = new IconTexture(icon_hint, icon_size); image_->texture_updated.connect([&](nux::BaseTexture*) { - BuildLayout(label_, icon_hint_); + BuildLayout(label_, icon_hint_, extra_hint_); }); image_->SetInputEventSensitivity(false); image_->SetMinMaxSize(icon_size, icon_size); @@ -147,16 +159,37 @@ void ActionButton::BuildLayout(std::string const& label, std::string const& icon } } + if (extra_hint != extra_hint_) + { + extra_hint_ = extra_hint; + if (extra_text_) + { + extra_text_.Release(); + extra_text_ = NULL; + } + + if (!extra_hint_.empty()) + { + extra_text_ = new nux::StaticCairoText(extra_hint_, true, NUX_TRACKER_LOCATION); + if (!extra_font_hint_.empty()) + extra_text_->SetFont(extra_font_hint_); + extra_text_->SetInputEventSensitivity(false); + extra_text_->SetTextAlignment(nux::StaticCairoText::NUX_ALIGN_CENTRE); + } + } + RemoveLayout(); nux::HLayout* layout = new nux::HLayout(); layout->SetHorizontalInternalMargin(6); - layout->SetPadding(2, 11, 2, 11); + layout->SetPadding(2, 0, 2, 0); layout->AddSpace(0,1); if (image_) layout->AddView(image_.GetPointer(), 1, nux::MINOR_POSITION_CENTER, nux::MINOR_SIZE_MATCHCONTENT); if (static_text_) layout->AddView(static_text_.GetPointer(), 1, nux::MINOR_POSITION_CENTER, nux::MINOR_SIZE_MATCHCONTENT); + if (extra_text_) + layout->AddView(extra_text_.GetPointer(), 1, nux::MINOR_POSITION_CENTER, nux::MINOR_SIZE_MATCHCONTENT); layout->AddSpace(0,1); SetLayout(layout); diff --git a/dash/previews/ActionButton.h b/dash/previews/ActionButton.h index 0abce4e67..c40cf72f4 100644 --- a/dash/previews/ActionButton.h +++ b/dash/previews/ActionButton.h @@ -49,6 +49,7 @@ public: sigc::signal<void, ActionButton*, std::string const&> click; void SetFont(std::string const& font_hint); + void SetExtraHint(std::string const& extra_hint, std::string const& font_hint); void Activate(); void Deactivate(); @@ -64,7 +65,7 @@ protected: void RedrawTheme(nux::Geometry const& geom, cairo_t* cr, nux::ButtonVisualState faked_state); void RedrawFocusOverlay(nux::Geometry const& geom, cairo_t* cr); - void BuildLayout(std::string const& label, std::string const& icon_hint); + void BuildLayout(std::string const& label, std::string const& icon_hint, std::string const& extra_hint); // From debug::Introspectable std::string GetName() const; @@ -83,9 +84,12 @@ private: std::string action_hint_; std::string icon_hint_; std::string font_hint_; + std::string extra_hint_; + std::string extra_font_hint_; nux::ObjectPtr<IconTexture> image_; nux::ObjectPtr<nux::StaticCairoText> static_text_; + nux::ObjectPtr<nux::StaticCairoText> extra_text_; }; } // namespace dash diff --git a/dash/previews/Preview.cpp b/dash/previews/Preview.cpp index 1185accf3..83104551a 100644 --- a/dash/previews/Preview.cpp +++ b/dash/previews/Preview.cpp @@ -136,6 +136,8 @@ nux::Layout* Preview::BuildGridActionsLayout(dash::Preview::ActionPtrList action dash::Preview::ActionPtr action = actions[action_iter]; ActionButton* button = new ActionButton(action->id, action->display_name, action->icon_hint, NUX_TRACKER_LOCATION); + button->SetFont(style.action_font()); + button->SetExtraHint(action->extra_text, style.action_extra_font()); AddChild(button); button->click.connect(sigc::mem_fun(this, &Preview::OnActionActivated)); buttons.push_back(button); @@ -168,6 +170,8 @@ nux::Layout* Preview::BuildVerticalActionsLayout(dash::Preview::ActionPtrList ac dash::Preview::ActionPtr action = actions[action_iter]; ActionButton* button = new ActionButton(action->id, action->display_name, action->icon_hint, NUX_TRACKER_LOCATION); + button->SetFont(style.action_font()); + button->SetExtraHint(action->extra_text, style.action_extra_font()); AddChild(button); button->click.connect(sigc::mem_fun(this, &Preview::OnActionActivated)); buttons.push_back(button); diff --git a/dash/previews/StandaloneApplicationPreview.cpp b/dash/previews/StandaloneApplicationPreview.cpp index f9873f0fa..324d35666 100644 --- a/dash/previews/StandaloneApplicationPreview.cpp +++ b/dash/previews/StandaloneApplicationPreview.cpp @@ -164,6 +164,9 @@ The service allows users to communicate with peers by voice, video, and instant glib::Object<GIcon> iconHint2(g_icon_new_for_string("/usr/share/unity/5/lens-nav-home.svg", NULL)); glib::Object<GIcon> iconHint3(g_icon_new_for_string("/usr/share/unity/5/lens-nav-people.svg", NULL)); + GHashTable* action_hints1(g_hash_table_new(g_direct_hash, g_direct_equal)); + g_hash_table_insert (action_hints1, g_strdup ("extra-text"), g_variant_new_string("£30.99")); + glib::Object<UnityProtocolPreview> proto_obj(UNITY_PROTOCOL_PREVIEW(unity_protocol_application_preview_new())); unity_protocol_application_preview_set_app_icon(UNITY_PROTOCOL_APPLICATION_PREVIEW(proto_obj.RawPtr()), g_icon_new_for_string("/home/nick/SkypeIcon.png", NULL)); @@ -173,13 +176,12 @@ The service allows users to communicate with peers by voice, video, and instant unity_protocol_application_preview_set_rating(UNITY_PROTOCOL_APPLICATION_PREVIEW(proto_obj.RawPtr()), 0.5); unity_protocol_application_preview_set_num_ratings(UNITY_PROTOCOL_APPLICATION_PREVIEW(proto_obj.RawPtr()), 17); - unity_protocol_preview_set_image_source_uri(proto_obj, "file:///home/nick/Skype.png"); unity_protocol_preview_set_title(proto_obj, app_name.str().c_str()); unity_protocol_preview_set_subtitle(proto_obj, subtitle); unity_protocol_preview_set_description(proto_obj, description); unity_protocol_preview_add_action(proto_obj, "uninstall", "Uninstall", iconHint1, 0); - unity_protocol_preview_add_action(proto_obj, "launch", "Launch", iconHint2, 0); + unity_protocol_preview_add_action_with_hints(proto_obj, "launch", "Download", iconHint2, 0, action_hints1); unity_protocol_preview_add_info_hint(proto_obj, "time", "Total time", iconHint1, g_variant_new("s", "16 h 34miin 45sec")); unity_protocol_preview_add_info_hint(proto_obj, "energy", "Energy", iconHint2, g_variant_new("s", "58.07 mWh")); unity_protocol_preview_add_info_hint(proto_obj, "load", "CPU Load", iconHint3, g_variant_new("i", 12)); @@ -190,6 +192,7 @@ The service allows users to communicate with peers by voice, video, and instant dash::Preview::Ptr preview_model(dash::Preview::PreviewForVariant(v)); container_->Preview(preview_model, previews::Navigation::RIGHT); + g_hash_table_unref(action_hints1); } void TestRunner::NavRight() @@ -206,9 +209,10 @@ The service allows users to communicate with peers by voice, video, and instant glib::Object<GIcon> iconHint2(g_icon_new_for_string("/usr/share/unity/5/lens-nav-home.svg", NULL)); glib::Object<GIcon> iconHint3(g_icon_new_for_string("/usr/share/unity/5/lens-nav-people.svg", NULL)); - glib::Object<UnityProtocolPreview> proto_obj(UNITY_PROTOCOL_PREVIEW(unity_protocol_application_preview_new())); + GHashTable* action_hints1(g_hash_table_new(g_direct_hash, g_direct_equal)); + g_hash_table_insert (action_hints1, g_strdup ("extra-text"), g_variant_new_string("£30.99")); - + glib::Object<UnityProtocolPreview> proto_obj(UNITY_PROTOCOL_PREVIEW(unity_protocol_application_preview_new())); unity_protocol_application_preview_set_app_icon(UNITY_PROTOCOL_APPLICATION_PREVIEW(proto_obj.RawPtr()), g_icon_new_for_string("/home/nick/SkypeIcon.png", NULL)); unity_protocol_application_preview_set_license(UNITY_PROTOCOL_APPLICATION_PREVIEW(proto_obj.RawPtr()), "Proprietary"); @@ -222,7 +226,7 @@ The service allows users to communicate with peers by voice, video, and instant unity_protocol_preview_set_subtitle(proto_obj, subtitle); unity_protocol_preview_set_description(proto_obj, description); unity_protocol_preview_add_action(proto_obj, "uninstall", "Uninstall", iconHint1, 0); - unity_protocol_preview_add_action(proto_obj, "launch", "Launch", iconHint2, 0); + unity_protocol_preview_add_action_with_hints(proto_obj, "launch", "Download", iconHint2, 0, action_hints1); unity_protocol_preview_add_info_hint(proto_obj, "time", "Total time", iconHint1, g_variant_new("s", "16 h 34miin 45sec")); unity_protocol_preview_add_info_hint(proto_obj, "energy", "Energy", iconHint2, g_variant_new("s", "58.07 mWh")); unity_protocol_preview_add_info_hint(proto_obj, "load", "CPU Load", iconHint3, g_variant_new("d", 12.1)); @@ -232,6 +236,8 @@ The service allows users to communicate with peers by voice, video, and instant dash::Preview::Ptr preview_model(dash::Preview::PreviewForVariant(v)); container_->Preview(preview_model, previews::Navigation::RIGHT); + + g_hash_table_unref(action_hints1); } void TestRunner::NavLeft() @@ -251,7 +257,10 @@ void TestRunner::NavLeft() glib::Object<GIcon> iconHint2(g_icon_new_for_string("/usr/share/unity/5/lens-nav-home.svg", NULL)); glib::Object<GIcon> iconHint3(g_icon_new_for_string("/usr/share/unity/5/lens-nav-people.svg", NULL)); - glib::Object<UnityProtocolPreview> proto_obj(UNITY_PROTOCOL_PREVIEW(unity_protocol_application_preview_new())); + GHashTable* action_hints1(g_hash_table_new(g_direct_hash, g_direct_equal)); + g_hash_table_insert (action_hints1, g_strdup ("extra-text"), g_variant_new_string("£30.99")); + + glib::Object<UnityProtocolPreview> proto_obj(UNITY_PROTOCOL_PREVIEW(unity_protocol_application_preview_new())); unity_protocol_application_preview_set_app_icon(UNITY_PROTOCOL_APPLICATION_PREVIEW(proto_obj.RawPtr()), g_icon_new_for_string("/home/nick/SkypeIcon.png", NULL)); @@ -266,7 +275,7 @@ void TestRunner::NavLeft() unity_protocol_preview_set_subtitle(proto_obj, subtitle); unity_protocol_preview_set_description(proto_obj, description); unity_protocol_preview_add_action(proto_obj, "uninstall", "Uninstall", iconHint1, 0); - unity_protocol_preview_add_action(proto_obj, "launch", "Launch", iconHint2, 0); + unity_protocol_preview_add_action_with_hints(proto_obj, "launch", "Download", iconHint2, 0, action_hints1); unity_protocol_preview_add_info_hint(proto_obj, "time", "Total time", iconHint1, g_variant_new("s", "16 h 34miin 45sec")); unity_protocol_preview_add_info_hint(proto_obj, "energy", "Energy", iconHint2, g_variant_new("s", "58.07 mWh")); unity_protocol_preview_add_info_hint(proto_obj, "load", "CPU Load", iconHint3, g_variant_new("i", 22)); @@ -277,6 +286,8 @@ void TestRunner::NavLeft() dash::Preview::Ptr preview_model(dash::Preview::PreviewForVariant(v)); container_->Preview(preview_model, previews::Navigation::LEFT); + g_hash_table_unref(action_hints1); + return false; })); } diff --git a/unity-shared/PreviewStyle.cpp b/unity-shared/PreviewStyle.cpp index d78568157..d4a9315f0 100644 --- a/unity-shared/PreviewStyle.cpp +++ b/unity-shared/PreviewStyle.cpp @@ -305,6 +305,15 @@ std::string Style::subtitle_size_font() const std::string Style::description_font() const { return "Ubuntu Light 10"; + +} +std::string Style::action_font() const +{ + return "Ubuntu 11"; +} +std::string Style::action_extra_font() const +{ + return "Ubuntu Bold 11"; } std::string Style::app_license_font() const diff --git a/unity-shared/PreviewStyle.h b/unity-shared/PreviewStyle.h index ac197f29d..8580baa3a 100644 --- a/unity-shared/PreviewStyle.h +++ b/unity-shared/PreviewStyle.h @@ -90,6 +90,9 @@ public: std::string subtitle_size_font() const; std::string description_font() const; + std::string action_font() const; + std::string action_extra_font() const; + nux::AbstractPaintLayer* GetBackgroundLayer() const; //////////////////////////////// |
