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

Side by Side Diff: ui/events/x/events_x.cc

Issue 688253002: Implemented smooth scrolling using xinput2 in X11. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Applied sadrul's comments Created 5 years, 12 months 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 // 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 "ui/events/event_constants.h" 5 #include "ui/events/event_constants.h"
6 6
7 #include <cmath> 7 #include <cmath>
8 #include <string.h> 8 #include <string.h>
9 #include <X11/extensions/XInput.h> 9 #include <X11/extensions/XInput.h>
10 #include <X11/extensions/XInput2.h> 10 #include <X11/extensions/XInput2.h>
(...skipping 426 matching lines...) Expand 10 before | Expand all | Expand 10 after
437 } 437 }
438 case XI_Motion: { 438 case XI_Motion: {
439 bool is_cancel; 439 bool is_cancel;
440 DeviceDataManagerX11* devices = DeviceDataManagerX11::GetInstance(); 440 DeviceDataManagerX11* devices = DeviceDataManagerX11::GetInstance();
441 if (GetFlingData(native_event, NULL, NULL, NULL, NULL, &is_cancel)) 441 if (GetFlingData(native_event, NULL, NULL, NULL, NULL, &is_cancel))
442 return is_cancel ? ET_SCROLL_FLING_CANCEL : ET_SCROLL_FLING_START; 442 return is_cancel ? ET_SCROLL_FLING_CANCEL : ET_SCROLL_FLING_START;
443 if (devices->IsScrollEvent(native_event)) { 443 if (devices->IsScrollEvent(native_event)) {
444 return devices->IsTouchpadXInputEvent(native_event) ? ET_SCROLL 444 return devices->IsTouchpadXInputEvent(native_event) ? ET_SCROLL
445 : ET_MOUSEWHEEL; 445 : ET_MOUSEWHEEL;
446 } 446 }
447 if (devices->GetScrollClassEventDetail(native_event) !=
448 SCROLL_TYPE_NO_SCROLL)
449 return ET_MOUSEWHEEL;
447 if (devices->IsCMTMetricsEvent(native_event)) 450 if (devices->IsCMTMetricsEvent(native_event))
448 return ET_UMA_DATA; 451 return ET_UMA_DATA;
449 if (GetButtonMaskForX2Event(xievent)) 452 if (GetButtonMaskForX2Event(xievent))
450 return ET_MOUSE_DRAGGED; 453 return ET_MOUSE_DRAGGED;
451 return ET_MOUSE_MOVED; 454 return ET_MOUSE_MOVED;
452 } 455 }
453 case XI_KeyPress: 456 case XI_KeyPress:
454 return ET_KEY_PRESSED; 457 return ET_KEY_PRESSED;
455 case XI_KeyRelease: 458 case XI_KeyRelease:
456 return ET_KEY_RELEASED; 459 return ET_KEY_RELEASED;
(...skipping 255 matching lines...) Expand 10 before | Expand all | Expand 10 after
712 float x_offset, y_offset; 715 float x_offset, y_offset;
713 if (GetScrollOffsets( 716 if (GetScrollOffsets(
714 native_event, &x_offset, &y_offset, NULL, NULL, NULL)) { 717 native_event, &x_offset, &y_offset, NULL, NULL, NULL)) {
715 return gfx::Vector2d(static_cast<int>(x_offset), 718 return gfx::Vector2d(static_cast<int>(x_offset),
716 static_cast<int>(y_offset)); 719 static_cast<int>(y_offset));
717 } 720 }
718 721
719 int button = native_event->type == GenericEvent ? 722 int button = native_event->type == GenericEvent ?
720 EventButtonFromNative(native_event) : native_event->xbutton.button; 723 EventButtonFromNative(native_event) : native_event->xbutton.button;
721 724
725 int scroll_class_type =
726 DeviceDataManagerX11::GetInstance()
727 ->GetScrollClassDeviceDetail(native_event);
728 bool vertical_scroll_class = scroll_class_type & SCROLL_TYPE_VERTICAL;
729 bool horizontal_scroll_class = scroll_class_type & SCROLL_TYPE_HORIZONTAL;
730
722 switch (button) { 731 switch (button) {
723 case 4: 732 case 4:
724 return gfx::Vector2d(0, kWheelScrollAmount); 733 return gfx::Vector2d(0, vertical_scroll_class ? 0 : kWheelScrollAmount);
725 case 5: 734 case 5:
726 return gfx::Vector2d(0, -kWheelScrollAmount); 735 return gfx::Vector2d(0, vertical_scroll_class ? 0 : -kWheelScrollAmount);
727 case 6: 736 case 6:
728 return gfx::Vector2d(kWheelScrollAmount, 0); 737 return gfx::Vector2d(horizontal_scroll_class ? 0 : kWheelScrollAmount, 0);
729 case 7: 738 case 7:
730 return gfx::Vector2d(-kWheelScrollAmount, 0); 739 return gfx::Vector2d(horizontal_scroll_class ? 0 : -kWheelScrollAmount,
740 0);
731 default: 741 default:
732 return gfx::Vector2d(); 742 return gfx::Vector2d();
733 } 743 }
734 } 744 }
735 745
736 base::NativeEvent CopyNativeEvent(const base::NativeEvent& event) { 746 base::NativeEvent CopyNativeEvent(const base::NativeEvent& event) {
737 if (!event || event->type == GenericEvent) 747 if (!event || event->type == GenericEvent)
738 return NULL; 748 return NULL;
739 XEvent* copy = new XEvent; 749 XEvent* copy = new XEvent;
740 *copy = *event; 750 *copy = *event;
(...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after
816 force = 0.0; 826 force = 0.0;
817 return force; 827 return force;
818 } 828 }
819 829
820 bool GetScrollOffsets(const base::NativeEvent& native_event, 830 bool GetScrollOffsets(const base::NativeEvent& native_event,
821 float* x_offset, 831 float* x_offset,
822 float* y_offset, 832 float* y_offset,
823 float* x_offset_ordinal, 833 float* x_offset_ordinal,
824 float* y_offset_ordinal, 834 float* y_offset_ordinal,
825 int* finger_count) { 835 int* finger_count) {
826 if (!DeviceDataManagerX11::GetInstance()->IsScrollEvent(native_event)) 836 if (DeviceDataManagerX11::GetInstance()->IsScrollEvent(native_event)) {
827 return false; 837 // Temp values to prevent passing NULLs to DeviceDataManager.
838 float x_offset_, y_offset_;
839 float x_offset_ordinal_, y_offset_ordinal_;
840 int finger_count_;
841 if (!x_offset)
842 x_offset = &x_offset_;
843 if (!y_offset)
844 y_offset = &y_offset_;
845 if (!x_offset_ordinal)
846 x_offset_ordinal = &x_offset_ordinal_;
847 if (!y_offset_ordinal)
848 y_offset_ordinal = &y_offset_ordinal_;
849 if (!finger_count)
850 finger_count = &finger_count_;
828 851
829 // Temp values to prevent passing NULLs to DeviceDataManager. 852 DeviceDataManagerX11::GetInstance()->GetScrollOffsets(
830 float x_offset_, y_offset_; 853 native_event,
831 float x_offset_ordinal_, y_offset_ordinal_; 854 x_offset, y_offset,
832 int finger_count_; 855 x_offset_ordinal, y_offset_ordinal,
833 if (!x_offset) 856 finger_count);
834 x_offset = &x_offset_; 857 return true;
835 if (!y_offset) 858 }
836 y_offset = &y_offset_;
837 if (!x_offset_ordinal)
838 x_offset_ordinal = &x_offset_ordinal_;
839 if (!y_offset_ordinal)
840 y_offset_ordinal = &y_offset_ordinal_;
841 if (!finger_count)
842 finger_count = &finger_count_;
843 859
844 DeviceDataManagerX11::GetInstance()->GetScrollOffsets( 860 if (DeviceDataManagerX11::GetInstance()->
845 native_event, 861 GetScrollClassEventDetail(native_event) != SCROLL_TYPE_NO_SCROLL) {
846 x_offset, y_offset, 862 double x_scroll_offset, y_scroll_offset;
847 x_offset_ordinal, y_offset_ordinal, 863 DeviceDataManagerX11::GetInstance()->GetScrollClassOffsets(
848 finger_count); 864 native_event,
849 return true; 865 &x_scroll_offset, &y_scroll_offset);
866 *x_offset = x_scroll_offset * kWheelScrollAmount;
867 *y_offset = y_scroll_offset * kWheelScrollAmount;
868 return true;
869 }
870 return false;
850 } 871 }
851 872
852 bool GetFlingData(const base::NativeEvent& native_event, 873 bool GetFlingData(const base::NativeEvent& native_event,
853 float* vx, 874 float* vx,
854 float* vy, 875 float* vy,
855 float* vx_ordinal, 876 float* vx_ordinal,
856 float* vy_ordinal, 877 float* vy_ordinal,
857 bool* is_cancel) { 878 bool* is_cancel) {
858 if (!DeviceDataManagerX11::GetInstance()->IsFlingEvent(native_event)) 879 if (!DeviceDataManagerX11::GetInstance()->IsFlingEvent(native_event))
859 return false; 880 return false;
(...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after
920 xievent->detail = 941 xievent->detail =
921 UpdateX11EventButton(event->changed_button_flags(), xievent->detail); 942 UpdateX11EventButton(event->changed_button_flags(), xievent->detail);
922 break; 943 break;
923 } 944 }
924 default: 945 default:
925 break; 946 break;
926 } 947 }
927 } 948 }
928 949
929 } // namespace ui 950 } // namespace ui
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698