rpi: add a Dispmanx renderer
[platform/upstream/weston.git] / shared / cairo-util.h
1 /*
2  * Copyright © 2008 Kristian Høgsberg
3  *
4  * Permission to use, copy, modify, distribute, and sell this software and its
5  * documentation for any purpose is hereby granted without fee, provided that
6  * the above copyright notice appear in all copies and that both that copyright
7  * notice and this permission notice appear in supporting documentation, and
8  * that the name of the copyright holders not be used in advertising or
9  * publicity pertaining to distribution of the software without specific,
10  * written prior permission.  The copyright holders make no representations
11  * about the suitability of this software for any purpose.  It is provided "as
12  * is" without express or implied warranty.
13  *
14  * THE COPYRIGHT HOLDERS DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
15  * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
16  * EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE FOR ANY SPECIAL, INDIRECT OR
17  * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
18  * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
19  * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
20  * OF THIS SOFTWARE.
21  */
22
23 #ifndef _CAIRO_UTIL_H
24 #define _CAIRO_UTIL_H
25
26 #include <cairo.h>
27
28 void
29 surface_flush_device(cairo_surface_t *surface);
30
31 void
32 blur_surface(cairo_surface_t *surface, int margin);
33
34 void
35 tile_mask(cairo_t *cr, cairo_surface_t *surface,
36           int x, int y, int width, int height, int margin, int top_margin);
37
38 void
39 tile_source(cairo_t *cr, cairo_surface_t *surface,
40             int x, int y, int width, int height, int margin, int top_margin);
41
42 void
43 rounded_rect(cairo_t *cr, int x0, int y0, int x1, int y1, int radius);
44
45 cairo_surface_t *
46 load_cairo_surface(const char *filename);
47
48 struct theme {
49         cairo_surface_t *active_frame;
50         cairo_surface_t *inactive_frame;
51         cairo_surface_t *shadow;
52         int frame_radius;
53         int margin;
54         int width;
55         int titlebar_height;
56 };
57
58 struct theme *
59 theme_create(void);
60 void
61 theme_destroy(struct theme *t);
62
63 enum {
64         THEME_FRAME_ACTIVE = 1,
65         THEME_FRAME_MAXIMIZED,
66 };
67
68 void
69 theme_render_frame(struct theme *t, 
70                    cairo_t *cr, int width, int height,
71                    const char *title, uint32_t flags);
72
73 enum theme_location {
74         THEME_LOCATION_INTERIOR = 0,
75         THEME_LOCATION_RESIZING_TOP = 1,
76         THEME_LOCATION_RESIZING_BOTTOM = 2,
77         THEME_LOCATION_RESIZING_LEFT = 4,
78         THEME_LOCATION_RESIZING_TOP_LEFT = 5,
79         THEME_LOCATION_RESIZING_BOTTOM_LEFT = 6,
80         THEME_LOCATION_RESIZING_RIGHT = 8,
81         THEME_LOCATION_RESIZING_TOP_RIGHT = 9,
82         THEME_LOCATION_RESIZING_BOTTOM_RIGHT = 10,
83         THEME_LOCATION_RESIZING_MASK = 15,
84         THEME_LOCATION_EXTERIOR = 16,
85         THEME_LOCATION_TITLEBAR = 17,
86         THEME_LOCATION_CLIENT_AREA = 18,
87 };
88
89 enum theme_location
90 theme_get_location(struct theme *t, int x, int y, int width, int height, int flags);
91
92 #endif