1/* 2 * Copyright © 2011 Kristian Høgsberg 3 * Copyright © 2011 Benjamin Franzke 4 * 5 * Permission is hereby granted, free of charge, to any person obtaining a 6 * copy of this software and associated documentation files (the "Software"), 7 * to deal in the Software without restriction, including without limitation 8 * the rights to use, copy, modify, merge, publish, distribute, sublicense, 9 * and/or sell copies of the Software, and to permit persons to whom the 10 * Software is furnished to do so, subject to the following conditions: 11 * 12 * The above copyright notice and this permission notice (including the next 13 * paragraph) shall be included in all copies or substantial portions of the 14 * Software. 15 * 16 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 17 * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 18 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 19 * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT 20 * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, 21 * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 22 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 23 * DEALINGS IN THE SOFTWARE. 24 * 25 * Authors: 26 * Kristian Høgsberg <krh@bitplanet.net> 27 * Benjamin Franzke <benjaminfranzke@googlemail.com> 28 */ 29 30#include <stdlib.h> 31 32#include <wayland-client.h> 33#include "wayland-egl.h" 34#include "wayland-egl-priv.h" 35 36WL_EGL_EXPORT void 37wl_egl_window_resize(struct wl_egl_window *egl_window, 38 int width, int height, 39 int dx, int dy) 40{ 41 if (width <= 0 || height <= 0) 42 return; 43 44 egl_window->width = width; 45 egl_window->height = height; 46 egl_window->dx = dx; 47 egl_window->dy = dy; 48 49 if (egl_window->resize_callback) 50 egl_window->resize_callback(egl_window, egl_window->private); 51} 52 53WL_EGL_EXPORT struct wl_egl_window * 54wl_egl_window_create(struct wl_surface *surface, 55 int width, int height) 56{ 57 struct wl_egl_window *egl_window; 58 59 if (width <= 0 || height <= 0) 60 return NULL; 61 62 egl_window = malloc(sizeof *egl_window); 63 if (!egl_window) 64 return NULL; 65 66 egl_window->surface = surface; 67 egl_window->private = NULL; 68 egl_window->resize_callback = NULL; 69 egl_window->destroy_window_callback = NULL; 70 wl_egl_window_resize(egl_window, width, height, 0, 0); 71 egl_window->attached_width = 0; 72 egl_window->attached_height = 0; 73 74 return egl_window; 75} 76 77WL_EGL_EXPORT void 78wl_egl_window_destroy(struct wl_egl_window *egl_window) 79{ 80 if (egl_window->destroy_window_callback) 81 egl_window->destroy_window_callback(egl_window->private); 82 free(egl_window); 83} 84 85WL_EGL_EXPORT void 86wl_egl_window_get_attached_size(struct wl_egl_window *egl_window, 87 int *width, int *height) 88{ 89 if (width) 90 *width = egl_window->attached_width; 91 if (height) 92 *height = egl_window->attached_height; 93} 94