Пример #1
0
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);
}
Пример #2
0
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);
}
Пример #3
0
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;
}
Пример #4
0
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);
		}
	}
	/*******************************************************************************/
}
Пример #5
0
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;
}