call a painting function
authorDana Jansens <danakj@orodu.net>
Tue, 4 Mar 2008 23:22:18 +0000 (18:22 -0500)
committerDana Jansens <danakj@orodu.net>
Tue, 4 Mar 2008 23:22:18 +0000 (18:22 -0500)
dcompmgr.c
render.c [new file with mode: 0644]
render.h [new file with mode: 0644]
screen.c
screen.h

index f72bf57..c03393c 100644 (file)
@@ -111,6 +111,18 @@ event(d_display_t *dpy)
 }
 
 static void
+paint(d_display_t *dpy)
+{
+    int i;
+
+    for (i = 0; i < dpy->nscreens; ++i) {
+        d_screen_t *sc = display_screen_n(dpy, i);
+
+        sc->paint(sc);
+    }
+}
+
+static void
 run(d_display_t *dpy)
 {
     gboolean quit;
@@ -121,6 +133,8 @@ run(d_display_t *dpy)
     FD_SET(dpy->fd, &fds);
     max = MAX(max, dpy->fd);
 
+    paint(dpy);
+
     quit = FALSE;
     while (!quit) {
         int r;
@@ -134,6 +148,7 @@ run(d_display_t *dpy)
             printf("select data\n");
             /*if (FD_ISSET(dpy->fd, &fds))*/ {
                 event(dpy);
+                paint(dpy);
             }
         }
 
diff --git a/render.c b/render.c
new file mode 100644 (file)
index 0000000..9d1ba92
--- /dev/null
+++ b/render.c
@@ -0,0 +1,9 @@
+#include "render.h"
+#include <stdio.h>
+#include <xcb/render.h>
+
+void render_paint_screen(struct d_screen *sc)
+{
+    (void)sc;
+    printf("painting\n");
+}
diff --git a/render.h b/render.h
new file mode 100644 (file)
index 0000000..128b8c0
--- /dev/null
+++ b/render.h
@@ -0,0 +1,8 @@
+#ifndef gc__render_h
+#define gc__render_h
+
+struct d_screen;
+
+void render_paint_screen(struct d_screen *sc);
+
+#endif
index 0c74e72..e238bc7 100644 (file)
--- a/screen.c
+++ b/screen.c
@@ -2,6 +2,7 @@
 #include "display.h"
 #include "list.h"
 #include "window.h"
+#include "render.h"
 #include "gettext.h"
 #include <string.h>
 #include <stdlib.h>
@@ -129,6 +130,9 @@ screen_init(d_screen_t *sc)
     xcb_change_window_attributes(sc->dpy->conn, sc->super.root,
                                  XCB_CW_EVENT_MASK, &mask);
 
+    /* use the render backend */
+    sc->paint = render_paint_screen;
+
     sc->winhash = g_hash_table_new((GHashFunc)xcb_window_hash,
                                    (GCompareFunc)xcb_window_compare);
     sc->stacking = list_new();
index 5a8ef8d..bfa93ed 100644 (file)
--- a/screen.h
+++ b/screen.h
@@ -21,6 +21,8 @@ typedef struct d_screen {
 
     GHashTable       *winhash;
     struct d_list    *stacking;
+
+    void (*paint)(struct d_screen *sc);
 } d_screen_t;
 
 /*! Tries to register on the screen given by @sc.  If it succeeds, it fills