diff options
author | sadrul@chromium.org <sadrul@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-06-13 17:09:22 +0000 |
---|---|---|
committer | sadrul@chromium.org <sadrul@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-06-13 17:09:22 +0000 |
commit | 3746e92a7b15ff58ea91f7a2ae02d12102554544 (patch) | |
tree | d70f79aa4c2a2e0d234f319be090667a7076fb94 /views/events/event_x.cc | |
parent | e2008d7902978df52d7cc0dd733d6b6f559e0f78 (diff) | |
download | chromium_src-3746e92a7b15ff58ea91f7a2ae02d12102554544.zip chromium_src-3746e92a7b15ff58ea91f7a2ae02d12102554544.tar.gz chromium_src-3746e92a7b15ff58ea91f7a2ae02d12102554544.tar.bz2 |
Update rich touch information to conform to standard
W3C Touch Event standard (draft)
https://dvcs.w3.org/hg/webevents/raw-file/tip/touchevents.html
introduces RadiusX, RadiusY field for touch events. This patch makes views::TouchEvent to have corresonding
fields and proper default value extracted from XEvent, and pass them from RWHVV to WebKit side.
BUG=None
TEST=None
Review URL: http://codereview.chromium.org/7129008
Patch from Yufeng Shen <miletus@chromium.org>.
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@88830 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'views/events/event_x.cc')
-rw-r--r-- | views/events/event_x.cc | 62 |
1 files changed, 14 insertions, 48 deletions
diff --git a/views/events/event_x.cc b/views/events/event_x.cc index 3721fb2..0fa471e 100644 --- a/views/events/event_x.cc +++ b/views/events/event_x.cc @@ -245,53 +245,13 @@ uint16 GetCharacterFromXKeyEvent(XKeyEvent* key) { result.length() == 1) ? result[0] : 0; } -float GetTouchRadiusFromXEvent(XEvent* xev) { - float diameter = 0.0; - +float GetTouchParamFromXEvent(XEvent* xev, + TouchFactory::TouchParam tp, + float default_value) { #if defined(HAVE_XINPUT2) - TouchFactory* touch_factory = TouchFactory::GetInstance(); - touch_factory->ExtractTouchParam(*xev, TouchFactory::TP_TOUCH_MAJOR, - &diameter); + TouchFactory::GetInstance()->ExtractTouchParam(*xev, tp, &default_value); #endif - - return diameter / 2.0; -} - -float GetTouchAngleFromXEvent(XEvent* xev) { - float angle = 0.0; - -#if defined(HAVE_XINPUT2) - TouchFactory* touch_factory = TouchFactory::GetInstance(); - touch_factory->ExtractTouchParam(*xev, TouchFactory::TP_ORIENTATION, - &angle); -#endif - - return angle; -} - - -float GetTouchRatioFromXEvent(XEvent* xev) { - float ratio = 1.0; - -#if defined(HAVE_XINPUT2) - TouchFactory* touch_factory = TouchFactory::GetInstance(); - float major_v = -1.0; - float minor_v = -1.0; - - if (!touch_factory->ExtractTouchParam(*xev, - TouchFactory::TP_TOUCH_MAJOR, - &major_v) || - !touch_factory->ExtractTouchParam(*xev, - TouchFactory::TP_TOUCH_MINOR, - &minor_v)) - return ratio; - - // In case minor axis exists but is zero. - if (minor_v > 0.0) - ratio = major_v / minor_v; -#endif - - return ratio; + return default_value; } } // namespace @@ -421,9 +381,15 @@ TouchEvent::TouchEvent(NativeEvent2 native_event_2, FromNativeEvent2 from_native) : LocatedEvent(native_event_2, from_native), touch_id_(GetTouchIDFromXEvent(native_event_2)), - radius_(GetTouchRadiusFromXEvent(native_event_2)), - angle_(GetTouchAngleFromXEvent(native_event_2)), - ratio_(GetTouchRatioFromXEvent(native_event_2)) { + radius_x_(GetTouchParamFromXEvent(native_event_2, + TouchFactory::TP_TOUCH_MAJOR, + 2.0) / 2.0), + radius_y_(GetTouchParamFromXEvent(native_event_2, + TouchFactory::TP_TOUCH_MINOR, + 2.0) / 2.0), + angle_(GetTouchParamFromXEvent(native_event_2, + TouchFactory::TP_ORIENTATION, + 0.0)) { if (type() == ui::ET_TOUCH_PRESSED || type() == ui::ET_TOUCH_RELEASED) { TouchFactory* factory = TouchFactory::GetInstance(); float slot; |