Mir
output.h
Go to the documentation of this file.
1 /*
2  * Copyright © 2016 Canonical Ltd.
3  *
4  * This program is free software: you can redistribute it and/or modify it
5  * under the terms of the GNU General Public License version 2 or 3 as
6  * published by the Free Software Foundation.
7  *
8  * This program is distributed in the hope that it will be useful,
9  * but WITHOUT ANY WARRANTY; without even the implied warranty of
10  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11  * GNU General Public License for more details.
12  *
13  * You should have received a copy of the GNU General Public License
14  * along with this program. If not, see <http://www.gnu.org/licenses/>.
15  */
16 
17 #ifndef MIRAL_OUTPUT_H
18 #define MIRAL_OUTPUT_H
19 
20 #include <mir_toolkit/common.h>
21 
22 #include <mir/geometry/rectangle.h>
23 #include <mir/int_wrapper.h>
24 
25 #include <memory>
26 
27 namespace mir { namespace graphics { struct DisplayConfigurationOutput; } }
28 
29 namespace miral
30 {
31 using namespace mir::geometry;
32 
33 class Output
34 {
35 public:
36 
37  struct PhysicalSizeMM { int width; int height; };
38 
39  enum class Type
40  {
41  unknown,
42  vga,
43  dvii,
44  dvid,
45  dvia,
46  composite,
47  svideo,
48  lvds,
49  component,
50  ninepindin,
52  hdmia,
53  hdmib,
54  tv,
55  edp
56  };
57 
58  explicit Output(const mir::graphics::DisplayConfigurationOutput &output);
59  Output(Output const&);
60  Output& operator=(Output const&);
61  ~Output();
62 
63  /// The type of the output.
64  auto type() const -> Type;
65 
66  /// The physical size of the output.
68 
69  /// Whether the output is connected.
70  auto connected() const -> bool;
71 
72  /// Whether the output is used in the configuration.
73  auto used() const -> bool;
74 
75  /// The current output pixel format.
76  auto pixel_format() const -> MirPixelFormat;
77 
78  /// refresh_rate in Hz
79  auto refresh_rate() const -> double;
80 
81  /// Current power mode
82  auto power_mode() const -> MirPowerMode;
83 
84  auto orientation() const -> MirOrientation;
85 
86  /// Requested scale factor for this output, for HiDPI support
87  auto scale() const -> float;
88 
89  /// Form factor of this output; phone display, tablet, monitor, TV, projector...
90  auto form_factor() const -> MirFormFactor;
91 
92  /// The logical rectangle occupied by the output, based on its position,
93  /// current mode and orientation (rotation)
94  auto extents() const -> Rectangle;
95 
96  /// Mir's internal output ID
97  /// mostly useful for matching against a miral::WindowInfo::output_id
98  auto id() const -> int;
99 
100  auto valid() const -> bool;
101 
102  auto is_same_output(Output const& other) const -> bool;
103 
104  /// A positive number if this output is part of a logical output group (aka a display wall)
105  /// A single display area will stretch across all outputs in a group
106  /// Zero if this output is not part of a logical group
107  auto logical_group_id() const -> int;
108 
109 private:
110  std::shared_ptr<mir::graphics::DisplayConfigurationOutput> self;
111 };
112 
113 bool operator==(Output::PhysicalSizeMM const& lhs, Output::PhysicalSizeMM const& rhs);
114 inline bool operator!=(Output::PhysicalSizeMM const& lhs, Output::PhysicalSizeMM const& rhs)
115 { return !(lhs == rhs); }
116 
117 auto equivalent_display_area(Output const& lhs, Output const& rhs) -> bool;
118 }
119 
120 #endif //MIRAL_OUTPUT_H

Copyright © 2012-2022 Canonical Ltd.
Generated on Tue Sep 13 03:20:30 UTC 2022
This documentation is licensed under the GPL version 2 or 3.