| Index: chromeos/display/output_configurator.h
|
| diff --git a/chromeos/display/output_configurator.h b/chromeos/display/output_configurator.h
|
| index a308a45478833113de3c9b4f98221c87a845ab78..fbc7804b217a4b4abcb11560c5c38c5f4a913473 100644
|
| --- a/chromeos/display/output_configurator.h
|
| +++ b/chromeos/display/output_configurator.h
|
| @@ -42,23 +42,41 @@ class CHROMEOS_EXPORT OutputConfigurator
|
| : public base::MessageLoop::Dispatcher,
|
| public base::MessagePumpObserver {
|
| public:
|
| + struct CoordinateTransformation {
|
| + // Initialized to the identity transformation.
|
| + CoordinateTransformation();
|
| +
|
| + float x_scale;
|
| + float x_offset;
|
| + float y_scale;
|
| + float y_offset;
|
| + };
|
| +
|
| // Information about an output's current state.
|
| struct OutputSnapshot {
|
| OutputSnapshot();
|
|
|
| RROutput output;
|
|
|
| - // CRTC that should be used for this output. Not necessarily the CRTC
|
| + // CRTC that should be used for this output. Not necessarily the CRTC
|
| // that XRandR reports is currently being used.
|
| RRCrtc crtc;
|
|
|
| + // Mode currently being used by the output.
|
| RRMode current_mode;
|
| +
|
| + // "Best" mode supported by the output.
|
| RRMode native_mode;
|
| +
|
| + // Mode used when displaying the same desktop on multiple outputs.
|
| RRMode mirror_mode;
|
| +
|
| + // User-selected mode for the output.
|
| RRMode selected_mode;
|
|
|
| + // Output's origin on the framebuffer.
|
| + int x;
|
| int y;
|
| - int height;
|
|
|
| bool is_internal;
|
| bool is_aspect_preserving_scaling;
|
| @@ -66,33 +84,14 @@ class CHROMEOS_EXPORT OutputConfigurator
|
| // XInput device ID or 0 if this output isn't a touchscreen.
|
| int touch_device_id;
|
|
|
| + CoordinateTransformation transform;
|
| +
|
| // Display id for this output.
|
| int64 display_id;
|
|
|
| bool has_display_id;
|
| };
|
|
|
| - struct CoordinateTransformation {
|
| - // Initialized to the identity transformation.
|
| - CoordinateTransformation();
|
| -
|
| - float x_scale;
|
| - float x_offset;
|
| - float y_scale;
|
| - float y_offset;
|
| - };
|
| -
|
| - struct CrtcConfig {
|
| - CrtcConfig();
|
| - CrtcConfig(RRCrtc crtc, int x, int y, RRMode mode, RROutput output);
|
| -
|
| - RRCrtc crtc;
|
| - int x;
|
| - int y;
|
| - RRMode mode;
|
| - RROutput output;
|
| - };
|
| -
|
| class Observer {
|
| public:
|
| virtual ~Observer() {}
|
| @@ -176,16 +175,20 @@ class CHROMEOS_EXPORT OutputConfigurator
|
| int* height,
|
| bool* interlaced) = 0;
|
|
|
| - // Calls XRRSetCrtcConfig() with the given options but some of our
|
| - // default output count and rotation arguments.
|
| - virtual void ConfigureCrtc(CrtcConfig* config) = 0;
|
| + // Calls XRRSetCrtcConfig() with the given options but some of our default
|
| + // output count and rotation arguments. Returns true on success.
|
| + virtual bool ConfigureCrtc(RRCrtc crtc,
|
| + RRMode mode,
|
| + RROutput output,
|
| + int x,
|
| + int y) = 0;
|
|
|
| // Called to set the frame buffer (underlying XRR "screen") size. Has
|
| // a side-effect of disabling all CRTCs.
|
| virtual void CreateFrameBuffer(
|
| int width,
|
| int height,
|
| - const std::vector<OutputConfigurator::CrtcConfig>& configs) = 0;
|
| + const std::vector<OutputConfigurator::OutputSnapshot>& outputs) = 0;
|
|
|
| // Configures XInput's Coordinate Transformation Matrix property.
|
| // |touch_device_id| the ID of the touchscreen device to configure.
|
| @@ -325,15 +328,17 @@ class CHROMEOS_EXPORT OutputConfigurator
|
| // Switches to the state specified in |output_state| and |power_state|.
|
| // If the hardware mirroring failed and |mirroring_controller_| is set,
|
| // it switches to |STATE_DUAL_EXTENDED| and calls |SetSoftwareMirroring()|
|
| - // to enable software based mirroing.
|
| - // On success, updates |output_state_| and |power_state_| and returns true.
|
| + // to enable software based mirroring.
|
| + // On success, updates |output_state_|, |power_state_|, and |cached_outputs_|
|
| + // and returns true.
|
| bool EnterStateOrFallBackToSoftwareMirroring(
|
| OutputState output_state,
|
| DisplayPowerState power_state,
|
| const std::vector<OutputSnapshot>& outputs);
|
|
|
| // Switches to the state specified in |output_state| and |power_state|.
|
| - // On success, updates |output_state_| and |power_state_| and returns true.
|
| + // On success, updates |output_state_|, |power_state_|, and
|
| + // |cached_outputs_| and returns true.
|
| bool EnterState(OutputState output_state,
|
| DisplayPowerState power_state,
|
| const std::vector<OutputSnapshot>& outputs);
|
| @@ -383,6 +388,10 @@ class CHROMEOS_EXPORT OutputConfigurator
|
| // The current power state.
|
| DisplayPowerState power_state_;
|
|
|
| + // Most-recently-used output configuration. Note that the actual
|
| + // configuration changes asynchronously.
|
| + std::vector<OutputSnapshot> cached_outputs_;
|
| +
|
| ObserverList<Observer> observers_;
|
|
|
| // The timer to delay configuring outputs. See also the comments in
|
|
|