commit dc3c54c000c1390f4a615e262d9a6d68a201c354
parent 98b8e8f522e65c86dd94e2e29b3ff5d12b106fbe
Author: Michael Forney <mforney@mforney.org>
Date: Sat, 4 Jan 2020 14:43:58 -0800
region: Avoid unnecessary container struct
Diffstat:
4 files changed, 23 insertions(+), 30 deletions(-)
diff --git a/libswc/compositor.c b/libswc/compositor.c
@@ -774,11 +774,7 @@ create_surface(struct wl_client *client, struct wl_resource *resource, uint32_t
static void
create_region(struct wl_client *client, struct wl_resource *resource, uint32_t id)
{
- struct region *region;
-
- region = region_new(client, wl_resource_get_version(resource), id);
-
- if (!region)
+ if (!region_new(client, wl_resource_get_version(resource), id))
wl_resource_post_no_memory(resource);
}
diff --git a/libswc/region.c b/libswc/region.c
@@ -1,24 +1,26 @@
#include "region.h"
#include "util.h"
+#include <pixman.h>
#include <stdlib.h>
#include <wayland-server.h>
static void
add(struct wl_client *client, struct wl_resource *resource, int32_t x, int32_t y, int32_t width, int32_t height)
{
- struct region *region = wl_resource_get_user_data(resource);
- pixman_region32_union_rect(®ion->region, ®ion->region, x, y, width, height);
+ pixman_region32_t *region = wl_resource_get_user_data(resource);
+
+ pixman_region32_union_rect(region, region, x, y, width, height);
}
static void
subtract(struct wl_client *client, struct wl_resource *resource, int32_t x, int32_t y, int32_t width, int32_t height)
{
- struct region *region = wl_resource_get_user_data(resource);
+ pixman_region32_t *region = wl_resource_get_user_data(resource);
pixman_region32_t operand;
pixman_region32_init_rect(&operand, x, y, width, height);
- pixman_region32_subtract(®ion->region, ®ion->region, &operand);
+ pixman_region32_subtract(region, region, &operand);
}
static const struct wl_region_interface region_impl = {
@@ -30,29 +32,30 @@ static const struct wl_region_interface region_impl = {
static void
region_destroy(struct wl_resource *resource)
{
- struct region *region = wl_resource_get_user_data(resource);
+ pixman_region32_t *region = wl_resource_get_user_data(resource);
- pixman_region32_fini(®ion->region);
+ pixman_region32_fini(region);
free(region);
}
-struct region *
+struct wl_resource *
region_new(struct wl_client *client, uint32_t version, uint32_t id)
{
- struct region *region;
+ pixman_region32_t *region;
+ struct wl_resource *resource;
region = malloc(sizeof(*region));
if (!region)
goto error0;
- region->resource = wl_resource_create(client, &wl_region_interface, version, id);
- if (!region->resource)
+ resource = wl_resource_create(client, &wl_region_interface, version, id);
+ if (!resource)
goto error1;
+ wl_resource_set_implementation(resource, ®ion_impl, region, ®ion_destroy);
- pixman_region32_init(®ion->region);
- wl_resource_set_implementation(region->resource, ®ion_impl, region, ®ion_destroy);
+ pixman_region32_init(region);
- return region;
+ return resource;
error1:
free(region);
diff --git a/libswc/region.h b/libswc/region.h
@@ -1,16 +1,10 @@
#ifndef SWC_REGION_H
#define SWC_REGION_H
-#include <stdbool.h>
-#include <pixman.h>
+#include <stdint.h>
struct wl_client;
-struct region {
- struct wl_resource *resource;
- pixman_region32_t region;
-};
-
-struct region *region_new(struct wl_client *client, uint32_t version, uint32_t id);
+struct wl_resource *region_new(struct wl_client *client, uint32_t version, uint32_t id);
#endif
diff --git a/libswc/surface.c b/libswc/surface.c
@@ -189,8 +189,8 @@ set_opaque_region(struct wl_client *client, struct wl_resource *resource, struct
surface->pending.commit |= SURFACE_COMMIT_OPAQUE;
if (region_resource) {
- struct region *region = wl_resource_get_user_data(region_resource);
- pixman_region32_copy(&surface->pending.state.opaque, ®ion->region);
+ pixman_region32_t *region = wl_resource_get_user_data(region_resource);
+ pixman_region32_copy(&surface->pending.state.opaque, region);
} else {
pixman_region32_clear(&surface->pending.state.opaque);
}
@@ -204,8 +204,8 @@ set_input_region(struct wl_client *client, struct wl_resource *resource, struct
surface->pending.commit |= SURFACE_COMMIT_INPUT;
if (region_resource) {
- struct region *region = wl_resource_get_user_data(region_resource);
- pixman_region32_copy(&surface->pending.state.input, ®ion->region);
+ pixman_region32_t *region = wl_resource_get_user_data(region_resource);
+ pixman_region32_copy(&surface->pending.state.input, region);
} else {
pixman_region32_reset(&surface->pending.state.input, &infinite_extents);
}