Index: content/renderer/render_widget.h |
=================================================================== |
--- content/renderer/render_widget.h (revision 217537) |
+++ content/renderer/render_widget.h (working copy) |
@@ -54,6 +54,7 @@ |
class WebKeyboardEvent; |
class WebMouseEvent; |
class WebTouchEvent; |
+class WebTouchPoint; |
struct WebPoint; |
struct WebRenderingStatsImpl; |
} |
@@ -281,6 +282,14 @@ |
bool is_fullscreen, |
ResizeAck resize_ack); |
+ // Emulates device and widget metrics. Supplied values override everything |
+ // coming from host. |
+ void EmulateDevice(bool enabled, |
+ const gfx::Size& device_size, |
+ const gfx::Rect& widget_rect, |
+ float device_scale_factor, |
+ bool fit_to_view); |
+ |
// RenderWidget IPC message handlers |
void OnHandleInputEvent(const WebKit::WebInputEvent* event, |
const ui::LatencyInfo& latency_info, |
@@ -295,6 +304,7 @@ |
virtual void OnWasHidden(); |
virtual void OnWasShown(bool needs_repainting); |
virtual void OnWasSwappedOut(); |
+ void OnEmulateDeviceAck(bool enabled); |
void OnUpdateRectAck(); |
void OnCreateVideoAck(int32 video_id); |
void OnUpdateVideoAck(int32 video_id); |
@@ -735,6 +745,65 @@ |
int outstanding_ime_acks_; |
#endif |
+ // Helper class which is managing device emulation. |
+ // TODO(dgozman): fit to view is not supported yet. |
+ class DeviceEmulationHelper { |
jam
2013/09/11 02:59:47
nit: since this is a private class, just forward d
dgozman
2013/09/13 11:32:36
Unfortunately, this class is also used by RenderVi
|
+ public: |
+ DeviceEmulationHelper(const gfx::Size& device_size, |
+ const gfx::Rect& widget_rect, |
+ float device_scale_factor, |
+ bool fit_to_view); |
+ virtual ~DeviceEmulationHelper(); |
+ |
+ void BeginEmulation(RenderWidget* widget); |
+ void ChangeEmulationParams(RenderWidget* widget, |
+ DeviceEmulationHelper* params); |
+ void EndEmulation(RenderWidget* widget); |
+ |
+ void OnResizeMessage(RenderWidget* widget, |
+ const ViewMsg_Resize_Params& params); |
+ void OnUpdateScreenRectsMessage(RenderWidget* widget, |
+ const gfx::Rect view_screen_rect, |
+ const gfx::Rect window_screen_rect); |
+ WebKit::WebInputEvent* ConvertInputEventToEmulated( |
+ RenderWidget* widget, const WebKit::WebInputEvent* event); |
+ |
+ void PopupCreated(RenderWidget* widget, RenderWidget* popup); |
+ WebKit::WebRect ConvertPopupScreenRectFromEmulated( |
+ RenderWidget* popup, const WebKit::WebRect& rect); |
+ |
+ private: |
+ void Apply(RenderWidget* widget, float overdraw_bottom_height, |
+ gfx::Rect resizer_rect, bool is_fullscreen); |
+ void ConvertMouseEventToEmulated(WebKit::WebMouseEvent* event); |
+ void ConvertTouchPointToEmulated(WebKit::WebTouchPoint* point); |
+ |
+ gfx::Size device_size_; |
+ gfx::Rect widget_rect_; |
+ float device_scale_factor_; |
+ bool fit_to_view_; |
+ |
+ gfx::Size original_size_; |
+ gfx::Size original_physical_backing_size_; |
+ WebKit::WebScreenInfo original_screen_info_; |
+ gfx::Rect original_view_screen_rect_; |
+ gfx::Rect original_window_screen_rect_; |
+ |
+ base::WeakPtrFactory<DeviceEmulationHelper> weak_ptr_factory_; |
+ |
+ DISALLOW_COPY_AND_ASSIGN(DeviceEmulationHelper); |
+ }; |
+ |
+ scoped_ptr<DeviceEmulationHelper> device_emulation_helper_; |
+ |
+ // Popup has a weak ptr to the device emulation helper of creator. |
+ base::WeakPtr<DeviceEmulationHelper> popup_device_emulation_helper_; |
+ |
+ // While we send ViewMsg_EmulateDevice to the host, these store the requested |
+ // emulation parameters. |
+ scoped_ptr<DeviceEmulationHelper> pending_device_emulation_helper_; |
+ bool pending_device_emulation_enabled_; |
+ |
base::WeakPtrFactory<RenderWidget> weak_ptr_factory_; |
DISALLOW_COPY_AND_ASSIGN(RenderWidget); |