예제 #1
0
bool speech_dialog::key_press(const SDL_Event& event)
{
	static int last_mouse = 0;
	if(text_char_ == num_chars() && options_.empty() == false) {
		if(event.type == SDL_KEYDOWN) {
			if(event.key.keysym.scancode == get_keycode(controls::CONTROL_UP)) {
				move_up();
			} else if(event.key.keysym.scancode == get_keycode(controls::CONTROL_DOWN)) {
				move_down();
			} else if(event.key.keysym.sym == SDLK_RETURN || event.key.keysym.sym == SDLK_SPACE ||
				event.key.keysym.scancode == get_keycode(controls::CONTROL_JUMP) ||
				event.key.keysym.scancode == get_keycode(controls::CONTROL_TONGUE)) {
				return true;
			}
		}
	
#if defined(__ANDROID__)
		// XXX: todo
#elif TARGET_IPHONE_SIMULATOR || TARGET_OS_IPHONE || TARGET_BLACKBERRY
		if(event.type == SDL_MOUSEBUTTONDOWN)
		{
			last_mouse = event.button.which;
			handle_mouse_move(event.button.x, event.button.y);
		}
		if (event.type == SDL_MOUSEMOTION)
		{
			if (event.motion.which == last_mouse)
				handle_mouse_move(event.motion.x, event.motion.y);
		}
		if (event.type == SDL_MOUSEBUTTONUP)
		{
			if (event.motion.which == last_mouse)
			{
				last_mouse = -1;
				return handle_mouse_move(event.motion.x, event.motion.y);
			}
		}
#endif

		return false;
	} else if (event.type != SDL_KEYDOWN && event.type != SDL_MOUSEBUTTONDOWN) {
		return false; // only keydown and mousebuttondown should be handled by the rest of the function
	}

	return scroll_text();
}
예제 #2
0
파일: mbldc.cpp 프로젝트: bduck/livecode
void MCScreenDC::handle_touch(MCEventTouchPhase p_phase, void *p_touch, int32_t p_timestamp, int32_t p_x, int32_t p_y)
{
	switch(p_phase)
	{
		case kMCEventTouchPhaseBegan:
			if (m_mouse_touch == nil)
			{
				m_mouse_touch = p_touch;
				handle_mouse_press(p_timestamp, 0, p_x, p_y, 0, kMCMousePressStateDown);
			}
				
			process_touch(kMCEventTouchPhaseBegan, p_touch, p_timestamp, p_x, p_y);
			
			p_phase = kMCEventTouchPhaseMoved;
			break;
			
		case kMCEventTouchPhaseEnded:
			if (m_mouse_touch == p_touch)
			{
				handle_mouse_press(p_timestamp, 0, p_x, p_y, 0, kMCMousePressStateUp);
				m_mouse_touch = nil;
			}
			break;
	
		case kMCEventTouchPhaseMoved:
			if (m_mouse_touch == p_touch)
				handle_mouse_move(p_timestamp, 0, p_x, p_y);
			
			process_touch(kMCEventTouchPhaseMoved, p_touch, p_timestamp, p_x, p_y);
			break;
			
		case kMCEventTouchPhaseCancelled:
			if (m_mouse_touch == p_touch)
			{
				handle_mouse_press(p_timestamp, 0, p_x, p_y, 0, kMCMousePressStateRelease);
				m_mouse_touch = nil;
			}
			break;
			
		default:
			break;
	}
	
	process_touch(p_phase, p_touch, p_timestamp, p_x, p_y);
}
예제 #3
0
파일: ui.c 프로젝트: zbanks/radiance
void ui_run() {
        SDL_Event e;

        quit = false;
        while(!quit) {
            ui_render(true);

            while(SDL_PollEvent(&e) != 0) {
                if (midi_command_event != (Uint32) -1 && 
                    e.type == midi_command_event) {
                    struct midi_event * me = e.user.data1;
                    switch (me->type) {
                    case MIDI_EVENT_SLIDER:
                        set_slider_to(me->slider.index, me->slider.value, me->snap);
                        break;
                    case MIDI_EVENT_KEY:;
                        SDL_KeyboardEvent fakekeyev;
                        memset(&fakekeyev, 0, sizeof fakekeyev);
                        fakekeyev.type = SDL_KEYDOWN;
                        fakekeyev.state = SDL_PRESSED;
                        fakekeyev.keysym.sym = me->key.keycode[0];
                        handle_key(&fakekeyev);
                        break;
                    }
                    free(e.user.data1);
                    free(e.user.data2);
                    continue;
                }
                switch(e.type) {
                    case SDL_QUIT:
                        quit = true;
                        break;
                    case SDL_KEYDOWN:
                        handle_key(&e.key);
                        break;
                    case SDL_MOUSEMOTION:
                        mx = e.motion.x;
                        my = e.motion.y;
                        handle_mouse_move();
                        break;
                    case SDL_MOUSEBUTTONDOWN:
                        mx = e.button.x;
                        my = e.button.y;
                        switch(e.button.button) {
                            case SDL_BUTTON_LEFT:
                                handle_mouse_down();
                                break;
                        }
                        break;
                    case SDL_MOUSEBUTTONUP:
                        mx = e.button.x;
                        my = e.button.y;
                        switch(e.button.button) {
                            case SDL_BUTTON_LEFT:
                                handle_mouse_up();
                                break;
                        }
                        break;
                    case SDL_TEXTINPUT:
                        handle_text(e.text.text);
                        break;
                }
            }

            for(int i=0; i<N_DECKS; i++) {
                deck_render(&deck[i]);
            }
            crossfader_render(&crossfader, deck[left_deck_selector].tex_output, deck[right_deck_selector].tex_output);
            ui_render(false);

            render_readback(&render);

            SDL_GL_SwapWindow(window);

            double cur_t = SDL_GetTicks();
            double dt = cur_t - l_t;
            if(dt > 0) time += dt / 1000;
            l_t = cur_t;
        }
}
예제 #4
0
파일: exec.c 프로젝트: hanguangyi/egui
static void application_handle_message(union message* msg)
{
	/**
	 * 如果是桌面程序 那么首先将消息发给桌面的回调函数处理
	 **/
	if(global_application.application_type & APPLICATION_TYPE_DESKTOP)
	{
		if(global_application.desktop_msg_handler != NULL)
		{
			global_application.desktop_msg_handler(global_application.desktop_ptr, msg);
		}
	}

    switch(msg->base.type)
    {
    case MESSAGE_TYPE_KEYBD_PRESS:
        handle_keybd_press(msg);
        break;

    case MESSAGE_TYPE_KEYBD_RELEASE:
        handle_keybd_release(msg);
        break;

    case MESSAGE_TYPE_KEYBD_CLICK:
        handle_keybd_click(msg);
        break;

    case MESSAGE_TYPE_MOUSE_MOVE:
        handle_mouse_move(msg);
        break;

    case MESSAGE_TYPE_MOUSE_PRESS:
        handle_mouse_press(msg);
        break;

    case MESSAGE_TYPE_MOUSE_RELEASE:
        handle_mouse_release(msg);
        break;

    case MESSAGE_TYPE_MOUSE_SINGLE_CLICK:
        handle_mouse_single_click(msg);
        break;

    case MESSAGE_TYPE_MOUSE_DOUBLE_CLICK:
        handle_mouse_double_click(msg);
        break;

    case MESSAGE_TYPE_WIDGET_REPAINT:
        handle_widget_repaint(msg);
        break;

    case MESSAGE_TYPE_WIDGET_MOVE:
        handle_widget_move(msg);
        break;

    case MESSAGE_TYPE_WIDGET_RESIZE:
        handle_widget_resize(msg);
        break;

    case MESSAGE_TYPE_WINDOW_ACTIVATE:
        handle_window_activate(msg);
        break;

    case MESSAGE_TYPE_WINDOW_DEACTIVATE:
        handle_window_deactivate(msg);
        break;

    case MESSAGE_TYPE_WINDOW_MINIMIZE:
        handle_window_minimize(msg);
        break;

    case MESSAGE_TYPE_WINDOW_MAXIMIZE:
        handle_window_maximize(msg);
        break;

    case MESSAGE_TYPE_WINDOW_RESTORE:
        handle_window_restore(msg);
        break;

    case MESSAGE_TYPE_WINDOW_CANCEL:
        handle_window_cancel(msg);
        break;

    default:
        application_widgets_for_each_increament(do_find_window, msg);
        break;
    }
}