1116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch// Copyright 2014 The Chromium Authors. All rights reserved.
2116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch// Use of this source code is governed by a BSD-style license that can be
3116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch// found in the LICENSE file.
4116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
56e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#include "mojo/services/native_viewport/platform_viewport.h"
6116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
7116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "ui/events/event.h"
8116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "ui/events/platform/platform_event_dispatcher.h"
9116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "ui/events/platform/platform_event_source.h"
10116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "ui/ozone/public/cursor_factory_ozone.h"
11116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "ui/ozone/public/ozone_platform.h"
12116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "ui/ozone/public/surface_factory_ozone.h"
13116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "ui/platform_window/platform_window.h"
14116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "ui/platform_window/platform_window_delegate.h"
15116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
16116680a4aac90f2aa7413d9095a592090648e557Ben Murdochnamespace mojo {
17116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
186e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)// TODO(spang): Deduplicate with PlatformViewportX11.. but there's a hack
19116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch// in there that prevents this.
206e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)class PlatformViewportOzone : public PlatformViewport,
216e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)                              public ui::PlatformWindowDelegate {
22116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch public:
236e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  explicit PlatformViewportOzone(Delegate* delegate) : delegate_(delegate) {
24116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    ui::OzonePlatform::InitializeForUI();
25116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  }
26116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
276e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  virtual ~PlatformViewportOzone() {
28116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    // Destroy the platform-window while |this| is still alive.
29116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    platform_window_.reset();
30116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  }
31116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
32116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch private:
336e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  // Overridden from PlatformViewport:
34116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  virtual void Init(const gfx::Rect& bounds) OVERRIDE {
35116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    platform_window_ =
36116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch        ui::OzonePlatform::GetInstance()->CreatePlatformWindow(this, bounds);
37116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  }
38116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
39116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  virtual void Show() OVERRIDE { platform_window_->Show(); }
40116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
41116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  virtual void Hide() OVERRIDE { platform_window_->Hide(); }
42116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
43116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  virtual void Close() OVERRIDE { platform_window_->Close(); }
44116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
45116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  virtual gfx::Size GetSize() OVERRIDE {
46116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    return platform_window_->GetBounds().size();
47116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  }
48116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
49116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  virtual void SetBounds(const gfx::Rect& bounds) OVERRIDE {
50116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    platform_window_->SetBounds(bounds);
51116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  }
52116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
53116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  virtual void SetCapture() OVERRIDE { platform_window_->SetCapture(); }
54116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
55116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  virtual void ReleaseCapture() OVERRIDE { platform_window_->ReleaseCapture(); }
56116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
57116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  // ui::PlatformWindowDelegate:
58116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  virtual void OnBoundsChanged(const gfx::Rect& new_bounds) OVERRIDE {
59116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    delegate_->OnBoundsChanged(new_bounds);
60116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  }
61116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
62116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  virtual void OnDamageRect(const gfx::Rect& damaged_region) OVERRIDE {}
63116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
64116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  virtual void DispatchEvent(ui::Event* event) OVERRIDE {
65116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    delegate_->OnEvent(event);
66116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  }
67116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
68116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  virtual void OnCloseRequest() OVERRIDE { platform_window_->Close(); }
69116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
70116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  virtual void OnClosed() OVERRIDE { delegate_->OnDestroyed(); }
71116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
72116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  virtual void OnWindowStateChanged(ui::PlatformWindowState state) OVERRIDE {}
73116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
74116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  virtual void OnLostCapture() OVERRIDE {}
75116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
76116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  virtual void OnAcceleratedWidgetAvailable(
77116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch      gfx::AcceleratedWidget widget) OVERRIDE {
78116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    delegate_->OnAcceleratedWidgetAvailable(widget);
79116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  }
80116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
815f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  virtual void OnActivationChanged(bool active) OVERRIDE {}
825f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
83116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  scoped_ptr<ui::PlatformWindow> platform_window_;
846e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  Delegate* delegate_;
85116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
866e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(PlatformViewportOzone);
87116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch};
88116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
89116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch// static
906e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)scoped_ptr<PlatformViewport> PlatformViewport::Create(Delegate* delegate) {
916e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  return scoped_ptr<PlatformViewport>(
926e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)      new PlatformViewportOzone(delegate)).Pass();
93116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch}
94116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
95116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch}  // namespace mojo
96