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

Unified Diff: ui/aura/window_tree_host.cc

Issue 851853002: It is time. (Closed) Base URL: https://github.com/domokit/mojo.git@master
Patch Set: Trying to reup because the last upload failed. Created 5 years, 11 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
« no previous file with comments | « ui/aura/window_tree_host.h ('k') | ui/aura/window_tree_host_mac.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: ui/aura/window_tree_host.cc
diff --git a/ui/aura/window_tree_host.cc b/ui/aura/window_tree_host.cc
deleted file mode 100644
index bbe52fc33a6f495f33592fe27591edef151415b3..0000000000000000000000000000000000000000
--- a/ui/aura/window_tree_host.cc
+++ /dev/null
@@ -1,278 +0,0 @@
-// Copyright (c) 2013 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 "ui/aura/window_tree_host.h"
-
-#include "base/debug/trace_event.h"
-#include "base/thread_task_runner_handle.h"
-#include "ui/aura/client/capture_client.h"
-#include "ui/aura/client/cursor_client.h"
-#include "ui/aura/env.h"
-#include "ui/aura/window.h"
-#include "ui/aura/window_event_dispatcher.h"
-#include "ui/aura/window_targeter.h"
-#include "ui/aura/window_tree_host_observer.h"
-#include "ui/base/view_prop.h"
-#include "ui/compositor/dip_util.h"
-#include "ui/compositor/layer.h"
-#include "ui/gfx/display.h"
-#include "ui/gfx/insets.h"
-#include "ui/gfx/point.h"
-#include "ui/gfx/point3_f.h"
-#include "ui/gfx/point_conversions.h"
-#include "ui/gfx/screen.h"
-#include "ui/gfx/size_conversions.h"
-
-namespace aura {
-
-const char kWindowTreeHostForAcceleratedWidget[] =
- "__AURA_WINDOW_TREE_HOST_ACCELERATED_WIDGET__";
-
-float GetDeviceScaleFactorFromDisplay(Window* window) {
- gfx::Display display = gfx::Screen::GetScreenFor(window)->
- GetDisplayNearestWindow(window);
- DCHECK(display.is_valid());
- return display.device_scale_factor();
-}
-
-////////////////////////////////////////////////////////////////////////////////
-// WindowTreeHost, public:
-
-WindowTreeHost::~WindowTreeHost() {
- DCHECK(!compositor_) << "compositor must be destroyed before root window";
-}
-
-#if defined(OS_ANDROID)
-// static
-WindowTreeHost* WindowTreeHost::Create(const gfx::Rect& bounds) {
- // This is only hit for tests and ash, right now these aren't an issue so
- // adding the CHECK.
- // TODO(sky): decide if we want a factory.
- CHECK(false);
- return NULL;
-}
-#endif
-
-// static
-WindowTreeHost* WindowTreeHost::GetForAcceleratedWidget(
- gfx::AcceleratedWidget widget) {
- return reinterpret_cast<WindowTreeHost*>(
- ui::ViewProp::GetValue(widget, kWindowTreeHostForAcceleratedWidget));
-}
-
-void WindowTreeHost::InitHost() {
- InitCompositor();
- UpdateRootWindowSize(GetBounds().size());
- Env::GetInstance()->NotifyHostInitialized(this);
- window()->Show();
-}
-
-void WindowTreeHost::InitCompositor() {
- compositor_->SetScaleAndSize(GetDeviceScaleFactorFromDisplay(window()),
- GetBounds().size());
- compositor_->SetRootLayer(window()->layer());
-}
-
-void WindowTreeHost::AddObserver(WindowTreeHostObserver* observer) {
- observers_.AddObserver(observer);
-}
-
-void WindowTreeHost::RemoveObserver(WindowTreeHostObserver* observer) {
- observers_.RemoveObserver(observer);
-}
-
-ui::EventProcessor* WindowTreeHost::event_processor() {
- return dispatcher();
-}
-
-gfx::Transform WindowTreeHost::GetRootTransform() const {
- float scale = ui::GetDeviceScaleFactor(window()->layer());
- gfx::Transform transform;
- transform.Scale(scale, scale);
- transform *= window()->layer()->transform();
- return transform;
-}
-
-void WindowTreeHost::SetRootTransform(const gfx::Transform& transform) {
- window()->SetTransform(transform);
- UpdateRootWindowSize(GetBounds().size());
-}
-
-gfx::Transform WindowTreeHost::GetInverseRootTransform() const {
- gfx::Transform invert;
- gfx::Transform transform = GetRootTransform();
- if (!transform.GetInverse(&invert))
- return transform;
- return invert;
-}
-
-void WindowTreeHost::UpdateRootWindowSize(const gfx::Size& host_size) {
- gfx::Rect bounds(host_size);
- gfx::RectF new_bounds(ui::ConvertRectToDIP(window()->layer(), bounds));
- window()->layer()->transform().TransformRect(&new_bounds);
- window()->SetBounds(gfx::Rect(gfx::ToFlooredSize(new_bounds.size())));
-}
-
-void WindowTreeHost::ConvertPointToNativeScreen(gfx::Point* point) const {
- ConvertPointToHost(point);
- gfx::Point location = GetLocationOnNativeScreen();
- point->Offset(location.x(), location.y());
-}
-
-void WindowTreeHost::ConvertPointFromNativeScreen(gfx::Point* point) const {
- gfx::Point location = GetLocationOnNativeScreen();
- point->Offset(-location.x(), -location.y());
- ConvertPointFromHost(point);
-}
-
-void WindowTreeHost::ConvertPointToHost(gfx::Point* point) const {
- gfx::Point3F point_3f(*point);
- GetRootTransform().TransformPoint(&point_3f);
- *point = gfx::ToFlooredPoint(point_3f.AsPointF());
-}
-
-void WindowTreeHost::ConvertPointFromHost(gfx::Point* point) const {
- gfx::Point3F point_3f(*point);
- GetInverseRootTransform().TransformPoint(&point_3f);
- *point = gfx::ToFlooredPoint(point_3f.AsPointF());
-}
-
-void WindowTreeHost::SetCursor(gfx::NativeCursor cursor) {
- last_cursor_ = cursor;
- // A lot of code seems to depend on NULL cursors actually showing an arrow,
- // so just pass everything along to the host.
- SetCursorNative(cursor);
-}
-
-void WindowTreeHost::OnCursorVisibilityChanged(bool show) {
- // Clear any existing mouse hover effects when the cursor becomes invisible.
- // Note we do not need to dispatch a mouse enter when the cursor becomes
- // visible because that can only happen in response to a mouse event, which
- // will trigger its own mouse enter.
- if (!show) {
- ui::EventDispatchDetails details = dispatcher()->DispatchMouseExitAtPoint(
- dispatcher()->GetLastMouseLocationInRoot());
- if (details.dispatcher_destroyed)
- return;
- }
-
- OnCursorVisibilityChangedNative(show);
-}
-
-void WindowTreeHost::MoveCursorTo(const gfx::Point& location_in_dip) {
- gfx::Point host_location(location_in_dip);
- ConvertPointToHost(&host_location);
- MoveCursorToInternal(location_in_dip, host_location);
-}
-
-void WindowTreeHost::MoveCursorToHostLocation(const gfx::Point& host_location) {
- gfx::Point root_location(host_location);
- ConvertPointFromHost(&root_location);
- MoveCursorToInternal(root_location, host_location);
-}
-
-////////////////////////////////////////////////////////////////////////////////
-// WindowTreeHost, protected:
-
-WindowTreeHost::WindowTreeHost()
- : window_(new Window(NULL)),
- last_cursor_(ui::kCursorNull) {
-}
-
-void WindowTreeHost::DestroyCompositor() {
- compositor_.reset();
-}
-
-void WindowTreeHost::DestroyDispatcher() {
- delete window_;
- window_ = NULL;
- dispatcher_.reset();
-
- // TODO(beng): this comment is no longer quite valid since this function
- // isn't called from WED, and WED isn't a subclass of Window. So it seems
- // like we could just rely on ~Window now.
- // Destroy child windows while we're still valid. This is also done by
- // ~Window, but by that time any calls to virtual methods overriden here (such
- // as GetRootWindow()) result in Window's implementation. By destroying here
- // we ensure GetRootWindow() still returns this.
- //window()->RemoveOrDestroyChildren();
-}
-
-void WindowTreeHost::CreateCompositor(
- gfx::AcceleratedWidget accelerated_widget) {
- DCHECK(Env::GetInstance());
- ui::ContextFactory* context_factory = Env::GetInstance()->context_factory();
- DCHECK(context_factory);
- compositor_.reset(
- new ui::Compositor(GetAcceleratedWidget(),
- context_factory,
- base::ThreadTaskRunnerHandle::Get()));
- // TODO(beng): I think this setup should probably all move to a "accelerated
- // widget available" function.
- if (!dispatcher()) {
- window()->Init(WINDOW_LAYER_NOT_DRAWN);
- window()->set_host(this);
- window()->SetName("RootWindow");
- window()->SetEventTargeter(
- scoped_ptr<ui::EventTargeter>(new WindowTargeter()));
- prop_.reset(new ui::ViewProp(GetAcceleratedWidget(),
- kWindowTreeHostForAcceleratedWidget,
- this));
- dispatcher_.reset(new WindowEventDispatcher(this));
- }
-}
-
-void WindowTreeHost::OnHostMoved(const gfx::Point& new_location) {
- TRACE_EVENT1("ui", "WindowTreeHost::OnHostMoved",
- "origin", new_location.ToString());
-
- FOR_EACH_OBSERVER(WindowTreeHostObserver, observers_,
- OnHostMoved(this, new_location));
-}
-
-void WindowTreeHost::OnHostResized(const gfx::Size& new_size) {
- // The compositor should have the same size as the native root window host.
- // Get the latest scale from display because it might have been changed.
- compositor_->SetScaleAndSize(GetDeviceScaleFactorFromDisplay(window()),
- new_size);
-
- gfx::Size layer_size = GetBounds().size();
- // The layer, and the observers should be notified of the
- // transformed size of the root window.
- UpdateRootWindowSize(layer_size);
- FOR_EACH_OBSERVER(WindowTreeHostObserver, observers_, OnHostResized(this));
-}
-
-void WindowTreeHost::OnHostCloseRequested() {
- FOR_EACH_OBSERVER(WindowTreeHostObserver, observers_,
- OnHostCloseRequested(this));
-}
-
-void WindowTreeHost::OnHostActivated() {
- Env::GetInstance()->NotifyHostActivated(this);
-}
-
-void WindowTreeHost::OnHostLostWindowCapture() {
- Window* capture_window = client::GetCaptureWindow(window());
- if (capture_window && capture_window->GetRootWindow() == window())
- capture_window->ReleaseCapture();
-}
-
-////////////////////////////////////////////////////////////////////////////////
-// WindowTreeHost, private:
-
-void WindowTreeHost::MoveCursorToInternal(const gfx::Point& root_location,
- const gfx::Point& host_location) {
- last_cursor_request_position_in_host_ = host_location;
- MoveCursorToNative(host_location);
- client::CursorClient* cursor_client = client::GetCursorClient(window());
- if (cursor_client) {
- const gfx::Display& display =
- gfx::Screen::GetScreenFor(window())->GetDisplayNearestWindow(window());
- cursor_client->SetDisplay(display);
- }
- dispatcher()->OnCursorMovedToRootLocation(root_location);
-}
-
-} // namespace aura
« no previous file with comments | « ui/aura/window_tree_host.h ('k') | ui/aura/window_tree_host_mac.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698