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 5116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#ifndef UI_OZONE_PLATFORM_CACA_CACA_WINDOW_H_ 6116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#define UI_OZONE_PLATFORM_CACA_CACA_WINDOW_H_ 7116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 8116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include <caca.h> 9116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 10116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "base/debug/stack_trace.h" 11116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "base/macros.h" 12116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "base/memory/weak_ptr.h" 13116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "ui/events/platform/platform_event_dispatcher.h" 14116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "ui/gfx/geometry/size.h" 15116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "ui/gfx/native_widget_types.h" 16116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "ui/ozone/platform/caca/scoped_caca_types.h" 17116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "ui/platform_window/platform_window.h" 18116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 19116680a4aac90f2aa7413d9095a592090648e557Ben Murdochnamespace ui { 20116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 2103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)class CacaEventSource; 22116680a4aac90f2aa7413d9095a592090648e557Ben Murdochclass CacaWindowManager; 23116680a4aac90f2aa7413d9095a592090648e557Ben Murdochclass PlatformWindowDelegate; 24116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 25116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch// Basic initialization of Libcaca. This needs to be shared between SFO and EFO 26116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch// since both need the |display_| to draw and process events respectively. 27116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch// Note, |canvas_| needs to be here since it is needed for creating a 28116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch// |display_|. 29116680a4aac90f2aa7413d9095a592090648e557Ben Murdochclass CacaWindow : public PlatformWindow, public PlatformEventDispatcher { 30116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch public: 31116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch CacaWindow(PlatformWindowDelegate* delegate, 32116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch CacaWindowManager* manager, 3303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) CacaEventSource* event_source, 34116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch const gfx::Rect& bounds); 35116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch virtual ~CacaWindow(); 36116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 37116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch bool Initialize(); 38116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 39116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // Handlers for events received from libcaca. 40116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch void OnCacaQuit(); 41116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch void OnCacaResize(); 42116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch void OnCacaEvent(ui::Event* event); 43116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 44116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // This is the Caca canvas size. 45116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch gfx::Size physical_size() const { return physical_size_; } 46116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch gfx::Size bitmap_size() const { return bitmap_size_; } 47116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch caca_display_t* display() const { return display_.get(); } 48116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 49116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // PlatformWindow: 50116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch virtual gfx::Rect GetBounds() OVERRIDE; 51116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch virtual void SetBounds(const gfx::Rect& bounds) OVERRIDE; 52116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch virtual void Show() OVERRIDE; 53116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch virtual void Hide() OVERRIDE; 54116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch virtual void Close() OVERRIDE; 55116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch virtual void SetCapture() OVERRIDE; 56116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch virtual void ReleaseCapture() OVERRIDE; 57116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch virtual void ToggleFullscreen() OVERRIDE; 58116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch virtual void Maximize() OVERRIDE; 59116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch virtual void Minimize() OVERRIDE; 60116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch virtual void Restore() OVERRIDE; 615f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) virtual void SetCursor(PlatformCursor cursor) OVERRIDE; 625f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) virtual void MoveCursorTo(const gfx::Point& location) OVERRIDE; 63116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 64116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // PlatformEventDispatcher: 65116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch virtual bool CanDispatchEvent(const PlatformEvent& event) OVERRIDE; 66116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch virtual uint32_t DispatchEvent(const PlatformEvent& event) OVERRIDE; 67116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 68116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch private: 69116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // Event polling. 70116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch void TryProcessingEvent(); 71116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 72116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // Sync sizes with libcaca. 73116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch void UpdateDisplaySize(); 74116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 75116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch PlatformWindowDelegate* delegate_; 76116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch CacaWindowManager* manager_; 7703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) CacaEventSource* event_source_; 78116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch gfx::AcceleratedWidget widget_; 79116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 80116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ScopedCacaCanvas canvas_; 81116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ScopedCacaDisplay display_; 82116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 83116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // Size of the console in characters. This can be changed by setting 84116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // CACA_GEOMETRY environment variable. 85116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch gfx::Size physical_size_; 86116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 87116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // Size of the backing buffer we draw into. Size in pixels. 88116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch gfx::Size bitmap_size_; 89116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 90116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch base::WeakPtrFactory<CacaWindow> weak_ptr_factory_; 91116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 92116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch DISALLOW_COPY_AND_ASSIGN(CacaWindow); 93116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch}; 94116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 95116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch} // namespace ui 96116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 97116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#endif // UI_OZONE_PLATFORM_CACA_CACA_WINDOW_H_ 98