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