draw_util.c (1298B)
1 #include <X11/Xlib.h> 2 #include <X11/Xft/Xft.h> 3 4 #include "memory.h" 5 #include "window.h" 6 #include "draw_util.h" 7 8 ledit_draw * 9 draw_create(ledit_window *window, int w, int h) { 10 ledit_draw *draw = ledit_malloc(sizeof(ledit_draw)); 11 draw->w = w; 12 draw->h = h; 13 draw->pixmap = XCreatePixmap( 14 window->common->dpy, window->drawable, w, h, window->common->depth 15 ); 16 draw->xftdraw = XftDrawCreate( 17 window->common->dpy, draw->pixmap, window->common->vis, window->common->cm 18 ); 19 return draw; 20 } 21 22 void 23 draw_grow(ledit_window *window, ledit_draw *draw, int w, int h) { 24 /* FIXME: sensible default pixmap sizes here */ 25 /* FIXME: maybe shrink the pixmaps at some point */ 26 if (draw->w < w || draw->h < h) { 27 draw->w = w > draw->w ? w + 10 : draw->w; 28 draw->h = h > draw->h ? h + 10 : draw->h; 29 XFreePixmap(window->common->dpy, draw->pixmap); 30 draw->pixmap = XCreatePixmap( 31 window->common->dpy, window->drawable, 32 draw->w, draw->h, window->common->depth 33 ); 34 XftDrawChange(draw->xftdraw, draw->pixmap); 35 } 36 } 37 38 void 39 draw_destroy(ledit_window *window, ledit_draw *draw) { 40 XFreePixmap(window->common->dpy, draw->pixmap); 41 XftDrawDestroy(draw->xftdraw); 42 free(draw); 43 }