diff options
author | sheckylin@chromium.org <sheckylin@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-05-03 11:16:05 +0000 |
---|---|---|
committer | sheckylin@chromium.org <sheckylin@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-05-03 11:16:05 +0000 |
commit | 1a55c208ed07f8a869b880844d1653de14fab034 (patch) | |
tree | 01d57722496e1949275d42b874c6e26905c95f14 | |
parent | 16fff6f5283598d424cd352c6d4bc37baee6b3b2 (diff) | |
download | chromium_src-1a55c208ed07f8a869b880844d1653de14fab034.zip chromium_src-1a55c208ed07f8a869b880844d1653de14fab034.tar.gz chromium_src-1a55c208ed07f8a869b880844d1653de14fab034.tar.bz2 |
Extend MouseWheelEvent to support both X and Y scrolls
The patch extends the ui::MouseWheelEvent class to support
X (horizontal) scrolls and updates the corresponding interface
in event_utils.h. It also revises throughout the codebase where
the old method calls were used.
Contributed by sheckylin@chromium.org
BUG=231419
TEST=Tested on device.
Change-Id: I86a7b6b62ec4ac8c296251a2333234170f1cd2e7
Review URL: https://chromiumcodereview.appspot.com/13829007
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@198086 0039d316-1c4b-4281-b951-d872f2087c98
-rw-r--r-- | ash/launcher/overflow_bubble.cc | 8 | ||||
-rw-r--r-- | content/browser/renderer_host/web_input_event_aura.cc | 3 | ||||
-rw-r--r-- | ui/app_list/views/contents_view.cc | 8 | ||||
-rw-r--r-- | ui/aura/remote_root_window_host_win.cc | 2 | ||||
-rw-r--r-- | ui/base/cocoa/events_mac.mm | 4 | ||||
-rw-r--r-- | ui/base/events/event.cc | 8 | ||||
-rw-r--r-- | ui/base/events/event.h | 11 | ||||
-rw-r--r-- | ui/base/events/event_utils.h | 6 | ||||
-rw-r--r-- | ui/base/win/events_win.cc | 4 | ||||
-rw-r--r-- | ui/base/x/events_x.cc | 17 | ||||
-rw-r--r-- | ui/base/x/events_x_unittest.cc | 17 | ||||
-rw-r--r-- | ui/views/controls/menu/submenu_view.cc | 6 | ||||
-rw-r--r-- | ui/views/controls/scrollbar/base_scroll_bar.cc | 2 |
13 files changed, 60 insertions, 36 deletions
diff --git a/ash/launcher/overflow_bubble.cc b/ash/launcher/overflow_bubble.cc index 8291c4d..09613ca 100644 --- a/ash/launcher/overflow_bubble.cc +++ b/ash/launcher/overflow_bubble.cc @@ -172,10 +172,14 @@ void OverflowBubbleView::ChildPreferredSizeChanged(views::View* child) { } bool OverflowBubbleView::OnMouseWheel(const ui::MouseWheelEvent& event) { + // The MouseWheelEvent was changed to support both X and Y offsets + // recently, but the behavior of this function was retained to continue + // using Y offsets only. Might be good to simply scroll in both + // directions as in OverflowBubbleView::OnScrollEvent. if (IsHorizontalAlignment()) - ScrollByXOffset(-event.offset()); + ScrollByXOffset(-event.y_offset()); else - ScrollByYOffset(-event.offset()); + ScrollByYOffset(-event.y_offset()); Layout(); return true; diff --git a/content/browser/renderer_host/web_input_event_aura.cc b/content/browser/renderer_host/web_input_event_aura.cc index d7c68a5..e293377 100644 --- a/content/browser/renderer_host/web_input_event_aura.cc +++ b/content/browser/renderer_host/web_input_event_aura.cc @@ -253,7 +253,8 @@ WebKit::WebMouseWheelEvent MakeWebMouseWheelEventFromAuraEvent( webkit_event.button = WebKit::WebMouseEvent::ButtonNone; webkit_event.modifiers = EventFlagsToWebEventModifiers(event->flags()); webkit_event.timeStampSeconds = event->time_stamp().InSecondsF(); - webkit_event.deltaY = event->offset(); + webkit_event.deltaX = event->x_offset(); + webkit_event.deltaY = event->y_offset(); webkit_event.wheelTicksY = webkit_event.deltaY / kPixelsPerTick; return webkit_event; diff --git a/ui/app_list/views/contents_view.cc b/ui/app_list/views/contents_view.cc index 6abda38..e256f4b 100644 --- a/ui/app_list/views/contents_view.cc +++ b/ui/app_list/views/contents_view.cc @@ -178,9 +178,11 @@ bool ContentsView::OnMouseWheel(const ui::MouseWheelEvent& event) { if (show_state_ != SHOW_APPS) return false; - if (abs(event.offset()) > kMinMouseWheelToSwitchPage) { - if (!pagination_model_->has_transition()) - pagination_model_->SelectPageRelative(event.offset() > 0 ? -1 : 1, true); + if (abs(event.y_offset()) > kMinMouseWheelToSwitchPage) { + if (!pagination_model_->has_transition()) { + pagination_model_->SelectPageRelative( + event.y_offset() > 0 ? -1 : 1, true); + } return true; } diff --git a/ui/aura/remote_root_window_host_win.cc b/ui/aura/remote_root_window_host_win.cc index a30b3ed..c477110 100644 --- a/ui/aura/remote_root_window_host_win.cc +++ b/ui/aura/remote_root_window_host_win.cc @@ -350,7 +350,7 @@ void RemoteRootWindowHostWin::OnMouseButton( mouse_event.set_flags(flags); if (type == ui::ET_MOUSEWHEEL) { - ui::MouseWheelEvent wheel_event(mouse_event, extra); + ui::MouseWheelEvent wheel_event(mouse_event, 0, extra); delegate_->OnHostMouseEvent(&wheel_event); } else { mouse_event.SetClickCount(1); diff --git a/ui/base/cocoa/events_mac.mm b/ui/base/cocoa/events_mac.mm index ec83f6b..7dd91b6 100644 --- a/ui/base/cocoa/events_mac.mm +++ b/ui/base/cocoa/events_mac.mm @@ -151,10 +151,10 @@ bool IsMouseEvent(const base::NativeEvent& native_event) { type == ET_MOUSE_EXITED; } -int GetMouseWheelOffset(const base::NativeEvent& native_event) { +gfx::Vector2d GetMouseWheelOffset(const base::NativeEvent& native_event) { // TODO(dhollowa): Come back to this once comparisons can be made with other // platforms. - return [native_event deltaY]; + return gfx::Vector2d([native_event deltaX], [native_event deltaY]); } int GetTouchId(const base::NativeEvent& native_event) { diff --git a/ui/base/events/event.cc b/ui/base/events/event.cc index 4c94464..495ad76 100644 --- a/ui/base/events/event.cc +++ b/ui/base/events/event.cc @@ -394,12 +394,14 @@ MouseWheelEvent::MouseWheelEvent(const base::NativeEvent& native_event) MouseWheelEvent::MouseWheelEvent(const ScrollEvent& scroll_event) : MouseEvent(scroll_event), - offset_(scroll_event.y_offset()) { + offset_(scroll_event.x_offset(), scroll_event.y_offset()){ SetType(ET_MOUSEWHEEL); } -MouseWheelEvent::MouseWheelEvent(const MouseEvent& mouse_event, int offset) - : MouseEvent(mouse_event), offset_(offset) { +MouseWheelEvent::MouseWheelEvent(const MouseEvent& mouse_event, + int x_offset, + int y_offset) + : MouseEvent(mouse_event), offset_(x_offset, y_offset) { DCHECK(type() == ET_MOUSEWHEEL); } diff --git a/ui/base/events/event.h b/ui/base/events/event.h index 8241ad4..fe746c0 100644 --- a/ui/base/events/event.h +++ b/ui/base/events/event.h @@ -406,7 +406,7 @@ class UI_EXPORT MouseWheelEvent : public MouseEvent { explicit MouseWheelEvent(const base::NativeEvent& native_event); explicit MouseWheelEvent(const ScrollEvent& scroll_event); - MouseWheelEvent(const MouseEvent& mouse_event, int offset); + MouseWheelEvent(const MouseEvent& mouse_event, int x_offset, int y_offset); template <class T> MouseWheelEvent(const MouseWheelEvent& model, @@ -415,15 +415,16 @@ class UI_EXPORT MouseWheelEvent : public MouseEvent { EventType type, int flags) : MouseEvent(model, source, target, type, flags), - offset_(model.offset_) { + offset_(model.x_offset(), model.y_offset()){ } // The amount to scroll. This is in multiples of kWheelDelta. - // Note: offset() > 0 means scroll up / left. - int offset() const { return offset_; } + // Note: x_offset() > 0/y_offset() > 0 means scroll left/up. + int x_offset() const { return offset_.x(); } + int y_offset() const { return offset_.y(); } private: - int offset_; + gfx::Vector2d offset_; DISALLOW_COPY_AND_ASSIGN(MouseWheelEvent); }; diff --git a/ui/base/events/event_utils.h b/ui/base/events/event_utils.h index 05ce2cd..aaa4a20 100644 --- a/ui/base/events/event_utils.h +++ b/ui/base/events/event_utils.h @@ -16,6 +16,7 @@ namespace gfx { class Point; +class Vector2d; } namespace base { @@ -72,8 +73,9 @@ UI_EXPORT bool IsMouseEvent(const base::NativeEvent& native_event); UI_EXPORT int GetChangedMouseButtonFlagsFromNative( const base::NativeEvent& native_event); -// Gets the mouse wheel offset from a native event. -UI_EXPORT int GetMouseWheelOffset(const base::NativeEvent& native_event); +// Gets the mouse wheel offsets from a native event. +UI_EXPORT gfx::Vector2d GetMouseWheelOffset( + const base::NativeEvent& native_event); // Gets the touch id from a native event. UI_EXPORT int GetTouchId(const base::NativeEvent& native_event); diff --git a/ui/base/win/events_win.cc b/ui/base/win/events_win.cc index 5ddc81d..596d8c5 100644 --- a/ui/base/win/events_win.cc +++ b/ui/base/win/events_win.cc @@ -246,9 +246,9 @@ int GetChangedMouseButtonFlagsFromNative( return 0; } -int GetMouseWheelOffset(const base::NativeEvent& native_event) { +gfx::Vector2d GetMouseWheelOffset(const base::NativeEvent& native_event) { DCHECK(native_event.message == WM_MOUSEWHEEL); - return GET_WHEEL_DELTA_WPARAM(native_event.wParam); + return gfx::Vector2d(0, GET_WHEEL_DELTA_WPARAM(native_event.wParam)); } int GetTouchId(const base::NativeEvent& xev) { diff --git a/ui/base/x/events_x.cc b/ui/base/x/events_x.cc index e955cbe..d890d65 100644 --- a/ui/base/x/events_x.cc +++ b/ui/base/x/events_x.cc @@ -979,23 +979,26 @@ int GetChangedMouseButtonFlagsFromNative( return 0; } -int GetMouseWheelOffset(const base::NativeEvent& native_event) { - float offset = 0; +gfx::Vector2d GetMouseWheelOffset(const base::NativeEvent& native_event) { + float x_offset = 0; + float y_offset = 0; if (native_event->type == GenericEvent && - GetScrollOffsets(native_event, NULL, &offset, NULL, NULL, NULL)) - return static_cast<int>(offset); + GetScrollOffsets(native_event, &x_offset, &y_offset, NULL, NULL, NULL)) { + return gfx::Vector2d(static_cast<int>(x_offset), + static_cast<int>(y_offset)); + } int button = native_event->type == GenericEvent ? EventButtonFromNative(native_event) : native_event->xbutton.button; switch (button) { case 4: - return kWheelScrollAmount; + return gfx::Vector2d(0, kWheelScrollAmount); case 5: - return -kWheelScrollAmount; + return gfx::Vector2d(0, -kWheelScrollAmount); default: // TODO(derat): Do something for horizontal scrolls (buttons 6 and 7)? - return 0; + return gfx::Vector2d(); } } diff --git a/ui/base/x/events_x_unittest.cc b/ui/base/x/events_x_unittest.cc index 52a7eb2..5dd5eaa 100644 --- a/ui/base/x/events_x_unittest.cc +++ b/ui/base/x/events_x_unittest.cc @@ -42,6 +42,7 @@ void InitButtonEvent(XEvent* event, TEST(EventsXTest, ButtonEvents) { XEvent event; gfx::Point location(5, 10); + gfx::Vector2d offset; InitButtonEvent(&event, true, location, 1, 0); EXPECT_EQ(ui::ET_MOUSE_PRESSED, ui::EventTypeFromNative(&event)); @@ -69,7 +70,9 @@ TEST(EventsXTest, ButtonEvents) { EXPECT_EQ(0, ui::EventFlagsFromNative(&event)); EXPECT_EQ(location, ui::EventLocationFromNative(&event)); EXPECT_TRUE(ui::IsMouseEvent(&event)); - EXPECT_GT(ui::GetMouseWheelOffset(&event), 0); + offset = ui::GetMouseWheelOffset(&event); + EXPECT_GT(offset.y(), 0); + EXPECT_EQ(0, offset.x()); // Scroll down. InitButtonEvent(&event, true, location, 5, 0); @@ -77,7 +80,9 @@ TEST(EventsXTest, ButtonEvents) { EXPECT_EQ(0, ui::EventFlagsFromNative(&event)); EXPECT_EQ(location, ui::EventLocationFromNative(&event)); EXPECT_TRUE(ui::IsMouseEvent(&event)); - EXPECT_LT(ui::GetMouseWheelOffset(&event), 0); + offset = ui::GetMouseWheelOffset(&event); + EXPECT_LT(offset.y(), 0); + EXPECT_EQ(0, offset.x()); // Scroll left, typically. InitButtonEvent(&event, true, location, 6, 0); @@ -85,7 +90,9 @@ TEST(EventsXTest, ButtonEvents) { EXPECT_EQ(0, ui::EventFlagsFromNative(&event)); EXPECT_EQ(location, ui::EventLocationFromNative(&event)); EXPECT_TRUE(ui::IsMouseEvent(&event)); - EXPECT_EQ(0, ui::GetMouseWheelOffset(&event)); + offset = ui::GetMouseWheelOffset(&event); + EXPECT_EQ(0, offset.y()); + EXPECT_EQ(0, offset.x()); // Scroll right, typically. InitButtonEvent(&event, true, location, 7, 0); @@ -93,7 +100,9 @@ TEST(EventsXTest, ButtonEvents) { EXPECT_EQ(0, ui::EventFlagsFromNative(&event)); EXPECT_EQ(location, ui::EventLocationFromNative(&event)); EXPECT_TRUE(ui::IsMouseEvent(&event)); - EXPECT_EQ(0, ui::GetMouseWheelOffset(&event)); + offset = ui::GetMouseWheelOffset(&event); + EXPECT_EQ(0, offset.y()); + EXPECT_EQ(0, offset.x()); // TODO(derat): Test XInput code. } diff --git a/ui/views/controls/menu/submenu_view.cc b/ui/views/controls/menu/submenu_view.cc index 0e78ffe..0cda4eb 100644 --- a/ui/views/controls/menu/submenu_view.cc +++ b/ui/views/controls/menu/submenu_view.cc @@ -236,10 +236,10 @@ bool SubmenuView::OnMouseWheel(const ui::MouseWheelEvent& e) { // the next/previous one entirely visible. If enough wasn't scrolled to show // any new rows, then just scroll the amount so that smooth scrolling using // the trackpad is possible. - int delta = abs(e.offset() / ui::MouseWheelEvent::kWheelDelta); + int delta = abs(e.y_offset() / ui::MouseWheelEvent::kWheelDelta); if (delta == 0) - return OnScroll(0, e.offset()); - for (bool scroll_up = (e.offset() > 0); delta != 0; --delta) { + return OnScroll(0, e.y_offset()); + for (bool scroll_up = (e.y_offset() > 0); delta != 0; --delta) { int scroll_target; if (scroll_up) { if (GetMenuItemAt(first_vis_index)->y() == vis_bounds.y()) { diff --git a/ui/views/controls/scrollbar/base_scroll_bar.cc b/ui/views/controls/scrollbar/base_scroll_bar.cc index a62974d..041e9fd 100644 --- a/ui/views/controls/scrollbar/base_scroll_bar.cc +++ b/ui/views/controls/scrollbar/base_scroll_bar.cc @@ -192,7 +192,7 @@ bool BaseScrollBar::OnKeyPressed(const ui::KeyEvent& event) { } bool BaseScrollBar::OnMouseWheel(const ui::MouseWheelEvent& event) { - ScrollByContentsOffset(event.offset()); + ScrollByContentsOffset(event.y_offset()); return true; } |