| @@ -29,7 +29,7 @@ |
| 29 | 29 | | static Cursor carrow; |
| 30 | 30 | | static Cursor chand; |
| 31 | 31 | | static Cursor cwatch; |
| 32 | | − | static GC bgc; |
| 32 | + | static GC gc; |
| 33 | 33 | | |
| 34 | 34 | | Atom wm_delete_win; |
| 35 | 35 | | |
| @@ -50,7 +50,8 @@ void win_set_sizehints(win_t *win) { |
| 50 | 50 | | void win_open(win_t *win) { |
| 51 | 51 | | win_env_t *e; |
| 52 | 52 | | XClassHint classhint; |
| 53 | | − | XColor bgcol; |
| 53 | + | XColor col; |
| 54 | + | XGCValues gcval; |
| 54 | 55 | | int gmask; |
| 55 | 56 | | |
| 56 | 57 | | if (!win) |
| @@ -67,13 +68,18 @@ void win_open(win_t *win) { |
| 67 | 68 | | e->cmap = DefaultColormap(e->dpy, e->scr); |
| 68 | 69 | | e->depth = DefaultDepth(e->dpy, e->scr); |
| 69 | 70 | | |
| 70 | | − | if (!XAllocNamedColor(e->dpy, DefaultColormap(e->dpy, e->scr), BG_COLOR, |
| 71 | | − | &bgcol, &bgcol)) |
| 71 | + | if (XAllocNamedColor(e->dpy, DefaultColormap(e->dpy, e->scr), BG_COLOR, |
| 72 | + | &col, &col)) |
| 73 | + | win->bgcol = col.pixel; |
| 74 | + | else |
| 75 | + | die("could not allocate color: %s", BG_COLOR); |
| 76 | + | if (XAllocNamedColor(e->dpy, DefaultColormap(e->dpy, e->scr), SEL_COLOR, |
| 77 | + | &col, &col)) |
| 78 | + | win->selcol = col.pixel; |
| 79 | + | else |
| 72 | 80 | | die("could not allocate color: %s", BG_COLOR); |
| 73 | 81 | | |
| 74 | | − | win->bgcol = bgcol.pixel; |
| 75 | 82 | | win->pm = 0; |
| 76 | | − | |
| 77 | 83 | | win->fullscreen = 0; |
| 78 | 84 | | |
| 79 | 85 | | /* determine window offsets, width & height */ |
| @@ -112,7 +118,8 @@ void win_open(win_t *win) { |
| 112 | 118 | | chand = XCreateFontCursor(e->dpy, XC_fleur); |
| 113 | 119 | | cwatch = XCreateFontCursor(e->dpy, XC_watch); |
| 114 | 120 | | |
| 115 | | − | bgc = XCreateGC(e->dpy, win->xwin, 0, None); |
| 121 | + | gcval.line_width = 2; |
| 122 | + | gc = XCreateGC(e->dpy, win->xwin, GCLineWidth, &gcval); |
| 116 | 123 | | |
| 117 | 124 | | win_set_title(win, "sxiv"); |
| 118 | 125 | | |
| @@ -141,7 +148,7 @@ void win_close(win_t *win) { |
| 141 | 148 | | XFreeCursor(win->env.dpy, chand); |
| 142 | 149 | | XFreeCursor(win->env.dpy, cwatch); |
| 143 | 150 | | |
| 144 | | − | XFreeGC(win->env.dpy, bgc); |
| 151 | + | XFreeGC(win->env.dpy, gc); |
| 145 | 152 | | |
| 146 | 153 | | XDestroyWindow(win->env.dpy, win->xwin); |
| 147 | 154 | | XCloseDisplay(win->env.dpy); |
| @@ -226,11 +233,6 @@ void win_free_pixmap(win_t *win, Pixmap pm) { |
| 226 | 233 | | XFreePixmap(win->env.dpy, pm); |
| 227 | 234 | | } |
| 228 | 235 | | |
| 229 | | − | void win_draw_pixmap(win_t *win, Pixmap pm, int x, int y, int w, int h) { |
| 230 | | − | if (win) |
| 231 | | − | XCopyArea(win->env.dpy, pm, win->pm, bgc, 0, 0, w, h, x, y); |
| 232 | | − | } |
| 233 | | − | |
| 234 | 236 | | void win_clear(win_t *win) { |
| 235 | 237 | | win_env_t *e; |
| 236 | 238 | | XGCValues gcval; |
| @@ -239,14 +241,37 @@ void win_clear(win_t *win) { |
| 239 | 241 | | return; |
| 240 | 242 | | |
| 241 | 243 | | e = &win->env; |
| 242 | | − | gcval.foreground = win->fullscreen ? BlackPixel(e->dpy, e->scr) : win->bgcol; |
| 243 | | − | |
| 244 | + | gcval.foreground = win->fullscreen ? BlackPixel(e->dpy, e->scr) : |
| 245 | + | win->bgcol; |
| 244 | 246 | | if (win->pm) |
| 245 | 247 | | XFreePixmap(e->dpy, win->pm); |
| 246 | 248 | | win->pm = XCreatePixmap(e->dpy, win->xwin, e->scrw, e->scrh, e->depth); |
| 247 | 249 | | |
| 248 | | − | XChangeGC(e->dpy, bgc, GCForeground, &gcval); |
| 249 | | − | XFillRectangle(e->dpy, win->pm, bgc, 0, 0, e->scrw, e->scrh); |
| 250 | + | XChangeGC(e->dpy, gc, GCForeground, &gcval); |
| 251 | + | XFillRectangle(e->dpy, win->pm, gc, 0, 0, e->scrw, e->scrh); |
| 252 | + | } |
| 253 | + | |
| 254 | + | void win_draw_pixmap(win_t *win, Pixmap pm, int x, int y, int w, int h) { |
| 255 | + | if (win) |
| 256 | + | XCopyArea(win->env.dpy, pm, win->pm, gc, 0, 0, w, h, x, y); |
| 257 | + | } |
| 258 | + | |
| 259 | + | void win_draw_rect(win_t *win, int x, int y, int w, int h, Bool sel) { |
| 260 | + | win_env_t *e; |
| 261 | + | XGCValues gcval; |
| 262 | + | |
| 263 | + | if (!win) |
| 264 | + | return; |
| 265 | + | |
| 266 | + | e = &win->env; |
| 267 | + | |
| 268 | + | if (sel) |
| 269 | + | gcval.foreground = win->selcol; |
| 270 | + | else |
| 271 | + | gcval.foreground = win->fullscreen ? BlackPixel(e->dpy, e->scr) : |
| 272 | + | win->bgcol; |
| 273 | + | XChangeGC(e->dpy, gc, GCForeground, &gcval); |
| 274 | + | XDrawRectangle(e->dpy, win->pm, gc, x, y, w, h); |
| 250 | 275 | | } |
| 251 | 276 | | |
| 252 | 277 | | void win_draw(win_t *win) { |