int32_t GLESApplication::handleInput(android_app *app, AInputEvent *event)
{
    int32_t eventType = AInputEvent_getType(event);

    if (eventType == AINPUT_EVENT_TYPE_MOTION) {   
        int32_t action = AMotionEvent_getAction(event);    
        switch(action) {
        case AMOTION_EVENT_ACTION_DOWN:
            onTouchDown(AMotionEvent_getX(event, 0), AMotionEvent_getY(event, 0));
            break;
        case AMOTION_EVENT_ACTION_MOVE:
            onTouchMove(AMotionEvent_getX(event, 0), AMotionEvent_getY(event, 0));
            break;
            
        case AMOTION_EVENT_ACTION_UP:
            onTouchUp(AMotionEvent_getX(event, 0), AMotionEvent_getY(event, 0));
            break;
            
        default:
            break;
        }
    }
    
    return 0;
}
Ejemplo n.º 2
0
void
processEvents(void) {
	while (XPending(x_dpy)) {
		XEvent ev;
		XNextEvent(x_dpy, &ev);
		switch (ev.type) {
		case ButtonPress:
			onTouchBegin((float)ev.xbutton.x, (float)ev.xbutton.y);
			break;
		case ButtonRelease:
			onTouchEnd((float)ev.xbutton.x, (float)ev.xbutton.y);
			break;
		case MotionNotify:
			onTouchMove((float)ev.xmotion.x, (float)ev.xmotion.y);
			break;
		case ConfigureNotify:
			onResize(ev.xconfigure.width, ev.xconfigure.height);
			break;
		case ClientMessage:
			if (wm_delete_window != None && (Atom)ev.xclient.data.l[0] == wm_delete_window) {
				onStop();
				return;
			}
			break;
		}
	}
}
void CCTile3DButton::touchActionPressed(const float x, const float y, const CCTouchAction touchAction)
{
    if( touchRotationAllowed )
    {
        float clampedX = x;
        float clampedY = y;
        CCClampFloat( clampedX, -1.0f, 1.0f );
        CCClampFloat( clampedY, -1.0f, 1.0f );
        touchRotationInterpolator.pushV3( &rotation, CCVector3( -clampedY, clampedX, 0.0f ), true );
    }
    
    // Touch depress: On pressed
    if( touchDepressRange > 0.0f )
    {
        // Touch depress range specifies the area which the button is pressed down
        // If it's out of range the button is pushed back up
        if( fabsf( x ) < touchDepressRange && fabsf( y ) < touchDepressRange )
        {
            touchDepressInterpolator.pushV3( &touchDepressPosition, CCVector3( 0.0f, 0.0f, -touchDepressDepth ), true );
        }
        else
        {
            touchDepressInterpolator.pushV3( &touchDepressPosition, CCVector3(), true );
        }
    }

    if( touchAction > touch_pressed && touchAction < touch_released )
    {
        onTouchMove();
    }
}
Ejemplo n.º 4
0
void
runApp(void) {
	Display *x_dpy = XOpenDisplay(NULL);
	if (!x_dpy) {
		fprintf(stderr, "XOpenDisplay failed\n");
		exit(1);
	}
	EGLDisplay e_dpy = eglGetDisplay(x_dpy);
	if (!e_dpy) {
		fprintf(stderr, "eglGetDisplay failed\n");
		exit(1);
	}
	EGLint e_major, e_minor;
	if (!eglInitialize(e_dpy, &e_major, &e_minor)) {
		fprintf(stderr, "eglInitialize failed\n");
		exit(1);
	}
	eglBindAPI(EGL_OPENGL_ES_API);
	EGLContext e_ctx;
	EGLSurface e_surf;
	Window win = new_window(x_dpy, e_dpy, 400, 400, &e_ctx, &e_surf);
	XMapWindow(x_dpy, win);
	if (!eglMakeCurrent(e_dpy, e_surf, e_surf, e_ctx)) {
		fprintf(stderr, "eglMakeCurrent failed\n");
		exit(1);
	}

	while (1) {
		XEvent ev;
		XNextEvent(x_dpy, &ev);
		switch (ev.type) {
		case ButtonPress:
			onTouchStart((float)ev.xbutton.x, (float)ev.xbutton.y);
			break;
		case ButtonRelease:
			onTouchEnd((float)ev.xbutton.x, (float)ev.xbutton.y);
			break;
		case MotionNotify:
			onTouchMove((float)ev.xmotion.x, (float)ev.xmotion.y);
			break;
		case Expose:
			onDraw();
			eglSwapBuffers(e_dpy, e_surf);

			// TODO(nigeltao): subscribe to vblank events instead of forcing another
			// expose event to keep the event loop ticking over.
			// TODO(nigeltao): no longer #include <string.h> when we don't use memset.
			XExposeEvent fakeEvent;
			memset(&fakeEvent, 0, sizeof(XExposeEvent));
			fakeEvent.type = Expose;
			fakeEvent.window = win;
			XSendEvent(x_dpy, win, 0, 0, (XEvent*)&fakeEvent);
			XFlush(x_dpy);

			break;
		case ConfigureNotify:
			onResize(ev.xconfigure.width, ev.xconfigure.height);
			glViewport(0, 0, (GLint)ev.xconfigure.width, (GLint)ev.xconfigure.height);
			break;
		}
	}
}