diff options
author | Peter Hutterer <peter.hutterer@who-t.net> | 2011-11-02 15:46:45 +1000 |
---|---|---|
committer | Peter Hutterer <peter.hutterer@who-t.net> | 2011-11-02 16:12:14 +1000 |
commit | b270b0be46c6577824325cdf6a35e8ea01129c4f (patch) | |
tree | d0fd93b3ec61fa03d48cb5df29657b87cf81db6f | |
parent | 7bd59b13c193b538dc99ffa8dad05c7ffad2d217 (diff) |
Hook up a basic cairo surface to the pixmap.
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
-rw-r--r-- | multitouch.c | 32 |
1 files changed, 32 insertions, 0 deletions
diff --git a/multitouch.c b/multitouch.c index 981b81d..ec95eac 100644 --- a/multitouch.c +++ b/multitouch.c @@ -9,6 +9,9 @@ #include <signal.h> #include <poll.h> +#include <cairo.h> +#include <cairo-xlib.h> + #include <X11/Xlib.h> #include <X11/extensions/XInput.h> #include <X11/extensions/XInput2.h> @@ -25,6 +28,8 @@ struct multitouch { int width; int height; + + cairo_t *cr; }; static int error(const char *fmt, ...) @@ -147,6 +152,29 @@ static void print_event(struct multitouch *mt, XIDeviceEvent* event) msg("\ttouchid: %d\n", event->detail); } +static int init_cairo(struct multitouch *mt) +{ + cairo_surface_t *surface; + cairo_t *cr; + + surface = cairo_xlib_surface_create_for_bitmap(mt->dpy, mt->pixmap, + mt->screen, mt->width, mt->height); + if (!surface) + return error("Failed to create cairo surface\n"); + + cr = cairo_create(surface); + if (!cr) + return error("Failed to create cairo context\n"); + + cairo_set_line_width(cr, 1); + cairo_set_source_rgb(cr, 0, 0, 0); + cairo_rectangle(cr, 0, 0, 1, 1); + cairo_fill(cr); + + mt->cr = cr; + + return EXIT_SUCCESS; +} static int main_loop(struct multitouch *mt) { @@ -189,6 +217,10 @@ int main(int argc, char **argv) if (rc != EXIT_SUCCESS) return rc; + rc = init_cairo(&mt); + if (rc != EXIT_SUCCESS) + return rc; + signal(SIGINT, sighandler); main_loop(&mt); |