Chromium Code Reviews| Index: chromeos/display/output_configurator.h |
| diff --git a/chromeos/display/output_configurator.h b/chromeos/display/output_configurator.h |
| index 5891785381cb22161e41415a98e62b8fd00679b1..52ab71ae63c520ecff210cc98eb4b3a2ae59cd9f 100644 |
| --- a/chromeos/display/output_configurator.h |
| +++ b/chromeos/display/output_configurator.h |
| @@ -44,13 +44,16 @@ class CHROMEOS_EXPORT OutputConfigurator |
| public: |
| struct ModeInfo { |
| ModeInfo(); |
| - ModeInfo(int width, int height, bool interlaced); |
| + ModeInfo(int width, int height, bool interlaced, float refresh_rate); |
| int width; |
| int height; |
| bool interlaced; |
| + float refresh_rate; |
| }; |
| + typedef std::map<RRMode, ModeInfo> ModeInfoMap; |
| + |
| struct CoordinateTransformation { |
| // Initialized to the identity transformation. |
| CoordinateTransformation(); |
| @@ -96,7 +99,7 @@ class CHROMEOS_EXPORT OutputConfigurator |
| bool is_aspect_preserving_scaling; |
| // Map from mode IDs to details about the corresponding modes. |
| - std::map<RRMode, ModeInfo> mode_infos; |
| + ModeInfoMap mode_infos; |
| // XInput device ID or 0 if this output isn't a touchscreen. |
| int touch_device_id; |
| @@ -160,8 +163,6 @@ class CHROMEOS_EXPORT OutputConfigurator |
| public: |
| virtual ~Delegate() {} |
| - virtual void SetPanelFittingEnabled(bool enabled) = 0; |
| - |
| // Initializes the XRandR extension, saving the base event ID to |
| // |event_base|. |
| virtual void InitXRandRExtension(int* event_base) = 0; |
| @@ -187,10 +188,13 @@ class CHROMEOS_EXPORT OutputConfigurator |
| // Enables DPMS and forces it to the "on" state. |
| virtual void ForceDPMSOn() = 0; |
| - // Returns information about the current outputs. |
| - // This method may block for 60 milliseconds or more. |
| - virtual std::vector<OutputSnapshot> GetOutputs( |
| - const StateController* state_controller) = 0; |
| + // Returns information about the current outputs. This method may block for |
| + // 60 milliseconds or more. The returned outputs are not fully initialized; |
| + // the rest of the work happens in OutputConfigurator::GetOutputs(). |
| + virtual std::vector<OutputSnapshot> GetOutputs() = 0; |
| + |
| + // Adds |mode| to |output|. |
| + virtual void AddOutputMode(RROutput output, RRMode mode) = 0; |
| // Calls XRRSetCrtcConfig() with the given options but some of our default |
| // output count and rotation arguments. Returns true on success. |
| @@ -271,6 +275,12 @@ class CHROMEOS_EXPORT OutputConfigurator |
| static const ModeInfo* GetModeInfo(const OutputSnapshot& output, |
| RRMode mode); |
| + // Returns the mode within |output| that matches the given size with highest |
| + // refresh rate. Returns None if no matching output was found. |
| + static RRMode FindOutputModeMatchingSize(const OutputSnapshot& output, |
| + int width, |
| + int height); |
| + |
| OutputConfigurator(); |
| virtual ~OutputConfigurator(); |
| @@ -349,7 +359,29 @@ class CHROMEOS_EXPORT OutputConfigurator |
| void ScheduleConfigureOutputs(); |
| private: |
| - // Configure outputs. |
| + // Returns currently-connected outputs. This method is a wrapper around |
| + // |delegate_->GetOutputs()| that does additional work, like finding the |
| + // mirror mode and setting user-preferred modes. Note that the server must |
| + // be grabbed via |delegate_->GrabServer()| first. |
| + std::vector<OutputSnapshot> GetOutputs(); |
| + |
| + // Helper method for GetOutputs() that initializes the passed-in outputs' |
| + // |mirror_mode| fields by looking for a mode in |internal_output| and |
| + // |external_output| having the same resolution. Returns false if a shared |
| + // mode wasn't found or created. |
| + // |
| + // |try_creating| allows creating a panel-fitting mode for |internal_output| |
|
oshima
2013/09/17 15:22:14
nit: isn't it better to call this |try_panel_fitti
Daniel Erat
2013/09/17 15:53:27
Sure, done. (Also renamed the method to FindMirror
|
| + // instead of only searching for a matching mode (note that it may lead to a |
| + // crash if |internal_info| is not capable of panel fitting). |
| + // |
| + // |preserve_aspect| limits the search/creation only to the modes having the |
| + // native aspect ratio of |external_output|. |
| + bool FindOrCreateMirrorMode(OutputSnapshot* internal_output, |
| + OutputSnapshot* external_output, |
| + bool try_creating, |
| + bool preserve_aspect); |
| + |
| + // Configures outputs. |
| void ConfigureOutputs(); |
| // Notifies observers about an attempted state change. |
| @@ -393,6 +425,9 @@ class CHROMEOS_EXPORT OutputConfigurator |
| SoftwareMirroringController* mirroring_controller_; |
| scoped_ptr<Delegate> delegate_; |
| + // Used to enable modes which rely on panel fitting. |
| + bool is_panel_fitting_enabled_; |
| + |
| // Key of the map is the touch display's id, and the value of the map is the |
| // touch display's area ratio in mirror mode defined as : |
| // mirror_mode_area / native_mode_area. |