color_xlib.c - ltk - GUI toolkit for X11 (WIP)
HTML git clone git://lumidify.org/ltk.git (fast, but not encrypted)
HTML git clone https://lumidify.org/ltk.git (encrypted, but very slow)
HTML git clone git://4kcetb7mo7hj6grozzybxtotsub5bempzo4lirzc3437amof2c2impyd.onion/ltk.git (over tor)
DIR Log
DIR Files
DIR Refs
DIR README
DIR LICENSE
---
color_xlib.c (2535B)
---
1 /*
2 * Copyright (c) 2021-2024 lumidify <nobody@lumidify.org>
3 *
4 * Permission to use, copy, modify, and/or distribute this software for any
5 * purpose with or without fee is hereby granted, provided that the above
6 * copyright notice and this permission notice appear in all copies.
7 *
8 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
9 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
10 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
11 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
12 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
13 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
14 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
15 */
16
17 #include <stddef.h>
18
19 #include <X11/Xlib.h>
20
21 #include "color.h"
22 #include "memory.h"
23 #include "graphics.h"
24 #include "graphics_xlib.h"
25
26 /* FIXME: I think xcolor is unneeded when xft is enabled */
27 ltk_color *
28 ltk_color_create(ltk_renderdata *renderdata, const char *hex) {
29 ltk_color *col = ltk_malloc(sizeof(ltk_color));
30 if (!XParseColor(renderdata->dpy, renderdata->cm, hex, &col->xcolor)) {
31 ltk_free(col);
32 return NULL;
33 }
34 if (!XAllocColor(renderdata->dpy, renderdata->cm, &col->xcolor)) {
35 ltk_free(col);
36 return NULL;
37 }
38 /* FIXME: replace with XftColorAllocValue */
39 #if USE_XFT == 1
40 if (!XftColorAllocName(renderdata->dpy, renderdata->vis, renderdata->cm, hex, &col->xftcolor)) {
41 XFreeColors(renderdata->dpy, renderdata->cm, &col->xcolor.pixel, 1, 0);
42 ltk_free(col);
43 return NULL;
44 }
45 #endif
46 return col;
47 }
48
49 /* FIXME: does this actually work the way I think it does? */
50 ltk_color *
51 ltk_color_copy(ltk_renderdata *renderdata, const ltk_color *color) {
52 ltk_color *col = ltk_malloc(sizeof(ltk_color));
53 col->xcolor = color->xcolor;
54 if (!XAllocColor(renderdata->dpy, renderdata->cm, &col->xcolor)) {
55 ltk_free(col);
56 return NULL;
57 }
58 #if USE_XFT == 1
59 if (!XftColorAllocValue(renderdata->dpy, renderdata->vis, renderdata->cm, &color->xftcolor.color, &col->xftcolor)) {
60 XFreeColors(renderdata->dpy, renderdata->cm, &col->xcolor.pixel, 1, 0);
61 ltk_free(col);
62 return NULL;
63 }
64 #endif
65 return col;
66 }
67
68 void
69 ltk_color_destroy(ltk_renderdata *renderdata, ltk_color *col) {
70 /* FIXME: what should the 'planes' argument be? */
71 XFreeColors(renderdata->dpy, renderdata->cm, &col->xcolor.pixel, 1, 0);
72 #if USE_XFT == 1
73 XftColorFree(renderdata->dpy, renderdata->vis, renderdata->cm, &col->xftcolor);
74 #endif
75 ltk_free(col);
76 }