diff options
author | Jesse Luehrs <doy@tozt.net> | 2014-04-08 22:04:26 -0400 |
---|---|---|
committer | Jesse Luehrs <doy@tozt.net> | 2014-04-08 22:04:26 -0400 |
commit | bae22b3118742113a53d3496ee84ad577481077c (patch) | |
tree | cd4046bf2215f106e5041ef93e03360670152a96 | |
parent | 48da503fbfe7c376842dc9b05c69875f5b6092a6 (diff) | |
download | runes-bae22b3118742113a53d3496ee84ad577481077c.tar.gz runes-bae22b3118742113a53d3496ee84ad577481077c.zip |
a bunch more refactoring
-rw-r--r-- | Makefile | 2 | ||||
-rw-r--r-- | events.c | 9 | ||||
-rw-r--r-- | events.h | 3 | ||||
-rw-r--r-- | runes.c | 13 | ||||
-rw-r--r-- | runes.h | 11 | ||||
-rw-r--r-- | term.c | 21 | ||||
-rw-r--r-- | term.h | 9 | ||||
-rw-r--r-- | window-xlib.c (renamed from xlib.c) | 68 | ||||
-rw-r--r-- | window-xlib.h (renamed from xlib.h) | 16 |
9 files changed, 70 insertions, 82 deletions
@@ -1,5 +1,5 @@ OUT = runes -OBJ = runes.o display.o xlib.o term.o events.o +OBJ = runes.o display.o term.o events.o window-xlib.o LIBS = cairo cairo-xlib libuv CFLAGS ?= -g -Wall -Wextra -Werror LDFLAGS ?= -g -Wall -Wextra -Werror @@ -1,14 +1,5 @@ #include "runes.h" -uv_loop_t *runes_loop_create(RunesTerm *t) -{ - uv_loop_t *loop; - - loop = uv_default_loop(); - runes_loop_init(t, loop); - return loop; -} - void runes_handle_keyboard_event(RunesTerm *t, char *buf, size_t len) { runes_display_glyph(t, buf, len); @@ -1,12 +1,11 @@ #ifndef _RUNES_EVENTS_H #define _RUNES_EVENTS_H -struct loop_data { +struct runes_loop_data { uv_work_t req; RunesTerm *t; }; -uv_loop_t *runes_loop_create(RunesTerm *t); void runes_handle_keyboard_event(RunesTerm *t, char *buf, size_t len); void runes_handle_close_window(RunesTerm *t); @@ -5,20 +5,17 @@ int main (int argc, char *argv[]) { - RunesTerm *t; - - UNUSED(argc); - UNUSED(argv); + RunesTerm t; setlocale(LC_ALL, ""); - t = runes_term_create(argc, argv); + runes_term_init(&t, argc, argv); - runes_display_init(t); + runes_display_init(&t); - uv_run(t->loop, UV_RUN_DEFAULT); + uv_run(t.loop, UV_RUN_DEFAULT); - runes_term_destroy(t); + runes_term_cleanup(&t); return 0; } @@ -6,15 +6,18 @@ struct runes_term; struct runes_window; +struct runes_loop_data; typedef struct runes_term RunesTerm; -typedef struct runes_window RunesWindow; +typedef struct runes_window RunesWindowBackend; +typedef struct runes_loop_data RunesLoopData; -#include "term.h" -#include "display.h" #include "events.h" -#include "xlib.h" +#include "window-xlib.h" + +#include "term.h" +#include "display.h" #define UNUSED(x) ((void)x) @@ -2,25 +2,18 @@ #include "runes.h" -RunesTerm *runes_term_create(int argc, char *argv[]) +void runes_term_init(RunesTerm *t, int argc, char *argv[]) { - RunesTerm *t; + t->loop = uv_default_loop(); - t = malloc(sizeof(RunesTerm)); + runes_window_backend_init(t, argc, argv); + t->cr = cairo_create(runes_window_backend_surface_create(t)); - t->w = runes_window_create(argc, argv); - t->surface = runes_surface_create(t); - t->cr = cairo_create(t->surface); - t->loop = runes_loop_create(t); - - return t; + runes_window_backend_loop_init(t, t->loop); } -void runes_term_destroy(RunesTerm *t) +void runes_term_cleanup(RunesTerm *t) { cairo_destroy(t->cr); - cairo_surface_destroy(t->surface); - runes_window_destroy(t->w); - - free(t); + runes_window_backend_cleanup(t); } @@ -2,16 +2,13 @@ #define _RUNES_TERM_H struct runes_term { - RunesWindow *w; - /* RunesBuffer *buf; */ + RunesWindowBackend w; - cairo_surface_t *surface; cairo_t *cr; - uv_loop_t *loop; }; -RunesTerm *runes_term_create(int argc, char *argv[]); -void runes_term_destroy(RunesTerm *t); +void runes_term_init(RunesTerm *t, int argc, char *argv[]); +void runes_term_cleanup(RunesTerm *t); #endif @@ -17,7 +17,7 @@ static char *atom_names[RUNES_NUM_ATOMS] = { "UTF8_STRING" }; -static void runes_init_wm_properties(RunesWindow *w, int argc, char *argv[]) +static void runes_init_wm_properties(RunesWindowBackend *w, int argc, char *argv[]) { pid_t pid; XClassHint class_hints = { "runes", "runes" }; @@ -43,13 +43,13 @@ static void runes_init_wm_properties(RunesWindow *w, int argc, char *argv[]) XChangeProperty(w->dpy, w->w, w->atoms[RUNES_ATOM_NET_WM_NAME], w->atoms[RUNES_ATOM_UTF8_STRING], 8, PropModeReplace, (unsigned char *)"runes", 5); } -RunesWindow *runes_window_create(int argc, char *argv[]) +void runes_window_backend_init(RunesTerm *t, int argc, char *argv[]) { - RunesWindow *w; + RunesWindowBackend *w; unsigned long white; XIM im; - w = malloc(sizeof(RunesWindow)); + w = &t->w; w->dpy = XOpenDisplay(NULL); white = WhitePixel(w->dpy, DefaultScreen(w->dpy)); @@ -87,39 +87,41 @@ RunesWindow *runes_window_create(int argc, char *argv[]) } runes_init_wm_properties(w, argc, argv); - - return w; } -cairo_surface_t *runes_surface_create(RunesTerm *t) +cairo_surface_t *runes_window_backend_surface_create(RunesTerm *t) { + RunesWindowBackend *w; Visual *vis; XWindowAttributes attrs; - XGetWindowAttributes(t->w->dpy, t->w->w, &attrs); - vis = DefaultVisual(t->w->dpy, DefaultScreen(t->w->dpy)); - return cairo_xlib_surface_create(t->w->dpy, t->w->w, vis, attrs.width, attrs.height); + w = &t->w; + XGetWindowAttributes(w->dpy, w->w, &attrs); + vis = DefaultVisual(w->dpy, DefaultScreen(w->dpy)); + return cairo_xlib_surface_create(w->dpy, w->w, vis, attrs.width, attrs.height); } static void runes_get_next_event(uv_work_t *req) { - struct xlib_loop_data *data; + RunesXlibLoopData *data; - data = (struct xlib_loop_data *)req->data; - XNextEvent(data->data.t->w->dpy, &data->e); + data = (RunesXlibLoopData *)req->data; + XNextEvent(data->data.t->w.dpy, &data->e); } static void runes_process_event(uv_work_t *req, int status) { - struct xlib_loop_data *data; + RunesXlibLoopData *data; XEvent *e; RunesTerm *t; + RunesWindowBackend *w; UNUSED(status); - data = ((struct xlib_loop_data *)req->data); + data = ((RunesXlibLoopData *)req->data); e = &data->e; t = data->data.t; + w = &t->w; if (!XFilterEvent(e, None)) { switch (e->type) { @@ -133,7 +135,7 @@ static void runes_process_event(uv_work_t *req, int status) buf = malloc(len); for (;;) { - chars = Xutf8LookupString(t->w->ic, &e->xkey, buf, len - 1, &sym, &s); + chars = Xutf8LookupString(w->ic, &e->xkey, buf, len - 1, &sym, &s); if (s == XBufferOverflow) { len = chars + 1; buf = realloc(buf, len); @@ -148,13 +150,13 @@ static void runes_process_event(uv_work_t *req, int status) } case ClientMessage: { Atom a = e->xclient.data.l[0]; - if (a == t->w->atoms[RUNES_ATOM_WM_DELETE_WINDOW]) { + if (a == w->atoms[RUNES_ATOM_WM_DELETE_WINDOW]) { runes_handle_close_window(t); } - else if (a == t->w->atoms[RUNES_ATOM_NET_WM_PING]) { - e->xclient.window = DefaultRootWindow(t->w->dpy); + else if (a == w->atoms[RUNES_ATOM_NET_WM_PING]) { + e->xclient.window = DefaultRootWindow(w->dpy); XSendEvent( - t->w->dpy, e->xclient.window, False, + w->dpy, e->xclient.window, False, SubstructureNotifyMask | SubstructureRedirectMask, e ); @@ -169,34 +171,40 @@ static void runes_process_event(uv_work_t *req, int status) if (t->loop) { uv_queue_work(t->loop, req, runes_get_next_event, runes_process_event); } + else { + free(req); + } } -void runes_loop_init(RunesTerm *t, uv_loop_t *loop) +void runes_window_backend_loop_init(RunesTerm *t, uv_loop_t *loop) { + RunesWindowBackend *w; unsigned long mask; void *data; - XGetICValues(t->w->ic, XNFilterEvents, &mask, NULL); - XSelectInput(t->w->dpy, t->w->w, mask|KeyPressMask|StructureNotifyMask); - XSetICFocus(t->w->ic); + w = &t->w; - data = malloc(sizeof(struct xlib_loop_data)); - ((struct loop_data *)data)->req.data = data; - ((struct loop_data *)data)->t = t; + XGetICValues(w->ic, XNFilterEvents, &mask, NULL); + XSelectInput(w->dpy, w->w, mask|KeyPressMask|StructureNotifyMask); + XSetICFocus(w->ic); + + data = malloc(sizeof(RunesXlibLoopData)); + ((RunesLoopData *)data)->req.data = data; + ((RunesLoopData *)data)->t = t; uv_queue_work(loop, data, runes_get_next_event, runes_process_event); } -void runes_window_destroy(RunesWindow *w) +void runes_window_backend_cleanup(RunesTerm *t) { + RunesWindowBackend *w; XIM im; + w = &t->w; im = XIMOfIC(w->ic); XDestroyIC(w->ic); XCloseIM(im); XFreeGC(w->dpy, w->gc); XDestroyWindow(w->dpy, w->w); XCloseDisplay(w->dpy); - - free(w); } @@ -1,4 +1,4 @@ -#ifndef _RUNES_XLIB_H +#ifndef _RUNES_WINDOW_XLIB_H #define _RUNES_XLIB_H #include <X11/Xlib.h> @@ -23,14 +23,14 @@ struct runes_window { Atom atoms[RUNES_NUM_ATOMS]; }; -struct xlib_loop_data { - struct loop_data data; +typedef struct { + RunesLoopData data; XEvent e; -}; +} RunesXlibLoopData; -RunesWindow *runes_window_create(int argc, char *argv[]); -cairo_surface_t *runes_surface_create(RunesTerm *t); -void runes_loop_init(RunesTerm *t, uv_loop_t *loop); -void runes_window_destroy(RunesWindow *w); +void runes_window_backend_init(RunesTerm *t, int argc, char *argv[]); +cairo_surface_t *runes_window_backend_surface_create(RunesTerm *t); +void runes_window_backend_loop_init(RunesTerm *t, uv_loop_t *loop); +void runes_window_backend_cleanup(RunesTerm *t); #endif |