Rename client, prepare Makefile for more clients.
authorKristian Høgsberg <krh@redhat.com>
Sun, 2 Nov 2008 15:55:25 +0000 (10:55 -0500)
committerKristian Høgsberg <krh@redhat.com>
Thu, 6 Nov 2008 15:51:59 +0000 (10:51 -0500)
Makefile
client.c [deleted file]
flower.c [new file with mode: 0644]

index 72e3f4dca778a07a0fa96966c020ac14bcb694a6..42d67652d79c2b40c4a357a9a70221fd0a7dfda9 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -1,7 +1,9 @@
 CFLAGS +=  -Wall -g $(shell pkg-config --cflags libffi libdrm)
 LDLIBS += $(shell pkg-config --libs libffi libdrm)
 
-all : wayland client
+clients = flower
+
+all : wayland $(clients)
 
 wayland_objs = wayland.o event-loop.o connection.o hash.o input.o egl-compositor.o
 wayland : CFLAGS += -I../eagle
@@ -15,12 +17,19 @@ libwayland_objs = wayland-client.o connection.o
 libwayland.so : $(libwayland_objs)
        gcc -o $@ $(libwayland_objs) -shared
 
-client_objs = client.o
-client : CFLAGS += $(shell pkg-config --cflags cairo)
-client : LDLIBS += $(shell pkg-config --libs cairo)
+flower_objs = flower.o
+
+$(clients) : CFLAGS += $(shell pkg-config --cflags cairo)
+$(clients) : LDLIBS += $(shell pkg-config --libs cairo)
+
+define client_template
+$(1): $$($(1)_objs) libwayland.so
+endef
+
+$(foreach c,$(clients),$(eval $(call client_template,$(c))))
 
-client : $(client_objs) libwayland.so
-       gcc -o $@ -L. -lwayland $(LDLIBS) $(client_objs)
+$(clients) :
+       gcc -o $@ -L. -lwayland $(LDLIBS) $^
 
 clean :
-       rm -f client wayland *.o libwayland.so
\ No newline at end of file
+       rm -f $(clients) wayland *.o libwayland.so
\ No newline at end of file
diff --git a/client.c b/client.c
deleted file mode 100644 (file)
index 4654de0..0000000
--- a/client.c
+++ /dev/null
@@ -1,201 +0,0 @@
-#include <stdint.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <i915_drm.h>
-#include <sys/ioctl.h>
-#include <sys/poll.h>
-#include <fcntl.h>
-#include <unistd.h>
-#include <math.h>
-#include <time.h>
-#include <cairo.h>
-
-#include "wayland-client.h"
-
-static const char gem_device[] = "/dev/dri/card0";
-static const char socket_name[] = "\0wayland";
-
-static uint32_t name_cairo_surface(int fd, cairo_surface_t *surface)
-{
-       struct drm_i915_gem_create create;
-       struct drm_gem_flink flink;
-       struct drm_i915_gem_pwrite pwrite;
-       int32_t width, height, stride;
-
-       width = cairo_image_surface_get_width(surface);
-       height = cairo_image_surface_get_height(surface);
-       stride = cairo_image_surface_get_stride(surface);
-
-       memset(&create, 0, sizeof(create));
-       create.size = height * stride;
-
-       if (ioctl(fd, DRM_IOCTL_I915_GEM_CREATE, &create) != 0) {
-               fprintf(stderr, "gem create failed: %m\n");
-               return 0;
-       }
-
-       pwrite.handle = create.handle;
-       pwrite.offset = 0;
-       pwrite.size = height * stride;
-       pwrite.data_ptr = (uint64_t) (uintptr_t)
-               cairo_image_surface_get_data(surface);
-       if (ioctl(fd, DRM_IOCTL_I915_GEM_PWRITE, &pwrite) < 0) {
-               fprintf(stderr, "gem pwrite failed: %m\n");
-               return 0;
-       }
-
-       flink.handle = create.handle;
-       if (ioctl(fd, DRM_IOCTL_GEM_FLINK, &flink) != 0) {
-               fprintf(stderr, "gem flink failed: %m\n");
-               return 0;
-       }
-
-#if 0
-       /* We need to hold on to the handle until the server has received
-        * the attach request... we probably need a confirmation event.
-        * I guess the breadcrumb idea will suffice. */
-       struct drm_gem_close close;
-       close.handle = create.handle;
-       if (ioctl(fd, DRM_IOCTL_GEM_CLOSE, &close) < 0) {
-               fprintf(stderr, "gem close failed: %m\n");
-               return 0;
-       }
-#endif
-
-       return flink.name;
-}
-
-static void
-set_random_color(cairo_t *cr)
-{
-       cairo_set_source_rgba(cr,
-                             0.5 + (random() % 50) / 49.0,
-                             0.5 + (random() % 50) / 49.0,
-                             0.5 + (random() % 50) / 49.0,
-                             0.5 + (random() % 100) / 99.0);
-}
-
-
-static void *
-draw_stuff(int width, int height)
-{
-       const int petal_count = 3 + random() % 5;
-       const double r1 = 60 + random() % 35;
-       const double r2 = 20 + random() % 40;
-       const double u = (10 + random() % 90) / 100.0;
-       const double v = (random() % 90) / 100.0;
-
-       cairo_surface_t *surface;
-       cairo_t *cr;
-       int i;
-       double t, dt = 2 * M_PI / (petal_count * 2);
-       double x1, y1, x2, y2, x3, y3;
-
-       surface = cairo_image_surface_create(CAIRO_FORMAT_RGB24,
-                                            width, height);
-
-       cr = cairo_create(surface);
-       cairo_translate(cr, width / 2, height / 2);
-       cairo_move_to(cr, cos(t) * r1, sin(t) * r1);
-       for (t = 0, i = 0; i < petal_count; i++, t += dt * 2) {
-               x1 = cos(t) * r1;
-               y1 = sin(t) * r1;
-               x2 = cos(t + dt) * r2;
-               y2 = sin(t + dt) * r2;
-               x3 = cos(t + 2 * dt) * r1;
-               y3 = sin(t + 2 * dt) * r1;
-
-               cairo_curve_to(cr,
-                              x1 - y1 * u, y1 + x1 * u,
-                              x2 + y2 * v, y2 - x2 * v,
-                              x2, y2);                        
-
-               cairo_curve_to(cr,
-                              x2 - y2 * v, y2 + x2 * v,
-                              x3 + y3 * u, y3 - x3 * u,
-                              x3, y3);
-       }
-
-       cairo_close_path(cr);
-       set_random_color(cr);
-       cairo_fill_preserve(cr);
-       set_random_color(cr);
-       cairo_stroke(cr);
-
-       cairo_destroy(cr);
-
-       return surface;
-}
-
-static int
-connection_update(struct wl_connection *connection,
-                 uint32_t mask, void *data)
-{
-       struct pollfd *p = data;
-
-       p->events = 0;
-       if (mask & WL_CONNECTION_READABLE)
-               p->events |= POLLIN;
-       if (mask & WL_CONNECTION_WRITABLE)
-               p->events |= POLLOUT;
-
-       return 0;
-}
-
-int main(int argc, char *argv[])
-{
-       struct wl_display *display;
-       struct wl_surface *surface;
-       const int x = 200, y = 200, width = 200, height = 200;
-       int fd, i, ret;
-       uint32_t name, mask;
-       cairo_surface_t *s;
-       struct pollfd p[1];
-
-       srandom(time(NULL));
-
-       fd = open(gem_device, O_RDWR);
-       if (fd < 0) {
-               fprintf(stderr, "drm open failed: %m\n");
-               return -1;
-       }
-
-       display = wl_display_create(socket_name,
-                                   connection_update, &p[0]);
-       if (display == NULL) {
-               fprintf(stderr, "failed to create display: %m\n");
-               return -1;
-       }
-       p[0].fd = wl_display_get_fd(display);
-
-       surface = wl_display_create_surface(display);
-
-       s = draw_stuff(width, height);
-       name = name_cairo_surface(fd, s);
-
-       wl_surface_attach(surface, name, width, height,
-                         cairo_image_surface_get_stride(s));
-
-       i = 0;
-       while (ret = poll(p, 1, 20), ret >= 0) {
-               if (ret == 0) {
-                       wl_surface_map(surface, 
-                                      x + cos(i / 30.0) * 200,
-                                      y + sin(i / 31.0) * 200,
-                                      width, height);
-                       i++;
-                       continue;
-               }
-
-               mask = 0;
-               if (p[0].revents & POLLIN)
-                       mask |= WL_CONNECTION_READABLE;
-               if (p[0].revents & POLLOUT)
-                       mask |= WL_CONNECTION_WRITABLE;
-               if (mask)
-                       wl_display_iterate(display, mask);
-       }
-
-       return 0;
-}
diff --git a/flower.c b/flower.c
new file mode 100644 (file)
index 0000000..4654de0
--- /dev/null
+++ b/flower.c
@@ -0,0 +1,201 @@
+#include <stdint.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <i915_drm.h>
+#include <sys/ioctl.h>
+#include <sys/poll.h>
+#include <fcntl.h>
+#include <unistd.h>
+#include <math.h>
+#include <time.h>
+#include <cairo.h>
+
+#include "wayland-client.h"
+
+static const char gem_device[] = "/dev/dri/card0";
+static const char socket_name[] = "\0wayland";
+
+static uint32_t name_cairo_surface(int fd, cairo_surface_t *surface)
+{
+       struct drm_i915_gem_create create;
+       struct drm_gem_flink flink;
+       struct drm_i915_gem_pwrite pwrite;
+       int32_t width, height, stride;
+
+       width = cairo_image_surface_get_width(surface);
+       height = cairo_image_surface_get_height(surface);
+       stride = cairo_image_surface_get_stride(surface);
+
+       memset(&create, 0, sizeof(create));
+       create.size = height * stride;
+
+       if (ioctl(fd, DRM_IOCTL_I915_GEM_CREATE, &create) != 0) {
+               fprintf(stderr, "gem create failed: %m\n");
+               return 0;
+       }
+
+       pwrite.handle = create.handle;
+       pwrite.offset = 0;
+       pwrite.size = height * stride;
+       pwrite.data_ptr = (uint64_t) (uintptr_t)
+               cairo_image_surface_get_data(surface);
+       if (ioctl(fd, DRM_IOCTL_I915_GEM_PWRITE, &pwrite) < 0) {
+               fprintf(stderr, "gem pwrite failed: %m\n");
+               return 0;
+       }
+
+       flink.handle = create.handle;
+       if (ioctl(fd, DRM_IOCTL_GEM_FLINK, &flink) != 0) {
+               fprintf(stderr, "gem flink failed: %m\n");
+               return 0;
+       }
+
+#if 0
+       /* We need to hold on to the handle until the server has received
+        * the attach request... we probably need a confirmation event.
+        * I guess the breadcrumb idea will suffice. */
+       struct drm_gem_close close;
+       close.handle = create.handle;
+       if (ioctl(fd, DRM_IOCTL_GEM_CLOSE, &close) < 0) {
+               fprintf(stderr, "gem close failed: %m\n");
+               return 0;
+       }
+#endif
+
+       return flink.name;
+}
+
+static void
+set_random_color(cairo_t *cr)
+{
+       cairo_set_source_rgba(cr,
+                             0.5 + (random() % 50) / 49.0,
+                             0.5 + (random() % 50) / 49.0,
+                             0.5 + (random() % 50) / 49.0,
+                             0.5 + (random() % 100) / 99.0);
+}
+
+
+static void *
+draw_stuff(int width, int height)
+{
+       const int petal_count = 3 + random() % 5;
+       const double r1 = 60 + random() % 35;
+       const double r2 = 20 + random() % 40;
+       const double u = (10 + random() % 90) / 100.0;
+       const double v = (random() % 90) / 100.0;
+
+       cairo_surface_t *surface;
+       cairo_t *cr;
+       int i;
+       double t, dt = 2 * M_PI / (petal_count * 2);
+       double x1, y1, x2, y2, x3, y3;
+
+       surface = cairo_image_surface_create(CAIRO_FORMAT_RGB24,
+                                            width, height);
+
+       cr = cairo_create(surface);
+       cairo_translate(cr, width / 2, height / 2);
+       cairo_move_to(cr, cos(t) * r1, sin(t) * r1);
+       for (t = 0, i = 0; i < petal_count; i++, t += dt * 2) {
+               x1 = cos(t) * r1;
+               y1 = sin(t) * r1;
+               x2 = cos(t + dt) * r2;
+               y2 = sin(t + dt) * r2;
+               x3 = cos(t + 2 * dt) * r1;
+               y3 = sin(t + 2 * dt) * r1;
+
+               cairo_curve_to(cr,
+                              x1 - y1 * u, y1 + x1 * u,
+                              x2 + y2 * v, y2 - x2 * v,
+                              x2, y2);                        
+
+               cairo_curve_to(cr,
+                              x2 - y2 * v, y2 + x2 * v,
+                              x3 + y3 * u, y3 - x3 * u,
+                              x3, y3);
+       }
+
+       cairo_close_path(cr);
+       set_random_color(cr);
+       cairo_fill_preserve(cr);
+       set_random_color(cr);
+       cairo_stroke(cr);
+
+       cairo_destroy(cr);
+
+       return surface;
+}
+
+static int
+connection_update(struct wl_connection *connection,
+                 uint32_t mask, void *data)
+{
+       struct pollfd *p = data;
+
+       p->events = 0;
+       if (mask & WL_CONNECTION_READABLE)
+               p->events |= POLLIN;
+       if (mask & WL_CONNECTION_WRITABLE)
+               p->events |= POLLOUT;
+
+       return 0;
+}
+
+int main(int argc, char *argv[])
+{
+       struct wl_display *display;
+       struct wl_surface *surface;
+       const int x = 200, y = 200, width = 200, height = 200;
+       int fd, i, ret;
+       uint32_t name, mask;
+       cairo_surface_t *s;
+       struct pollfd p[1];
+
+       srandom(time(NULL));
+
+       fd = open(gem_device, O_RDWR);
+       if (fd < 0) {
+               fprintf(stderr, "drm open failed: %m\n");
+               return -1;
+       }
+
+       display = wl_display_create(socket_name,
+                                   connection_update, &p[0]);
+       if (display == NULL) {
+               fprintf(stderr, "failed to create display: %m\n");
+               return -1;
+       }
+       p[0].fd = wl_display_get_fd(display);
+
+       surface = wl_display_create_surface(display);
+
+       s = draw_stuff(width, height);
+       name = name_cairo_surface(fd, s);
+
+       wl_surface_attach(surface, name, width, height,
+                         cairo_image_surface_get_stride(s));
+
+       i = 0;
+       while (ret = poll(p, 1, 20), ret >= 0) {
+               if (ret == 0) {
+                       wl_surface_map(surface, 
+                                      x + cos(i / 30.0) * 200,
+                                      y + sin(i / 31.0) * 200,
+                                      width, height);
+                       i++;
+                       continue;
+               }
+
+               mask = 0;
+               if (p[0].revents & POLLIN)
+                       mask |= WL_CONNECTION_READABLE;
+               if (p[0].revents & POLLOUT)
+                       mask |= WL_CONNECTION_WRITABLE;
+               if (mask)
+                       wl_display_iterate(display, mask);
+       }
+
+       return 0;
+}