static void update_position(struct panel * panel) { int32_t x, y; struct swc_rectangle * screen = &panel->screen->base.geometry, * view = &panel->view->base.geometry; switch (panel->edge) { case SWC_PANEL_EDGE_TOP: x = screen->x + panel->offset; y = screen->y; break; case SWC_PANEL_EDGE_BOTTOM: x = screen->x + panel->offset; y = screen->y + screen->height - view->height; break; case SWC_PANEL_EDGE_LEFT: x = screen->x; y = screen->y + screen->height - view->height - panel->offset; break; case SWC_PANEL_EDGE_RIGHT: x = screen->x + screen->width - view->width; y = screen->y + panel->offset; break; default: return; } view_move(&panel->view->base, x, y); }
static void set_popup(struct wl_client * client, struct wl_resource * resource, struct wl_resource * seat_resource, uint32_t serial, struct wl_resource * parent_resource, int32_t x, int32_t y, uint32_t flags) { struct shell_surface * shell_surface = wl_resource_get_user_data(resource); struct swc_surface * parent_surface = wl_resource_get_user_data(parent_resource); struct compositor_view * parent_view = compositor_view(parent_surface->view); if (!parent_view || !parent_view->window) return; window_unmanage(&shell_surface->window); window_set_parent(&shell_surface->window, parent_view->window); view_move(&shell_surface->window.view->base, parent_view->base.geometry.x + x, parent_view->base.geometry.y + y); }
struct xdg_popup * xdg_popup_new(struct wl_client *client, uint32_t version, uint32_t id, struct surface *surface, struct surface *parent_surface, int32_t x, int32_t y) { struct xdg_popup *popup; struct compositor_view *parent = compositor_view(parent_surface->view); if (!parent) goto error0; popup = malloc(sizeof *popup); if (!popup) goto error0; popup->resource = wl_resource_create(client, &xdg_popup_interface, version, id); if (!popup->resource) goto error1; popup->surface_destroy_listener.notify = &handle_surface_destroy; wl_resource_add_destroy_listener(surface->resource, &popup->surface_destroy_listener); wl_resource_set_implementation(popup->resource, &xdg_popup_implementation, popup, &destroy_popup); if (!(popup->view = compositor_create_view(surface))) goto error2; view_move(&popup->view->base, parent->base.geometry.x + x, parent->base.geometry.y + y); compositor_view_set_parent(popup->view, parent); return popup; error2: wl_resource_destroy(popup->resource); error1: free(popup); error0: return NULL; }
static void update_work_func(struct work_struct *work) { struct kp *kp = container_of(work, struct kp, work_update); int i; int tmp = 1; long int tmpx, tmpy; #if HOT report_hot_key(kp); #endif /*******************************************************************************/ //report joystick if (key_param[0] == 0 || key_param[1] < 0 || key_param[2] < 0) { scan_left_joystick(kp); #if VERTICAL js_report(kp, kp->js_value[0], 0); //left js_report(kp, kp->js_value[1], 1); //left #else js_report(kp, kp->js_value[1], 0); //left js_report(kp, kp->js_value[0], 1); //left #endif input_sync(kp->input_joystick); } if (key_param[0] == 0) { scan_right_joystick(kp); js_report(kp, kp->js_value[3], 5); //right js_report(kp, kp->js_value[2], 2); //right input_sync(kp->input_joystick); } else if (key_param[0] == 1 && (key_param[21] < 0 || key_param[22] < 0)) { scan_right_joystick(kp); js_report(kp, kp->js_value[3], 5); //right js_report(kp, kp->js_value[2], 2); //right input_sync(kp->input_joystick); } else if (key_param[0] == 2 && (key_param[20] < 0 || key_param[21] < 0)) { scan_right_joystick(kp); js_report(kp, kp->js_value[3], 5); //right js_report(kp, kp->js_value[2], 2); //right input_sync(kp->input_joystick); } if (key_param[0] == 0) { report_joystick_key(kp); input_sync(kp->input_joystick); } if (key_param[0] == 0) { js_report(kp, brake, 3); //brake js_report(kp, gas, 4); //gas #if DPAD_AXIS js_report(kp, hatx, 6); //hatx js_report(kp, haty, 7); //haty #endif input_sync(kp->input_joystick); } //end /*******************************************************************************/ /*******************************************************************************/ //report key mapping //left joystick if ((key_param[0] == 1 || key_param[0] == 2) && key_param[1] >= 0 && key_param[2] >= 0) { scan_left_joystick_touchmapping(kp); if ((kp->key_valid[0] == 1) || (kp->key_valid[1] == 1)) { kp->stick_flag[0] = 1; if(kp->left_center_count < CENTER_TRY) { if(kp->left_center_count == 0) vtouch_report(kp, key_param[1], key_param[2], 0); if(kp->left_center_count == 1) vtouch_report(kp, key_param[1] + 1, key_param[2], 0); if(kp->left_center_count == 2) vtouch_report(kp, key_param[1], key_param[2] + 1, 0); if(kp->left_center_count == 3) vtouch_report(kp, key_param[1] - 1, key_param[2], 0); if(kp->left_center_count == 4) vtouch_report(kp, key_param[1], key_param[2] - 1, 0); kp->left_center_count++; } else { tmpx = key_param[1] + (kp->key_value[0] - HALF_ADC_MAX) * (long int)key_param[3] / HALF_ADC_MAX; tmpy = key_param[2] + (kp->key_value[1] - HALF_ADC_MAX) * (long int)key_param[3] / HALF_ADC_MAX; vtouch_report(kp, tmpx, tmpy, 0); } } else if (kp->stick_flag[0] == 1) { kp->stick_flag[0] = 0; kp->left_center_count = 0; } } else if (key_param[0] == 1 || key_param[0] == 2) { kp->stick_flag[0] = 0; kp->left_center_count = 0; } //right joystick if (key_param[0] == 1 && key_param[21] >= 0 && key_param[22] >= 0) { //mode 1 scan_right_joystick_touchmapping(kp); if ((kp->key_valid[2] == 1) || (kp->key_valid[3] == 1)) { kp->stick_flag[1] = 1; if(!kp->right_center_count) { vtouch_report(kp, VIEW_CENTREX, VIEW_CENTREY, 1); kp->right_center_count = 1; } else { view_move(kp); vtouch_report(kp, kp->key_value[2], kp->key_value[3], 1); } } else if (kp->stick_flag[1] == 1) { kp->stick_flag[1] = 0; kp->right_center_count = 0; kp->view_oldx = VIEW_CENTREX; kp->view_oldy = VIEW_CENTREY; } } else if (key_param[0] == 2 && key_param[20] >= 0 && key_param[21] >= 0) { //mode 2 scan_right_joystick_touchmapping(kp); if ((kp->key_valid[2] == 1) || (kp->key_valid[3] == 1)) { kp->stick_flag[1] = 1; if(kp->right_center_count < CENTER_TRY) { if(kp->right_center_count == 0) vtouch_report(kp, key_param[20], key_param[21], 1); if(kp->right_center_count == 1) vtouch_report(kp, key_param[20] + 1, key_param[21], 1); if(kp->right_center_count == 2) vtouch_report(kp, key_param[20], key_param[21] + 1, 1); if(kp->right_center_count == 3) vtouch_report(kp, key_param[20] - 1, key_param[21], 1); if(kp->right_center_count == 4) vtouch_report(kp, key_param[20], key_param[21] - 1, 1); kp->right_center_count++; } else { tmpx = key_param[20] + (kp->key_value[2] - HALF_ADC_MAX) * (long int)key_param[22] / HALF_ADC_MAX; tmpy = key_param[21] + (kp->key_value[3] - HALF_ADC_MAX) * (long int)key_param[22] / HALF_ADC_MAX; vtouch_report(kp, tmpx, tmpy, 1); } } else if (kp->stick_flag[1] == 1) { kp->stick_flag[1] = 0; kp->right_center_count = 0; } } else if (key_param[0] == 1 || key_param[0] == 2) { kp->stick_flag[1] = 0; kp->right_center_count = 0; } //end if ((key_param[0] == 1 || key_param[0] == 2)) { report_keytouch_key(kp); input_sync(kp->input_keytouch); if (release && (kp->stick_flag[0] == 0) && (kp->stick_flag[1] ==0)) { for (i = 0; i < keynum; i++) { tmp = (tmp * gamekeys[i].flag); } if (tmp) keytouch_release(kp); } } /*******************************************************************************/ }
int viewglut_key(viewglut *P, int k, int d) { double s = 5; int mine = 1; assert(P); if (d) { /* Interpret a key press. */ switch (tolower(k)) { case 27: exit(EXIT_SUCCESS); break; case 7: viewglut_grab(); break; case 6: viewglut_fwd(P); break; case 2: viewglut_rev(P); break; case 16: view_prev(P->V); break; case 14: view_next(P->V); break; case 8: view_home(P->V); break; case 10: view_jump(P->V); break; case 19: view_save(P->V, VIEW_DAT); break; case 12: view_load(P->V, VIEW_DAT); break; case 18: view_remove(P->V); break; case 9: view_insert(P->V); break; case 3: view_clear (P->V); break; case 'd': case 'e': P->d[0] += s; break; case 'a': P->d[0] -= s; break; case 'r': case 'p': P->d[1] += s; break; case 'f': case 'u': P->d[1] -= s; break; case 's': case 'o': P->d[2] += s; break; case 'w': case ',': P->d[2] -= s; break; default: mine = 0; /* Not a viewglut key */ } } else { /* Interpret a key release. */ switch (tolower(k)) { case 'd': case 'e': P->d[0] -= s; break; case 'a': P->d[0] += s; break; case 'r': case 'p': P->d[1] -= s; break; case 'f': case 'u': P->d[1] += s; break; case 's': case 'o': P->d[2] -= s; break; case 'w': case ',': P->d[2] += s; break; default: mine = 0; /* Not a viewglut key */ } } if (mine) { view_move(P->V, P->d); glutPostRedisplay(); } return mine; }