summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorsheckylin@chromium.org <sheckylin@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-05-03 11:16:05 +0000
committersheckylin@chromium.org <sheckylin@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-05-03 11:16:05 +0000
commit1a55c208ed07f8a869b880844d1653de14fab034 (patch)
tree01d57722496e1949275d42b874c6e26905c95f14
parent16fff6f5283598d424cd352c6d4bc37baee6b3b2 (diff)
downloadchromium_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.cc8
-rw-r--r--content/browser/renderer_host/web_input_event_aura.cc3
-rw-r--r--ui/app_list/views/contents_view.cc8
-rw-r--r--ui/aura/remote_root_window_host_win.cc2
-rw-r--r--ui/base/cocoa/events_mac.mm4
-rw-r--r--ui/base/events/event.cc8
-rw-r--r--ui/base/events/event.h11
-rw-r--r--ui/base/events/event_utils.h6
-rw-r--r--ui/base/win/events_win.cc4
-rw-r--r--ui/base/x/events_x.cc17
-rw-r--r--ui/base/x/events_x_unittest.cc17
-rw-r--r--ui/views/controls/menu/submenu_view.cc6
-rw-r--r--ui/views/controls/scrollbar/base_scroll_bar.cc2
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;
}