| Index: ash/mus/shelf_delegate_mus.cc
|
| diff --git a/ash/mus/shelf_delegate_mus.cc b/ash/mus/shelf_delegate_mus.cc
|
| index 510bb1b79d9409f3db96dcf5151a07bd0ac458a4..5b06edaa1e699bd4fa827ec5b90e30cd4d540f05 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"
|
|
|
| @@ -78,6 +79,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)
|
| @@ -150,9 +170,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(
|
| @@ -195,6 +213,22 @@ 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);
|
| + DCHECK_GE(index, 0);
|
| + ShelfItem item = *model_->ItemByID(shelf_id);
|
| + 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));
|
|
|