swc

Unnamed repository; edit this file 'description' to name the repository.
git clone git://git.nihaljere.xyz/swc
Log | Files | Refs | README | LICENSE

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:
Mlibswc/compositor.c | 6+-----
Mlibswc/region.c | 29++++++++++++++++-------------
Mlibswc/region.h | 10++--------
Mlibswc/surface.c | 8++++----
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(&region->region, &region->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(&region->region, &region->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(&region->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, &region_impl, region, &region_destroy); - pixman_region32_init(&region->region); - wl_resource_set_implementation(region->resource, &region_impl, region, &region_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, &region->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, &region->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); }