URI: 
       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 }