172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen// Copyright (c) 2011 The Chromium Authors. All rights reserved. 2c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Use of this source code is governed by a BSD-style license that can be 3c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// found in the LICENSE file. 4c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 5c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/browser/chromeos/wm_overview_snapshot.h" 6c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 7c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include <vector> 8c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 9c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/browser/chromeos/wm_ipc.h" 104a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch#include "chrome/browser/ui/browser.h" 11ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "chrome/browser/ui/browser_window.h" 1272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#include "ui/base/x/x11_util.h" 13c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "views/controls/image_view.h" 14c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "views/controls/label.h" 1572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#include "views/layout/grid_layout.h" 16c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 17c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochusing std::vector; 18c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 19c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#if !defined(OS_CHROMEOS) 20c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#error This file is only meant to be compiled for ChromeOS 21c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#endif 22c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 23c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochnamespace chromeos { 24c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 25c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochWmOverviewSnapshot::WmOverviewSnapshot() 26c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch : WidgetGtk(TYPE_WINDOW), 27c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch snapshot_view_(NULL), 28c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch index_(-1), 29c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch configured_snapshot_(false) { 30c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 31c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 32c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochvoid WmOverviewSnapshot::Init(const gfx::Size& size, 33c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch Browser* browser, 34c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch int index) { 35c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch snapshot_view_ = new views::ImageView(); 36c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 37c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch WidgetGtk::Init(NULL, gfx::Rect(size)); 38c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 39c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch SetContentsView(snapshot_view_); 40c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 41c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch UpdateIndex(browser, index); 42c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 43c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 44c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 45c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochvoid WmOverviewSnapshot::UpdateIndex(Browser* browser, int index) { 46c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch vector<int> params; 4772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen params.push_back(ui::GetX11WindowFromGtkWidget( 48c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch GTK_WIDGET(browser->window()->GetNativeHandle()))); 49c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch params.push_back(index); 50c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch WmIpc::instance()->SetWindowType( 51c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch GetNativeView(), 52c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch WM_IPC_WINDOW_CHROME_TAB_SNAPSHOT, 53c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ¶ms); 54c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch index_ = index; 55c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 56c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 57c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochvoid WmOverviewSnapshot::SetImage(const SkBitmap& image) { 58c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch CHECK(snapshot_view_) << "Init not called before setting image."; 59c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch snapshot_view_->SetImage(image); 60c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 61c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Reset the bounds to the size of the image. 62dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen SetBounds(gfx::Rect(image.width(), image.height())); 63c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch configured_snapshot_ = true; 64c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 65c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 66c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} // namespace chromeos 67