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