Index: content/browser/renderer_host/render_widget_host_view_win.cc |
diff --git a/content/browser/renderer_host/render_widget_host_view_win.cc b/content/browser/renderer_host/render_widget_host_view_win.cc |
index 237a3201977e81f7b730bd2f457ee678836e025d..ea249f22fa91e5efc34c990f7c225f48c5ff0acb 100644 |
--- a/content/browser/renderer_host/render_widget_host_view_win.cc |
+++ b/content/browser/renderer_host/render_widget_host_view_win.cc |
@@ -270,25 +270,25 @@ bool DecodeScrollGesture(const GESTUREINFO& gi, |
WebKit::WebMouseWheelEvent MakeFakeScrollWheelEvent(HWND hwnd, |
POINT start, |
POINT delta) { |
- WebKit::WebMouseWheelEvent result; |
- result.type = WebInputEvent::MouseWheel; |
- result.timeStampSeconds = ::GetMessageTime() / 1000.0; |
- result.button = WebMouseEvent::ButtonNone; |
- result.globalX = start.x; |
- result.globalY = start.y; |
- // Map to window coordinates. |
- POINT client_point = { result.globalX, result.globalY }; |
- MapWindowPoints(0, hwnd, &client_point, 1); |
- result.x = client_point.x; |
- result.y = client_point.y; |
- result.windowX = result.x; |
- result.windowY = result.y; |
- // Note that we support diagonal scrolling. |
- result.deltaX = static_cast<float>(delta.x); |
- result.wheelTicksX = WHEEL_DELTA; |
- result.deltaY = static_cast<float>(delta.y); |
- result.wheelTicksY = WHEEL_DELTA; |
- return result; |
+ WebKit::WebMouseWheelEvent result; |
+ result.type = WebInputEvent::MouseWheel; |
+ result.timeStampSeconds = ::GetMessageTime() / 1000.0; |
+ result.button = WebMouseEvent::ButtonNone; |
+ result.globalX = start.x; |
+ result.globalY = start.y; |
+ // Map to window coordinates. |
+ POINT client_point = { result.globalX, result.globalY }; |
+ MapWindowPoints(0, hwnd, &client_point, 1); |
+ result.x = client_point.x; |
+ result.y = client_point.y; |
+ result.windowX = result.x; |
+ result.windowY = result.y; |
+ // Note that we support diagonal scrolling. |
+ result.deltaX = static_cast<float>(delta.x); |
+ result.wheelTicksX = WHEEL_DELTA; |
+ result.deltaY = static_cast<float>(delta.y); |
+ result.wheelTicksY = WHEEL_DELTA; |
+ return result; |
} |
static const int kTouchMask = 0x7; |
@@ -301,25 +301,6 @@ inline void SetTouchType(TOUCHINPUT* point, int type) { |
point->dwFlags = (point->dwFlags & kTouchMask) | type; |
} |
-template <class IINTERFACE, class PAYLOAD> |
-class WrappedObject : public IINTERFACE { |
- public: |
- WrappedObject() { |
- } |
- const PAYLOAD& data() const { |
- return data_; |
- } |
- PAYLOAD& data() { |
- return data_; |
- } |
- |
- private: |
- PAYLOAD data_; |
- |
- typedef WrappedObject<IINTERFACE,PAYLOAD> Type; |
- DISALLOW_COPY_AND_ASSIGN(Type); |
-}; |
- |
ui::EventType ConvertToUIEvent(WebKit::WebTouchPoint::State t) { |
switch (t) { |
case WebKit::WebTouchPoint::StatePressed: |
@@ -391,68 +372,57 @@ WebKit::WebInputEvent::Type ConvertToWebInputEvent(ui::EventType t) { |
} |
} |
-class LocalGestureEvent : |
- public WrappedObject<ui::GestureEvent, WebKit::WebGestureEvent> { |
+class LocalGestureEvent : public ui::GestureEvent { |
public: |
- LocalGestureEvent( |
- HWND hwnd, |
- const ui::GestureEventDetails& details, |
- const gfx::Point& location, |
- int flags, |
- base::Time time, |
- unsigned int touch_id_bitfield) |
- : touch_ids_bitfield_(touch_id_bitfield), |
- type_(details.type()) { |
- // location is given in window coordinates, based on the parent window. |
- // Map to the appropriate window's coordinates. For a root window the |
- // coordinates won't change, because the parent shares our rect. |
- POINT client_point = { location.x(), location.y()}; |
- MapWindowPoints(::GetParent(hwnd), hwnd, &client_point, 1); |
- POINT screen_point = { location.x(), location.y()}; |
- MapWindowPoints(hwnd, HWND_DESKTOP, &screen_point, 1); |
- data().x = client_point.x; |
- data().y = client_point.y; |
- data().globalX = screen_point.x; |
- data().globalY = screen_point.y; |
- data().type = ConvertToWebInputEvent(type_); |
- data().boundingBox = details.bounding_box(); |
+ LocalGestureEvent(HWND hwnd, |
+ const ui::GestureEventDetails& details, |
+ const gfx::Point& location, |
+ int flags, |
+ base::Time time, |
+ unsigned int touch_id_bitfield) |
+ : ui::GestureEvent(details.type(), location.x(), location.y(), flags, |
+ time, details, touch_id_bitfield), |
+ client_point_(location.ToPOINT()), |
+ screen_point_(location.ToPOINT()) { |
+ MapWindowPoints(::GetParent(hwnd), hwnd, &client_point_, 1); |
+ MapWindowPoints(hwnd, HWND_DESKTOP, &screen_point_, 1); |
+ } |
+ |
+ virtual ~LocalGestureEvent() {} |
+ |
+ WebKit::WebGestureEvent ToWebGestureEvent() { |
+ WebKit::WebGestureEvent gesture_event; |
+ gesture_event.type = ConvertToWebInputEvent(type()); |
+ gesture_event.x = client_point_.x; |
+ gesture_event.y = client_point_.y; |
+ gesture_event.globalX = screen_point_.x; |
+ gesture_event.globalY = screen_point_.y; |
+ gesture_event.boundingBox = details().bounding_box(); |
// Copy any event-type specific data. |
- switch (type_) { |
+ switch (type()) { |
case ui::ET_GESTURE_TAP: |
- data().deltaX = details.tap_count(); |
+ gesture_event.deltaX = details().tap_count(); |
break; |
case ui::ET_GESTURE_SCROLL_UPDATE: |
- data().deltaX = details.scroll_x(); |
- data().deltaY = details.scroll_y(); |
+ gesture_event.deltaX = details().scroll_x(); |
+ gesture_event.deltaY = details().scroll_y(); |
break; |
case ui::ET_GESTURE_PINCH_UPDATE: |
- data().deltaX = details.scale(); |
+ gesture_event.deltaX = details().scale(); |
break; |
case ui::ET_SCROLL_FLING_START: |
- data().deltaX = details.velocity_x(); |
- data().deltaY = details.velocity_y(); |
+ gesture_event.deltaX = details().velocity_x(); |
+ gesture_event.deltaY = details().velocity_y(); |
default: |
break; |
} |
- } |
- |
- virtual int GetLowestTouchId() const OVERRIDE { |
- return LowestBit(touch_ids_bitfield_); |
- } |
- |
- ui::EventType type() { |
- return type_; |
+ return gesture_event; |
} |
private: |
- // The set of indices of ones in the binary representation of |
- // |touch_ids_bitfield_| is the set of touch_ids associate with this gesture. |
- // This value is stored as a bitfield because the number of touch ids varies, |
- // but we currently don't need more than 32 touches at a time. |
- const unsigned int touch_ids_bitfield_; |
- |
- ui::EventType type_; |
+ POINT client_point_; |
+ POINT screen_point_; |
DISALLOW_COPY_AND_ASSIGN(LocalGestureEvent); |
}; |
@@ -2828,10 +2798,10 @@ bool RenderWidgetHostViewWin::ForwardGestureEventToRenderer( |
return false; |
LocalGestureEvent* local = static_cast<LocalGestureEvent*>(gesture); |
- if (local->data().type == WebKit::WebGestureEvent::Undefined) |
+ WebKit::WebGestureEvent gesture_event = local->ToWebGestureEvent(); |
+ if (gesture_event.type == WebKit::WebGestureEvent::Undefined) |
return false; |
- const WebKit::WebGestureEvent& generatedEvent = local->data(); |
- render_widget_host_->ForwardGestureEvent(generatedEvent); |
+ render_widget_host_->ForwardGestureEvent(gesture_event); |
return true; |
} |