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

Unified Diff: samples/android_sample/jni/input_service.cc

Issue 11434046: Android rayshader sample. (Closed) Base URL: http://dart.googlecode.com/svn/branches/bleeding_edge/dart/
Patch Set: Created 8 years, 1 month 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
« no previous file with comments | « samples/android_sample/jni/input_service.h ('k') | samples/android_sample/jni/main.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: samples/android_sample/jni/input_service.cc
===================================================================
--- samples/android_sample/jni/input_service.cc (revision 0)
+++ samples/android_sample/jni/input_service.cc (revision 0)
@@ -0,0 +1,118 @@
+#include <android_native_app_glue.h>
+#include <cmath>
+
+#include "bin/log.h"
+#include "jni/input_service.h"
+
+InputService::InputService(android_app* application,
+ VMGlue* vm_glue,
+ const int32_t& width,
+ const int32_t& height) :
+ application_(application),
+ vm_glue_(vm_glue),
+ width_(width),
+ height_(height) {
+}
+
+int32_t InputService::Start() {
+ if ((width_ == 0) || (height_ == 0)) {
+ return -1;
+ }
+ return 0;
+}
+
+bool InputService::OnTouchEvent(AInputEvent* event) {
+ int32_t type = AMotionEvent_getAction(event);
+ const char *function = NULL;
+ switch (type) {
+ case AMOTION_EVENT_ACTION_DOWN:
+ function = "onMotionDown";
+ break;
+ case AMOTION_EVENT_ACTION_UP:
+ function = "onMotionUp";
+ break;
+ case AMOTION_EVENT_ACTION_MOVE:
+ function = "onMotionMove";
+ break;
+ case AMOTION_EVENT_ACTION_CANCEL:
+ function = "onMotionCancel";
+ break;
+ case AMOTION_EVENT_ACTION_OUTSIDE:
+ function = "onMotionOutside";
+ break;
+ case AMOTION_EVENT_ACTION_POINTER_DOWN:
+ function = "onMotionPointerDown";
+ break;
+ case AMOTION_EVENT_ACTION_POINTER_UP:
+ function = "onMotionPointerUp";
+ break;
+ default:
+ break;
+ }
+ if (function != NULL) {
+ // For now we just get the last coords.
+ float move_x = AMotionEvent_getX(event, 0);
+ float move_y = AMotionEvent_getY(event, 0);
+ int64_t when = AMotionEvent_getEventTime(event);
+ Log::Print("Got motion event %d at %f, %f", type, move_x, move_y);
+
+ if (vm_glue_->OnMotionEvent(function, when, move_x, move_y) != 0) {
+ return false;
+ }
+ } else {
+ return false;
+ }
+ return true;
+}
+
+bool InputService::OnKeyEvent(AInputEvent* event) {
+ int32_t type = AKeyEvent_getAction(event);
+ const char *function = NULL;
+ switch (type) {
+ case AKEY_EVENT_ACTION_DOWN:
+ function = "onKeyDown";
+ break;
+ case AKEY_EVENT_ACTION_UP:
+ function = "onKeyUp";
+ break;
+ case AKEY_EVENT_ACTION_MULTIPLE:
+ function = "onKeyMultiple";
+ break;
+ }
+ if (function != NULL) {
+ int32_t flags = AKeyEvent_getFlags(event);
+ /* Get the key code of the key event.
+ * This is the physical key that was pressed, not the Unicode character. */
+ int32_t key_code = AKeyEvent_getKeyCode(event);
+ /* Get the meta key state. */
+ int32_t meta_state = AKeyEvent_getMetaState(event);
+ /* Get the repeat count of the event.
+ * For both key up an key down events, this is the number of times the key
+ * has repeated with the first down starting at 0 and counting up from
+ * there. For multiple key events, this is the number of down/up pairs
+ * that have occurred. */
+ int32_t repeat = AKeyEvent_getRepeatCount(event);
+
+ /* Get the time of the most recent key down event, in the
+ * java.lang.System.nanoTime() time base. If this is a down event,
+ * this will be the same as eventTime.
+ * Note that when chording keys, this value is the down time of the most
+ * recently pressed key, which may not be the same physical key of this
+ * event. */
+ int64_t key_down_time = AKeyEvent_getDownTime(event);
+
+ /* Get the time this event occurred, in the
+ * java.lang.System.nanoTime() time base. */
+ int64_t when = AKeyEvent_getEventTime(event);
+
+ Log::Print("Got key event %d %d", type, key_code);
+ if (vm_glue_->OnKeyEvent(function, when, flags, key_code,
+ meta_state, repeat) != 0) {
+ return false;
+ }
+ } else {
+ return false;
+ }
+ return true;
+}
+
« no previous file with comments | « samples/android_sample/jni/input_service.h ('k') | samples/android_sample/jni/main.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698