platform_viewport_ozone.cc revision 6e8cce623b6e4fe0c9e4af605d675dd9d0338c38
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/event_factory_ozone.h"
12116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "ui/ozone/public/ozone_platform.h"
13116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "ui/ozone/public/surface_factory_ozone.h"
14116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "ui/platform_window/platform_window.h"
15116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "ui/platform_window/platform_window_delegate.h"
16116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
17116680a4aac90f2aa7413d9095a592090648e557Ben Murdochnamespace mojo {
18116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
196e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)// TODO(spang): Deduplicate with PlatformViewportX11.. but there's a hack
20116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch// in there that prevents this.
216e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)class PlatformViewportOzone : public PlatformViewport,
226e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)                              public ui::PlatformWindowDelegate {
23116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch public:
246e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  explicit PlatformViewportOzone(Delegate* delegate) : delegate_(delegate) {
25116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    ui::OzonePlatform::InitializeForUI();
26116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  }
27116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
286e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  virtual ~PlatformViewportOzone() {
29116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    // Destroy the platform-window while |this| is still alive.
30116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    platform_window_.reset();
31116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  }
32116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
33116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch private:
346e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  // Overridden from PlatformViewport:
35116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  virtual void Init(const gfx::Rect& bounds) OVERRIDE {
36116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    platform_window_ =
37116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch        ui::OzonePlatform::GetInstance()->CreatePlatformWindow(this, bounds);
38116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  }
39116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
40116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  virtual void Show() OVERRIDE { platform_window_->Show(); }
41116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
42116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  virtual void Hide() OVERRIDE { platform_window_->Hide(); }
43116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
44116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  virtual void Close() OVERRIDE { platform_window_->Close(); }
45116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
46116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  virtual gfx::Size GetSize() OVERRIDE {
47116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    return platform_window_->GetBounds().size();
48116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  }
49116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
50116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  virtual void SetBounds(const gfx::Rect& bounds) OVERRIDE {
51116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    platform_window_->SetBounds(bounds);
52116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  }
53116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
54116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  virtual void SetCapture() OVERRIDE { platform_window_->SetCapture(); }
55116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
56116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  virtual void ReleaseCapture() OVERRIDE { platform_window_->ReleaseCapture(); }
57116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
58116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  // ui::PlatformWindowDelegate:
59116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  virtual void OnBoundsChanged(const gfx::Rect& new_bounds) OVERRIDE {
60116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    delegate_->OnBoundsChanged(new_bounds);
61116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  }
62116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
63116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  virtual void OnDamageRect(const gfx::Rect& damaged_region) OVERRIDE {}
64116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
65116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  virtual void DispatchEvent(ui::Event* event) OVERRIDE {
66116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    delegate_->OnEvent(event);
67116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  }
68116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
69116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  virtual void OnCloseRequest() OVERRIDE { platform_window_->Close(); }
70116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
71116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  virtual void OnClosed() OVERRIDE { delegate_->OnDestroyed(); }
72116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
73116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  virtual void OnWindowStateChanged(ui::PlatformWindowState state) OVERRIDE {}
74116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
75116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  virtual void OnLostCapture() OVERRIDE {}
76116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
77116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  virtual void OnAcceleratedWidgetAvailable(
78116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch      gfx::AcceleratedWidget widget) OVERRIDE {
79116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    delegate_->OnAcceleratedWidgetAvailable(widget);
80116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  }
81116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
825f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  virtual void OnActivationChanged(bool active) OVERRIDE {}
835f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
84116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  scoped_ptr<ui::PlatformWindow> platform_window_;
856e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  Delegate* delegate_;
86116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
876e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(PlatformViewportOzone);
88116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch};
89116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
90116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch// static
916e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)scoped_ptr<PlatformViewport> PlatformViewport::Create(Delegate* delegate) {
926e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  return scoped_ptr<PlatformViewport>(
936e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)      new PlatformViewportOzone(delegate)).Pass();
94116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch}
95116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
96116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch}  // namespace mojo
97