1// Copyright 2014 The Chromium Authors. All rights reserved. 2// Use of this source code is governed by a BSD-style license that can be 3// found in the LICENSE file. 4 5#ifndef UI_OZONE_PLATFORM_CACA_CACA_WINDOW_H_ 6#define UI_OZONE_PLATFORM_CACA_CACA_WINDOW_H_ 7 8#include <caca.h> 9 10#include "base/debug/stack_trace.h" 11#include "base/macros.h" 12#include "base/memory/weak_ptr.h" 13#include "ui/events/platform/platform_event_dispatcher.h" 14#include "ui/gfx/geometry/size.h" 15#include "ui/gfx/native_widget_types.h" 16#include "ui/ozone/platform/caca/scoped_caca_types.h" 17#include "ui/platform_window/platform_window.h" 18 19namespace ui { 20 21class CacaEventSource; 22class CacaWindowManager; 23class PlatformWindowDelegate; 24 25// Basic initialization of Libcaca. This needs to be shared between SFO and EFO 26// since both need the |display_| to draw and process events respectively. 27// Note, |canvas_| needs to be here since it is needed for creating a 28// |display_|. 29class CacaWindow : public PlatformWindow, public PlatformEventDispatcher { 30 public: 31 CacaWindow(PlatformWindowDelegate* delegate, 32 CacaWindowManager* manager, 33 CacaEventSource* event_source, 34 const gfx::Rect& bounds); 35 virtual ~CacaWindow(); 36 37 bool Initialize(); 38 39 // Handlers for events received from libcaca. 40 void OnCacaQuit(); 41 void OnCacaResize(); 42 void OnCacaEvent(ui::Event* event); 43 44 // This is the Caca canvas size. 45 gfx::Size physical_size() const { return physical_size_; } 46 gfx::Size bitmap_size() const { return bitmap_size_; } 47 caca_display_t* display() const { return display_.get(); } 48 49 // PlatformWindow: 50 virtual gfx::Rect GetBounds() OVERRIDE; 51 virtual void SetBounds(const gfx::Rect& bounds) OVERRIDE; 52 virtual void Show() OVERRIDE; 53 virtual void Hide() OVERRIDE; 54 virtual void Close() OVERRIDE; 55 virtual void SetCapture() OVERRIDE; 56 virtual void ReleaseCapture() OVERRIDE; 57 virtual void ToggleFullscreen() OVERRIDE; 58 virtual void Maximize() OVERRIDE; 59 virtual void Minimize() OVERRIDE; 60 virtual void Restore() OVERRIDE; 61 virtual void SetCursor(PlatformCursor cursor) OVERRIDE; 62 virtual void MoveCursorTo(const gfx::Point& location) OVERRIDE; 63 64 // PlatformEventDispatcher: 65 virtual bool CanDispatchEvent(const PlatformEvent& event) OVERRIDE; 66 virtual uint32_t DispatchEvent(const PlatformEvent& event) OVERRIDE; 67 68 private: 69 // Event polling. 70 void TryProcessingEvent(); 71 72 // Sync sizes with libcaca. 73 void UpdateDisplaySize(); 74 75 PlatformWindowDelegate* delegate_; 76 CacaWindowManager* manager_; 77 CacaEventSource* event_source_; 78 gfx::AcceleratedWidget widget_; 79 80 ScopedCacaCanvas canvas_; 81 ScopedCacaDisplay display_; 82 83 // Size of the console in characters. This can be changed by setting 84 // CACA_GEOMETRY environment variable. 85 gfx::Size physical_size_; 86 87 // Size of the backing buffer we draw into. Size in pixels. 88 gfx::Size bitmap_size_; 89 90 base::WeakPtrFactory<CacaWindow> weak_ptr_factory_; 91 92 DISALLOW_COPY_AND_ASSIGN(CacaWindow); 93}; 94 95} // namespace ui 96 97#endif // UI_OZONE_PLATFORM_CACA_CACA_WINDOW_H_ 98