summaryrefslogtreecommitdiffstats
path: root/ui/wayland/wayland_screen.h
blob: 828762f9ebd7c1d9e179b91bc79e4bbf6e39cea7 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
// Copyright (c) 2011 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#ifndef UI_WAYLAND_WAYLAND_SCREEN_H_
#define UI_WAYLAND_WAYLAND_SCREEN_H_

#include <stdint.h>

#include <list>

#include "base/basictypes.h"
#include "ui/gfx/point.h"
#include "ui/gfx/rect.h"

struct wl_output;

namespace ui {

class WaylandDisplay;

// WaylandScreen objects keep track of the current outputs (screens/monitors)
// that are available to the application.
class WaylandScreen {
 public:
  WaylandScreen(WaylandDisplay* display, uint32_t id);
  ~WaylandScreen();

  // Returns the active allocation of the screen.
  gfx::Rect GetAllocation() const;

 private:
  // Used to store information regarding the available modes for the current
  // screen.
  // - (width, height): is the resolution of the screen
  // - refresh: is the refresh rate of the screen under this mode
  // - flags: contains extra information regarding the mode. The most important
  //          is the active mode flag.
  struct Mode {
    int32_t width, height, refresh, flags;
  };
  typedef std::list<Mode> Modes;

  // Callback functions that allows the display to initialize the screen's
  // position and available modes.
  static void OutputHandleGeometry(void* data,
                                   wl_output* output,
                                   int32_t x,
                                   int32_t y,
                                   int32_t physical_width,
                                   int32_t physical_height,
                                   int32_t subpixel,
                                   const char* make,
                                   const char* model);

  static void OutputHandleMode(void* data,
                               wl_output* wl_output,
                               uint32_t flags,
                               int32_t width,
                               int32_t height,
                               int32_t refresh);

  // The Wayland output this object wraps
  wl_output* output_;
  // The display that the output is associated with
  WaylandDisplay* display_;
  // The position of the screen. This is important in multi monitor display
  // since it provides the position of the screen in the virtual screen.
  gfx::Point position_;

  // List of supported modes
  Modes modes_;

  DISALLOW_COPY_AND_ASSIGN(WaylandScreen);
};

}  // namespace ui

#endif  // UI_WAYLAND_WAYLAND_SCREEN_H_