| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #ifndef CHROMEOS_DISPLAY_OUTPUT_CONFIGURATOR_H_ | 5 #ifndef CHROMEOS_DISPLAY_OUTPUT_CONFIGURATOR_H_ |
| 6 #define CHROMEOS_DISPLAY_OUTPUT_CONFIGURATOR_H_ | 6 #define CHROMEOS_DISPLAY_OUTPUT_CONFIGURATOR_H_ |
| 7 | 7 |
| 8 #include <map> | 8 #include <map> |
| 9 #include <string> | 9 #include <string> |
| 10 #include <vector> | 10 #include <vector> |
| (...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 43 ModeInfo(int width, int height, bool interlaced, float refresh_rate); | 43 ModeInfo(int width, int height, bool interlaced, float refresh_rate); |
| 44 | 44 |
| 45 int width; | 45 int width; |
| 46 int height; | 46 int height; |
| 47 bool interlaced; | 47 bool interlaced; |
| 48 float refresh_rate; | 48 float refresh_rate; |
| 49 }; | 49 }; |
| 50 | 50 |
| 51 typedef std::map<RRMode, ModeInfo> ModeInfoMap; | 51 typedef std::map<RRMode, ModeInfo> ModeInfoMap; |
| 52 | 52 |
| 53 struct CoordinateTransformation { | |
| 54 // Initialized to the identity transformation. | |
| 55 CoordinateTransformation(); | |
| 56 | |
| 57 float x_scale; | |
| 58 float x_offset; | |
| 59 float y_scale; | |
| 60 float y_offset; | |
| 61 }; | |
| 62 | |
| 63 // Information about an output's current state. | 53 // Information about an output's current state. |
| 64 struct OutputSnapshot { | 54 struct OutputSnapshot { |
| 65 OutputSnapshot(); | 55 OutputSnapshot(); |
| 66 ~OutputSnapshot(); | 56 ~OutputSnapshot(); |
| 67 | 57 |
| 68 RROutput output; | 58 RROutput output; |
| 69 | 59 |
| 70 // CRTC that should be used for this output. Not necessarily the CRTC | 60 // CRTC that should be used for this output. Not necessarily the CRTC |
| 71 // that XRandR reports is currently being used. | 61 // that XRandR reports is currently being used. |
| 72 RRCrtc crtc; | 62 RRCrtc crtc; |
| (...skipping 22 matching lines...) Expand all Loading... |
| 95 | 85 |
| 96 // The type of output. | 86 // The type of output. |
| 97 ui::OutputType type; | 87 ui::OutputType type; |
| 98 | 88 |
| 99 // Map from mode IDs to details about the corresponding modes. | 89 // Map from mode IDs to details about the corresponding modes. |
| 100 ModeInfoMap mode_infos; | 90 ModeInfoMap mode_infos; |
| 101 | 91 |
| 102 // XInput device ID or 0 if this output isn't a touchscreen. | 92 // XInput device ID or 0 if this output isn't a touchscreen. |
| 103 int touch_device_id; | 93 int touch_device_id; |
| 104 | 94 |
| 105 CoordinateTransformation transform; | |
| 106 | |
| 107 // Display id for this output. | 95 // Display id for this output. |
| 108 int64 display_id; | 96 int64 display_id; |
| 109 | 97 |
| 110 bool has_display_id; | 98 bool has_display_id; |
| 111 | 99 |
| 112 // This output's index in the array returned by XRandR. Stable even as | 100 // This output's index in the array returned by XRandR. Stable even as |
| 113 // outputs are connected or disconnected. | 101 // outputs are connected or disconnected. |
| 114 int index; | 102 int index; |
| 115 }; | 103 }; |
| 116 | 104 |
| (...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 160 public: | 148 public: |
| 161 virtual ~TouchscreenDelegate() {} | 149 virtual ~TouchscreenDelegate() {} |
| 162 | 150 |
| 163 // Searches for touchscreens among input devices, | 151 // Searches for touchscreens among input devices, |
| 164 // and tries to match them up to screens in |outputs|. | 152 // and tries to match them up to screens in |outputs|. |
| 165 // |outputs| is an array of detected screens. | 153 // |outputs| is an array of detected screens. |
| 166 // If a touchscreen with same resolution as an output's native mode | 154 // If a touchscreen with same resolution as an output's native mode |
| 167 // is detected, its id will be stored in this output. | 155 // is detected, its id will be stored in this output. |
| 168 virtual void AssociateTouchscreens( | 156 virtual void AssociateTouchscreens( |
| 169 std::vector<OutputSnapshot>* outputs) = 0; | 157 std::vector<OutputSnapshot>* outputs) = 0; |
| 170 | |
| 171 // Configures XInput's Coordinate Transformation Matrix property. | |
| 172 // |touch_device_id| the ID of the touchscreen device to configure. | |
| 173 // |ctm| contains the desired transformation parameters. The offsets | |
| 174 // in it should be normalized so that 1 corresponds to the X or Y axis | |
| 175 // size for the corresponding offset. | |
| 176 virtual void ConfigureCTM(int touch_device_id, | |
| 177 const CoordinateTransformation& ctm) = 0; | |
| 178 }; | 158 }; |
| 179 | 159 |
| 180 // Helper class used by tests. | 160 // Helper class used by tests. |
| 181 class TestApi { | 161 class TestApi { |
| 182 public: | 162 public: |
| 183 TestApi(OutputConfigurator* configurator) | 163 TestApi(OutputConfigurator* configurator) |
| 184 : configurator_(configurator) {} | 164 : configurator_(configurator) {} |
| 185 ~TestApi() {} | 165 ~TestApi() {} |
| 186 | 166 |
| 187 // If |configure_timer_| is started, stops the timer, runs | 167 // If |configure_timer_| is started, stops the timer, runs |
| (...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 219 // Returns the mode within |output| that matches the given size with highest | 199 // Returns the mode within |output| that matches the given size with highest |
| 220 // refresh rate. Returns None if no matching output was found. | 200 // refresh rate. Returns None if no matching output was found. |
| 221 static RRMode FindOutputModeMatchingSize(const OutputSnapshot& output, | 201 static RRMode FindOutputModeMatchingSize(const OutputSnapshot& output, |
| 222 int width, | 202 int width, |
| 223 int height); | 203 int height); |
| 224 | 204 |
| 225 OutputConfigurator(); | 205 OutputConfigurator(); |
| 226 virtual ~OutputConfigurator(); | 206 virtual ~OutputConfigurator(); |
| 227 | 207 |
| 228 ui::OutputState output_state() const { return output_state_; } | 208 ui::OutputState output_state() const { return output_state_; } |
| 209 // This setter is only for testing. |
| 210 void set_output_state(ui::OutputState new_state) { |
| 211 output_state_ = new_state; |
| 212 } |
| 213 |
| 229 DisplayPowerState power_state() const { return power_state_; } | 214 DisplayPowerState power_state() const { return power_state_; } |
| 230 const std::vector<OutputSnapshot>& cached_outputs() const { | 215 const std::vector<OutputSnapshot>& cached_outputs() const { |
| 231 return cached_outputs_; | 216 return cached_outputs_; |
| 232 } | 217 } |
| 233 | 218 |
| 234 void set_state_controller(StateController* controller) { | 219 void set_state_controller(StateController* controller) { |
| 235 state_controller_ = controller; | 220 state_controller_ = controller; |
| 236 } | 221 } |
| 237 void set_mirroring_controller(SoftwareMirroringController* controller) { | 222 void set_mirroring_controller(SoftwareMirroringController* controller) { |
| 238 mirroring_controller_ = controller; | 223 mirroring_controller_ = controller; |
| (...skipping 126 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 365 | 350 |
| 366 // Switches to the state specified in |output_state| and |power_state|. | 351 // Switches to the state specified in |output_state| and |power_state|. |
| 367 // On success, updates |output_state_|, |power_state_|, and | 352 // On success, updates |output_state_|, |power_state_|, and |
| 368 // |cached_outputs_| and returns true. | 353 // |cached_outputs_| and returns true. |
| 369 bool EnterState(ui::OutputState output_state, DisplayPowerState power_state); | 354 bool EnterState(ui::OutputState output_state, DisplayPowerState power_state); |
| 370 | 355 |
| 371 // Returns the output state that should be used with |cached_outputs_| while | 356 // Returns the output state that should be used with |cached_outputs_| while |
| 372 // in |power_state|. | 357 // in |power_state|. |
| 373 ui::OutputState ChooseOutputState(DisplayPowerState power_state) const; | 358 ui::OutputState ChooseOutputState(DisplayPowerState power_state) const; |
| 374 | 359 |
| 375 // Computes the relevant transformation for mirror mode. | |
| 376 // |output| is the output on which mirror mode is being applied. | |
| 377 // Returns the transformation or identity if computations fail. | |
| 378 CoordinateTransformation GetMirrorModeCTM( | |
| 379 const OutputConfigurator::OutputSnapshot& output); | |
| 380 | |
| 381 // Computes the relevant transformation for extended mode. | |
| 382 // |output| is the output on which extended mode is being applied. | |
| 383 // |width| and |height| are the width and height of the combined framebuffer. | |
| 384 // Returns the transformation or identity if computations fail. | |
| 385 CoordinateTransformation GetExtendedModeCTM( | |
| 386 const OutputConfigurator::OutputSnapshot& output, | |
| 387 int framebuffer_width, | |
| 388 int frame_buffer_height); | |
| 389 | |
| 390 // Returns the ratio between mirrored mode area and native mode area: | 360 // Returns the ratio between mirrored mode area and native mode area: |
| 391 // (mirror_mode_width * mirrow_mode_height) / (native_width * native_height) | 361 // (mirror_mode_width * mirrow_mode_height) / (native_width * native_height) |
| 392 float GetMirroredDisplayAreaRatio( | 362 float GetMirroredDisplayAreaRatio( |
| 393 const OutputConfigurator::OutputSnapshot& output); | 363 const OutputConfigurator::OutputSnapshot& output); |
| 394 | 364 |
| 395 // Applies output protections according to requests. | 365 // Applies output protections according to requests. |
| 396 bool ApplyProtections(const DisplayProtections& requests); | 366 bool ApplyProtections(const DisplayProtections& requests); |
| 397 | 367 |
| 398 StateController* state_controller_; | 368 StateController* state_controller_; |
| 399 SoftwareMirroringController* mirroring_controller_; | 369 SoftwareMirroringController* mirroring_controller_; |
| (...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 441 ProtectionRequests client_protection_requests_; | 411 ProtectionRequests client_protection_requests_; |
| 442 | 412 |
| 443 DISALLOW_COPY_AND_ASSIGN(OutputConfigurator); | 413 DISALLOW_COPY_AND_ASSIGN(OutputConfigurator); |
| 444 }; | 414 }; |
| 445 | 415 |
| 446 typedef std::vector<OutputConfigurator::OutputSnapshot> OutputSnapshotList; | 416 typedef std::vector<OutputConfigurator::OutputSnapshot> OutputSnapshotList; |
| 447 | 417 |
| 448 } // namespace chromeos | 418 } // namespace chromeos |
| 449 | 419 |
| 450 #endif // CHROMEOS_DISPLAY_OUTPUT_CONFIGURATOR_H_ | 420 #endif // CHROMEOS_DISPLAY_OUTPUT_CONFIGURATOR_H_ |
| OLD | NEW |