Chromium Code Reviews| OLD | NEW |
|---|---|
| (Empty) | |
| 1 // Copyright (c) 2011 The Chromium OS Authors. All rights reserved. | |
| 2 // Use of this source code is governed by a BSD-style license that can be | |
| 3 // found in the LICENSE file. | |
| 4 | |
| 5 #ifndef POWER_MANAGER_RESOLUTION_SELECTOR_H_ | |
| 6 #define POWER_MANAGER_RESOLUTION_SELECTOR_H_ | |
| 7 | |
| 8 #include <string> | |
| 9 #include <vector> | |
| 10 | |
| 11 #include "base/basictypes.h" | |
| 12 | |
| 13 namespace power_manager { | |
| 14 | |
| 15 // ResolutionSelector takes the sets of resolutions supported by the | |
| 16 // built-in and external displays as input and attempts to choose a shared | |
| 17 // resolution that will work well on both devices. | |
| 18 class ResolutionSelector { | |
| 19 public: | |
| 20 // A single mode supported by a device, equivalent to the XRRModeInfo | |
| 21 // struct. | |
| 22 struct Mode { | |
| 23 Mode(int width, int height, std::string name, int id) | |
|
tfarina
2011/04/15 15:00:37
Could you move the implementation to the source fi
marcheu
2011/04/15 17:32:23
Done.
| |
| 24 : width(width), | |
| 25 height(height), | |
| 26 name(name), | |
| 27 id(id) { | |
| 28 } | |
| 29 | |
| 30 Mode() | |
| 31 : width(0), | |
| 32 height(0), | |
| 33 name(""), | |
| 34 id(0) { | |
| 35 } | |
| 36 // Mode's dimensions. | |
| 37 int width; | |
| 38 int height; | |
| 39 | |
| 40 // Mode's name from XRandR. This uniquely describes the mode and can | |
| 41 // be used to set the devices's resolution later. | |
| 42 std::string name; | |
| 43 | |
| 44 // The mode id, used for setting this mode. | |
| 45 unsigned id; | |
| 46 }; | |
| 47 | |
| 48 // Maximum screen size for the external output at which we assume that | |
| 49 // it's a projector (as opposed to a monitor) and try to find a size that | |
| 50 // will also fit on the LCD display. Above this, we just use the | |
| 51 // external output's maximum resolution, even if it doesn't fit on the | |
| 52 // LCD. | |
| 53 static const int kMaxProjectorPixels; | |
|
tfarina
2011/04/15 15:00:37
Is this constant going to be used by someone else?
marcheu
2011/04/15 17:32:23
No it's used by the unittest. Please look at the c
| |
| 54 | |
| 55 ResolutionSelector() {} | |
|
tfarina
2011/04/15 15:00:37
please, move the implementation to the source file
marcheu
2011/04/15 17:32:23
Done.
| |
| 56 ~ResolutionSelector() {} | |
| 57 | |
| 58 // Comparator used to sort Mode objects. | |
| 59 // Returns true if |mode_a| has more pixels than |mode_b| and false otherwise. | |
| 60 class ModeResolutionComparator { | |
| 61 public: | |
| 62 bool operator()(const Mode& mode_a, const Mode& mode_b) const { | |
| 63 return mode_a.width * mode_a.height > mode_b.width * mode_b.height; | |
|
tfarina
2011/04/15 15:00:37
Could you move the implementation to the source fi
marcheu
2011/04/15 17:32:23
Done.
| |
| 64 } | |
| 65 }; | |
| 66 | |
| 67 // Find the "best" resolutions for various outputs. | |
| 68 // Returns the modes for both screens and the total screen resolution. | |
| 69 bool FindBestResolutions( | |
| 70 const std::vector<Mode>& lcd_modes, | |
| 71 const std::vector<Mode>& external_modes, | |
| 72 Mode* lcd_resolution, | |
| 73 Mode* external_resolution, | |
| 74 Mode* screen_resolution); | |
| 75 | |
| 76 private: | |
| 77 // Find resolutions to use that are reasonably close together. | |
| 78 // |larger_device_modes| and |smaller_device_modes| should be sorted by | |
| 79 // descending resolution. We choose the highest resolution from | |
| 80 // |smaller_device_modes| and the lowest resolution from |larger_device_modes| | |
| 81 // that's at least as high as the resolution from the smaller device. | |
| 82 // |screen_resolution| gets set to |smaller_resolution| to avoid clipping. | |
| 83 bool FindNearestResolutions( | |
| 84 const std::vector<Mode>& larger_device_modes, | |
| 85 const std::vector<Mode>& smaller_device_modes, | |
| 86 Mode* larger_resolution, | |
| 87 Mode* smaller_resolution, | |
| 88 Mode* screen_resolution); | |
| 89 | |
| 90 DISALLOW_COPY_AND_ASSIGN(ResolutionSelector); | |
| 91 }; | |
| 92 | |
| 93 } // namespace power_manager | |
| 94 | |
| 95 #endif // POWER_MANAGER_RESOLUTION_SELECTOR_H_ | |
| OLD | NEW |