blob: 14c54015b14a15e70b2591990eded19f034e98ef [file] [log] [blame]
// Copyright 2014 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "extensions/shell/browser/shell_screen.h"
#include <stdint.h>
#include <vector>
#include "base/logging.h"
#include "ui/aura/env.h"
#include "ui/aura/window.h"
#include "ui/aura/window_tree_host.h"
#include "ui/gfx/geometry/rect.h"
#include "ui/gfx/geometry/size.h"
#include "ui/gfx/native_widget_types.h"
namespace extensions {
namespace {
const int64_t kDisplayId = 0;
} // namespace
ShellScreen::ShellScreen(const gfx::Size& size)
: host_(nullptr), display_(kDisplayId) {
DCHECK(!size.IsEmpty());
// Screen is positioned at (0,0).
gfx::Rect bounds(size);
display_.SetScaleAndBounds(1.0f, bounds);
}
ShellScreen::~ShellScreen() {
DCHECK(!host_) << "Window not closed before destroying ShellScreen";
}
aura::WindowTreeHost* ShellScreen::CreateHostForPrimaryDisplay() {
DCHECK(!host_);
host_ = aura::WindowTreeHost::Create(gfx::Rect(display_.GetSizeInPixel()));
host_->window()->AddObserver(this);
host_->InitHost();
return host_;
}
// aura::WindowObserver overrides:
void ShellScreen::OnWindowBoundsChanged(aura::Window* window,
const gfx::Rect& old_bounds,
const gfx::Rect& new_bounds) {
DCHECK_EQ(host_->window(), window);
display_.SetSize(new_bounds.size());
}
void ShellScreen::OnWindowDestroying(aura::Window* window) {
DCHECK_EQ(host_->window(), window);
host_->window()->RemoveObserver(this);
host_ = nullptr;
}
// gfx::Screen overrides:
gfx::Point ShellScreen::GetCursorScreenPoint() {
return aura::Env::GetInstance()->last_mouse_location();
}
gfx::NativeWindow ShellScreen::GetWindowUnderCursor() {
return GetWindowAtScreenPoint(GetCursorScreenPoint());
}
gfx::NativeWindow ShellScreen::GetWindowAtScreenPoint(const gfx::Point& point) {
return host_->window()->GetTopWindowContainingPoint(point);
}
int ShellScreen::GetNumDisplays() const {
return 1;
}
std::vector<gfx::Display> ShellScreen::GetAllDisplays() const {
return std::vector<gfx::Display>(1, display_);
}
gfx::Display ShellScreen::GetDisplayNearestWindow(
gfx::NativeWindow window) const {
return display_;
}
gfx::Display ShellScreen::GetDisplayNearestPoint(
const gfx::Point& point) const {
return display_;
}
gfx::Display ShellScreen::GetDisplayMatching(
const gfx::Rect& match_rect) const {
return display_;
}
gfx::Display ShellScreen::GetPrimaryDisplay() const {
return display_;
}
void ShellScreen::AddObserver(gfx::DisplayObserver* observer) {
}
void ShellScreen::RemoveObserver(gfx::DisplayObserver* observer) {
}
} // namespace extensions