/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */ /* * Copyright (C) 2014 Endless Mobile * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License as * published by the Free Software Foundation; either version 2 of the * License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see . * * Written by: * Jasper St. Pierre */ #include "config.h" #include "mtk/mtk.h" #include "wayland/meta-wayland-region.h" struct _MetaWaylandRegion { struct wl_resource *resource; MtkRegion *region; }; static void wl_region_destroy (struct wl_client *client, struct wl_resource *resource) { wl_resource_destroy (resource); } static void wl_region_add (struct wl_client *client, struct wl_resource *resource, gint32 x, gint32 y, gint32 width, gint32 height) { MetaWaylandRegion *region = wl_resource_get_user_data (resource); MtkRectangle rectangle = { x, y, width, height }; mtk_region_union_rectangle (region->region, &rectangle); } static void wl_region_subtract (struct wl_client *client, struct wl_resource *resource, gint32 x, gint32 y, gint32 width, gint32 height) { MetaWaylandRegion *region = wl_resource_get_user_data (resource); MtkRectangle rectangle = { x, y, width, height }; mtk_region_subtract_rectangle (region->region, &rectangle); } static const struct wl_region_interface meta_wayland_wl_region_interface = { wl_region_destroy, wl_region_add, wl_region_subtract }; static void wl_region_destructor (struct wl_resource *resource) { MetaWaylandRegion *region = wl_resource_get_user_data (resource); g_clear_pointer (®ion->region, mtk_region_unref); g_free (region); } MetaWaylandRegion * meta_wayland_region_create (MetaWaylandCompositor *compositor, struct wl_client *client, struct wl_resource *compositor_resource, guint32 id) { MetaWaylandRegion *region = g_new0 (MetaWaylandRegion, 1); region->resource = wl_resource_create (client, &wl_region_interface, wl_resource_get_version (compositor_resource), id); wl_resource_set_implementation (region->resource, &meta_wayland_wl_region_interface, region, wl_region_destructor); region->region = mtk_region_create (); return region; } MtkRegion * meta_wayland_region_peek_region (MetaWaylandRegion *region) { return region->region; }