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(); }
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); }
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); }
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(); }