| Index: content/browser/renderer_host/render_widget_host_view_win.cc
|
| ===================================================================
|
| --- content/browser/renderer_host/render_widget_host_view_win.cc (revision 109595)
|
| +++ content/browser/renderer_host/render_widget_host_view_win.cc (working copy)
|
| @@ -290,16 +290,6 @@
|
| return result;
|
| }
|
|
|
| -static const int kTouchMask = 0x7;
|
| -
|
| -inline int GetTouchType(const TOUCHINPUT& point) {
|
| - return point.dwFlags & kTouchMask;
|
| -}
|
| -
|
| -inline void SetTouchType(TOUCHINPUT* point, int type) {
|
| - point->dwFlags = (point->dwFlags & kTouchMask) | type;
|
| -}
|
| -
|
| } // namespace
|
|
|
| ///////////////////////////////////////////////////////////////////////////////
|
| @@ -327,8 +317,7 @@
|
| ignore_mouse_movement_(true),
|
| composition_range_(ui::Range::InvalidRange()),
|
| ignore_next_lbutton_message_at_same_location(false),
|
| - last_pointer_down_location_(0),
|
| - touch_state_(this) {
|
| + last_pointer_down_location_(0) {
|
| render_widget_host_->SetView(this);
|
| registrar_.Add(this,
|
| content::NOTIFICATION_RENDERER_PROCESS_TERMINATED,
|
| @@ -890,24 +879,19 @@
|
| props_.push_back(ui::SetWindowSupportsRerouteMouseWheel(m_hWnd));
|
|
|
| if (base::win::GetVersion() >= base::win::VERSION_WIN7) {
|
| - // Use gestures if touch event switch isn't present or registration fails.
|
| - if (!CommandLine::ForCurrentProcess()->HasSwitch(
|
| - switches::kEnableTouchEvents) ||
|
| - !RegisterTouchWindow(m_hWnd, 0)) {
|
| - // Single finger panning is consistent with other windows applications.
|
| - const DWORD gesture_allow = GC_PAN_WITH_SINGLE_FINGER_VERTICALLY |
|
| - GC_PAN_WITH_SINGLE_FINGER_HORIZONTALLY;
|
| - const DWORD gesture_block = GC_PAN_WITH_GUTTER;
|
| - GESTURECONFIG gc[] = {
|
| - { GID_ZOOM, GC_ZOOM, 0 },
|
| - { GID_PAN, gesture_allow , gesture_block},
|
| - { GID_TWOFINGERTAP, GC_TWOFINGERTAP , 0},
|
| - { GID_PRESSANDTAP, GC_PRESSANDTAP , 0}
|
| - };
|
| - if (!SetGestureConfig(m_hWnd, 0, arraysize(gc), gc,
|
| - sizeof(GESTURECONFIG))) {
|
| - NOTREACHED();
|
| - }
|
| + // Single finger panning is consistent with other windows applications.
|
| + const DWORD gesture_allow = GC_PAN_WITH_SINGLE_FINGER_VERTICALLY |
|
| + GC_PAN_WITH_SINGLE_FINGER_HORIZONTALLY;
|
| + const DWORD gesture_block = GC_PAN_WITH_GUTTER;
|
| + GESTURECONFIG gc[] = {
|
| + { GID_ZOOM, GC_ZOOM, 0 },
|
| + { GID_PAN, gesture_allow , gesture_block},
|
| + { GID_TWOFINGERTAP, GC_TWOFINGERTAP , 0},
|
| + { GID_PRESSANDTAP, GC_PRESSANDTAP , 0}
|
| + };
|
| + if (!SetGestureConfig(m_hWnd, 0, arraysize(gc), gc, sizeof(GESTURECONFIG)))
|
| + {
|
| + NOTREACHED();
|
| }
|
| }
|
|
|
| @@ -943,9 +927,6 @@
|
|
|
| props_.reset();
|
|
|
| - if (IsTouchWindow(m_hWnd, NULL))
|
| - UnregisterTouchWindow(m_hWnd);
|
| -
|
| CleanupCompositorWindow();
|
|
|
| ResetTooltip();
|
| @@ -1121,8 +1102,6 @@
|
| render_widget_host_->GotFocus();
|
| render_widget_host_->SetActive(true);
|
| }
|
| - if (touch_state_.ReleaseTouchPoints())
|
| - render_widget_host_->ForwardTouchEvent(touch_state_.touch_event());
|
| }
|
|
|
| void RenderWidgetHostViewWin::OnKillFocus(HWND window) {
|
| @@ -1130,8 +1109,6 @@
|
| render_widget_host_->SetActive(false);
|
| render_widget_host_->Blur();
|
| }
|
| - if (touch_state_.ReleaseTouchPoints())
|
| - render_widget_host_->ForwardTouchEvent(touch_state_.touch_event());
|
| }
|
|
|
| void RenderWidgetHostViewWin::OnCaptureChanged(HWND window) {
|
| @@ -1593,185 +1570,6 @@
|
| return 0;
|
| }
|
|
|
| -RenderWidgetHostViewWin::WebTouchState::WebTouchState(const CWindowImpl* window)
|
| - : window_(window) { }
|
| -
|
| -size_t RenderWidgetHostViewWin::WebTouchState::UpdateTouchPoints(
|
| - TOUCHINPUT* points, size_t count) {
|
| - // First we reset all touch event state. This involves removing any released
|
| - // touchpoints and marking the rest as stationary. After that we go through
|
| - // and alter/add any touchpoints (from the touch input buffer) that we can
|
| - // coalesce into a single message. The return value is the number of consumed
|
| - // input message.
|
| - WebKit::WebTouchPoint* point = touch_event_.touches;
|
| - WebKit::WebTouchPoint* end = point + touch_event_.touchesLength;
|
| - while (point < end) {
|
| - if (point->state == WebKit::WebTouchPoint::StateReleased) {
|
| - *point = *(--end);
|
| - --touch_event_.touchesLength;
|
| - } else {
|
| - point->state = WebKit::WebTouchPoint::StateStationary;
|
| - point++;
|
| - }
|
| - }
|
| - touch_event_.changedTouchesLength = 0;
|
| -
|
| - // Consume all events of the same type and add them to the changed list.
|
| - int last_type = 0;
|
| - for (size_t i = 0; i < count; ++i) {
|
| - if (points[i].dwID == 0ul)
|
| - continue;
|
| -
|
| - WebKit::WebTouchPoint* point = NULL;
|
| - for (unsigned j = 0; j < touch_event_.touchesLength; ++j) {
|
| - if (static_cast<DWORD>(touch_event_.touches[j].id) == points[i].dwID) {
|
| - point = &touch_event_.touches[j];
|
| - break;
|
| - }
|
| - }
|
| -
|
| - // Use a move instead if we see a down on a point we already have.
|
| - int type = GetTouchType(points[i]);
|
| - if (point && type == TOUCHEVENTF_DOWN)
|
| - SetTouchType(&points[i], TOUCHEVENTF_MOVE);
|
| -
|
| - // Stop processing when the event type changes.
|
| - if (touch_event_.changedTouchesLength && type != last_type)
|
| - return i;
|
| -
|
| - last_type = type;
|
| - switch (type) {
|
| - case TOUCHEVENTF_DOWN: {
|
| - if (!(point = AddTouchPoint(&points[i])))
|
| - continue;
|
| - touch_event_.type = WebKit::WebInputEvent::TouchStart;
|
| - break;
|
| - }
|
| -
|
| - case TOUCHEVENTF_UP: {
|
| - if (!point) // Just throw away a stray up.
|
| - continue;
|
| - point->state = WebKit::WebTouchPoint::StateReleased;
|
| - UpdateTouchPoint(point, &points[i]);
|
| - touch_event_.type = WebKit::WebInputEvent::TouchEnd;
|
| - break;
|
| - }
|
| -
|
| - case TOUCHEVENTF_MOVE: {
|
| - if (point) {
|
| - point->state = WebKit::WebTouchPoint::StateMoved;
|
| - // Don't update the message if the point didn't really move.
|
| - if (UpdateTouchPoint(point, &points[i]))
|
| - continue;
|
| - touch_event_.type = WebKit::WebInputEvent::TouchMove;
|
| - } else if (touch_event_.changedTouchesLength) {
|
| - // Can't add a point if we're already handling move events.
|
| - return i;
|
| - } else {
|
| - // Treat a move with no existing point as a down.
|
| - if (!(point = AddTouchPoint(&points[i])))
|
| - continue;
|
| - last_type = TOUCHEVENTF_DOWN;
|
| - SetTouchType(&points[i], TOUCHEVENTF_DOWN);
|
| - touch_event_.type = WebKit::WebInputEvent::TouchStart;
|
| - }
|
| - break;
|
| - }
|
| -
|
| - default:
|
| - NOTREACHED();
|
| - continue;
|
| - }
|
| - touch_event_.changedTouches[touch_event_.changedTouchesLength++] = *point;
|
| - }
|
| -
|
| - return count;
|
| -}
|
| -
|
| -bool RenderWidgetHostViewWin::WebTouchState::ReleaseTouchPoints() {
|
| - if (touch_event_.touchesLength == 0)
|
| - return false;
|
| - // Mark every active touchpoint as released.
|
| - touch_event_.type = WebKit::WebInputEvent::TouchEnd;
|
| - touch_event_.changedTouchesLength = touch_event_.touchesLength;
|
| - for (unsigned int i = 0; i < touch_event_.touchesLength; ++i) {
|
| - touch_event_.touches[i].state = WebKit::WebTouchPoint::StateReleased;
|
| - touch_event_.changedTouches[i].state =
|
| - WebKit::WebTouchPoint::StateReleased;
|
| - }
|
| -
|
| - return true;
|
| -}
|
| -
|
| -WebKit::WebTouchPoint* RenderWidgetHostViewWin::WebTouchState::AddTouchPoint(
|
| - TOUCHINPUT* touch_input) {
|
| - if (touch_event_.touchesLength >= WebKit::WebTouchEvent::touchesLengthCap)
|
| - return NULL;
|
| - WebKit::WebTouchPoint* point =
|
| - &touch_event_.touches[touch_event_.touchesLength++];
|
| - point->state = WebKit::WebTouchPoint::StatePressed;
|
| - point->id = touch_input->dwID;
|
| - UpdateTouchPoint(point, touch_input);
|
| - return point;
|
| -}
|
| -
|
| -bool RenderWidgetHostViewWin::WebTouchState::UpdateTouchPoint(
|
| - WebKit::WebTouchPoint* touch_point,
|
| - TOUCHINPUT* touch_input) {
|
| - CPoint coordinates(TOUCH_COORD_TO_PIXEL(touch_input->x),
|
| - TOUCH_COORD_TO_PIXEL(touch_input->y));
|
| - int radius_x = 1;
|
| - int radius_y = 1;
|
| - if (touch_input->dwMask & TOUCHINPUTMASKF_CONTACTAREA) {
|
| - radius_x = TOUCH_COORD_TO_PIXEL(touch_input->cxContact);
|
| - radius_y = TOUCH_COORD_TO_PIXEL(touch_input->cyContact);
|
| - }
|
| -
|
| - // Detect and exclude stationary moves.
|
| - if (GetTouchType(*touch_input) == TOUCHEVENTF_MOVE &&
|
| - touch_point->screenPosition.x == coordinates.x &&
|
| - touch_point->screenPosition.y == coordinates.y &&
|
| - touch_point->radiusX == radius_x &&
|
| - touch_point->radiusY == radius_y) {
|
| - touch_point->state = WebKit::WebTouchPoint::StateStationary;
|
| - return true;
|
| - }
|
| -
|
| - touch_point->screenPosition.x = coordinates.x;
|
| - touch_point->screenPosition.y = coordinates.y;
|
| - window_->GetParent().ScreenToClient(&coordinates);
|
| - touch_point->position.x = coordinates.x;
|
| - touch_point->position.y = coordinates.y;
|
| - touch_point->radiusX = radius_x;
|
| - touch_point->radiusY = radius_y;
|
| - touch_point->force = 0;
|
| - touch_point->rotationAngle = 0;
|
| - return false;
|
| -}
|
| -
|
| -LRESULT RenderWidgetHostViewWin::OnTouchEvent(UINT message, WPARAM wparam,
|
| - LPARAM lparam, BOOL& handled) {
|
| - // TODO(jschuh): Add support for an arbitrary number of touchpoints.
|
| - size_t total = std::min(static_cast<int>(LOWORD(wparam)),
|
| - static_cast<int>(WebKit::WebTouchEvent::touchesLengthCap));
|
| - TOUCHINPUT points[WebKit::WebTouchEvent::touchesLengthCap];
|
| -
|
| - if (!total || !GetTouchInputInfo((HTOUCHINPUT)lparam, total,
|
| - points, sizeof(TOUCHINPUT))) {
|
| - return 0;
|
| - }
|
| -
|
| - for (size_t start = 0; start < total;) {
|
| - start += touch_state_.UpdateTouchPoints(points + start, total - start);
|
| - if (touch_state_.is_changed())
|
| - render_widget_host_->ForwardTouchEvent(touch_state_.touch_event());
|
| - }
|
| -
|
| - CloseTouchInputHandle((HTOUCHINPUT)lparam);
|
| -
|
| - return 0;
|
| -}
|
| -
|
| LRESULT RenderWidgetHostViewWin::OnMouseActivate(UINT message,
|
| WPARAM wparam,
|
| LPARAM lparam,
|
|
|