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

Unified Diff: ui/aura/window_tree_host_platform.cc

Issue 1390883003: aura: Unify WindowTreeHost for some platforms (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: win build Created 5 years, 2 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
Index: ui/aura/window_tree_host_platform.cc
diff --git a/ui/aura/window_tree_host_platform.cc b/ui/aura/window_tree_host_platform.cc
new file mode 100644
index 0000000000000000000000000000000000000000..9205bc3b47c866e55580fc485a527a1cfbf8c88c
--- /dev/null
+++ b/ui/aura/window_tree_host_platform.cc
@@ -0,0 +1,188 @@
+// Copyright 2015 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_platform.h"
+
+
sadrul 2015/10/15 19:47:40 Remove extra blank line.
no sievers 2015/10/16 18:26:15 Done.
+#include <algorithm>
+
+#if defined(OS_WIN)
+#include <windows.h>
+#endif
+
+#include "base/trace_event/trace_event.h"
+#include "ui/aura/window_event_dispatcher.h"
+#include "ui/compositor/compositor.h"
+#include "ui/events/event.h"
+
+#if defined(OS_ANDROID)
+#include "ui/platform_window/android/platform_window_android.h"
+#endif
+
+#if defined(USE_OZONE)
+#include "ui/ozone/public/ozone_platform.h"
+#endif
+
+#if defined(OS_WIN)
+#include "base/message_loop/message_loop.h"
+#include "ui/base/cursor/cursor_loader_win.h"
+#include "ui/platform_window/win/win_window.h"
+#endif
+
+using std::max;
+using std::min;
+
+namespace aura {
+
+// static
+WindowTreeHost* WindowTreeHost::Create(const gfx::Rect& bounds) {
+ return new WindowTreeHostPlatform(bounds);
+}
+
+WindowTreeHostPlatform::WindowTreeHostPlatform(const gfx::Rect& bounds)
+ : widget_(gfx::kNullAcceleratedWidget),
+ current_cursor_(ui::kCursorNull),
+ has_capture_(false) {
+#if defined(USE_OZONE)
+ window_ =
+ ui::OzonePlatform::GetInstance()->CreatePlatformWindow(this, bounds);
+#elif defined(OS_WIN)
+ window_.reset(new ui::WinWindow(this, bounds));
+#elif defined(OS_ANDROID)
+ window_.reset(new ui::PlatformWindowAndroid(this));
+#else
+ NOTIMPLEMENTED();
+#endif
+}
+
+WindowTreeHostPlatform::~WindowTreeHostPlatform() {
+ DestroyCompositor();
+ DestroyDispatcher();
+}
+
+ui::EventSource* WindowTreeHostPlatform::GetEventSource() {
+ return this;
+}
+
+gfx::AcceleratedWidget WindowTreeHostPlatform::GetAcceleratedWidget() {
+ return widget_;
+}
+
+void WindowTreeHostPlatform::ShowImpl() {
+ window_->Show();
+}
+
+void WindowTreeHostPlatform::HideImpl() {
+ window_->Hide();
+}
+
+gfx::Rect WindowTreeHostPlatform::GetBounds() const {
+ return window_->GetBounds();
+}
+
+void WindowTreeHostPlatform::SetBounds(const gfx::Rect& bounds) {
+ window_->SetBounds(bounds);
+}
+
+gfx::Point WindowTreeHostPlatform::GetLocationOnNativeScreen() const {
+ return window_->GetBounds().origin();
+}
+
+void WindowTreeHostPlatform::SetCapture() {
+ if (!has_capture_) {
+ has_capture_ = true;
+ window_->SetCapture();
+ }
+}
+
+void WindowTreeHostPlatform::ReleaseCapture() {
+ if (has_capture_)
+ window_->ReleaseCapture();
+}
+
+void WindowTreeHostPlatform::SetCursorNative(gfx::NativeCursor cursor) {
+ if (cursor == current_cursor_)
+ return;
+ current_cursor_ = cursor;
+
+#if defined(OS_WIN)
+ // Custom web cursors are handled directly.
+ if (cursor == ui::kCursorCustom)
+ return;
+
+ ui::CursorLoaderWin cursor_loader;
+ cursor_loader.SetPlatformCursor(&cursor);
+ ::SetCursor(cursor.platform());
sadrul 2015/10/15 19:47:40 Can this bit move into WinWindow() instead, and we
no sievers 2015/10/16 18:26:15 Done.
+#else
+ window_->SetCursor(cursor.platform());
+#endif
+}
+
+void WindowTreeHostPlatform::MoveCursorToNative(const gfx::Point& location) {
+#if defined(OS_WIN)
+// Deliberately not implemented.
+#else
+ window_->MoveCursorTo(location);
+#endif
sadrul 2015/10/15 19:47:39 WinWindow::MoveCursorTo() doesn't do anything. So
no sievers 2015/10/16 18:26:15 Done.
+}
+
+void WindowTreeHostPlatform::OnCursorVisibilityChangedNative(bool show) {
+ NOTIMPLEMENTED();
+}
+
+void WindowTreeHostPlatform::OnBoundsChanged(const gfx::Rect& new_bounds) {
+ gfx::Rect old_bounds = bounds_;
+ bounds_ = new_bounds;
+ if (bounds_.origin() != old_bounds.origin())
no sievers 2015/10/16 00:06:14 These two optimizations for redundant calls are ca
+ OnHostMoved(bounds_.origin());
+ if (bounds_.size() != old_bounds.size())
+ OnHostResized(bounds_.size());
+}
+
+void WindowTreeHostPlatform::OnDamageRect(const gfx::Rect& damage_rect) {
+ compositor()->ScheduleRedrawRect(damage_rect);
+}
+
+void WindowTreeHostPlatform::DispatchEvent(ui::Event* event) {
+ TRACE_EVENT0("input", "WindowTreeHostPlatform::DispatchEvent");
+ ui::EventDispatchDetails details = SendEventToProcessor(event);
+ if (details.dispatcher_destroyed)
+ event->SetHandled();
+}
+
+void WindowTreeHostPlatform::OnCloseRequest() {
+#if defined(OS_WIN)
+ // TODO: this obviously shouldn't be here.
+ base::MessageLoopForUI::current()->QuitWhenIdle();
+#else
+ OnHostCloseRequested();
+#endif
+}
+
+void WindowTreeHostPlatform::OnClosed() {}
+
+void WindowTreeHostPlatform::OnWindowStateChanged(
+ ui::PlatformWindowState new_state) {}
+
+void WindowTreeHostPlatform::OnLostCapture() {
+ if (has_capture_) {
+ has_capture_ = false;
+ OnHostLostWindowCapture();
+ }
+}
+
+void WindowTreeHostPlatform::OnAcceleratedWidgetAvailable(
+ gfx::AcceleratedWidget widget,
+ float device_pixel_ratio) {
+ widget_ = widget;
+ CreateCompositor();
+ WindowTreeHost::OnAcceleratedWidgetAvailable();
+}
+
+void WindowTreeHostPlatform::OnActivationChanged(bool active) {
+ if (active)
+ OnHostActivated();
+}
+
+} // namespace aura

Powered by Google App Engine
This is Rietveld 408576698