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