コード例 #1
0
ファイル: rom_info.c プロジェクト: twinaphex/breemlib
int rom_info_event(rom_info_t *m,int event,int data)
{
    int i;

    if(m->isshowing == 0)
        return(0);
    switch(event) {
    case E_MOUSEMOVE:
    case E_MOUSEDOWN:
        if(mouseinrange(&m->info,data) == 0)
            return(0);
        button_event(&m->donebtn,event,data);
        break;
    case E_MOUSEUP:
        if(button_event(&m->donebtn,event,data) > 0) {
            m->isshowing = 0;
            config_save();
        }
        break;
    case E_REFRESH:
        for(i=0; i<20; i++)
            strcpy(m->labels[i].text,"");
        if((pce == 0) || (pce->rom == 0)) {
            strcpy(m->labels[0].text,"No ROM loaded.");
            return(0);
        }
        /*
        			//the rom is in our database
        			if(pce->rom->indatabase == 1) {
        				strcpy(m->labels[0].text,"File:");
        				strcpy(m->labels[1].text,"Name:");
        				strcpy(m->labels[2].text,"PRG Size:");
        				strcpy(m->labels[3].text,"CHR Size:");
        				strcpy(m->labels[4].text,"Board:");
        				strcpy(m->labels[5].text,"Mirroring:");
        				strncpy(m->labels[10].text,nes->rom->filename,30);
        				strncpy(m->labels[11].text,nes->rom->name,30);
        				sprintf(m->labels[12].text,"%d kb",nes->rom->prgsize / 1024);
        				sprintf(m->labels[13].text,"%d kb",nes->rom->chrsize / 1024);
        				sprintf(m->labels[14].text,"%s",nes->rom->board);
        				switch(nes->rom->mirroring) {
        					case 0:sprintf(m->labels[15].text,"Horizontal");break;
        					case 1:sprintf(m->labels[15].text,"Vertical");break;
        					default:sprintf(m->labels[15].text,"Four Screen");break;
        				}
        			}

        			//regular ines rom image
        			else */ {
            strcpy(m->labels[0].text,"File:");
            strcpy(m->labels[1].text,"Name:");
            strcpy(m->labels[2].text,"Size:");
            strncpy(m->labels[10].text,pce->rom->filename,30);
            sprintf(m->labels[11].text,"<not in database>");
            sprintf(m->labels[12].text,"%d kb",pce->rom->size / 1024);
        }
        break;
    }
    return(0);
}
コード例 #2
0
ファイル: soundcfg.c プロジェクト: twinaphex/breemlib
int sound_event(sound_t *m,int event,int data)
{
	if(m->isshowing == 0)
		return(0);
	switch(event) {
		case E_MOUSEMOVE:
			break;
		case E_MOUSEDOWN:
			if(mouseinrange(&m->info,data) == 0)
				return(0);
			button_event(&m->donebtn,event,data);
			checkbox_event(&m->enabled,event,data);
			checkbox_event(&m->sq1,event,data);
			checkbox_event(&m->sq2,event,data);
			checkbox_event(&m->tri,event,data);
			checkbox_event(&m->noise,event,data);
			checkbox_event(&m->dmc,event,data);
			checkbox_event(&m->ext,event,data);
			text_event(&m->tc,event,data);
			break;
		case E_MOUSEUP:
			if(button_event(&m->donebtn,event,data) > 0)
				m->isshowing = 0;
			break;
	}
	return(0);
}
コード例 #3
0
ファイル: mappers.c プロジェクト: ericmckean/nesemu
int mappers_event(mappers_t *m,int event,int data)
{
	if(m->isshowing == 0)
		return(0);
	switch(event) {
		case E_MOUSEMOVE:
		case E_MOUSEDOWN:
			if(mouseinrange(&m->info,data) == 0)
				return(0);
			button_event(&m->donebtn,event,data);
			break;
		case E_REFRESH:
			break;
		case E_MOUSEUP:
			if(button_event(&m->donebtn,event,data) > 0) {
				m->isshowing = 0;
				config_save();
			}
			break;
	}
	if(nes->rom) {
		switch(nes->rom->boardid) {
			//nes-event
			case B_EVENT:
				mapper105_event(m,event,data);
				break;
		}
	}
	return(0);
}
コード例 #4
0
ファイル: load.c プロジェクト: ericmckean/nesemu
int load_event(load_t *m,int event,int data)
{
	if(m->isshowing == 0)
		return(0);
	switch(event) {
		case E_MOUSEMOVE:
		case E_MOUSEDOWN:
		case E_MOUSEDOWN2:
			if(mouseinrange(&m->info,data) == 0)
				return(0);
			button_event(&m->closebtn,event,data);
			button_event(&m->loadbtn,event,data);
			if(list_event(&m->romlist,event,data) > 0)
				return(1);
			if(list_event(&m->dirlist,event,data) > 0)
				return(1);
			edit_event(&m->edit,event,data);
			break;
		case E_MOUSEUP:
			if(button_event(&m->closebtn,event,data) > 0)
				m->isshowing = 0;
			button_event(&m->loadbtn,event,data);
			if(list_event(&m->romlist,event,data) > 0)
				return(1);
			if(list_event(&m->dirlist,event,data) > 0)
				return(1);
			edit_event(&m->edit,event,data);
			break;
	}
	return(0);
}
コード例 #5
0
    void analog_event(IOReturn result, IOHIDElementRef element, IOHIDValueRef value) {
        int int_value = IOHIDValueGetIntegerValue(value);
        uint16_t usage = IOHIDElementGetUsage(element);
        switch (usage) {
          case kHIDUsage_GD_X:
          case kHIDUsage_GD_Y:
          case kHIDUsage_GD_Rx:
          case kHIDUsage_GD_Ry:
            {
                int min = IOHIDElementGetLogicalMin(element);
                int max = IOHIDElementGetLogicalMax(element);
                double double_value = int_value;
                if (int_value < 0) {
                    double_value = -(double_value / min);
                } else {
                    double_value = (double_value / max);
                }

                usage -= kHIDUsage_GD_X;
                gamepad[usage] = double_value;
                static const int x_component[] = {0, 0, -1, 3, 3, -1};
                double x = gamepad[x_component[usage]];
                double y = gamepad[x_component[usage] + 1];
                enqueue(new GamepadStickEvent(
                            now_usecs(), kHIDUsage_GD_X + x_component[usage], x, y));
            }
            break;
          case kHIDUsage_GD_Z:
          case kHIDUsage_GD_Rz:
            button_event(result, element, value);
            break;
        }
    }
コード例 #6
0
ファイル: board.c プロジェクト: fourier49/BZ_DEV_EC
void usb_gpio_tick(void)
{
	if (usb_gpio.state->set_mask || usb_gpio.state->clear_mask)
		return;

	button_event(0);
}
コード例 #7
0
void JoystickNode::joyCallback(const sensor_msgs::JoyConstPtr &msg)
{
	unsigned int i;

	static std::vector<double> axes(msg->axes.size(), 0);
	static std::vector<bool> buttons(msg->buttons.size(), false);

	if((unsigned)axes.size() != msg->axes.size())
        axes.resize(msg->axes.size(), 0);
	if((unsigned)buttons.size() != msg->buttons.size())
        buttons.resize(msg->buttons.size(), false);

	for(i = 0; i < msg->axes.size(); i++)
	{
		if(msg->axes[i] != axes[i])
		{
			axes[i] = msg->axes[i];
//			std::cout << "Axis " << i << ": " << msg->axes[i] << std::endl;
			emit axis_event(i, msg->axes[i]);
		}
	}

	for(i = 0; i < msg->buttons.size(); i++)
	{
		if(msg->buttons[i] != buttons[i])
		{
			buttons[i] = msg->buttons[i];
//			std::cout << "Buttons " << i << ": " << buttons[i] << std::endl;
			emit button_event(i, msg->buttons[i]);
		}
	}
}
コード例 #8
0
ファイル: about.c プロジェクト: twinaphex/breemlib
int about_event(about_t *m,int event,int data)
{
	if(m->isshowing == 0)
		return(0);
	switch(event) {
		case E_MOUSEMOVE:
		case E_MOUSEDOWN:
			if(mouseinrange(&m->info,data) == 0)
				return(0);
			button_event(&m->donebtn,event,data);
			break;
		case E_MOUSEUP:
			if(button_event(&m->donebtn,event,data) > 0)
				m->isshowing = 0;
			break;
	}
	return(0);
}
コード例 #9
0
int msg_recv_handle(int sockfd,char* buf)
{
    int n,type;
    n = read(sockfd,buf,4);
    if(n==4)
    {
	getval(&type,buf,INT);
	SPICE_DEBUG("Got event:%d\n",type);
	switch(type)
	{
	    case ANDROID_OVER:
		{
		    android_send_task(ANDROID_TASK_OVER);
		    g_main_loop_quit(android_mainloop);
		    exit(1);
		    return 1;
		}
		break;
	    case ANDROID_KEY_PRESS:
	    case ANDROID_KEY_RELEASE:
		n = read(sockfd,buf,4);
		if(n==4)
		{
		    AndroidEventKey* key =(AndroidEventKey*)malloc(8);
		    key->type = type;
		    getval(&key->hardware_keycode,buf,INT);
		    key_event(key);
		    free(key);
		}
		else
		    error("msg_recv error!\n");
		break;
	    case ANDROID_BUTTON_PRESS:
	    case ANDROID_BUTTON_RELEASE:
		n = read(sockfd,buf,8);
		if(n==4)
		    n += read(sockfd,buf+4,8);
		if(n==8)
		{
		    AndroidEventButton* button =(AndroidEventButton*)malloc(12);
		    button->type = type;
		    getval(&button->x,buf,INT);
		    getval(&button->y,buf+4,INT);
		    button_event(button);
		    free(button);
		}
		else
		    error("msg_recv error!\n");
		break;
	}
    }
    else
	error("msg_recv error!\n");
    return 0;
}
コード例 #10
0
ファイル: skills.c プロジェクト: liwcezar/atrinik
/** @copydoc widgetdata::event_func */
static int widget_event(widgetdata *widget, SDL_Event *event)
{
    uint32_t row, col;
    size_t i;

    if (EVENT_IS_MOUSE(event) && event->button.button == SDL_BUTTON_LEFT && list_mouse_get_pos(list_skills, event->motion.x, event->motion.y, &row, &col)) {
        size_t skill_id;

        skill_id = row * list_skills->cols + col;

        if (skill_id < skill_list_num) {
            if (event->type == SDL_MOUSEBUTTONUP) {
                if (selected_skill != skill_id) {
                    selected_skill = skill_id;
                    widget->redraw = 1;
                    return 1;
                }
            } else if (event->type == SDL_MOUSEBUTTONDOWN) {
                event_dragging_start(skill_list[skill_id]->skill->tag, event->motion.x, event->motion.y);
                return 1;
            }
        }
    }

    /* If the list has handled the mouse event, we need to redraw the
     * widget. */
    if (list_skills && list_handle_mouse(list_skills, event)) {
        widget->redraw = 1;
        return 1;
    }


    for (i = 0; i < BUTTON_NUM; i++) {
        if (button_event(&buttons[i], event)) {
            switch (i) {
            case BUTTON_CLOSE:
                widget->show = 0;
                break;

            case BUTTON_HELP:
                help_show("skill list");
                break;
            }

            widget->redraw = 1;
            return 1;
        }

        if (buttons[i].redraw) {
            widget->redraw = 1;
        }
    }

    return 0;
}
コード例 #11
0
ファイル: videocfg.c プロジェクト: holodnak/nesemu
int video_event(video_t *m,int event,int data)
{
    if(m->isshowing == 0)
        return(0);
    switch(event) {
    case E_MOUSEMOVE:
    case E_MOUSEDOWN:
        if(mouseinrange(&m->info,data) == 0)
            return(0);
        button_event(&m->donebtn,event,data);
        radiogroup_event(&m->filter,event,data);
        radiogroup_event(&m->videomode,event,data);
        break;
    case E_MOUSEUP:
        if(button_event(&m->donebtn,event,data) > 0) {
            m->isshowing = 0;
            config_save();
        }
        break;
    }
    return(0);
}
コード例 #12
0
ファイル: options.c プロジェクト: twinaphex/breemlib
int options_event(options_t *m,int event,int data)
{
	if(m->isshowing == 0)
		return(0);
	switch(event) {
		case E_MOUSEMOVE:
		case E_MOUSEDOWN:
			if(mouseinrange(&m->info,data) == 0)
				return(0);
			button_event(&m->donebtn,event,data);
			radiogroup_event(&m->fdsbios,event,data);
			checkbox_event(&m->showinfo,event,data);
			break;
		case E_MOUSEUP:
			if(button_event(&m->donebtn,event,data) > 0) {
				m->isshowing = 0;
				config_save();
			}
			break;
	}
	return(0);
}
コード例 #13
0
ファイル: button-sdl.c プロジェクト: IlVerz/rockbox
static void touchscreen_event(int x, int y)
{
    if(background) {
        x -= UI_LCD_POSX;
        y -= UI_LCD_POSY;
    }

    if(x >= 0 && y >= 0 && x < SIM_LCD_WIDTH && y < SIM_LCD_HEIGHT) {
        mouse_coords = (x << 16) | y;
        button_event(BUTTON_TOUCHSCREEN, true);
        if (debug_wps)
            printf("Mouse at 1: (%d, %d)\n", x, y);
    }
}
コード例 #14
0
ファイル: nxeyes.c プロジェクト: koujinogaku/helloos
int start(int argc, char **argv)
{
	GR_EVENT event;
	nxeyes_state *state;

	if(GrOpen() < 0) {
		printf("Couldn't connect to Nano-X server\n");
		return 1;
	}

	if(!(state = init())) {
		printf("Couldn't allocate state structure\n");
		return 1;
	}

	while(!state->quit) {
		GrGetNextEvent(&event);
		switch(event.type) {
			case GR_EVENT_TYPE_CLOSE_REQ:
				state->quit = 1;
				break;
			case GR_EVENT_TYPE_MOUSE_POSITION:
				position_event(&event.mouse, state);
				break;
			case GR_EVENT_TYPE_BUTTON_UP:
			case GR_EVENT_TYPE_BUTTON_DOWN:
				button_event(&event.button, state);
				break;
			case GR_EVENT_TYPE_EXPOSURE:
				draw_eyes(state, 1);
				break;
#if MW_FEATURE_TIMERS
			case GR_EVENT_TYPE_TIMER:
				timer_event(&event.timer, state);
				break;
#endif
			default:
				break;
		}
		if(state->mouse_moved) {
			draw_eyes(state, 0);
			state->mouse_moved = 0;
		}
	}

	GrClose();
	free(state);
	
	return 0;
}
コード例 #15
0
ファイル: button.c プロジェクト: Megaco/rockbox
void mouse_tick_task(void)
{
    static int last_check = 0;
    int x,y;
    if (TIME_BEFORE(current_tick, last_check+(HZ/10)))
        return;
    last_check = current_tick;
    if (SDL_GetMouseState(&x, &y) & SDL_BUTTON(SDL_BUTTON_LEFT))
    {
        if(background)
        {
            x -= UI_LCD_POSX;
            y -= UI_LCD_POSY;
            
            if(x<0 || y<0 || x>SIM_LCD_WIDTH || y>SIM_LCD_HEIGHT)
                return;
        }
        
        mouse_coords = (x<<16)|y;
        button_event(BUTTON_TOUCHSCREEN, true);
        if (debug_wps)
            printf("Mouse at: (%d, %d)\n", x, y);
    }
}
コード例 #16
0
ファイル: menubar.c プロジェクト: twinaphex/breemlib
int menubar_event(menubar_t *m,int event,int data)
{
	int i,processed;
#ifndef PS2
	static int msx,msy;
#endif

	load_event(&m->load,event,data);
	video_event(&m->video,event,data);
	input_event(&m->input,event,data);
	sound_event(&m->sound,event,data);
	gui_input_event(&m->guiinput,event,data);
	options_event(&m->options,event,data);
	paths_event(&m->paths,event,data);
	rom_info_event(&m->rom_info,event,data);
	tracer_event(&m->tracer,event,data);
	memory_viewer_event(&m->memory_viewer,event,data);
	about_event(&m->about,event,data);
	switch(event) {
		//mouse button pressed
		case E_MOUSEDOWN:
		case E_MOUSEDOWN2:
			if(mouseinrange(&m->info,data) == 0)
				return(0);
			//see if the click was on a menu
			for(processed=0,i=0;i<MAX_MENUS && m->menus[i].info.w;i++) {
				//send event to the menu and see if it processes it
				if(menu_event(&m->menus[i],event,data) > 0)
					processed = 1;
			}
			for(i=0;i<3;i++) {
				if(button_event(&m->buttons[i],event,data) > 0)
					processed = 1;
			}
			//if event was not processed by a menu or button, then move the window
			if(processed == 0) {
				m->ismoving = 1;
#ifndef PS2
				video_getwindowpos(&msx,&msy);
#endif
			}
			break;
		case E_MOUSEUP:
			m->ismoving = 0;
			posx = newposx;
			posy = newposy;
			//send event off to children
			for(i=0;i<MAX_MENUS && m->menus[i].info.w;i++)
				menu_event(&m->menus[i],event,data);
#ifndef PS2
			for(i=0;i<3;i++)
				button_event(&m->buttons[i],event,data);
#endif
			break;
		case E_MOUSEMOVE:
#ifndef PS2
			if(m->ismoving && config.windowed) {
				int x,y;
				mousemove_u mm;

				mm.data = data;
				video_getwindowpos(&x,&y);
//					break;
				log_message("window moving: ms x = %d, y = %d\n",msx,msy);
				log_message("window moving: window x = %d, y = %d\n",x,y);
				log_message("window moving: mouse x = %d, y = %d\n",mm.info.x,mm.info.y);
				log_message("window moving: mouse xrel = %d, yrel = %d\n",mm.info.xrel,mm.info.yrel);
				x += mm.info.xrel;
				y += mm.info.yrel;
//				SDL_GetRelativeMouseState(&newposx,&newposy);
//				newposx += posx;
//				newposy += posy;
//				newposx = mm.info.x * 3;
//				newposy = mm.info.y * 3;
//				if(newposx == posx || newposy == posy)
//					break;
				if(x == msx && y == msy)
				video_setwindowpos(x,y);
				break;
			}
#endif
			//send event off to children
			for(i=0;i<MAX_MENUS && m->menus[i].info.w;i++)
				menu_event(&m->menus[i],event,data);
			break;
	}
	return(0);
}
コード例 #17
0
ファイル: intro.c プロジェクト: liwcezar/atrinik
/**
 * Handle event in the main screen.
 * @param event
 * The event to handle.
 * @return
 * 1 if the event was handled, 0 otherwise.
 */
int intro_event(SDL_Event *event)
{
    if (!list_servers) {
        return 0;
    }

    if (event->type == SDL_MOUSEBUTTONDOWN && event->button.button == SDL_BUTTON_LEFT) {
        if (LIST_MOUSE_OVER(list_news, event->motion.x, event->motion.y)) {
            list_news->focus = 1;
            list_servers->focus = 0;
        } else if (LIST_MOUSE_OVER(list_servers, event->motion.x, event->motion.y)) {
            list_servers->focus = 1;
            list_news->focus = 0;
        }
    }

    if (button_event(&button_play, event)) {
        list_handle_enter(list_servers, event);
        return 1;
    } else if (button_event(&button_refresh, event)) {
        if (!ms_connecting(-1)) {
            cpl.state = ST_META;
        }

        return 1;
    } else if (button_event(&button_server, event)) {
        server_add_open();
        return 1;
    } else if (button_event(&button_settings, event)) {
        settings_open();
        return 1;
    } else if (button_event(&button_update, event)) {
        updater_open();
        return 1;
    } else if (button_event(&button_help, event)) {
        help_show("main screen");
        return 1;
    } else if (button_event(&button_credits, event)) {
        credits_show();
        return 1;
    } else if (button_event(&button_quit, event)) {
        exit(0);
        return 1;
    } else if (event->type == SDL_KEYDOWN && event->key.keysym.sym == SDLK_TAB && list_news) {
        int news_focus = 0;

        if (list_servers->focus) {
            news_focus = 1;
        }

        list_news->focus = news_focus;
        list_servers->focus = !news_focus;
    } else if (list_handle_keyboard(list_news && list_news->focus ? list_news : list_servers, event)) {
        return 1;
    } else if (list_handle_mouse(list_news, event)) {
        return 1;
    } else if (list_handle_mouse(list_servers, event)) {
        return 1;
    }

    return 0;
}
コード例 #18
0
static void *
x_thread_main (void *closure)
{
    x_global_t	    *xg = closure;
    XEvent	    event;
    struct pollfd   fds[2];
    int		    timeout;
    sigset_t	    mask;

    sigemptyset (&mask);
    sigaddset (&mask, SIGALRM);
    sigaddset (&mask, SIGIO);
    sigaddset (&mask, SIGCHLD);
    sigaddset (&mask, SIGINT);
    pthread_sigmask (SIG_BLOCK, &mask, NULL);
    
    fds[0].fd = ConnectionNumber (xg->dpy);
    fds[0].events = POLLIN;
    fds[1].fd = xg->pipe[0];
    fds[1].events = POLLIN;
    while (xg->running) {
	while (XPending (xg->dpy))
	{
	    XNextEvent (xg->dpy, &event);
	    switch (event.type) {
	    case ConfigureNotify:
		configure_event (xg, &event.xconfigure);
		break;
	    case Expose:
		expose_event (xg, &event.xexpose);
		break;
	    case MotionNotify:
		motion_notify_event (xg, &event.xmotion);
		break;
	    case ButtonPress:
	    case ButtonRelease:
		button_event (xg, &event.xbutton);
		break;
	    case KeyPress:
	    case KeyRelease:
		key_event (xg, &event.xkey);
		break;
	    case ClientMessage:
		client_message_event (xg, &event.xclient);
		break;
	    case FocusIn:
	    case FocusOut:
		focus_change_event (xg, &event.xfocus);
		break;
	    }
	}
	timeout = -1;
	while (xg->repaint)
	{
	    int when = now ();
	    timeout = xg->repaint->when - when;
	    if (timeout > 0)
		break;
	    timeout = -1;
	    repaint_timeout (xg, when);
	}
	poll (fds, 2, timeout);
	if (fds[1].revents & POLLIN) {
	    char    stuffed[128];
	    read (fds[1].fd, stuffed, sizeof (stuffed));
	}
    }
    close (xg->pipe[0]);
    close (xg->pipe[1]);
    XCloseDisplay (xg->dpy);
    free (xg);
    return 0;
}
コード例 #19
0
ファイル: mplayer.c プロジェクト: atrinik/atrinik
/** @copydoc widgetdata::event_func */
static int widget_event(widgetdata *widget, SDL_Event *event)
{
    size_t i;

    if (list_mplayer) {
        if (list_handle_mouse(list_mplayer, event)) {
            widget->redraw = 1;
            return 1;
        } else if (scrollbar_event(&scrollbar_progress, event)) {
            widget->redraw = 1;
            return 1;
        }
    }

    for (i = 0; i < BUTTON_NUM; i++) {
        if (button_event(&buttons[i], event)) {
            switch (i) {
            case BUTTON_PLAY:

                if (sound_map_background(-1)) {
                    sound_start_bg_music("no_music", 0, 0);
                    sound_map_background(0);
                    shuffle = 0;
                } else {
                    list_handle_enter(list_mplayer, event);
                }

                break;

            case BUTTON_SHUFFLE:
                shuffle = !shuffle;

                if (shuffle) {
                    mplayer_do_shuffle(list_mplayer);
                    sound_map_background(1);
                } else {
                    sound_start_bg_music("no_music", 0, 0);
                    sound_map_background(0);
                }

                break;

            case BUTTON_BLACKLIST:
                /* Toggle the blacklist state of the selected row. */
                mplayer_blacklist_toggle(list_mplayer);
                mplayer_blacklist_save(list_mplayer);
                break;

            case BUTTON_CLOSE:
                widget->show = 0;
                break;

            case BUTTON_HELP:
                help_show("music player");
                break;
            }

            widget->redraw = 1;
            return 1;
        }

        if (buttons[i].redraw) {
            widget->redraw = 1;
        }
    }

    return 0;
}
コード例 #20
0
ファイル: button-sdl.c プロジェクト: IlVerz/rockbox
static bool event_handler(SDL_Event *event)
{
    SDLKey ev_key;

    switch(event->type)
    {
    case SDL_ACTIVEEVENT:
        if (event->active.state & SDL_APPINPUTFOCUS)
        {
            if (event->active.gain == 1)
                sdl_app_has_input_focus = 1;
            else
                sdl_app_has_input_focus = 0;
        }
        break;
    case SDL_KEYDOWN:
    case SDL_KEYUP:
        ev_key = event->key.keysym.sym;
#if (CONFIG_PLATFORM & PLATFORM_MAEMO5)
        /* N900 with shared up/down cursor mapping. Seen on the German,
           Finnish, Italian, French and Russian version. Probably more. */
        if (event->key.keysym.mod & KMOD_MODE || n900_updown_key_pressed)
        {
            /* Prevent stuck up/down keys: If you release the ALT key before the cursor key,
               rockbox will see a KEYUP event for left/right instead of up/down and
               the previously pressed up/down key would stay active. */
            if (ev_key == SDLK_LEFT || ev_key == SDLK_RIGHT)
            {
                if (event->type == SDL_KEYDOWN)
                    n900_updown_key_pressed = 1;
                else
                    n900_updown_key_pressed = 0;
            }

            if (ev_key == SDLK_LEFT)
                ev_key = SDLK_UP;
            else if (ev_key == SDLK_RIGHT)
                ev_key = SDLK_DOWN;
        }
#endif
        button_event(ev_key, event->type == SDL_KEYDOWN);
        break;
#ifdef HAVE_TOUCHSCREEN
    case SDL_MOUSEMOTION:
        if (event->motion.state & SDL_BUTTON(1))
        {
            int x = event->motion.x / display_zoom;
            int y = event->motion.y / display_zoom;
            touchscreen_event(x, y);
        }
        break;
#endif

    case SDL_MOUSEBUTTONUP:
    case SDL_MOUSEBUTTONDOWN:
    {
        SDL_MouseButtonEvent *mev = &event->button;
        mev->x /= display_zoom;
        mev->y /= display_zoom;
        mouse_event(mev, event->type == SDL_MOUSEBUTTONUP);
        break;
    }
    case SDL_QUIT:
        /* Will post SDL_USEREVENT in shutdown_hw() if successful. */
        sys_poweroff();
        break;
    case SDL_USEREVENT:
        return true;
        break;
    }

    return false;
}
コード例 #21
0
ファイル: button-sdl.c プロジェクト: IlVerz/rockbox
static void mouse_event(SDL_MouseButtonEvent *event, bool button_up)
{
#define SQUARE(x) ((x)*(x))
    static int x,y;
#ifdef SIMULATOR
    static int xybutton = 0;
#endif

    if(button_up) {
        switch ( event->button )
        {
#ifdef HAVE_SCROLLWHEEL
        case SDL_BUTTON_WHEELUP:
        case SDL_BUTTON_WHEELDOWN:
#endif
        case SDL_BUTTON_MIDDLE:
        case SDL_BUTTON_RIGHT:
            button_event( event->button, false );
            break;
        /* The scrollwheel button up events are ignored as they are queued immediately */
        case SDL_BUTTON_LEFT:
            if ( mapping && background ) {
                printf("    { SDLK_,     %d, %d, %d, \"\" },\n", x, y,
                (int)sqrt( SQUARE(x-(int)event->x) + SQUARE(y-(int)event->y))
                );
            }
#ifdef SIMULATOR
            if ( background && xybutton ) {
                    button_event( xybutton, false );
                    xybutton = 0;
                }
#endif
#ifdef HAVE_TOUCHSCREEN
                else
                    button_event(BUTTON_TOUCHSCREEN, false);
#endif
            break;
        }
    } else {    /* button down */
        switch ( event->button )
        {
#ifdef HAVE_SCROLLWHEEL
        case SDL_BUTTON_WHEELUP:
        case SDL_BUTTON_WHEELDOWN:
#endif
        case SDL_BUTTON_MIDDLE:
        case SDL_BUTTON_RIGHT:
            button_event( event->button, true );
            break;
        case SDL_BUTTON_LEFT:
            if ( mapping && background ) {
                x = event->x;
                y = event->y;
            }
#ifdef SIMULATOR
            if ( background ) {
                xybutton = xy2button( event->x, event->y );
                if( xybutton ) {
                    button_event( xybutton, true );
                    break;
                }
            }
#endif
#ifdef HAVE_TOUCHSCREEN
            touchscreen_event(event->x, event->y);
#endif
            break;
        }

        if (debug_wps && event->button == SDL_BUTTON_LEFT)
        {
            int m_x, m_y;

            if ( background )
            {
                m_x = event->x - 1;
                m_y = event->y - 1;
#ifdef HAVE_REMOTE
                if ( event->y >= UI_REMOTE_POSY ) /* Remote Screen */
                {
                    m_x -= UI_REMOTE_POSX;
                    m_y -= UI_REMOTE_POSY;
                }
                else
#endif
                {
                    m_x -= UI_LCD_POSX;
                    m_y -= UI_LCD_POSY;
                }
            }
            else
            {
                m_x = event->x;
                m_y = event->y;
#ifdef HAVE_REMOTE
                if ( m_y >= LCD_HEIGHT ) /* Remote Screen */
                    m_y -= LCD_HEIGHT;
#endif
            }

            printf("Mouse at 2: (%d, %d)\n", m_x, m_y);
        }
    }
#undef SQUARE
}
コード例 #22
0
ファイル: button-sdl.c プロジェクト: eisnerd/rockbox
bool gui_message_loop(void)
{
    SDL_Event event;
    static int x,y,xybutton = 0;

    while (SDL_WaitEvent(&event))
    {
        sim_enter_irq_handler();
        switch(event.type)
        {
            case SDL_KEYDOWN:
            case SDL_KEYUP:
                button_event(event.key.keysym.sym, event.type == SDL_KEYDOWN);
                break;
#ifdef HAVE_TOUCHSCREEN
            case SDL_MOUSEMOTION:
                if (event.motion.state & SDL_BUTTON(1))
                    touchscreen_event(event.motion.x, event.motion.y);
                break;
#endif
            case SDL_MOUSEBUTTONDOWN:
                switch ( event.button.button ) {
#ifdef HAVE_SCROLLWHEEL
                    case SDL_BUTTON_WHEELUP:
                        button_event( SDLK_UP, true );
                        break;
                    case SDL_BUTTON_WHEELDOWN:
                        button_event( SDLK_DOWN, true );
                        break;
#endif
                    case SDL_BUTTON_LEFT:
                    case SDL_BUTTON_MIDDLE:
                        if ( mapping && background ) {
                            x = event.button.x;
                            y = event.button.y;
                        }
                        if ( background ) {
                            xybutton = xy2button( event.button.x, event.button.y );
                            if( xybutton ) {
                                button_event( xybutton, true );
                                break;
                            }
                        }
#ifdef HAVE_TOUCHSCREEN
                        touchscreen_event(event.button.x, event.button.y);
#endif
                        break;

                    default:
                        break;
                }

                if (debug_wps && event.button.button == 1)
                {
                    if ( background ) 
#ifdef HAVE_REMOTE
                        if ( event.button.y < UI_REMOTE_POSY ) /* Main Screen */
                            printf("Mouse at: (%d, %d)\n", event.button.x - UI_LCD_POSX -1 , event.button.y - UI_LCD_POSY - 1 );
                        else 
                            printf("Mouse at: (%d, %d)\n", event.button.x - UI_REMOTE_POSX -1 , event.button.y - UI_REMOTE_POSY - 1 );
#else
                        printf("Mouse at: (%d, %d)\n", event.button.x - UI_LCD_POSX -1 , event.button.y - UI_LCD_POSY - 1 );
#endif
                    else 
                        if ( event.button.y/display_zoom < LCD_HEIGHT ) /* Main Screen */
                            printf("Mouse at: (%d, %d)\n", event.button.x/display_zoom, event.button.y/display_zoom );
#ifdef HAVE_REMOTE
                        else
                            printf("Mouse at: (%d, %d)\n", event.button.x/display_zoom, event.button.y/display_zoom - LCD_HEIGHT );
#endif
                }
                break;
            case SDL_MOUSEBUTTONUP:
                switch ( event.button.button ) {
                    /* The scrollwheel button up events are ignored as they are queued immediately */
                    case SDL_BUTTON_LEFT:
                    case SDL_BUTTON_MIDDLE:
                        if ( mapping && background ) {
                            printf("    { SDLK_,     %d, %d, %d, \"\" },\n", x,
#define SQUARE(x) ((x)*(x))
                            y, (int)sqrt( SQUARE(x-(int)event.button.x)
                                    + SQUARE(y-(int)event.button.y))  );
                        }
                        if ( background && xybutton ) {
                                button_event( xybutton, false );
                                xybutton = 0;
                            }
#ifdef HAVE_TOUCHSCREEN
                            else
                                button_event(BUTTON_TOUCHSCREEN, false);
#endif
                        break;
                    default:
                        break;
                }
                break;
                

            case SDL_QUIT:
            {
                sim_exit_irq_handler();
                return false;
            }
            default:
                /*printf("Unhandled event\n"); */
                break;
        }
        sim_exit_irq_handler();
    }
コード例 #23
0
ファイル: party.c プロジェクト: atrinik/atrinik
/** @copydoc widgetdata::event_func */
static int widget_event(widgetdata *widget, SDL_Event *event)
{
    char buf[MAX_BUF];
    size_t i;

    /* If the list has handled the mouse event, we need to redraw the
     * widget. */
    if (list_party && list_handle_mouse(list_party, event)) {
        widget->redraw = 1;
        return 1;
    }

    for (i = 0; i < BUTTON_NUM; i++) {
        if ((cpl.partyname[0] == '\0' && (i == BUTTON_PASSWORD || i == BUTTON_LEAVE || i == BUTTON_CHAT || i == BUTTON_MEMBERS)) || (cpl.partyname[0] != '\0' && (i == BUTTON_FORM))) {
            continue;
        }

        if (button_event(&buttons[i], event)) {
            switch (i) {
            case BUTTON_PARTIES:
                send_command("/party list");
                break;

            case BUTTON_MEMBERS:
                send_command("/party who");
                break;

            case BUTTON_FORM:
                snprintf(buf, sizeof(buf), "?MCON /party form ");
                keybind_process_command(buf);
                break;

            case BUTTON_PASSWORD:
                snprintf(buf, sizeof(buf), "?MCON /party password ");
                keybind_process_command(buf);
                break;

            case BUTTON_LEAVE:
                send_command("/party leave");
                break;

            case BUTTON_CHAT:
                snprintf(buf, sizeof(buf), "?MCON /gsay ");
                keybind_process_command(buf);
                break;

            case BUTTON_CLOSE:
                widget->show = 0;
                break;

            case BUTTON_HELP:
                help_show("spell list");
                break;
            }

            widget->redraw = 1;
            return 1;
        }

        if (buttons[i].redraw) {
            widget->redraw = 1;
        }
    }

    return 0;
}