static void handle_surface(struct test_client *client) { uint32_t id; struct wl_resource *resource; struct weston_surface *surface; struct text_test_data *data = client->data; struct weston_seat *seat; assert(sscanf(client->buf, "surface %u", &id) == 1); fprintf(stderr, "got surface id %u\n", id); resource = wl_client_get_object(client->client, id); assert(resource); assert(strcmp(resource->object.interface->name, "wl_surface") == 0); surface = (struct weston_surface *) resource; weston_surface_configure(surface, 100, 100, 200, 200); weston_surface_update_transform(surface); weston_surface_set_color(surface, 0.0, 0.0, 0.0, 1.0); data->layer = malloc(sizeof *data->layer); weston_layer_init(data->layer, &client->compositor->cursor_layer.link); wl_list_insert(&data->layer->surface_list, &surface->layer_link); weston_surface_damage(surface); seat = get_seat(client); client->compositor->focus = 1; /* Make it work even if pointer is * outside X window. */ wl_keyboard_set_focus(&seat->keyboard, &surface->surface); test_client_send(client, "create-text-model\n"); client->handle = handle_text_model; }
static void surface_to_from_global(void *data) { struct weston_compositor *compositor = data; struct weston_surface *surface; float x, y; wl_fixed_t fx, fy; int32_t ix, iy; surface = weston_surface_create(compositor); weston_surface_configure(surface, 5, 10, 50, 50); weston_surface_update_transform(surface); weston_surface_to_global_float(surface, 33, 22, &x, &y); assert(x == 38 && y == 32); weston_surface_to_global_float(surface, -8, -2, &x, &y); assert(x == -3 && y == 8); weston_surface_to_global_fixed(surface, wl_fixed_from_int(12), wl_fixed_from_int(5), &fx, &fy); assert(fx == wl_fixed_from_int(17) && fy == wl_fixed_from_int(15)); weston_surface_from_global_float(surface, 38, 32, &x, &y); assert(x == 33 && y == 22); weston_surface_from_global_float(surface, 42, 5, &x, &y); assert(x == 37 && y == -5); weston_surface_from_global_fixed(surface, wl_fixed_from_int(21), wl_fixed_from_int(100), &fx, &fy); assert(fx == wl_fixed_from_int(16) && fy == wl_fixed_from_int(90)); weston_surface_from_global(surface, 0, 0, &ix, &iy); assert(ix == -5 && iy == -10); weston_surface_from_global(surface, 5, 10, &ix, &iy); assert(ix == 0 && iy == 0); wl_display_terminate(compositor->wl_display); }
static void surface_transform(void *data) { struct weston_compositor *compositor = data; struct weston_surface *surface; float x, y; surface = weston_surface_create(compositor); weston_surface_configure(surface, 100, 100, 200, 200); weston_surface_update_transform(surface); weston_surface_to_global_float(surface, 20, 20, &x, &y); fprintf(stderr, "20,20 maps to %f, %f\n", x, y); assert(x == 120 && y == 120); weston_surface_set_position(surface, 150, 300); weston_surface_update_transform(surface); weston_surface_to_global_float(surface, 50, 40, &x, &y); assert(x == 200 && y == 340); wl_display_terminate(compositor->wl_display); }