aboutsummaryrefslogtreecommitdiffstats
path: root/xcb_imagereading.c
diff options
context:
space:
mode:
authorEliteTK <tomasz.kramkowski@gmail.com>2014-09-06 18:33:33 +0100
committerEliteTK <tomasz.kramkowski@gmail.com>2014-09-06 18:33:33 +0100
commit0a23128c376540cd139dde19a1f09ae40617e670 (patch)
tree02b07925f74eb6fddf0b8e7a94fbaad4fc028422 /xcb_imagereading.c
parentb60441758f9832a67f60e51a4ee92d16b166b9fb (diff)
downloadc-stuff-0a23128c376540cd139dde19a1f09ae40617e670.tar.gz
c-stuff-0a23128c376540cd139dde19a1f09ae40617e670.tar.xz
c-stuff-0a23128c376540cd139dde19a1f09ae40617e670.zip
Latest 'stuff'
Diffstat (limited to 'xcb_imagereading.c')
-rw-r--r--xcb_imagereading.c86
1 files changed, 86 insertions, 0 deletions
diff --git a/xcb_imagereading.c b/xcb_imagereading.c
new file mode 100644
index 0000000..ca06054
--- /dev/null
+++ b/xcb_imagereading.c
@@ -0,0 +1,86 @@
+#include <stdlib.h>
+#include <stdio.h>
+#include <xcb/xcb.h>
+#include <xcb/xcb_image.h>
+#include <xif.h>
+
+#define WIDTH 640
+#define HEIGHT 480
+
+int main(int arg, char **argv)
+{
+ xcb_connection_t *connection = xcb_connect(NULL, NULL);
+
+ xcb_screen_t *screen = xcb_setup_roots_iterator(xcb_get_setup(connection)).data;
+
+ xcb_colormap_t colormap = screen->default_colormap;
+
+ xcb_drawable_t window = xcb_generate_id(connection);
+ uint32_t mask = XCB_CW_BACK_PIXEL | XCB_CW_EVENT_MASK;
+ uint32_t values[] = {screen->black_pixel, XCB_EVENT_MASK_EXPOSURE | XCB_EVENT_MASK_BUTTON_PRESS};
+ xcb_create_window(connection,
+ /*screen->root_depth,*/
+ 24,
+ window,
+ screen->root,
+ 0, 0,
+ WIDTH, HEIGHT,
+ 1,
+ XCB_WINDOW_CLASS_INPUT_OUTPUT,
+ screen->root_visual,
+ mask, values);
+
+ xcb_pixmap_t pixmap = xcb_generate_id(connection);
+ xcb_create_pixmap(connection,
+ 24,
+ pixmap,
+ window,
+ WIDTH, HEIGHT);
+ xcb_image_t *image;
+ if (!(image = xif_read("test.xif"))) {
+ fputs("Error: xif_read returned null.\n", stderr);
+ exit(1);
+ }
+
+ xcb_gcontext_t gc = xcb_generate_id(connection);
+ xcb_create_gc(connection,
+ gc,
+ pixmap,
+ 0, NULL);
+
+ xcb_image_put(connection, pixmap, gc, image, 0, 0, 0);
+
+ xcb_map_window(connection, window);
+ xcb_flush(connection);
+
+ xcb_generic_event_t *event;
+ while ((event = xcb_wait_for_event(connection))) {
+ switch (event->response_type & ~0x80) {
+ case XCB_EXPOSE: ;
+ xcb_expose_event_t *expose = (xcb_expose_event_t *)event;
+ xcb_copy_area(connection,
+ pixmap,
+ window,
+ gc,
+ expose->x, expose->y,
+ expose->x, expose->y,
+ expose->width, expose->height);
+ xcb_flush(connection);
+ break;
+ case XCB_BUTTON_PRESS:
+ goto end;
+ break;
+ default:
+ break;
+ }
+ free(event);
+ }
+end:
+
+ xcb_free_pixmap(connection, pixmap);
+ xcb_disconnect(connection);
+
+ xcb_image_destroy(image);
+
+ return 0;
+}