// SPDX-License-Identifier: GPL-2.0-only #define _POSIX_C_SOURCE 200809L #include #include #include #include #include #include #include "common/graphic-helpers.h" #include "common/list.h" #include "common/mem.h" #include "labwc.h" #include "regions.h" bool regions_available(void) { return !wl_list_empty(&rc.regions); } void regions_init(struct server *server, struct seat *seat) { /* To be filled later */ } void regions_update(struct output *output) { assert(output); struct region *region; struct wlr_box usable = output_usable_area_in_layout_coords(output); /* Initialize regions */ if (wl_list_empty(&output->regions)) { wl_list_for_each(region, &rc.regions, link) { struct region *region_new = znew(*region_new); /* Create a copy */ region_new->name = xstrdup(region->name); region_new->percentage = region->percentage; wl_list_append(&output->regions, ®ion_new->link); } } /* Update regions */ struct wlr_box *perc, *geo; wl_list_for_each(region, &output->regions, link) { geo = ®ion->geo; perc = ®ion->percentage; geo->x = usable.x + usable.width * perc->x / 100; geo->y = usable.y + usable.height * perc->y / 100; geo->width = usable.width * perc->width / 100; geo->height = usable.height * perc->height / 100; region->center.x = geo->x + geo->width / 2; region->center.y = geo->y + geo->height / 2; } } void regions_destroy(struct wl_list *regions) { assert(regions); struct region *region, *region_tmp; wl_list_for_each_safe(region, region_tmp, regions, link) { wl_list_remove(®ion->link); zfree(region->name); zfree(region); } }