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 "content/renderer/render_widget.h" | 5 #include "content/renderer/render_widget.h" |
6 | 6 |
7 #include "base/auto_reset.h" | 7 #include "base/auto_reset.h" |
8 #include "base/bind.h" | 8 #include "base/bind.h" |
9 #include "base/command_line.h" | 9 #include "base/command_line.h" |
10 #include "base/debug/trace_event.h" | 10 #include "base/debug/trace_event.h" |
(...skipping 170 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
181 // The following methods alter handlers' behavior for messages related to | 181 // The following methods alter handlers' behavior for messages related to |
182 // widget size and position. | 182 // widget size and position. |
183 void OnResizeMessage(const ViewMsg_Resize_Params& params); | 183 void OnResizeMessage(const ViewMsg_Resize_Params& params); |
184 void OnUpdateScreenRectsMessage(const gfx::Rect& view_screen_rect, | 184 void OnUpdateScreenRectsMessage(const gfx::Rect& view_screen_rect, |
185 const gfx::Rect& window_screen_rect); | 185 const gfx::Rect& window_screen_rect); |
186 void OnShowContextMenu(ContextMenuParams* params); | 186 void OnShowContextMenu(ContextMenuParams* params); |
187 | 187 |
188 private: | 188 private: |
189 void Reapply(); | 189 void Reapply(); |
190 void Apply(float overdraw_bottom_height, | 190 void Apply(float overdraw_bottom_height, |
191 const gfx::Size& visible_viewport_size, | |
192 gfx::Rect resizer_rect, | 191 gfx::Rect resizer_rect, |
193 bool is_fullscreen); | 192 bool is_fullscreen); |
194 | 193 |
195 RenderWidget* widget_; | 194 RenderWidget* widget_; |
196 | 195 |
197 // Parameters as passed by RenderWidget::EnableScreenMetricsEmulation. | 196 // Parameters as passed by RenderWidget::EnableScreenMetricsEmulation. |
198 WebDeviceEmulationParams params_; | 197 WebDeviceEmulationParams params_; |
199 | 198 |
200 // The computed scale and offset used to fit widget into browser window. | 199 // The computed scale and offset used to fit widget into browser window. |
201 float scale_; | 200 float scale_; |
202 gfx::Point offset_; | 201 gfx::Point offset_; |
203 | 202 |
204 // Widget rect as passed to webwidget. | 203 // Widget rect as passed to webwidget. |
205 gfx::Rect applied_widget_rect_; | 204 gfx::Rect applied_widget_rect_; |
206 | 205 |
207 // Original values to restore back after emulation ends. | 206 // Original values to restore back after emulation ends. |
208 gfx::Size original_size_; | 207 gfx::Size original_size_; |
209 gfx::Size original_physical_backing_size_; | 208 gfx::Size original_physical_backing_size_; |
209 gfx::Size original_visible_viewport_size_; | |
210 blink::WebScreenInfo original_screen_info_; | 210 blink::WebScreenInfo original_screen_info_; |
211 gfx::Rect original_view_screen_rect_; | 211 gfx::Rect original_view_screen_rect_; |
212 gfx::Rect original_window_screen_rect_; | 212 gfx::Rect original_window_screen_rect_; |
213 }; | 213 }; |
214 | 214 |
215 RenderWidget::ScreenMetricsEmulator::ScreenMetricsEmulator( | 215 RenderWidget::ScreenMetricsEmulator::ScreenMetricsEmulator( |
216 RenderWidget* widget, | 216 RenderWidget* widget, |
217 const WebDeviceEmulationParams& params) | 217 const WebDeviceEmulationParams& params) |
218 : widget_(widget), | 218 : widget_(widget), |
219 params_(params), | 219 params_(params), |
220 scale_(1.f) { | 220 scale_(1.f) { |
221 original_size_ = widget_->size_; | 221 original_size_ = widget_->size_; |
222 original_physical_backing_size_ = widget_->physical_backing_size_; | 222 original_physical_backing_size_ = widget_->physical_backing_size_; |
223 original_visible_viewport_size_ = widget_->visible_viewport_size_; | |
223 original_screen_info_ = widget_->screen_info_; | 224 original_screen_info_ = widget_->screen_info_; |
224 original_view_screen_rect_ = widget_->view_screen_rect_; | 225 original_view_screen_rect_ = widget_->view_screen_rect_; |
225 original_window_screen_rect_ = widget_->window_screen_rect_; | 226 original_window_screen_rect_ = widget_->window_screen_rect_; |
226 Apply(widget_->overdraw_bottom_height_, widget_->visible_viewport_size_, | 227 Apply(widget_->overdraw_bottom_height_, widget_->resizer_rect_, |
227 widget_->resizer_rect_, widget_->is_fullscreen_); | 228 widget_->is_fullscreen_); |
228 } | 229 } |
229 | 230 |
230 RenderWidget::ScreenMetricsEmulator::~ScreenMetricsEmulator() { | 231 RenderWidget::ScreenMetricsEmulator::~ScreenMetricsEmulator() { |
231 widget_->screen_info_ = original_screen_info_; | 232 widget_->screen_info_ = original_screen_info_; |
232 | 233 |
233 widget_->SetDeviceScaleFactor(original_screen_info_.deviceScaleFactor); | 234 widget_->SetDeviceScaleFactor(original_screen_info_.deviceScaleFactor); |
234 widget_->SetScreenMetricsEmulationParameters(0.f, gfx::Point(), 1.f); | 235 widget_->SetScreenMetricsEmulationParameters(0.f, gfx::Point(), 1.f); |
235 widget_->view_screen_rect_ = original_view_screen_rect_; | 236 widget_->view_screen_rect_ = original_view_screen_rect_; |
236 widget_->window_screen_rect_ = original_window_screen_rect_; | 237 widget_->window_screen_rect_ = original_window_screen_rect_; |
237 widget_->Resize(original_size_, original_physical_backing_size_, | 238 widget_->Resize(original_size_, original_physical_backing_size_, |
238 widget_->overdraw_bottom_height_, widget_->visible_viewport_size_, | 239 widget_->overdraw_bottom_height_, original_visible_viewport_size_, |
239 widget_->resizer_rect_, widget_->is_fullscreen_, NO_RESIZE_ACK); | 240 widget_->resizer_rect_, widget_->is_fullscreen_, NO_RESIZE_ACK); |
240 } | 241 } |
241 | 242 |
242 void RenderWidget::ScreenMetricsEmulator::ChangeEmulationParams( | 243 void RenderWidget::ScreenMetricsEmulator::ChangeEmulationParams( |
243 const WebDeviceEmulationParams& params) { | 244 const WebDeviceEmulationParams& params) { |
244 params_ = params; | 245 params_ = params; |
245 Reapply(); | 246 Reapply(); |
246 } | 247 } |
247 | 248 |
248 void RenderWidget::ScreenMetricsEmulator::Reapply() { | 249 void RenderWidget::ScreenMetricsEmulator::Reapply() { |
249 Apply(widget_->overdraw_bottom_height_, widget_->visible_viewport_size_, | 250 Apply(widget_->overdraw_bottom_height_, widget_->resizer_rect_, |
250 widget_->resizer_rect_, widget_->is_fullscreen_); | 251 widget_->is_fullscreen_); |
251 } | 252 } |
252 | 253 |
253 void RenderWidget::ScreenMetricsEmulator::Apply( | 254 void RenderWidget::ScreenMetricsEmulator::Apply( |
254 float overdraw_bottom_height, | 255 float overdraw_bottom_height, |
255 const gfx::Size& visible_viewport_size, | |
256 gfx::Rect resizer_rect, | 256 gfx::Rect resizer_rect, |
257 bool is_fullscreen) { | 257 bool is_fullscreen) { |
258 applied_widget_rect_.set_size(gfx::Size(params_.viewSize)); | 258 applied_widget_rect_.set_size(gfx::Size(params_.viewSize)); |
259 if (!applied_widget_rect_.width()) | 259 if (!applied_widget_rect_.width()) |
260 applied_widget_rect_.set_width(original_size_.width()); | 260 applied_widget_rect_.set_width(original_size_.width()); |
261 if (!applied_widget_rect_.height()) | 261 if (!applied_widget_rect_.height()) |
262 applied_widget_rect_.set_height(original_size_.height()); | 262 applied_widget_rect_.set_height(original_size_.height()); |
263 | 263 |
264 if (params_.fitToView && !original_size_.IsEmpty()) { | 264 if (params_.fitToView && !original_size_.IsEmpty()) { |
265 int width_with_gutter = | 265 int width_with_gutter = |
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
306 // root layer. | 306 // root layer. |
307 widget_->SetScreenMetricsEmulationParameters( | 307 widget_->SetScreenMetricsEmulationParameters( |
308 original_screen_info_.deviceScaleFactor, offset_, scale_); | 308 original_screen_info_.deviceScaleFactor, offset_, scale_); |
309 | 309 |
310 widget_->SetDeviceScaleFactor(applied_device_scale_factor); | 310 widget_->SetDeviceScaleFactor(applied_device_scale_factor); |
311 widget_->view_screen_rect_ = applied_widget_rect_; | 311 widget_->view_screen_rect_ = applied_widget_rect_; |
312 | 312 |
313 gfx::Size physical_backing_size = gfx::ToCeiledSize(gfx::ScaleSize( | 313 gfx::Size physical_backing_size = gfx::ToCeiledSize(gfx::ScaleSize( |
314 original_size_, original_screen_info_.deviceScaleFactor)); | 314 original_size_, original_screen_info_.deviceScaleFactor)); |
315 widget_->Resize(applied_widget_rect_.size(), physical_backing_size, | 315 widget_->Resize(applied_widget_rect_.size(), physical_backing_size, |
316 overdraw_bottom_height, visible_viewport_size, resizer_rect, | 316 overdraw_bottom_height, applied_widget_rect_.size(), resizer_rect, |
317 is_fullscreen, NO_RESIZE_ACK); | 317 is_fullscreen, NO_RESIZE_ACK); |
318 } | 318 } |
319 | 319 |
320 void RenderWidget::ScreenMetricsEmulator::OnResizeMessage( | 320 void RenderWidget::ScreenMetricsEmulator::OnResizeMessage( |
321 const ViewMsg_Resize_Params& params) { | 321 const ViewMsg_Resize_Params& params) { |
322 bool need_ack = params.new_size != original_size_ && | 322 bool need_ack = params.new_size != original_size_ && |
323 !params.new_size.IsEmpty() && !params.physical_backing_size.IsEmpty(); | 323 !params.new_size.IsEmpty() && !params.physical_backing_size.IsEmpty(); |
324 original_size_ = params.new_size; | 324 original_size_ = params.new_size; |
325 original_physical_backing_size_ = params.physical_backing_size; | 325 original_physical_backing_size_ = params.physical_backing_size; |
326 original_screen_info_ = params.screen_info; | 326 original_screen_info_ = params.screen_info; |
327 Apply(params.overdraw_bottom_height, params.visible_viewport_size, | 327 Apply(params.overdraw_bottom_height, params.resizer_rect, |
dgozman
2014/05/30 19:17:52
You should update |original_visible_viewport_size_
bokan
2014/05/30 19:43:46
Good catch, thanks.
| |
328 params.resizer_rect, params.is_fullscreen); | 328 params.is_fullscreen); |
329 | 329 |
330 if (need_ack) { | 330 if (need_ack) { |
331 widget_->set_next_paint_is_resize_ack(); | 331 widget_->set_next_paint_is_resize_ack(); |
332 if (widget_->compositor_) | 332 if (widget_->compositor_) |
333 widget_->compositor_->SetNeedsRedrawRect(gfx::Rect(widget_->size_)); | 333 widget_->compositor_->SetNeedsRedrawRect(gfx::Rect(widget_->size_)); |
334 } | 334 } |
335 } | 335 } |
336 | 336 |
337 void RenderWidget::ScreenMetricsEmulator::OnUpdateScreenRectsMessage( | 337 void RenderWidget::ScreenMetricsEmulator::OnUpdateScreenRectsMessage( |
338 const gfx::Rect& view_screen_rect, | 338 const gfx::Rect& view_screen_rect, |
(...skipping 1792 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
2131 void RenderWidget::RegisterVideoHoleFrame(RenderFrameImpl* frame) { | 2131 void RenderWidget::RegisterVideoHoleFrame(RenderFrameImpl* frame) { |
2132 video_hole_frames_.AddObserver(frame); | 2132 video_hole_frames_.AddObserver(frame); |
2133 } | 2133 } |
2134 | 2134 |
2135 void RenderWidget::UnregisterVideoHoleFrame(RenderFrameImpl* frame) { | 2135 void RenderWidget::UnregisterVideoHoleFrame(RenderFrameImpl* frame) { |
2136 video_hole_frames_.RemoveObserver(frame); | 2136 video_hole_frames_.RemoveObserver(frame); |
2137 } | 2137 } |
2138 #endif // defined(VIDEO_HOLE) | 2138 #endif // defined(VIDEO_HOLE) |
2139 | 2139 |
2140 } // namespace content | 2140 } // namespace content |
OLD | NEW |