Example #1
0
void region_tt::set_rect( int left, int top, int right, int bottom )
{
    if ((left != right) && (top != bottom))
    {
        rgn->extents.set( left, top, right, bottom );
        rgn->extents.fix();
        numRects = 1;
        rects[0] = rgn->extents;
        update_type();
    }
    else
        empty_region();
}
Example #2
0
static void
data_device_end_drag_grab(struct weston_drag *drag,
		struct weston_seat *seat)
{
	if (drag->icon) {
		if (weston_view_is_mapped(drag->icon))
			weston_view_unmap(drag->icon);

		drag->icon->surface->configure = NULL;
		empty_region(&drag->icon->surface->pending.input);
		wl_list_remove(&drag->icon_destroy_listener.link);
		weston_view_destroy(drag->icon);
	}

	weston_drag_set_focus(drag, seat, NULL, 0, 0);
}
Example #3
0
static void
drag_surface_configure(struct weston_drag *drag,
		       struct weston_pointer *pointer,
		       struct weston_touch *touch,
		       struct weston_surface *es,
		       int32_t sx, int32_t sy)
{
	struct wl_list *list;
	float fx, fy;

	assert((pointer != NULL && touch == NULL) ||
			(pointer == NULL && touch != NULL));

	if (!weston_surface_is_mapped(es) && es->buffer_ref.buffer) {
		if (pointer && pointer->sprite &&
			weston_view_is_mapped(pointer->sprite))
			list = &pointer->sprite->layer_link;
		else
			list = &es->compositor->cursor_layer.view_list;

		wl_list_remove(&drag->icon->layer_link);
		wl_list_insert(list, &drag->icon->layer_link);
		weston_view_update_transform(drag->icon);
		empty_region(&es->pending.input);
	}

	drag->dx += sx;
	drag->dy += sy;

	/* init to 0 for avoiding a compile warning */
	fx = fy = 0;
	if (pointer) {
		fx = wl_fixed_to_double(pointer->x) + drag->dx;
		fy = wl_fixed_to_double(pointer->y) + drag->dy;
	} else if (touch) {
		fx = wl_fixed_to_double(touch->grab_x) + drag->dx;
		fy = wl_fixed_to_double(touch->grab_y) + drag->dy;
	}
	weston_view_set_position(drag->icon, fx, fy);
}
Example #4
0
INT region_tt::intersect_rgn( region_tt *reg1, region_tt *reg2 )
{
    dprintf("%ld %ld\n", reg1->numRects, reg2->numRects);
    /* check for trivial reject */
    if ( !reg1->numRects || !reg2->numRects ||
            !reg1->rgn->extents.overlaps( reg2->rgn->extents ))
    {
        empty_region();
        return rgn->type;
    }

    // FIXME: implement more complicated regions
    assert(reg1->rgn->type == SIMPLEREGION);
    assert(reg2->rgn->type == SIMPLEREGION);

    rgn->extents = reg1->rgn->extents;
    rgn->extents.dump();
    rgn->extents.intersect( reg2->rgn->extents );
    rgn->extents.dump();

    return update_type();
}