1 /* Cairo - a vector graphics library with display and print output 2 * 3 * Copyright © 2009 Intel Corporation 4 * 5 * This library is free software; you can redistribute it and/or 6 * modify it either under the terms of the GNU Lesser General Public 7 * License version 2.1 as published by the Free Software Foundation 8 * (the "LGPL") or, at your option, under the terms of the Mozilla 9 * Public License Version 1.1 (the "MPL"). If you do not alter this 10 * notice, a recipient may use your version of this file under either 11 * the MPL or the LGPL. 12 * 13 * You should have received a copy of the LGPL along with this library 14 * in the file COPYING-LGPL-2.1; if not, write to the Free Software 15 * Foundation, Inc., 51 Franklin Street, Suite 500, Boston, MA 02110-1335, USA 16 * You should have received a copy of the MPL along with this library 17 * in the file COPYING-MPL-1.1 18 * 19 * The contents of this file are subject to the Mozilla Public License 20 * Version 1.1 (the "License"); you may not use this file except in 21 * compliance with the License. You may obtain a copy of the License at 22 * http://www.mozilla.org/MPL/ 23 * 24 * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY 25 * OF ANY KIND, either express or implied. See the LGPL or the MPL for 26 * the specific language governing rights and limitations. 27 * 28 * The Original Code is the cairo graphics library. 29 * 30 * The Initial Developer of the Original Code is Intel Corporation. 31 * 32 * Contributors(s): 33 * Chris Wilson <chris@chris-wilson.co.uk> 34 */ 35 36 #ifndef _CAIRO_DEVICE_PRIVATE_H_ 37 #define _CAIRO_DEVICE_PRIVATE_H_ 38 39 #include "cairo-compiler-private.h" 40 #include "cairo-mutex-private.h" 41 #include "cairo-reference-count-private.h" 42 #include "cairo-types-private.h" 43 44 struct _cairo_device { 45 cairo_reference_count_t ref_count; 46 cairo_status_t status; 47 cairo_user_data_array_t user_data; 48 49 const cairo_device_backend_t *backend; 50 51 cairo_recursive_mutex_t mutex; 52 unsigned mutex_depth; 53 54 cairo_bool_t finished; 55 }; 56 57 struct _cairo_device_backend { 58 cairo_device_type_t type; 59 60 void (*lock) (void *device); 61 void (*unlock) (void *device); 62 63 cairo_warn cairo_status_t (*flush) (void *device); 64 void (*finish) (void *device); 65 void (*destroy) (void *device); 66 }; 67 68 cairo_private cairo_device_t * 69 _cairo_device_create_in_error (cairo_status_t status); 70 71 cairo_private void 72 _cairo_device_init (cairo_device_t *device, 73 const cairo_device_backend_t *backend); 74 75 cairo_private cairo_status_t 76 _cairo_device_set_error (cairo_device_t *device, 77 cairo_status_t error); 78 79 slim_hidden_proto_no_warn (cairo_device_reference); 80 slim_hidden_proto (cairo_device_acquire); 81 slim_hidden_proto (cairo_device_release); 82 slim_hidden_proto (cairo_device_flush); 83 slim_hidden_proto (cairo_device_finish); 84 slim_hidden_proto (cairo_device_destroy); 85 86 #endif /* _CAIRO_DEVICE_PRIVATE_H_ */ 87