| OLD | NEW |
| 1 // Copyright 2016 The Chromium Authors. All rights reserved. | 1 // Copyright 2016 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "ash/sysui/shelf_delegate_mus.h" | 5 #include "ash/sysui/shelf_delegate_mus.h" |
| 6 | 6 |
| 7 #include <memory> | 7 #include <memory> |
| 8 | 8 |
| 9 #include "ash/common/shelf/shelf_item_delegate.h" | 9 #include "ash/common/shelf/shelf_item_delegate.h" |
| 10 #include "ash/common/shelf/shelf_item_delegate_manager.h" | |
| 11 #include "ash/common/shelf/shelf_menu_model.h" | 10 #include "ash/common/shelf/shelf_menu_model.h" |
| 12 #include "ash/common/shelf/shelf_model.h" | 11 #include "ash/common/shelf/shelf_model.h" |
| 13 #include "ash/common/shelf/shelf_types.h" | 12 #include "ash/common/shelf/shelf_types.h" |
| 13 #include "ash/common/wm_shell.h" |
| 14 #include "ash/shelf/shelf.h" | 14 #include "ash/shelf/shelf.h" |
| 15 #include "ash/shelf/shelf_layout_manager.h" | 15 #include "ash/shelf/shelf_layout_manager.h" |
| 16 #include "ash/shelf/shelf_widget.h" | 16 #include "ash/shelf/shelf_widget.h" |
| 17 #include "ash/shell.h" | |
| 18 #include "base/strings/string_util.h" | 17 #include "base/strings/string_util.h" |
| 19 #include "mojo/common/common_type_converters.h" | 18 #include "mojo/common/common_type_converters.h" |
| 20 #include "services/shell/public/cpp/connector.h" | 19 #include "services/shell/public/cpp/connector.h" |
| 21 #include "services/ui/public/cpp/property_type_converters.h" | 20 #include "services/ui/public/cpp/property_type_converters.h" |
| 22 #include "services/ui/public/cpp/window.h" | 21 #include "services/ui/public/cpp/window.h" |
| 23 #include "services/ui/public/cpp/window_property.h" | 22 #include "services/ui/public/cpp/window_property.h" |
| 24 #include "ui/aura/mus/mus_util.h" | 23 #include "ui/aura/mus/mus_util.h" |
| 25 #include "ui/base/resource/resource_bundle.h" | 24 #include "ui/base/resource/resource_bundle.h" |
| 26 #include "ui/gfx/image/image_skia.h" | 25 #include "ui/gfx/image/image_skia.h" |
| 27 #include "ui/resources/grit/ui_resources.h" | 26 #include "ui/resources/grit/ui_resources.h" |
| (...skipping 118 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 146 bool pinned_ = false; | 145 bool pinned_ = false; |
| 147 std::map<uint32_t, base::string16> window_id_to_title_; | 146 std::map<uint32_t, base::string16> window_id_to_title_; |
| 148 base::string16 title_; | 147 base::string16 title_; |
| 149 UserWindowController* user_window_controller_; | 148 UserWindowController* user_window_controller_; |
| 150 | 149 |
| 151 DISALLOW_COPY_AND_ASSIGN(ShelfItemDelegateMus); | 150 DISALLOW_COPY_AND_ASSIGN(ShelfItemDelegateMus); |
| 152 }; | 151 }; |
| 153 | 152 |
| 154 ShelfItemDelegateMus* GetShelfItemDelegate(ShelfID shelf_id) { | 153 ShelfItemDelegateMus* GetShelfItemDelegate(ShelfID shelf_id) { |
| 155 return static_cast<ShelfItemDelegateMus*>( | 154 return static_cast<ShelfItemDelegateMus*>( |
| 156 Shell::GetInstance()->shelf_item_delegate_manager()->GetShelfItemDelegate( | 155 WmShell::Get()->shelf_model()->GetShelfItemDelegate(shelf_id)); |
| 157 shelf_id)); | |
| 158 } | 156 } |
| 159 | 157 |
| 160 // Returns an icon image from an SkBitmap, or the default shelf icon | 158 // Returns an icon image from an SkBitmap, or the default shelf icon |
| 161 // image if the bitmap is empty. Assumes the bitmap is a 1x icon. | 159 // image if the bitmap is empty. Assumes the bitmap is a 1x icon. |
| 162 // TODO(jamescook): Support other scale factors. | 160 // TODO(jamescook): Support other scale factors. |
| 163 gfx::ImageSkia GetShelfIconFromBitmap(const SkBitmap& bitmap) { | 161 gfx::ImageSkia GetShelfIconFromBitmap(const SkBitmap& bitmap) { |
| 164 gfx::ImageSkia icon_image; | 162 gfx::ImageSkia icon_image; |
| 165 if (!bitmap.isNull()) { | 163 if (!bitmap.isNull()) { |
| 166 icon_image = gfx::ImageSkia::CreateFrom1xBitmap(bitmap); | 164 icon_image = gfx::ImageSkia::CreateFrom1xBitmap(bitmap); |
| 167 } else { | 165 } else { |
| (...skipping 147 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 315 shelf_item.type = TYPE_APP_SHORTCUT; | 313 shelf_item.type = TYPE_APP_SHORTCUT; |
| 316 shelf_item.status = STATUS_CLOSED; | 314 shelf_item.status = STATUS_CLOSED; |
| 317 shelf_item.image = GetShelfIconFromBitmap(item->image); | 315 shelf_item.image = GetShelfIconFromBitmap(item->image); |
| 318 model_->Add(shelf_item); | 316 model_->Add(shelf_item); |
| 319 | 317 |
| 320 std::unique_ptr<ShelfItemDelegateMus> item_delegate( | 318 std::unique_ptr<ShelfItemDelegateMus> item_delegate( |
| 321 new ShelfItemDelegateMus(user_window_controller_.get())); | 319 new ShelfItemDelegateMus(user_window_controller_.get())); |
| 322 item_delegate->SetDelegate(std::move(delegate)); | 320 item_delegate->SetDelegate(std::move(delegate)); |
| 323 item_delegate->set_pinned(true); | 321 item_delegate->set_pinned(true); |
| 324 item_delegate->set_title(item->app_title.To<base::string16>()); | 322 item_delegate->set_title(item->app_title.To<base::string16>()); |
| 325 Shell::GetInstance()->shelf_item_delegate_manager()->SetShelfItemDelegate( | 323 model_->SetShelfItemDelegate(shelf_id, std::move(item_delegate)); |
| 326 shelf_id, std::move(item_delegate)); | |
| 327 } | 324 } |
| 328 | 325 |
| 329 void ShelfDelegateMus::UnpinItem(const mojo::String& app_id) { | 326 void ShelfDelegateMus::UnpinItem(const mojo::String& app_id) { |
| 330 if (!app_id_to_shelf_id_.count(app_id.To<std::string>())) | 327 if (!app_id_to_shelf_id_.count(app_id.To<std::string>())) |
| 331 return; | 328 return; |
| 332 ShelfID shelf_id = app_id_to_shelf_id_[app_id.To<std::string>()]; | 329 ShelfID shelf_id = app_id_to_shelf_id_[app_id.To<std::string>()]; |
| 333 ShelfItemDelegateMus* item_delegate = GetShelfItemDelegate(shelf_id); | 330 ShelfItemDelegateMus* item_delegate = GetShelfItemDelegate(shelf_id); |
| 334 DCHECK(item_delegate->pinned()); | 331 DCHECK(item_delegate->pinned()); |
| 335 item_delegate->set_pinned(false); | 332 item_delegate->set_pinned(false); |
| 336 if (item_delegate->window_id_to_title().empty()) { | 333 if (item_delegate->window_id_to_title().empty()) { |
| (...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 386 ShelfItem item; | 383 ShelfItem item; |
| 387 item.type = TYPE_PLATFORM_APP; | 384 item.type = TYPE_PLATFORM_APP; |
| 388 item.status = user_window->window_has_focus ? STATUS_ACTIVE : STATUS_RUNNING; | 385 item.status = user_window->window_has_focus ? STATUS_ACTIVE : STATUS_RUNNING; |
| 389 item.image = GetShelfIconFromSerializedBitmap(user_window->window_app_icon); | 386 item.image = GetShelfIconFromSerializedBitmap(user_window->window_app_icon); |
| 390 model_->Add(item); | 387 model_->Add(item); |
| 391 | 388 |
| 392 std::unique_ptr<ShelfItemDelegateMus> item_delegate( | 389 std::unique_ptr<ShelfItemDelegateMus> item_delegate( |
| 393 new ShelfItemDelegateMus(user_window_controller_.get())); | 390 new ShelfItemDelegateMus(user_window_controller_.get())); |
| 394 item_delegate->AddWindow(user_window->window_id, | 391 item_delegate->AddWindow(user_window->window_id, |
| 395 user_window->window_title.To<base::string16>()); | 392 user_window->window_title.To<base::string16>()); |
| 396 Shell::GetInstance()->shelf_item_delegate_manager()->SetShelfItemDelegate( | 393 model_->SetShelfItemDelegate(shelf_id, std::move(item_delegate)); |
| 397 shelf_id, std::move(item_delegate)); | |
| 398 } | 394 } |
| 399 | 395 |
| 400 void ShelfDelegateMus::OnUserWindowRemoved(uint32_t window_id) { | 396 void ShelfDelegateMus::OnUserWindowRemoved(uint32_t window_id) { |
| 401 if (!window_id_to_shelf_id_.count(window_id)) | 397 if (!window_id_to_shelf_id_.count(window_id)) |
| 402 return; | 398 return; |
| 403 ShelfID shelf_id = window_id_to_shelf_id_[window_id]; | 399 ShelfID shelf_id = window_id_to_shelf_id_[window_id]; |
| 404 ShelfItemDelegateMus* item_delegate = GetShelfItemDelegate(shelf_id); | 400 ShelfItemDelegateMus* item_delegate = GetShelfItemDelegate(shelf_id); |
| 405 item_delegate->RemoveWindow(window_id); | 401 item_delegate->RemoveWindow(window_id); |
| 406 window_id_to_shelf_id_.erase(window_id); | 402 window_id_to_shelf_id_.erase(window_id); |
| 407 if (item_delegate->window_id_to_title().empty() && !item_delegate->pinned()) { | 403 if (item_delegate->window_id_to_title().empty() && !item_delegate->pinned()) { |
| (...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 473 StatusAreaWidget* status_widget = widget->status_area_widget(); | 469 StatusAreaWidget* status_widget = widget->status_area_widget(); |
| 474 ui::Window* status_window = | 470 ui::Window* status_window = |
| 475 aura::GetMusWindow(status_widget->GetNativeWindow()); | 471 aura::GetMusWindow(status_widget->GetNativeWindow()); |
| 476 gfx::Size status_size = status_widget->GetWindowBoundsInScreen().size(); | 472 gfx::Size status_size = status_widget->GetWindowBoundsInScreen().size(); |
| 477 status_window->SetSharedProperty<gfx::Size>( | 473 status_window->SetSharedProperty<gfx::Size>( |
| 478 ui::mojom::WindowManager::kPreferredSize_Property, status_size); | 474 ui::mojom::WindowManager::kPreferredSize_Property, status_size); |
| 479 } | 475 } |
| 480 | 476 |
| 481 } // namespace sysui | 477 } // namespace sysui |
| 482 } // namespace ash | 478 } // namespace ash |
| OLD | NEW |