commit dc3c54c

Michael Forney  ·  2020-01-04 22:43:58 +0000 UTC
parent 98b8e8f
region: Avoid unnecessary container struct
4 files changed,  +23, -30
+1, -5
 1@@ -774,11 +774,7 @@ create_surface(struct wl_client *client, struct wl_resource *resource, uint32_t
 2 static void
 3 create_region(struct wl_client *client, struct wl_resource *resource, uint32_t id)
 4 {
 5-	struct region *region;
 6-
 7-	region = region_new(client, wl_resource_get_version(resource), id);
 8-
 9-	if (!region)
10+	if (!region_new(client, wl_resource_get_version(resource), id))
11 		wl_resource_post_no_memory(resource);
12 }
13 
+16, -13
 1@@ -1,24 +1,26 @@
 2 #include "region.h"
 3 #include "util.h"
 4 
 5+#include <pixman.h>
 6 #include <stdlib.h>
 7 #include <wayland-server.h>
 8 
 9 static void
10 add(struct wl_client *client, struct wl_resource *resource, int32_t x, int32_t y, int32_t width, int32_t height)
11 {
12-	struct region *region = wl_resource_get_user_data(resource);
13-	pixman_region32_union_rect(&region->region, &region->region, x, y, width, height);
14+	pixman_region32_t *region = wl_resource_get_user_data(resource);
15+
16+	pixman_region32_union_rect(region, region, x, y, width, height);
17 }
18 
19 static void
20 subtract(struct wl_client *client, struct wl_resource *resource, int32_t x, int32_t y, int32_t width, int32_t height)
21 {
22-	struct region *region = wl_resource_get_user_data(resource);
23+	pixman_region32_t *region = wl_resource_get_user_data(resource);
24 	pixman_region32_t operand;
25 
26 	pixman_region32_init_rect(&operand, x, y, width, height);
27-	pixman_region32_subtract(&region->region, &region->region, &operand);
28+	pixman_region32_subtract(region, region, &operand);
29 }
30 
31 static const struct wl_region_interface region_impl = {
32@@ -30,29 +32,30 @@ static const struct wl_region_interface region_impl = {
33 static void
34 region_destroy(struct wl_resource *resource)
35 {
36-	struct region *region = wl_resource_get_user_data(resource);
37+	pixman_region32_t *region = wl_resource_get_user_data(resource);
38 
39-	pixman_region32_fini(&region->region);
40+	pixman_region32_fini(region);
41 	free(region);
42 }
43 
44-struct region *
45+struct wl_resource *
46 region_new(struct wl_client *client, uint32_t version, uint32_t id)
47 {
48-	struct region *region;
49+	pixman_region32_t *region;
50+	struct wl_resource *resource;
51 
52 	region = malloc(sizeof(*region));
53 	if (!region)
54 		goto error0;
55 
56-	region->resource = wl_resource_create(client, &wl_region_interface, version, id);
57-	if (!region->resource)
58+	resource = wl_resource_create(client, &wl_region_interface, version, id);
59+	if (!resource)
60 		goto error1;
61+	wl_resource_set_implementation(resource, &region_impl, region, &region_destroy);
62 
63-	pixman_region32_init(&region->region);
64-	wl_resource_set_implementation(region->resource, &region_impl, region, &region_destroy);
65+	pixman_region32_init(region);
66 
67-	return region;
68+	return resource;
69 
70 error1:
71 	free(region);
+2, -8
 1@@ -1,16 +1,10 @@
 2 #ifndef SWC_REGION_H
 3 #define SWC_REGION_H
 4 
 5-#include <stdbool.h>
 6-#include <pixman.h>
 7+#include <stdint.h>
 8 
 9 struct wl_client;
10 
11-struct region {
12-	struct wl_resource *resource;
13-	pixman_region32_t region;
14-};
15-
16-struct region *region_new(struct wl_client *client, uint32_t version, uint32_t id);
17+struct wl_resource *region_new(struct wl_client *client, uint32_t version, uint32_t id);
18 
19 #endif
+4, -4
 1@@ -189,8 +189,8 @@ set_opaque_region(struct wl_client *client, struct wl_resource *resource, struct
 2 	surface->pending.commit |= SURFACE_COMMIT_OPAQUE;
 3 
 4 	if (region_resource) {
 5-		struct region *region = wl_resource_get_user_data(region_resource);
 6-		pixman_region32_copy(&surface->pending.state.opaque, &region->region);
 7+		pixman_region32_t *region = wl_resource_get_user_data(region_resource);
 8+		pixman_region32_copy(&surface->pending.state.opaque, region);
 9 	} else {
10 		pixman_region32_clear(&surface->pending.state.opaque);
11 	}
12@@ -204,8 +204,8 @@ set_input_region(struct wl_client *client, struct wl_resource *resource, struct
13 	surface->pending.commit |= SURFACE_COMMIT_INPUT;
14 
15 	if (region_resource) {
16-		struct region *region = wl_resource_get_user_data(region_resource);
17-		pixman_region32_copy(&surface->pending.state.input, &region->region);
18+		pixman_region32_t *region = wl_resource_get_user_data(region_resource);
19+		pixman_region32_copy(&surface->pending.state.input, region);
20 	} else {
21 		pixman_region32_reset(&surface->pending.state.input, &infinite_extents);
22 	}