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 #include "ui/gfx/display.h" | 5 #include "ui/gfx/display.h" |
6 | 6 |
7 #include "base/command_line.h" | 7 #include "base/command_line.h" |
8 #include "base/logging.h" | 8 #include "base/logging.h" |
9 #include "base/string_number_conversions.h" | 9 #include "base/string_number_conversions.h" |
10 #include "base/stringprintf.h" | 10 #include "base/stringprintf.h" |
(...skipping 11 matching lines...) Expand all Loading... |
22 } | 22 } |
23 | 23 |
24 float GetForcedDeviceScaleFactorImpl() { | 24 float GetForcedDeviceScaleFactorImpl() { |
25 double scale_in_double = 1.0; | 25 double scale_in_double = 1.0; |
26 if (HasForceDeviceScaleFactorImpl()) { | 26 if (HasForceDeviceScaleFactorImpl()) { |
27 std::string value = CommandLine::ForCurrentProcess()-> | 27 std::string value = CommandLine::ForCurrentProcess()-> |
28 GetSwitchValueASCII(switches::kForceDeviceScaleFactor); | 28 GetSwitchValueASCII(switches::kForceDeviceScaleFactor); |
29 if (!base::StringToDouble(value, &scale_in_double)) | 29 if (!base::StringToDouble(value, &scale_in_double)) |
30 LOG(ERROR) << "Failed to parse the default device scale factor:" << value; | 30 LOG(ERROR) << "Failed to parse the default device scale factor:" << value; |
31 } | 31 } |
| 32 #if defined(OS_WIN) |
| 33 else { |
| 34 static double os_scale = ui::GetDPIScale(); |
| 35 scale_in_double = os_scale; |
| 36 } |
| 37 #endif |
| 38 |
32 return static_cast<float>(scale_in_double); | 39 return static_cast<float>(scale_in_double); |
33 } | 40 } |
34 | 41 |
35 } // namespace | 42 } // namespace |
36 | 43 |
37 const int64 Display::kInvalidDisplayID = -1; | 44 const int64 Display::kInvalidDisplayID = -1; |
38 | 45 |
39 // static | 46 // static |
40 float Display::GetForcedDeviceScaleFactor() { | 47 float Display::GetForcedDeviceScaleFactor() { |
41 static const float kForcedDeviceScaleFactor = | 48 static const float kForcedDeviceScaleFactor = |
42 GetForcedDeviceScaleFactorImpl(); | 49 GetForcedDeviceScaleFactorImpl(); |
43 return kForcedDeviceScaleFactor; | 50 return kForcedDeviceScaleFactor; |
44 } | 51 } |
45 | |
46 //static | 52 //static |
47 bool Display::HasForceDeviceScaleFactor() { | 53 bool Display::HasForceDeviceScaleFactor() { |
48 return HasForceDeviceScaleFactorImpl(); | 54 return HasForceDeviceScaleFactorImpl(); |
49 } | 55 } |
50 | 56 |
| 57 |
51 // static | 58 // static |
52 int64 Display::GetID(uint16 manufacturer_id, | 59 int64 Display::GetID(uint16 manufacturer_id, |
53 uint16 product_code, | 60 uint16 product_code, |
54 uint8 output_index) { | 61 uint8 output_index) { |
55 int64 new_id = ((static_cast<int64>(manufacturer_id) << 24) | | 62 int64 new_id = ((static_cast<int64>(manufacturer_id) << 24) | |
56 (static_cast<int64>(product_code) << 8) | output_index); | 63 (static_cast<int64>(product_code) << 8) | output_index); |
57 DCHECK_NE(kInvalidDisplayID, new_id); | 64 DCHECK_NE(kInvalidDisplayID, new_id); |
58 return new_id; | 65 return new_id; |
59 } | 66 } |
60 | 67 |
61 Display::Display() | 68 Display::Display() |
62 : id_(kInvalidDisplayID), | 69 : id_(kInvalidDisplayID), |
63 device_scale_factor_(GetForcedDeviceScaleFactor()) { | 70 device_scale_factor_(GetForcedDeviceScaleFactor()) { |
64 } | 71 } |
65 | 72 |
66 Display::Display(int64 id) | 73 Display::Display(int64 id) |
67 : id_(id), | 74 : id_(id), |
68 device_scale_factor_(GetForcedDeviceScaleFactor()) { | 75 device_scale_factor_(GetForcedDeviceScaleFactor()) { |
69 } | 76 } |
70 | 77 |
71 Display::Display(int64 id, const gfx::Rect& bounds) | 78 Display::Display(int64 id, const gfx::Rect& bounds) |
72 : id_(id), | 79 : id_(id), |
73 bounds_(bounds), | 80 bounds_(bounds), |
74 work_area_(bounds), | 81 work_area_(bounds), |
75 device_scale_factor_(GetForcedDeviceScaleFactor()) { | 82 device_scale_factor_(GetForcedDeviceScaleFactor()) { |
76 #if defined(USE_AURA) | 83 #if defined(USE_AURA) // || defined(OS_WIN) |
77 SetScaleAndBounds(device_scale_factor_, bounds); | 84 SetScaleAndBounds(device_scale_factor_, bounds); |
78 #endif | 85 #endif |
79 } | 86 } |
80 | 87 |
81 Display::~Display() { | 88 Display::~Display() { |
82 } | 89 } |
83 | 90 |
84 Insets Display::GetWorkAreaInsets() const { | 91 Insets Display::GetWorkAreaInsets() const { |
85 return gfx::Insets(work_area_.y() - bounds_.y(), | 92 return gfx::Insets(work_area_.y() - bounds_.y(), |
86 work_area_.x() - bounds_.x(), | 93 work_area_.x() - bounds_.x(), |
87 bounds_.bottom() - work_area_.bottom(), | 94 bounds_.bottom() - work_area_.bottom(), |
88 bounds_.right() - work_area_.right()); | 95 bounds_.right() - work_area_.right()); |
89 } | 96 } |
90 | 97 |
91 void Display::SetScaleAndBounds( | 98 void Display::SetScaleAndBounds( |
92 float device_scale_factor, | 99 float device_scale_factor, |
93 const gfx::Rect& bounds_in_pixel) { | 100 const gfx::Rect& bounds_in_pixel) { |
94 Insets insets = bounds_.InsetsFrom(work_area_); | 101 Insets insets = bounds_.InsetsFrom(work_area_); |
95 if (!HasForceDeviceScaleFactor()) { | 102 if (!HasForceDeviceScaleFactor()) { |
96 #if defined(OS_MACOSX) | 103 #if defined(OS_MACOSX) |
97 // Unless an explicit scale factor was provided for testing, ensure the | 104 // Unless an explicit scale factor was provided for testing, ensure the |
98 // scale is integral. | 105 // scale is integral. |
99 device_scale_factor = static_cast<int>(device_scale_factor); | 106 device_scale_factor = static_cast<int>(device_scale_factor); |
100 #endif | 107 #endif |
101 device_scale_factor_ = device_scale_factor; | 108 device_scale_factor_ = device_scale_factor; |
102 } | 109 } |
103 device_scale_factor_ = std::max(1.0f, device_scale_factor_); | 110 device_scale_factor_ = std::max(1.0f, device_scale_factor_); |
104 #if defined(USE_AURA) | 111 #if defined(USE_AURA) || defined(OS_WIN) |
105 bounds_in_pixel_ = bounds_in_pixel; | 112 bounds_in_pixel_ = bounds_in_pixel; |
106 #endif | 113 #endif |
107 bounds_ = gfx::Rect(gfx::ToFlooredSize( | 114 bounds_ = gfx::Rect(gfx::ToFlooredSize( |
108 gfx::ScaleSize(bounds_in_pixel.size(), 1.0f / device_scale_factor_))); | 115 gfx::ScaleSize(bounds_in_pixel.size(), 1.0f / device_scale_factor_))); |
109 UpdateWorkAreaFromInsets(insets); | 116 UpdateWorkAreaFromInsets(insets); |
110 } | 117 } |
111 | 118 |
112 void Display::SetSize(const gfx::Size& size_in_pixel) { | 119 void Display::SetSize(const gfx::Size& size_in_pixel) { |
113 SetScaleAndBounds( | 120 SetScaleAndBounds( |
114 device_scale_factor_, | 121 device_scale_factor_, |
115 #if defined(USE_AURA) | 122 #if defined(USE_AURA) || defined(OS_WIN) |
116 gfx::Rect(bounds_in_pixel_.origin(), size_in_pixel)); | 123 gfx::Rect(bounds_in_pixel_.origin(), size_in_pixel)); |
117 #else | 124 #else |
118 gfx::Rect(bounds_.origin(), size_in_pixel)); | 125 gfx::Rect(bounds_.origin(), size_in_pixel)); |
119 #endif | 126 #endif |
120 } | 127 } |
121 | 128 |
122 void Display::UpdateWorkAreaFromInsets(const gfx::Insets& insets) { | 129 void Display::UpdateWorkAreaFromInsets(const gfx::Insets& insets) { |
123 work_area_ = bounds_; | 130 work_area_ = bounds_; |
124 work_area_.Inset(insets); | 131 work_area_.Inset(insets); |
125 } | 132 } |
126 | 133 |
127 gfx::Size Display::GetSizeInPixel() const { | 134 gfx::Size Display::GetSizeInPixel() const { |
128 return gfx::ToFlooredSize(gfx::ScaleSize(size(), device_scale_factor_)); | 135 return gfx::ToFlooredSize(gfx::ScaleSize(size(), device_scale_factor_)); |
129 } | 136 } |
130 | 137 |
131 std::string Display::ToString() const { | 138 std::string Display::ToString() const { |
132 return base::StringPrintf("Display[%lld] bounds=%s, workarea=%s, scale=%f", | 139 return base::StringPrintf("Display[%lld] bounds=%s, workarea=%s, scale=%f", |
133 static_cast<long long int>(id_), | 140 static_cast<long long int>(id_), |
134 bounds_.ToString().c_str(), | 141 bounds_.ToString().c_str(), |
135 work_area_.ToString().c_str(), | 142 work_area_.ToString().c_str(), |
136 device_scale_factor_); | 143 device_scale_factor_); |
137 } | 144 } |
138 | 145 |
139 } // namespace gfx | 146 } // namespace gfx |
OLD | NEW |