Chromium Code Reviews| Index: monitor_reconfigure.h |
| diff --git a/monitor_reconfigure.h b/monitor_reconfigure.h |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..6d6d5fd9ab62b214366819f41cbaaa21394ac72f |
| --- /dev/null |
| +++ b/monitor_reconfigure.h |
| @@ -0,0 +1,97 @@ |
| +// Copyright (c) 2010 The Chromium OS Authors. All rights reserved. |
|
Daniel Erat
2011/04/13 23:33:26
nit: 2011
marcheu
2011/04/14 02:23:55
Done.
|
| +// Use of this source code is governed by a BSD-style license that can be |
| +// found in the LICENSE file. |
| + |
| +#ifndef POWER_MANAGER_MONITOR_RECONFIGURE_MAIN_H_ |
| +#define POWER_MANAGER_MONITOR_RECONFIGURE_MAIN_H_ |
| + |
| +#include <map> |
| +#include <string> |
| +#include <vector> |
| + |
| +#include <X11/Xlib.h> |
| +#include <X11/extensions/Xrandr.h> |
| + |
| +#include "power_manager/backlight_controller.h" |
| +#include "power_manager/resolution_selector.h" |
| +#include "power_manager/udev_listener.h" |
| + |
| +namespace power_manager { |
| + |
| +class MonitorReconfigureMain; |
| + |
| +// Callback class for udev events. |
| +class MonitorReconfigureCallBack : public UdevCallBack { |
| + public: |
| + MonitorReconfigureCallBack(MonitorReconfigureMain* monitor_reconfigure) |
| + : monitor_reconfigure_(monitor_reconfigure) {} |
| + |
| + void CallBack(GIOChannel* source, GIOCondition condition); |
| + private: |
| + MonitorReconfigureMain* monitor_reconfigure_; |
| +}; |
| + |
| +// MonitorReconfigureMain is the class responsible for setting the external |
| +// monitor to the max resolution based on the modes supported by the native |
| +// monitor and the external monitor. |
| +class MonitorReconfigureMain { |
| + public: |
| + // |window| is the root window. |
| + MonitorReconfigureMain(BacklightController* backlight_ctl); |
| + ~MonitorReconfigureMain(); |
| + |
| + // Initialization. |
| + bool Init(); |
| + |
| + // Main entry point. |
| + void Run(); |
| + |
| + private: |
| + // Initializes the |lcd_output_| and |external_output_| members. |
| + void DetermineOutputs(); |
| + |
| + // Returns whether an external monitor is connected. |
| + bool IsExternalMonitorConnected(); |
| + |
| + // Sorts |output_info|'s modes by decreasing number of pixels, storing the |
| + // results in |modes_out|. |
| + void SortModesByResolution(RROutput output, |
| + std::vector<ResolutionSelector::Mode>* modes_out); |
| + |
| + // Set the resolution for a particular device or for the screen. |
| + bool SetDeviceResolution(RROutput output, |
| + const XRROutputInfo* output_info, |
| + const ResolutionSelector::Mode& resolution); |
| + bool SetScreenResolution(const ResolutionSelector::Mode& resolution); |
| + |
| + // Disable output to a device. |
| + bool DisableDevice(const XRROutputInfo* output_info); |
| + |
| + // Mapping between mode XIDs and mode information structures. |
| + std::map<int, XRRModeInfo*> mode_map_; |
| + |
| + // X Resources needed between functions. |
| + Display* display_; |
| + Window window_; |
| + XRRScreenResources* screen_info_; |
| + |
| + RROutput lcd_output_; |
| + XRROutputInfo* lcd_output_info_; |
| + |
| + RROutput external_output_; |
| + XRROutputInfo* external_output_info_; |
| + |
| + // Not owned. |
| + BacklightController* backlight_ctl_; |
| + |
| + // Callback for the Udev listener. |
| + MonitorReconfigureCallBack* callback_; |
| + |
| + // Udev linstener. |
| + UdevListener* listener_; |
| + |
| +}; |
| + |
| +} // namespace power_manager |
| + |
| +#endif // POWER_MANAGER_MONITOR_RECONFIGURE_MAIN_H_ |