1// Copyright (c) 2010 The Chromium Authors. All rights reserved. 2// Use of this source code is governed by a BSD-style license that can be 3// found in the LICENSE file. 4 5#include "chrome/browser/chromeos/wm_overview_favicon.h" 6 7#include <vector> 8 9#include "chrome/browser/chromeos/wm_ipc.h" 10#include "chrome/browser/chromeos/wm_overview_snapshot.h" 11#include "skia/ext/image_operations.h" 12#include "third_party/cros/chromeos_wm_ipc_enums.h" 13#include "third_party/skia/include/core/SkBitmap.h" 14#include "ui/base/x/x11_util.h" 15#include "views/controls/image_view.h" 16#include "views/controls/label.h" 17#include "views/layout/grid_layout.h" 18 19using std::vector; 20 21#if !defined(OS_CHROMEOS) 22#error This file is only meant to be compiled for ChromeOS 23#endif 24 25namespace chromeos { 26 27const int WmOverviewFavicon::kIconSize = 32; 28 29WmOverviewFavicon::WmOverviewFavicon() 30 : WidgetGtk(TYPE_WINDOW), 31 favicon_view_(NULL) { 32} 33 34void WmOverviewFavicon::Init(WmOverviewSnapshot* snapshot) { 35 MakeTransparent(); 36 37 favicon_view_ = new views::ImageView(); 38 39 WidgetGtk::Init(NULL, gfx::Rect(0, 0, 0, 0)); 40 41 SetContentsView(favicon_view_); 42 43 // Set the window type 44 vector<int> params; 45 params.push_back(ui::GetX11WindowFromGtkWidget( 46 GTK_WIDGET(snapshot->GetNativeView()))); 47 WmIpc::instance()->SetWindowType( 48 GetNativeView(), 49 WM_IPC_WINDOW_CHROME_TAB_FAV_ICON, 50 ¶ms); 51} 52 53 54void WmOverviewFavicon::SetFavicon(const SkBitmap& image) { 55 CHECK(favicon_view_) << "Init not called before setting favicon."; 56 SkBitmap icon; 57 if (image.width() && image.height()) { 58 float aspect_ratio = static_cast<float>(image.width()) / image.height(); 59 int new_width = kIconSize; 60 int new_height = kIconSize; 61 if (aspect_ratio > 1.0f) { 62 new_height = kIconSize / aspect_ratio; 63 } else { 64 new_width = kIconSize * aspect_ratio; 65 } 66 if (new_width && new_height) { 67 icon = skia::ImageOperations::Resize( 68 image, skia::ImageOperations::RESIZE_BOX, 69 new_width, new_height); 70 } 71 } 72 73 favicon_view_->SetImage(icon); 74 75 // Reset the bounds to the size of the image. 76 SetBounds(gfx::Rect(icon.width(), icon.height())); 77} 78 79} // namespace chromeos 80