Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(73)

Side by Side Diff: third_party/WebKit/Source/web/WebInputEventConversion.cpp

Issue 2507503002: Use touch events to report stylus events (Closed)
Patch Set: I should pay attention... Created 4 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 /* 1 /*
2 * Copyright (C) 2009 Google Inc. All rights reserved. 2 * Copyright (C) 2009 Google Inc. All rights reserved.
3 * 3 *
4 * Redistribution and use in source and binary forms, with or without 4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions are 5 * modification, are permitted provided that the following conditions are
6 * met: 6 * met:
7 * 7 *
8 * * Redistributions of source code must retain the above copyright 8 * * Redistributions of source code must retain the above copyright
9 * notice, this list of conditions and the following disclaimer. 9 * notice, this list of conditions and the following disclaimer.
10 * * Redistributions in binary form must reproduce the above 10 * * Redistributions in binary form must reproduce the above
(...skipping 660 matching lines...) Expand 10 before | Expand all | Expand 10 after
671 else 671 else
672 return; // Skip all other keyboard events. 672 return; // Skip all other keyboard events.
673 673
674 modifiers = event.modifiers(); 674 modifiers = event.modifiers();
675 timeStampSeconds = event.platformTimeStamp(); 675 timeStampSeconds = event.platformTimeStamp();
676 windowsKeyCode = event.keyCode(); 676 windowsKeyCode = event.keyCode();
677 } 677 }
678 678
679 static WebTouchPoint toWebTouchPoint(const Touch* touch, 679 static WebTouchPoint toWebTouchPoint(const Touch* touch,
680 const LayoutItem layoutItem, 680 const LayoutItem layoutItem,
681 WebTouchPoint::State state) { 681 WebTouchPoint::State state,
682 WebPointerProperties::PointerType type) {
682 WebTouchPoint point; 683 WebTouchPoint point;
683 point.pointerType = WebPointerProperties::PointerType::Touch; 684 point.pointerType = type;
684 point.id = touch->identifier(); 685 point.id = touch->identifier();
685 point.screenPosition = touch->screenLocation(); 686 point.screenPosition = touch->screenLocation();
686 point.position = convertAbsoluteLocationForLayoutObjectFloat( 687 point.position = convertAbsoluteLocationForLayoutObjectFloat(
687 DoublePoint(touch->absoluteLocation()), layoutItem); 688 DoublePoint(touch->absoluteLocation()), layoutItem);
688 point.radiusX = touch->radiusX(); 689 point.radiusX = touch->radiusX();
689 point.radiusY = touch->radiusY(); 690 point.radiusY = touch->radiusY();
690 point.rotationAngle = touch->rotationAngle(); 691 point.rotationAngle = touch->rotationAngle();
691 point.force = touch->force(); 692 point.force = touch->force();
692 point.state = state; 693 point.state = state;
693 return point; 694 return point;
694 } 695 }
695 696
696 static unsigned indexOfTouchPointWithId(const WebTouchPoint* touchPoints, 697 static unsigned indexOfTouchPointWithId(const WebTouchPoint* touchPoints,
697 unsigned touchPointsLength, 698 unsigned touchPointsLength,
698 unsigned id) { 699 unsigned id) {
699 for (unsigned i = 0; i < touchPointsLength; ++i) { 700 for (unsigned i = 0; i < touchPointsLength; ++i) {
700 if (touchPoints[i].id == static_cast<int>(id)) 701 if (touchPoints[i].id == static_cast<int>(id))
701 return i; 702 return i;
702 } 703 }
703 return std::numeric_limits<unsigned>::max(); 704 return std::numeric_limits<unsigned>::max();
704 } 705 }
705 706
706 static void addTouchPointsUpdateStateIfNecessary(WebTouchPoint::State state, 707 static void addTouchPointsUpdateStateIfNecessary(
707 TouchList* touches, 708 WebTouchPoint::State state,
708 WebTouchPoint* touchPoints, 709 TouchList* touches,
709 unsigned* touchPointsLength, 710 WebTouchPoint* touchPoints,
710 const LayoutItem layoutItem) { 711 unsigned* touchPointsLength,
712 const LayoutItem layoutItem,
713 WebPointerProperties::PointerType pointerType) {
711 unsigned initialTouchPointsLength = *touchPointsLength; 714 unsigned initialTouchPointsLength = *touchPointsLength;
712 for (unsigned i = 0; i < touches->length(); ++i) { 715 for (unsigned i = 0; i < touches->length(); ++i) {
713 const unsigned pointIndex = *touchPointsLength; 716 const unsigned pointIndex = *touchPointsLength;
714 if (pointIndex >= static_cast<unsigned>(WebTouchEvent::kTouchesLengthCap)) 717 if (pointIndex >= static_cast<unsigned>(WebTouchEvent::kTouchesLengthCap))
715 return; 718 return;
716 719
717 const Touch* touch = touches->item(i); 720 const Touch* touch = touches->item(i);
718 unsigned existingPointIndex = indexOfTouchPointWithId( 721 unsigned existingPointIndex = indexOfTouchPointWithId(
719 touchPoints, initialTouchPointsLength, touch->identifier()); 722 touchPoints, initialTouchPointsLength, touch->identifier());
720 if (existingPointIndex != std::numeric_limits<unsigned>::max()) { 723 if (existingPointIndex != std::numeric_limits<unsigned>::max()) {
721 touchPoints[existingPointIndex].state = state; 724 touchPoints[existingPointIndex].state = state;
722 } else { 725 } else {
723 touchPoints[pointIndex] = toWebTouchPoint(touch, layoutItem, state); 726 touchPoints[pointIndex] =
727 toWebTouchPoint(touch, layoutItem, state, pointerType);
724 ++(*touchPointsLength); 728 ++(*touchPointsLength);
725 } 729 }
726 } 730 }
727 } 731 }
728 732
729 WebTouchEventBuilder::WebTouchEventBuilder(const LayoutItem layoutItem, 733 WebTouchEventBuilder::WebTouchEventBuilder(const LayoutItem layoutItem,
730 const TouchEvent& event) { 734 const TouchEvent& event) {
731 if (event.type() == EventTypeNames::touchstart) 735 if (event.type() == EventTypeNames::touchstart)
732 type = TouchStart; 736 type = TouchStart;
733 else if (event.type() == EventTypeNames::touchmove) 737 else if (event.type() == EventTypeNames::touchmove)
(...skipping 12 matching lines...) Expand all
746 modifiers = event.modifiers(); 750 modifiers = event.modifiers();
747 dispatchType = event.cancelable() ? WebInputEvent::Blocking 751 dispatchType = event.cancelable() ? WebInputEvent::Blocking
748 : WebInputEvent::EventNonBlocking; 752 : WebInputEvent::EventNonBlocking;
749 movedBeyondSlopRegion = event.causesScrollingIfUncanceled(); 753 movedBeyondSlopRegion = event.causesScrollingIfUncanceled();
750 754
751 // Currently touches[] is empty, add stationary points as-is. 755 // Currently touches[] is empty, add stationary points as-is.
752 for (unsigned i = 0; 756 for (unsigned i = 0;
753 i < event.touches()->length() && 757 i < event.touches()->length() &&
754 i < static_cast<unsigned>(WebTouchEvent::kTouchesLengthCap); 758 i < static_cast<unsigned>(WebTouchEvent::kTouchesLengthCap);
755 ++i) { 759 ++i) {
756 touches[i] = toWebTouchPoint(event.touches()->item(i), layoutItem, 760 touches[i] =
757 WebTouchPoint::StateStationary); 761 toWebTouchPoint(event.touches()->item(i), layoutItem,
762 WebTouchPoint::StateStationary, event.pointerType());
758 ++touchesLength; 763 ++touchesLength;
759 } 764 }
760 // If any existing points are also in the change list, we should update 765 // If any existing points are also in the change list, we should update
761 // their state, otherwise just add the new points. 766 // their state, otherwise just add the new points.
762 addTouchPointsUpdateStateIfNecessary(toWebTouchPointState(event.type()), 767 addTouchPointsUpdateStateIfNecessary(
763 event.changedTouches(), touches, 768 toWebTouchPointState(event.type()), event.changedTouches(), touches,
764 &touchesLength, layoutItem); 769 &touchesLength, layoutItem, event.pointerType());
765 } 770 }
766 771
767 WebGestureEventBuilder::WebGestureEventBuilder(const LayoutItem layoutItem, 772 WebGestureEventBuilder::WebGestureEventBuilder(const LayoutItem layoutItem,
768 const GestureEvent& event) { 773 const GestureEvent& event) {
769 if (event.type() == EventTypeNames::gestureshowpress) { 774 if (event.type() == EventTypeNames::gestureshowpress) {
770 type = GestureShowPress; 775 type = GestureShowPress;
771 } else if (event.type() == EventTypeNames::gesturelongpress) { 776 } else if (event.type() == EventTypeNames::gesturelongpress) {
772 type = GestureLongPress; 777 type = GestureLongPress;
773 } else if (event.type() == EventTypeNames::gesturetapdown) { 778 } else if (event.type() == EventTypeNames::gesturetapdown) {
774 type = GestureTapDown; 779 type = GestureTapDown;
(...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after
846 Vector<PlatformTouchEvent> result; 851 Vector<PlatformTouchEvent> result;
847 for (const auto& event : coalescedEvents) { 852 for (const auto& event : coalescedEvents) {
848 DCHECK(WebInputEvent::isTouchEventType(event->type)); 853 DCHECK(WebInputEvent::isTouchEventType(event->type));
849 result.append(PlatformTouchEventBuilder( 854 result.append(PlatformTouchEventBuilder(
850 widget, static_cast<const WebTouchEvent&>(*event))); 855 widget, static_cast<const WebTouchEvent&>(*event)));
851 } 856 }
852 return result; 857 return result;
853 } 858 }
854 859
855 } // namespace blink 860 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698