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

Unified Diff: content/browser/renderer_host/input/motion_event_android.cc

Issue 1430623004: blimp: Add support for input handling (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 2 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 side-by-side diff with in-line comments
Download patch
Index: content/browser/renderer_host/input/motion_event_android.cc
diff --git a/content/browser/renderer_host/input/motion_event_android.cc b/content/browser/renderer_host/input/motion_event_android.cc
deleted file mode 100644
index 4d30a3f13bb4a268aa419e104c4eda0afda4ef16..0000000000000000000000000000000000000000
--- a/content/browser/renderer_host/input/motion_event_android.cc
+++ /dev/null
@@ -1,348 +0,0 @@
-// Copyright 2014 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "content/browser/renderer_host/input/motion_event_android.h"
-
-#include <android/input.h>
-
-#include <cmath>
-
-#include "base/android/jni_android.h"
-#include "jni/MotionEvent_jni.h"
-#include "ui/events/base_event_utils.h"
-#include "ui/events/event_constants.h"
-
-using base::android::AttachCurrentThread;
-using namespace JNI_MotionEvent;
-
-namespace content {
-namespace {
-
-MotionEventAndroid::Action FromAndroidAction(int android_action) {
- switch (android_action) {
- case ACTION_DOWN:
- return MotionEventAndroid::ACTION_DOWN;
- case ACTION_UP:
- return MotionEventAndroid::ACTION_UP;
- case ACTION_MOVE:
- return MotionEventAndroid::ACTION_MOVE;
- case ACTION_CANCEL:
- return MotionEventAndroid::ACTION_CANCEL;
- case ACTION_POINTER_DOWN:
- return MotionEventAndroid::ACTION_POINTER_DOWN;
- case ACTION_POINTER_UP:
- return MotionEventAndroid::ACTION_POINTER_UP;
- default:
- NOTREACHED() << "Invalid Android MotionEvent type for gesture detection: "
- << android_action;
- };
- return MotionEventAndroid::ACTION_CANCEL;
-}
-
-MotionEventAndroid::ToolType FromAndroidToolType(int android_tool_type) {
- switch (android_tool_type) {
- case TOOL_TYPE_UNKNOWN:
- return MotionEventAndroid::TOOL_TYPE_UNKNOWN;
- case TOOL_TYPE_FINGER:
- return MotionEventAndroid::TOOL_TYPE_FINGER;
- case TOOL_TYPE_STYLUS:
- return MotionEventAndroid::TOOL_TYPE_STYLUS;
- case TOOL_TYPE_MOUSE:
- return MotionEventAndroid::TOOL_TYPE_MOUSE;
- case TOOL_TYPE_ERASER:
- return MotionEventAndroid::TOOL_TYPE_ERASER;
- default:
- NOTREACHED() << "Invalid Android MotionEvent tool type: "
- << android_tool_type;
- };
- return MotionEventAndroid::TOOL_TYPE_UNKNOWN;
-}
-
-int FromAndroidButtonState(int button_state) {
- int result = 0;
- if ((button_state & BUTTON_BACK) != 0)
- result |= MotionEventAndroid::BUTTON_BACK;
- if ((button_state & BUTTON_FORWARD) != 0)
- result |= MotionEventAndroid::BUTTON_FORWARD;
- if ((button_state & BUTTON_PRIMARY) != 0)
- result |= MotionEventAndroid::BUTTON_PRIMARY;
- if ((button_state & BUTTON_SECONDARY) != 0)
- result |= MotionEventAndroid::BUTTON_SECONDARY;
- if ((button_state & BUTTON_TERTIARY) != 0)
- result |= MotionEventAndroid::BUTTON_TERTIARY;
- if ((button_state & BUTTON_STYLUS_PRIMARY) != 0)
- result |= MotionEventAndroid::BUTTON_STYLUS_PRIMARY;
- if ((button_state & BUTTON_STYLUS_SECONDARY) != 0)
- result |= MotionEventAndroid::BUTTON_STYLUS_SECONDARY;
- return result;
-}
-
-int FromAndroidMetaState(int meta_state) {
- int flags = ui::EF_NONE;
- if ((meta_state & AMETA_SHIFT_ON) != 0)
- flags |= ui::EF_SHIFT_DOWN;
- if ((meta_state & AMETA_CTRL_ON) != 0)
- flags |= ui::EF_CONTROL_DOWN;
- if ((meta_state & AMETA_ALT_ON) != 0)
- flags |= ui::EF_ALT_DOWN;
- if ((meta_state & AMETA_META_ON) != 0)
- flags |= ui::EF_COMMAND_DOWN;
- if ((meta_state & AMETA_CAPS_LOCK_ON) != 0)
- flags |= ui::EF_CAPS_LOCK_DOWN;
- return flags;
-}
-
-base::TimeTicks FromAndroidTime(int64 time_ms) {
- return base::TimeTicks() + base::TimeDelta::FromMilliseconds(time_ms);
-}
-
-float ToValidFloat(float x) {
- if (std::isnan(x))
- return 0.f;
-
- // Wildly large orientation values have been observed in the wild after device
- // rotation. There's not much we can do in that case other than simply
- // sanitize results beyond an absurd and arbitrary threshold.
- if (std::abs(x) > 1e5f)
- return 0.f;
-
- return x;
-}
-
-size_t ToValidHistorySize(jint history_size, ui::MotionEvent::Action action) {
- DCHECK_GE(history_size, 0);
- // While the spec states that only ACTION_MOVE events should contain
- // historical entries, it's possible that an embedder could repurpose an
- // ACTION_MOVE event into a different kind of event. In that case, the
- // historical values are meaningless, and should not be exposed.
- if (action != ui::MotionEvent::ACTION_MOVE)
- return 0;
- return history_size;
-}
-
-} // namespace
-
-MotionEventAndroid::Pointer::Pointer(jint id,
- jfloat pos_x_pixels,
- jfloat pos_y_pixels,
- jfloat touch_major_pixels,
- jfloat touch_minor_pixels,
- jfloat orientation_rad,
- jint tool_type)
- : id(id),
- pos_x_pixels(pos_x_pixels),
- pos_y_pixels(pos_y_pixels),
- touch_major_pixels(touch_major_pixels),
- touch_minor_pixels(touch_minor_pixels),
- orientation_rad(orientation_rad),
- tool_type(tool_type) {
-}
-
-MotionEventAndroid::CachedPointer::CachedPointer()
- : id(0),
- touch_major(0),
- touch_minor(0),
- orientation(0),
- tool_type(TOOL_TYPE_UNKNOWN) {
-}
-
-MotionEventAndroid::MotionEventAndroid(float pix_to_dip,
- JNIEnv* env,
- jobject event,
- jlong time_ms,
- jint android_action,
- jint pointer_count,
- jint history_size,
- jint action_index,
- jint android_button_state,
- jint meta_state,
- jfloat raw_offset_x_pixels,
- jfloat raw_offset_y_pixels,
- const Pointer& pointer0,
- const Pointer& pointer1)
- : pix_to_dip_(pix_to_dip),
- cached_time_(FromAndroidTime(time_ms)),
- cached_action_(FromAndroidAction(android_action)),
- cached_pointer_count_(pointer_count),
- cached_history_size_(ToValidHistorySize(history_size, cached_action_)),
- cached_action_index_(action_index),
- cached_button_state_(FromAndroidButtonState(android_button_state)),
- cached_flags_(FromAndroidMetaState(meta_state)),
- cached_raw_position_offset_(ToDips(raw_offset_x_pixels),
- ToDips(raw_offset_y_pixels)),
- unique_event_id_(ui::GetNextTouchEventId()) {
- DCHECK_GT(pointer_count, 0);
-
- event_.Reset(env, event);
- if (cached_pointer_count_ > MAX_POINTERS_TO_CACHE || cached_history_size_ > 0)
- DCHECK(event_.obj());
-
- cached_pointers_[0] = FromAndroidPointer(pointer0);
- cached_pointers_[1] = FromAndroidPointer(pointer1);
-}
-
-MotionEventAndroid::~MotionEventAndroid() {
-}
-
-uint32 MotionEventAndroid::GetUniqueEventId() const {
- return unique_event_id_;
-}
-
-MotionEventAndroid::Action MotionEventAndroid::GetAction() const {
- return cached_action_;
-}
-
-int MotionEventAndroid::GetActionIndex() const {
- DCHECK(cached_action_ == ACTION_POINTER_UP ||
- cached_action_ == ACTION_POINTER_DOWN)
- << "Invalid action for GetActionIndex(): " << cached_action_;
- DCHECK_GE(cached_action_index_, 0);
- DCHECK_LT(cached_action_index_, static_cast<int>(cached_pointer_count_));
- return cached_action_index_;
-}
-
-size_t MotionEventAndroid::GetPointerCount() const {
- return cached_pointer_count_;
-}
-
-int MotionEventAndroid::GetPointerId(size_t pointer_index) const {
- DCHECK_LT(pointer_index, cached_pointer_count_);
- if (pointer_index < MAX_POINTERS_TO_CACHE)
- return cached_pointers_[pointer_index].id;
- return Java_MotionEvent_getPointerId(
- AttachCurrentThread(), event_.obj(), pointer_index);
-}
-
-float MotionEventAndroid::GetX(size_t pointer_index) const {
- DCHECK_LT(pointer_index, cached_pointer_count_);
- if (pointer_index < MAX_POINTERS_TO_CACHE)
- return cached_pointers_[pointer_index].position.x();
- return ToDips(Java_MotionEvent_getXF_I(
- AttachCurrentThread(), event_.obj(), pointer_index));
-}
-
-float MotionEventAndroid::GetY(size_t pointer_index) const {
- DCHECK_LT(pointer_index, cached_pointer_count_);
- if (pointer_index < MAX_POINTERS_TO_CACHE)
- return cached_pointers_[pointer_index].position.y();
- return ToDips(Java_MotionEvent_getYF_I(
- AttachCurrentThread(), event_.obj(), pointer_index));
-}
-
-float MotionEventAndroid::GetRawX(size_t pointer_index) const {
- return GetX(pointer_index) + cached_raw_position_offset_.x();
-}
-
-float MotionEventAndroid::GetRawY(size_t pointer_index) const {
- return GetY(pointer_index) + cached_raw_position_offset_.y();
-}
-
-float MotionEventAndroid::GetTouchMajor(size_t pointer_index) const {
- DCHECK_LT(pointer_index, cached_pointer_count_);
- if (pointer_index < MAX_POINTERS_TO_CACHE)
- return cached_pointers_[pointer_index].touch_major;
- return ToDips(Java_MotionEvent_getTouchMajorF_I(
- AttachCurrentThread(), event_.obj(), pointer_index));
-}
-
-float MotionEventAndroid::GetTouchMinor(size_t pointer_index) const {
- DCHECK_LT(pointer_index, cached_pointer_count_);
- if (pointer_index < MAX_POINTERS_TO_CACHE)
- return cached_pointers_[pointer_index].touch_minor;
- return ToDips(Java_MotionEvent_getTouchMinorF_I(
- AttachCurrentThread(), event_.obj(), pointer_index));
-}
-
-float MotionEventAndroid::GetOrientation(size_t pointer_index) const {
- DCHECK_LT(pointer_index, cached_pointer_count_);
- if (pointer_index < MAX_POINTERS_TO_CACHE)
- return cached_pointers_[pointer_index].orientation;
- return ToValidFloat(Java_MotionEvent_getOrientationF_I(
- AttachCurrentThread(), event_.obj(), pointer_index));
-}
-
-float MotionEventAndroid::GetPressure(size_t pointer_index) const {
- DCHECK_LT(pointer_index, cached_pointer_count_);
- // Note that this early return is a special case exercised only in testing, as
- // caching the pressure values is not a worthwhile optimization (they're
- // accessed at most once per event instance).
- if (!event_.obj())
- return 0.f;
- return Java_MotionEvent_getPressureF_I(
- AttachCurrentThread(), event_.obj(), pointer_index);
-}
-
-base::TimeTicks MotionEventAndroid::GetEventTime() const {
- return cached_time_;
-}
-
-size_t MotionEventAndroid::GetHistorySize() const {
- return cached_history_size_;
-}
-
-base::TimeTicks MotionEventAndroid::GetHistoricalEventTime(
- size_t historical_index) const {
- return FromAndroidTime(Java_MotionEvent_getHistoricalEventTime(
- AttachCurrentThread(), event_.obj(), historical_index));
-}
-
-float MotionEventAndroid::GetHistoricalTouchMajor(
- size_t pointer_index,
- size_t historical_index) const {
- return ToDips(Java_MotionEvent_getHistoricalTouchMajorF_I_I(
- AttachCurrentThread(), event_.obj(), pointer_index, historical_index));
-}
-
-float MotionEventAndroid::GetHistoricalX(size_t pointer_index,
- size_t historical_index) const {
- return ToDips(Java_MotionEvent_getHistoricalXF_I_I(
- AttachCurrentThread(), event_.obj(), pointer_index, historical_index));
-}
-
-float MotionEventAndroid::GetHistoricalY(size_t pointer_index,
- size_t historical_index) const {
- return ToDips(Java_MotionEvent_getHistoricalYF_I_I(
- AttachCurrentThread(), event_.obj(), pointer_index, historical_index));
-}
-
-ui::MotionEvent::ToolType MotionEventAndroid::GetToolType(
- size_t pointer_index) const {
- DCHECK_LT(pointer_index, cached_pointer_count_);
- if (pointer_index < MAX_POINTERS_TO_CACHE)
- return cached_pointers_[pointer_index].tool_type;
- return FromAndroidToolType(Java_MotionEvent_getToolType(
- AttachCurrentThread(), event_.obj(), pointer_index));
-}
-
-int MotionEventAndroid::GetButtonState() const {
- return cached_button_state_;
-}
-
-int MotionEventAndroid::GetFlags() const {
- return cached_flags_;
-}
-
-float MotionEventAndroid::ToDips(float pixels) const {
- return pixels * pix_to_dip_;
-}
-
-MotionEventAndroid::CachedPointer MotionEventAndroid::FromAndroidPointer(
- const Pointer& pointer) const {
- CachedPointer result;
- result.id = pointer.id;
- result.position =
- gfx::PointF(ToDips(pointer.pos_x_pixels), ToDips(pointer.pos_y_pixels));
- result.touch_major = ToDips(pointer.touch_major_pixels);
- result.touch_minor = ToDips(pointer.touch_minor_pixels);
- result.orientation = ToValidFloat(pointer.orientation_rad);
- result.tool_type = FromAndroidToolType(pointer.tool_type);
- return result;
-}
-
-// static
-bool MotionEventAndroid::RegisterMotionEventAndroid(JNIEnv* env) {
- return JNI_MotionEvent::RegisterNativesImpl(env);
-}
-
-} // namespace content

Powered by Google App Engine
This is Rietveld 408576698