Chromium Code Reviews| Index: ash/mus/shelf_delegate_mus.cc |
| diff --git a/ash/mus/shelf_delegate_mus.cc b/ash/mus/shelf_delegate_mus.cc |
| index ce3698a4dfe298ef7214dd3e87cb3ea4b94d9961..7947a133a48a14a8f9e155d1ebad2557a8e134d9 100644 |
| --- a/ash/mus/shelf_delegate_mus.cc |
| +++ b/ash/mus/shelf_delegate_mus.cc |
| @@ -19,6 +19,7 @@ |
| #include "mojo/shell/public/cpp/connector.h" |
| #include "ui/aura/mus/mus_util.h" |
| #include "ui/base/resource/resource_bundle.h" |
| +#include "ui/gfx/image/image_skia.h" |
| #include "ui/resources/grit/ui_resources.h" |
| #include "ui/views/mus/window_manager_connection.h" |
| @@ -81,6 +82,25 @@ class ShelfItemDelegateMus : public ShelfItemDelegate { |
| DISALLOW_COPY_AND_ASSIGN(ShelfItemDelegateMus); |
| }; |
| +// Returns an icon image from a serialized SkBitmap, or the default shelf icon |
| +// image if the bitmap is empty. Assumes the bitmap is a 1x icon. |
| +// TODO(jamescook): Support other scale factors. |
| +gfx::ImageSkia GetShelfIconFromBitmap( |
| + const mojo::Array<uint8_t>& serialized_bitmap) { |
| + // Convert the data to an ImageSkia. |
| + SkBitmap bitmap = mojo::ConvertTo<SkBitmap, const std::vector<uint8_t>>( |
| + serialized_bitmap.storage()); |
| + gfx::ImageSkia icon_image; |
| + if (!bitmap.isNull()) { |
| + icon_image = gfx::ImageSkia::CreateFrom1xBitmap(bitmap); |
| + } else { |
| + // Use default icon. |
| + ResourceBundle& rb = ResourceBundle::GetSharedInstance(); |
| + icon_image = *rb.GetImageSkiaNamed(IDR_DEFAULT_FAVICON); |
| + } |
| + return icon_image; |
| +} |
| + |
| } // namespace |
| ShelfDelegateMus::ShelfDelegateMus(ShelfModel* model) |
| @@ -153,9 +173,7 @@ void ShelfDelegateMus::OnUserWindowAdded( |
| ShelfItem item; |
| item.type = TYPE_PLATFORM_APP; |
| item.status = user_window->window_has_focus ? STATUS_ACTIVE : STATUS_RUNNING; |
| - // TODO(msw): Support actual window icons. |
| - ResourceBundle& rb = ResourceBundle::GetSharedInstance(); |
| - item.image = *rb.GetImageSkiaNamed(IDR_DEFAULT_FAVICON); |
| + item.image = GetShelfIconFromBitmap(user_window->window_app_icon); |
| ShelfID shelf_id = model_->next_id(); |
| window_id_to_shelf_id_.insert( |
| @@ -198,6 +216,23 @@ void ShelfDelegateMus::OnUserWindowTitleChanged( |
| model_->Set(index, *iter); |
| } |
| +void ShelfDelegateMus::OnUserWindowAppIconChanged( |
| + uint32_t window_id, |
| + mojo::Array<uint8_t> app_icon) { |
| + // Find the shelf ID for this window. |
| + DCHECK(window_id_to_shelf_id_.count(window_id)); |
| + ShelfID shelf_id = window_id_to_shelf_id_[window_id]; |
| + DCHECK_GT(shelf_id, 0); |
| + |
| + // Update the icon in the ShelfItem. |
| + int index = model_->ItemIndexByID(shelf_id); |
| + if (index == -1) |
|
msw
2016/03/24 17:40:54
optional nit: DCHECK and use use ItemByID instead
James Cook
2016/03/25 15:39:28
Done.
|
| + return; |
| + ShelfItem item = model_->items()[index]; |
| + item.image = GetShelfIconFromBitmap(app_icon); |
| + model_->Set(index, item); |
| +} |
| + |
| void ShelfDelegateMus::OnUserWindowFocusChanged(uint32_t window_id, |
| bool has_focus) { |
| DCHECK(window_id_to_shelf_id_.count(window_id)); |