Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(2)

Unified Diff: ash/mus/shelf_delegate_mus.cc

Issue 1824183002: Mash: Show app icons in shelf based on the Widget's app icon (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: //ui/resources Created 4 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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));

Powered by Google App Engine
This is Rietveld 408576698