int osd_is_joy_pressed(int joycode) { int joy_num,stick; /* special case for mouse buttons */ switch (joycode) { case MOUSE_BUTTON(1): return ExKey1 & GP2X_B; break; case MOUSE_BUTTON(2): return ExKey1 & GP2X_X; break; case MOUSE_BUTTON(3): return ExKey1 & GP2X_A; break; } joy_num = GET_JOYCODE_JOY(joycode); /* do we have as many sticks? */ if (joy_num == 0 || joy_num > num_joysticks) return 0; joy_num--; stick = GET_JOYCODE_STICK(joycode); if (stick == 0) { /* buttons */ int button; button = GET_JOYCODE_BUTTON(joycode); if (button == 0 || button > 6) return 0; button--; switch (joy_num) { case 0: return is_joy_button_pressed(button, ExKey1); break; case 1: return is_joy_button_pressed(button, ExKey2); break; case 2: return is_joy_button_pressed(button, ExKey3); break; case 3: return is_joy_button_pressed(button, ExKey4); break; default: break; } } else { /* sticks */ int axis,dir; if (stick > 1) return 0; stick--; axis = GET_JOYCODE_AXIS(joycode); dir = GET_JOYCODE_DIR(joycode); if (axis == 0 || axis > 2) return 0; axis--; switch (joy_num) { case 0: return is_joy_axis_pressed(axis, dir, ExKey1); break; case 1: return is_joy_axis_pressed(axis, dir, ExKey2); break; case 2: return is_joy_axis_pressed(axis, dir, ExKey3); break; case 3: return is_joy_axis_pressed(axis, dir, ExKey4); break; default: break; } } return 0; }
static void init_joy_list(void) { int tot,i,j,k; char buf[256]; tot = 0; /* first of all, map mouse buttons */ for (j = 0;j < 3;j++) { sprintf(buf,"MOUSE B%d",j+1); strncpy(joynames[tot],buf,MAX_JOY_NAME_LEN); joynames[tot][MAX_JOY_NAME_LEN] = 0; joylist[tot].name = joynames[tot]; joylist[tot].code = MOUSE_BUTTON(j+1); tot++; } for (i = 0;i < num_joysticks;i++) { for (j = 0;j < 1;j++) { for (k = 0;k < 2;k++) { sprintf(buf,"J%d %s %s -",i+1,"JoystickAxis","-"); strncpy(joynames[tot],buf,MAX_JOY_NAME_LEN); joynames[tot][MAX_JOY_NAME_LEN] = 0; joylist[tot].name = joynames[tot]; joylist[tot].code = JOYCODE(i+1,j+1,k+1,1); tot++; sprintf(buf,"J%d %s %s +",i+1,"JoystickAxis","+"); strncpy(joynames[tot],buf,MAX_JOY_NAME_LEN); joynames[tot][MAX_JOY_NAME_LEN] = 0; joylist[tot].name = joynames[tot]; joylist[tot].code = JOYCODE(i+1,j+1,k+1,2); tot++; } } for (j = 0;j < 6;j++) { sprintf(buf,"J%d %s",i+1,"JoystickButton"); strncpy(joynames[tot],buf,MAX_JOY_NAME_LEN); joynames[tot][MAX_JOY_NAME_LEN] = 0; joylist[tot].name = joynames[tot]; joylist[tot].code = JOYCODE(i+1,0,j+1,0); tot++; } } /* terminate array */ joylist[tot].name = 0; joylist[tot].code = 0; joylist[tot].standardcode = 0; /* fill in equivalences */ for (i = 0;i < tot;i++) { joylist[i].standardcode = JOYCODE_OTHER; j = 0; while (joyequiv[j][0] != 0) { if (joyequiv[j][0] == joylist[i].code) { joylist[i].standardcode = joyequiv[j][1]; break; } j++; } } }
static bool process_event(union event *ev) { struct buffered_status *status = store_status(); bool rval = true; switch(ev->type) { case EVENT_BUTTON_DOWN: { Uint32 button = map_button(ev->button.pad, ev->button.button); rval = false; if((ev->button.pad == 0) && pointing) { Uint32 mousebutton; switch(ev->button.button) { case WPAD_BUTTON_A: mousebutton = MOUSE_BUTTON_LEFT; break; case WPAD_BUTTON_B: mousebutton = MOUSE_BUTTON_RIGHT; break; default: mousebutton = 0; break; } if(mousebutton) { status->mouse_button = mousebutton; status->mouse_repeat = mousebutton; status->mouse_button_state |= MOUSE_BUTTON(mousebutton); status->mouse_repeat_state = 1; status->mouse_drag_state = -1; status->mouse_time = get_ticks(); button = 256; rval = true; } } if((button < 256)) { enum keycode skey = input.joystick_button_map[ev->button.pad][button]; if(skey && (status->keymap[skey] == 0)) { key_press(status, skey, skey); rval = true; } } else { if((ev->button.pad < 4) && ((ev->button.button == WPAD_BUTTON_HOME) || ((ext_type[ev->button.pad] == WPAD_EXP_CLASSIC) && (ev->button.button == WPAD_CLASSIC_BUTTON_HOME)))) { status->keymap[IKEY_ESCAPE] = 1; status->key = IKEY_ESCAPE; status->keypress_time = get_ticks(); rval = true; break; } } break; } case EVENT_BUTTON_UP: { Uint32 button = map_button(ev->button.pad, ev->button.button); rval = false; if((ev->button.pad == 0) && status->mouse_button_state) { Uint32 mousebutton; switch(ev->button.button) { case WPAD_BUTTON_A: mousebutton = MOUSE_BUTTON_LEFT; break; case WPAD_BUTTON_B: mousebutton = MOUSE_BUTTON_RIGHT; break; default: mousebutton = 0; break; } if(mousebutton && (status->mouse_button_state & MOUSE_BUTTON(mousebutton))) { status->mouse_button_state &= ~MOUSE_BUTTON(mousebutton); status->mouse_repeat = 0; status->mouse_drag_state = 0; status->mouse_repeat_state = 0; button = 256; rval = true; } } if((button < 256)) { enum keycode skey = input.joystick_button_map[ev->button.pad][button]; if(skey) { key_release(status, skey); rval = true; } } break; } case EVENT_AXIS_MOVE: { int digital_value = -1; int axis = ev->axis.axis; int last_axis; enum keycode skey; if(ev->axis.pad < 4) { switch(ext_type[ev->axis.pad]) { case WPAD_EXP_NUNCHUK: break; case WPAD_EXP_CLASSIC: axis += 2; break; case WPAD_EXP_GUITARHERO3: axis += 6; break; default: axis = 256; break; // Not supposed to happen } } if(axis == 256) break; last_axis = status->axis[ev->axis.pad][axis]; if(ev->axis.pos > 10000) digital_value = 1; else if(ev->axis.pos < -10000) digital_value = 0; if(digital_value != -1) { skey = input.joystick_axis_map[ev->axis.pad][axis][digital_value]; if(skey) { if(status->keymap[skey] == 0) key_press(status, skey, skey); if(last_axis == (digital_value ^ 1)) { skey = input.joystick_axis_map[ev->axis.pad][axis][last_axis]; key_release(status, skey); } } } else { if(last_axis != -1) { skey = input.joystick_axis_map[ev->axis.pad][axis][last_axis]; if(skey) key_release(status, skey); } } status->axis[ev->axis.pad][axis] = digital_value; break; } case EVENT_CHANGE_EXT: { ext_type[ev->ext.pad] = ev->ext.ext; break; } case EVENT_POINTER_MOVE: { pointing = 1; status->mouse_moved = true; status->real_mouse_x = ev->pointer.x; status->real_mouse_y = ev->pointer.y; status->mouse_x = ev->pointer.x / 8; status->mouse_y = ev->pointer.y / 14; break; } case EVENT_POINTER_OUT: { pointing = 0; break; } case EVENT_KEY_DOWN: { enum keycode ckey = convert_USB_internal(ev->key.key); if(!ckey) { if(ev->key.unicode) ckey = IKEY_UNICODE; else { rval = false; break; } } if((ckey == IKEY_RETURN) && get_alt_status(keycode_internal) && get_ctrl_status(keycode_internal)) { toggle_fullscreen(); break; } if(ckey == IKEY_F12) { dump_screen(); break; } if(status->key_repeat && (status->key_repeat != IKEY_LSHIFT) && (status->key_repeat != IKEY_RSHIFT) && (status->key_repeat != IKEY_LALT) && (status->key_repeat != IKEY_RALT) && (status->key_repeat != IKEY_LCTRL) && (status->key_repeat != IKEY_RCTRL)) { // Stack current repeat key if it isn't shift, alt, or ctrl if(input.repeat_stack_pointer != KEY_REPEAT_STACK_SIZE) { input.key_repeat_stack[input.repeat_stack_pointer] = status->key_repeat; input.unicode_repeat_stack[input.repeat_stack_pointer] = status->unicode_repeat; input.repeat_stack_pointer++; } } key_press(status, ckey, ev->key.unicode); break; } case EVENT_KEY_UP: { enum keycode ckey = convert_USB_internal(ev->key.key); if(!ckey) { if(status->keymap[IKEY_UNICODE]) ckey = IKEY_UNICODE; else { rval = false; break; } } status->keymap[ckey] = 0; if(status->key_repeat == ckey) { status->key_repeat = IKEY_UNKNOWN; status->unicode_repeat = 0; } status->key_release = ckey; break; } case EVENT_KEY_LOCKS: { status->numlock_status = !!(ev->locks.locks & MOD_NUMLOCK); status->caps_status = !!(ev->locks.locks & MOD_CAPSLOCK); break; } case EVENT_MOUSE_MOVE: { int mx = status->real_mouse_x + ev->mmove.dx; int my = status->real_mouse_y + ev->mmove.dy; if(mx < 0) mx = 0; if(my < 0) my = 0; if(mx >= 640) mx = 639; if(my >= 350) my = 349; status->real_mouse_x = mx; status->real_mouse_y = my; status->mouse_x = mx / 8; status->mouse_y = my / 14; status->mouse_moved = true; break; } case EVENT_MOUSE_BUTTON_DOWN: { Uint32 button = 0; switch (ev->mbutton.button) { case USB_MOUSE_BTN_LEFT: button = MOUSE_BUTTON_LEFT; break; case USB_MOUSE_BTN_RIGHT: button = MOUSE_BUTTON_RIGHT; break; case USB_MOUSE_BTN_MIDDLE: button = MOUSE_BUTTON_MIDDLE; break; default: break; } if(!button) break; status->mouse_button = button; status->mouse_repeat = button; status->mouse_button_state |= MOUSE_BUTTON(button); status->mouse_repeat_state = 1; status->mouse_drag_state = -1; status->mouse_time = get_ticks(); break; } case EVENT_MOUSE_BUTTON_UP: { Uint32 button = 0; switch (ev->mbutton.button) { case USB_MOUSE_BTN_LEFT: button = MOUSE_BUTTON_LEFT; break; case USB_MOUSE_BTN_RIGHT: button = MOUSE_BUTTON_RIGHT; break; case USB_MOUSE_BTN_MIDDLE: button = MOUSE_BUTTON_MIDDLE; break; default: break; } if(!button) break; status->mouse_button_state &= ~MOUSE_BUTTON(button); status->mouse_repeat = 0; status->mouse_drag_state = 0; status->mouse_repeat_state = 0; break; } default: { rval = false; break; } } return rval; }
MouseFilter MOUSE_BUTTON(int button) { return MOUSE_BUTTON({button}); }
MouseFilter MOUSE_BUTTON(std::string button) { return MOUSE_BUTTON({button}); }
int main(int argc, char** argv) { if(argc!=3){ cout<<"please enter <show> <filename> <a--area, w--wire>"<<endl; exit(0); } char filename[40]; strcpy(filename, argv[1]); char c=*argv[2]; int i, j, n; leda_window W; W.set_bg_color(13); //W.set_bg_color(0); W.set_line_width(1); W.display(); int c1; double s=50.0; do{ int area; int wire; double time; float max_x=0.0; float max_y=0.0; FILE *fs= fopen(filename,"r"); fscanf(fs, "%f\n", &time); fscanf(fs, "%d\n", &area); fscanf(fs, "%d\n", &wire); fscanf(fs, "%d\n", &n); for(i=0; i<n; i++){ int x1, y1, x2, y2; fscanf(fs,"%d %d %d %d\n", &x1, &y1, &x2, &y2); W.draw_filled_rectangle(x1/s, y1/s, x2/s, y2/s, 0); //W.draw_rectangle(x1/s, y1/s, x2/s, y2/s, 1); W.draw_segment(x1/s, y1/s, x1/s, y2/s, 1); W.draw_segment(x1/s, y1/s, x2/s, y1/s, 1); W.draw_segment(x1/s, y2/s, x2/s, y2/s, 1); W.draw_segment(x2/s, y1/s, x2/s, y2/s, 1); if(max_x< (x2/s)) max_x=x2/s; if(max_y< (y2/s)) max_y=y2/s; }//for W.set_line_width(3); W.draw_segment(0.0, max_y, max_x, max_y); W.draw_segment(max_x, 0.0, max_x, max_y); W.draw_segment(0.2, 0.0, 0.2, max_y); W.draw_segment(0.0, 0.3, max_x, 0.3); W.set_line_width(1); if(c=='w'){ int p_x1, p_y1, p_x2, p_y2; fscanf(fs, "%d\n", &n); for(i=0; i<n; i++){ int n1; fscanf(fs, "%d", &n1); fscanf(fs, "%d %d", &p_x1, &p_y1); for(j=1; j<n1; j++){ fscanf(fs, " %d %d", &p_x2, &p_y2); W.draw_segment(p_x1/s, p_y1/s, p_x2/s, p_y2/s); p_x1=p_x2; p_y1=p_y2; }//for_j }//for_i }//if fclose(fs); int c1=W.read_mouse(); if(c1==MOUSE_BUTTON(1)&&s>=20) s=s-10; else if(c1==MOUSE_BUTTON(3)) s=s+10; W.clear(); }while(!W.ctrl_key_down()); //int c1; //c1=getchar(); return 1; }