15f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)// Copyright 2014 The Chromium Authors. All rights reserved. 25f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)// found in the LICENSE file. 45f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 55f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "ui/ozone/platform/dri/dri_window.h" 65f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 71320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "base/bind.h" 85f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "ui/events/event.h" 903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)#include "ui/events/ozone/evdev/event_factory_evdev.h" 101320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "ui/events/ozone/events_ozone.h" 115f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "ui/events/platform/platform_event_source.h" 121320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "ui/ozone/platform/dri/dri_cursor.h" 131320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "ui/ozone/platform/dri/dri_window_delegate.h" 141320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "ui/ozone/platform/dri/dri_window_delegate_manager.h" 151320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "ui/ozone/platform/dri/dri_window_manager.h" 165f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "ui/platform_window/platform_window_delegate.h" 175f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 185f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)namespace ui { 195f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 205f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)DriWindow::DriWindow(PlatformWindowDelegate* delegate, 215f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) const gfx::Rect& bounds, 221320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci scoped_ptr<DriWindowDelegate> dri_window_delegate, 231320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EventFactoryEvdev* event_factory, 241320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci DriWindowDelegateManager* window_delegate_manager, 251320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci DriWindowManager* window_manager) 261320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci : delegate_(delegate), 271320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci bounds_(bounds), 281320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci widget_(dri_window_delegate->GetAcceleratedWidget()), 291320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci dri_window_delegate_(dri_window_delegate.get()), 301320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci event_factory_(event_factory), 311320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci window_delegate_manager_(window_delegate_manager), 321320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci window_manager_(window_manager) { 331320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci window_delegate_manager_->AddWindowDelegate(widget_, 341320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci dri_window_delegate.Pass()); 351320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci window_manager_->AddWindow(widget_, this); 365f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)} 375f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 385f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)DriWindow::~DriWindow() { 395f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) PlatformEventSource::GetInstance()->RemovePlatformEventDispatcher(this); 401320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci dri_window_delegate_->Shutdown(); 411320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci window_manager_->RemoveWindow(widget_); 421320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci window_delegate_manager_->RemoveWindowDelegate(widget_); 431320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 441320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 451320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccivoid DriWindow::Initialize() { 461320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci dri_window_delegate_->Initialize(); 471320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci dri_window_delegate_->OnBoundsChanged(bounds_); 481320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci delegate_->OnAcceleratedWidgetAvailable(widget_); 491320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci PlatformEventSource::GetInstance()->AddPlatformEventDispatcher(this); 505f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)} 515f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 525f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)void DriWindow::Show() {} 535f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 545f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)void DriWindow::Hide() {} 555f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 565f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)void DriWindow::Close() {} 575f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 585f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)void DriWindow::SetBounds(const gfx::Rect& bounds) { 595f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) bounds_ = bounds; 605f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) delegate_->OnBoundsChanged(bounds); 611320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci if (window_manager_->cursor()->GetCursorWindow() == widget_) 621320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci window_manager_->cursor()->HideCursor(); 631320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 641320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci dri_window_delegate_->OnBoundsChanged(bounds); 651320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 661320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci if (window_manager_->cursor()->GetCursorWindow() == widget_) 671320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci window_manager_->cursor()->ShowCursor(); 685f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)} 695f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 705f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)gfx::Rect DriWindow::GetBounds() { 715f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) return bounds_; 725f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)} 735f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 745f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)void DriWindow::SetCapture() {} 755f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 765f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)void DriWindow::ReleaseCapture() {} 775f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 785f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)void DriWindow::ToggleFullscreen() {} 795f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 805f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)void DriWindow::Maximize() {} 815f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 825f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)void DriWindow::Minimize() {} 835f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 845f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)void DriWindow::Restore() {} 855f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 8603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)void DriWindow::SetCursor(PlatformCursor cursor) { 871320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci window_manager_->cursor()->SetCursor(widget_, cursor); 8803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)} 895f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 9003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)void DriWindow::MoveCursorTo(const gfx::Point& location) { 9103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) event_factory_->WarpCursorTo(widget_, location); 9203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)} 935f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 945f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)bool DriWindow::CanDispatchEvent(const PlatformEvent& ne) { 955f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) DCHECK(ne); 965f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) Event* event = static_cast<Event*>(ne); 975f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) if (event->IsMouseEvent() || event->IsScrollEvent()) 981320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci return window_manager_->cursor()->GetCursorWindow() == widget_; 995f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 1005f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) return true; 1015f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)} 1025f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 1031320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciuint32_t DriWindow::DispatchEvent(const PlatformEvent& native_event) { 1041320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci DispatchEventFromNativeUiEvent( 1051320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci native_event, 1061320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci base::Bind(&PlatformWindowDelegate::DispatchEvent, 1071320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci base::Unretained(delegate_))); 1085f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) return POST_DISPATCH_STOP_PROPAGATION; 1095f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)} 1105f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 1115f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)} // namespace ui 112