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

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: fix ozone GN 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
« no previous file with comments | « ui/aura/window_tree_host_platform.h ('k') | ui/aura/window_tree_host_win.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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..c02176d85828c5fdeb78bf85aa9ed72af5776e00
--- /dev/null
+++ b/ui/aura/window_tree_host_platform.cc
@@ -0,0 +1,199 @@
+// 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"
+
+
+#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);
+}
+
+// static
+gfx::Size WindowTreeHost::GetNativeScreenSize() {
+#if defined(OS_WIN)
+ return gfx::Size(GetSystemMetrics(SM_CXSCREEN),
+ GetSystemMetrics(SM_CYSCREEN));
+#else
+ NOTIMPLEMENTED();
+ return gfx::Size();
+#endif
+}
+
+WindowTreeHostPlatform::WindowTreeHostPlatform(const gfx::Rect& bounds)
+ : widget_(gfx::kNullAcceleratedWidget),
+ current_cursor_(ui::kCursorNull),
+ has_capture_(false) {
+#if defined(USE_OZONE)
+ window_.reset(
+ new ui::OzonePlatform::GetInstance()->CreatePlatformWindow(this, bounds));
mfomitchev 2015/10/15 15:00:57 We need to get rid of "new" here. This is probably
no sievers 2015/10/15 17:24:23 Oops, thanks, done.
+#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());
+#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
+}
+
+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())
+ 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
« no previous file with comments | « ui/aura/window_tree_host_platform.h ('k') | ui/aura/window_tree_host_win.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698