Create drawing contexts when creating windows
This commit is contained in:
parent
0083200cfa
commit
7dfe7a2cd3
3 changed files with 25 additions and 8 deletions
|
@ -118,8 +118,8 @@ int main(int argc, char **argv) {
|
||||||
/*
|
/*
|
||||||
* Set up the rendering surfaces
|
* Set up the rendering surfaces
|
||||||
*/
|
*/
|
||||||
fg = hexagram_window_create_fg_context(window);
|
fg = hexagram_window_get_fg_context(window);
|
||||||
bg = hexagram_window_create_bg_context(window);
|
bg = hexagram_window_get_bg_context(window);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Draw the background layer
|
* Draw the background layer
|
||||||
|
|
|
@ -30,8 +30,8 @@ int hexagram_window_refresh_bg(hexagram_window *window);
|
||||||
|
|
||||||
int hexagram_window_swap_buffer(hexagram_window *window);
|
int hexagram_window_swap_buffer(hexagram_window *window);
|
||||||
|
|
||||||
cairo_t *hexagram_window_create_bg_context(hexagram_window *window);
|
cairo_t *hexagram_window_get_bg_context(hexagram_window *window);
|
||||||
|
|
||||||
cairo_t *hexagram_window_create_fg_context(hexagram_window *window);
|
cairo_t *hexagram_window_get_fg_context(hexagram_window *window);
|
||||||
|
|
||||||
#endif /* _HEXAGRAM_WINDOW_H */
|
#endif /* _HEXAGRAM_WINDOW_H */
|
||||||
|
|
25
src/window.c
25
src/window.c
|
@ -28,6 +28,9 @@ struct _hexagram_window {
|
||||||
|
|
||||||
cairo_surface_t *surface_bg,
|
cairo_surface_t *surface_bg,
|
||||||
*surface_fg;
|
*surface_fg;
|
||||||
|
|
||||||
|
cairo_t *cairo_bg,
|
||||||
|
*cairo_fg;
|
||||||
};
|
};
|
||||||
|
|
||||||
hexagram_window *hexagram_window_new_x11(const char *display,
|
hexagram_window *hexagram_window_new_x11(const char *display,
|
||||||
|
@ -121,8 +124,22 @@ hexagram_window *hexagram_window_new_x11(const char *display,
|
||||||
width,
|
width,
|
||||||
height);
|
height);
|
||||||
|
|
||||||
|
if ((window->cairo_bg = cairo_create(window->surface_bg)) == NULL) {
|
||||||
|
goto error_cairo_create_bg;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ((window->cairo_fg = cairo_create(window->surface_fg)) == NULL) {
|
||||||
|
goto error_cairo_create_fg;
|
||||||
|
}
|
||||||
|
|
||||||
return window;
|
return window;
|
||||||
|
|
||||||
|
error_cairo_create_fg:
|
||||||
|
cairo_destroy(window->cairo_bg);
|
||||||
|
|
||||||
|
error_cairo_create_bg:
|
||||||
|
cairo_surface_destroy(window->surface_fg);
|
||||||
|
|
||||||
error_cairo_xlib_surface_create_fg:
|
error_cairo_xlib_surface_create_fg:
|
||||||
cairo_surface_destroy(window->surface_bg);
|
cairo_surface_destroy(window->surface_bg);
|
||||||
|
|
||||||
|
@ -204,10 +221,10 @@ int hexagram_window_swap_buffer(hexagram_window *window) {
|
||||||
return XdbeSwapBuffers(window->display, &window->swapinfo, 1) == 0? -1: 1;
|
return XdbeSwapBuffers(window->display, &window->swapinfo, 1) == 0? -1: 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
cairo_t *hexagram_window_create_bg_context(hexagram_window *window) {
|
cairo_t *hexagram_window_get_bg_context(hexagram_window *window) {
|
||||||
return cairo_create(window->surface_bg);
|
return window->cairo_bg;
|
||||||
}
|
}
|
||||||
|
|
||||||
cairo_t *hexagram_window_create_fg_context(hexagram_window *window) {
|
cairo_t *hexagram_window_get_fg_context(hexagram_window *window) {
|
||||||
return cairo_create(window->surface_fg);
|
return window->cairo_fg;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue