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..ac3fab08b6e25f5abe34b43cff60e45e65f73f7c |
--- /dev/null |
+++ b/ui/aura/window_tree_host_platform.cc |
@@ -0,0 +1,175 @@ |
+// 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> |
dnicoara
2015/10/16 18:30:57
And this include can probably go to.
no sievers
2015/10/16 18:42:24
Done.
|
+ |
+#include "base/trace_event/trace_event.h" |
+#include "ui/aura/window_event_dispatcher.h" |
+#include "ui/compositor/compositor.h" |
+#include "ui/events/event.h" |
+#include "ui/gfx/screen.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/platform_window/win/win_window.h" |
+#endif |
+ |
+using std::max; |
dnicoara
2015/10/16 18:30:57
These don't seem to be used.
no sievers
2015/10/16 18:42:24
Done.
no sievers
2015/10/16 18:42:24
Done.
|
+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; |
+ |
+ window_->SetCursor(cursor.platform()); |
+} |
+ |
+void WindowTreeHostPlatform::MoveCursorToNative(const gfx::Point& location) { |
+ window_->MoveCursorTo(location); |
+} |
+ |
+void WindowTreeHostPlatform::OnCursorVisibilityChangedNative(bool show) { |
+ NOTIMPLEMENTED(); |
+} |
+ |
+void WindowTreeHostPlatform::OnBoundsChanged(const gfx::Rect& new_bounds) { |
+ float current_scale = compositor()->device_scale_factor(); |
+ float new_scale = gfx::Screen::GetScreenFor(window()) |
+ ->GetDisplayNearestWindow(window()) |
+ .device_scale_factor(); |
+ gfx::Rect old_bounds = bounds_; |
+ bounds_ = new_bounds; |
+ if (bounds_.origin() != old_bounds.origin()) { |
+ OnHostMoved(bounds_.origin()); |
+ } |
+ if (bounds_.size() != old_bounds.size() || current_scale != new_scale) { |
+ 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 |