1 // Copyright 2018 The Fuchsia 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 #pragma once
6 
7 #include <fbl/string.h>
8 #include <fbl/vector.h>
9 #include <zircon/pixelformat.h>
10 
11 #include "fuchsia/hardware/display/c/fidl.h"
12 
13 class Display {
14 public:
15     Display(fuchsia_hardware_display_Info* info);
16 
17     void Init(zx_handle_t dc_handle);
18 
format()19     zx_pixel_format_t format() const { return pixel_formats_[format_idx_]; }
mode()20     fuchsia_hardware_display_Mode mode() const { return modes_[mode_idx_]; }
cursor()21     fuchsia_hardware_display_CursorInfo cursor() const { return cursors_[0]; }
id()22     uint64_t id() const { return id_; }
23 
set_format_idx(uint32_t idx)24     bool set_format_idx(uint32_t idx) {
25         format_idx_ = idx;
26         return format_idx_ < pixel_formats_.size();
27     }
28 
set_mode_idx(uint32_t idx)29     bool set_mode_idx(uint32_t idx) {
30         mode_idx_ = idx;
31         return mode_idx_ < modes_.size();
32     }
33 
set_grayscale(bool grayscale)34     void set_grayscale(bool grayscale) {
35         grayscale_ = grayscale;
36     }
37 
38     void Dump();
39 
40 private:
41     uint32_t format_idx_ = 0;
42     uint32_t mode_idx_ = 0;
43     bool grayscale_ = false;
44 
45     uint64_t id_;
46     fbl::Vector<zx_pixel_format_t> pixel_formats_;
47     fbl::Vector<fuchsia_hardware_display_Mode> modes_;
48     fbl::Vector<fuchsia_hardware_display_CursorInfo> cursors_;
49 
50     fbl::String manufacturer_name_;
51     fbl::String monitor_name_;
52     fbl::String monitor_serial_;
53 };
54