summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRobert Bragg <robert@linux.intel.com>2011-06-13 10:29:05 +0100
committerRobert Bragg <robert@linux.intel.com>2011-06-14 17:09:55 +0100
commit44e4b13324d9ae7e462e071ebf28ae4d29cb4606 (patch)
tree983edb0fdf349f94b9e3e8951fa6849a8d651e55
parent3729bf27697308142dbadcb9eea1b1d59b28e65d (diff)
downloadcogl-44e4b13324d9ae7e462e071ebf28ae4d29cb4606.tar.gz
x11-foreign: Updates to forward X Events to Cogl
This update the x11-foreign test so that it checks for events on its X display and forwards them on to Cogl. It will now also quit if any key of button is pressed.
-rw-r--r--examples/x11-foreign.c37
1 files changed, 34 insertions, 3 deletions
diff --git a/examples/x11-foreign.c b/examples/x11-foreign.c
index 2bf97bc3..6f68adef 100644
--- a/examples/x11-foreign.c
+++ b/examples/x11-foreign.c
@@ -5,6 +5,15 @@
#include <X11/Xlib.h>
#include <X11/Xutil.h>
+#define X11_FOREIGN_EVENT_MASK \
+ (KeyPressMask | \
+ KeyReleaseMask | \
+ ButtonPressMask | \
+ ButtonReleaseMask | \
+ PointerMotionMask)
+
+CoglColor black;
+
static void
update_cogl_x11_event_mask (CoglOnscreen *onscreen,
guint32 event_mask,
@@ -14,7 +23,7 @@ update_cogl_x11_event_mask (CoglOnscreen *onscreen,
XSetWindowAttributes attrs;
guint32 xwin;
- attrs.event_mask = event_mask;
+ attrs.event_mask = event_mask | X11_FOREIGN_EVENT_MASK;
xwin = cogl_onscreen_x11_get_window_xid (onscreen);
XChangeWindowAttributes (xdpy,
@@ -41,6 +50,13 @@ main (int argc, char **argv)
XSetWindowAttributes xattr;
unsigned long mask;
Window xwin;
+ CoglVertexP2C4 triangle_vertices[] = {
+ {0, 0.7, 0xff, 0x00, 0x00, 0x80},
+ {-0.7, -0.7, 0x00, 0xff, 0x00, 0xff},
+ {0.7, -0.7, 0x00, 0x00, 0xff, 0xff}
+ };
+ CoglPrimitive *triangle;
+
/* Since we want to test external ownership of the X display,
* connect to X manually... */
@@ -145,10 +161,25 @@ main (int argc, char **argv)
cogl_push_framebuffer (fb);
- cogl_set_source_color4f (1, 0, 0, 1);
+ triangle = cogl_primitive_new_p2c4 (COGL_VERTICES_MODE_TRIANGLES,
+ 3, triangle_vertices);
for (;;)
{
- cogl_rectangle (-1, 1, 1, -1);
+ while (XPending (xdpy))
+ {
+ XEvent event;
+ XNextEvent (xdpy, &event);
+ switch (event.type)
+ {
+ case KeyRelease:
+ case ButtonRelease:
+ return 0;
+ }
+ /* FIXME: This should be replaced with some equivalent cogl_xlib_ typesafe API... */
+ cogl_renderer_handle_native_event (renderer, &event);
+ }
+ cogl_clear (&black, COGL_BUFFER_BIT_COLOR);
+ cogl_primitive_draw (triangle);
cogl_framebuffer_swap_buffers (fb);
}