Fixes #2; text and shadow alpha can now be set

This commit is contained in:
Razzaline Reindell 2023-10-23 03:00:46 +13:00
parent b5bfb66e5b
commit 059b035203
Signed by: razzaline
GPG key ID: EE490CF921601D05
8 changed files with 62 additions and 45 deletions

5
.gitignore vendored
View file

@ -29,3 +29,8 @@ src/osd-echo
src/osd-echo.o src/osd-echo.o
src/utf8.o src/utf8.o
xosd-xft.pc xosd-xft.pc
# Code::Blocks files
obj/
*.depend
*.layout

View file

@ -41,7 +41,7 @@ typedef enum _DEBUG_LEVEL {
Dfunction = (1<<0), /* Function enter/exit */ Dfunction = (1<<0), /* Function enter/exit */
Dlocking = (1<<1), /* Locking */ Dlocking = (1<<1), /* Locking */
Dselect = (1<<2), /* select() processing */ Dselect = (1<<2), /* select() processing */
Dtrace = (1<<3), /* Programm progess */ Dtrace = (1<<3), /* Program progess */
Dvalue = (1<<4), /* Computed values */ Dvalue = (1<<4), /* Computed values */
Dupdate = (1<<5), /* Display update processing */ Dupdate = (1<<5), /* Display update processing */
Dall = -1 /* Everything */ Dall = -1 /* Everything */
@ -87,10 +87,12 @@ typedef struct _osd_settings
int maxlines; int maxlines;
int nlines; int nlines;
const char* fontname; const char* fontname;
const char* color; const char* text_color;
unsigned int text_alpha;
const char* bg_color; const char* bg_color;
unsigned int bg_alpha; unsigned int bg_alpha;
const char* shadow_color; const char* shadow_color;
unsigned int shadow_alpha;
int shadow_offset; int shadow_offset;
const char* padding; const char* padding;
const char* text_align; const char* text_align;
@ -123,7 +125,7 @@ struct xosd_xft
XftFont* font; XftFont* font;
/* Colors */ /* Colors */
XftColor color; XftColor text_color;
XftColor bg_color; XftColor bg_color;
XftColor shadow_color; XftColor shadow_color;

View file

@ -39,10 +39,12 @@ void load_defaults(osd_settings *settings)
settings->use_xinerama = 1; settings->use_xinerama = 1;
#endif #endif
settings->fontname = osd_default_font; settings->fontname = osd_default_font;
settings->color = "#0000ee"; settings->text_color = "#0000ee";
settings->text_alpha = 100;
settings->bg_color = "black"; settings->bg_color = "black";
settings->bg_alpha = 100; settings->bg_alpha = 100;
settings->shadow_color = "lightgrey"; settings->shadow_color = "lightgrey";
settings->shadow_alpha = 100;
settings->shadow_offset = 0; settings->shadow_offset = 0;
settings->padding = "0"; settings->padding = "0";
settings->text_align = "center"; settings->text_align = "center";
@ -401,7 +403,7 @@ event_loop(void *osdv)
if(osd->settings.shadow_offset) { if(osd->settings.shadow_offset) {
XftDrawStringUtf8(osd->draw, &osd->shadow_color, osd->font, x + osd->settings.shadow_offset, y + osd->settings.shadow_offset, (const FcChar8 *)message, strlen(message)); XftDrawStringUtf8(osd->draw, &osd->shadow_color, osd->font, x + osd->settings.shadow_offset, y + osd->settings.shadow_offset, (const FcChar8 *)message, strlen(message));
} }
XftDrawStringUtf8(osd->draw, &osd->color, osd->font, x, y, (const FcChar8 *)message, strlen(message)); XftDrawStringUtf8(osd->draw, &osd->text_color, osd->font, x, y, (const FcChar8 *)message, strlen(message));
} }
XftDrawSetClip(osd->draw, NULL); XftDrawSetClip(osd->draw, NULL);
} }
@ -418,11 +420,11 @@ event_loop(void *osdv)
XMoveResizeWindow(osd->display, osd->window, osd->w_x, osd->w_y, osd->w_width, osd->w_height); XMoveResizeWindow(osd->display, osd->window, osd->w_x, osd->w_y, osd->w_width, osd->w_height);
} else if (ev.xclient.data.l[0] == XOSD_XFT_event_Foreground) { } else if (ev.xclient.data.l[0] == XOSD_XFT_event_Foreground) {
XftColor xft_color ; XftColor xft_color ;
if(init_color(osd, osd->settings.color, 0, &xft_color) != -1) { if(init_color(osd, osd->settings.text_color, osd->settings.text_alpha, &xft_color) != -1) {
XftColorFree(osd->display, osd->visual, osd->colormap, &osd->color); XftColorFree(osd->display, osd->visual, osd->colormap, &osd->text_color);
osd->color = xft_color; osd->text_color = xft_color;
} else { } else {
fprintf(stderr, "Error in setting color %s: %s (ignoring)\n", osd->settings.color, osd_error); fprintf(stderr, "Error in setting text color %s: %s (ignoring)\n", osd->settings.text_color, osd_error);
} }
} else if (ev.xclient.data.l[0] == XOSD_XFT_event_Background) { } else if (ev.xclient.data.l[0] == XOSD_XFT_event_Background) {
XftColor xft_color ; XftColor xft_color ;
@ -430,15 +432,15 @@ event_loop(void *osdv)
XftColorFree(osd->display, osd->visual, osd->colormap, &osd->bg_color); XftColorFree(osd->display, osd->visual, osd->colormap, &osd->bg_color);
osd->bg_color = xft_color; osd->bg_color = xft_color;
} else { } else {
fprintf(stderr, "Error in setting color %s: %s (ignoring)\n", osd->settings.bg_color, osd_error); fprintf(stderr, "Error in setting background color %s: %s (ignoring)\n", osd->settings.bg_color, osd_error);
} }
} else if (ev.xclient.data.l[0] == XOSD_XFT_event_Shadow) { } else if (ev.xclient.data.l[0] == XOSD_XFT_event_Shadow) {
XftColor xft_color ; XftColor xft_color ;
if(init_color(osd, osd->settings.shadow_color, 0, &xft_color) != -1) { if(init_color(osd, osd->settings.shadow_color, osd->settings.shadow_alpha, &xft_color) != -1) {
XftColorFree(osd->display, osd->visual, osd->colormap, &osd->shadow_color); XftColorFree(osd->display, osd->visual, osd->colormap, &osd->shadow_color);
osd->shadow_color = xft_color; osd->shadow_color = xft_color;
} else { } else {
fprintf(stderr, "Error in setting color %s: %s (ignoring)\n", osd->settings.bg_color, osd_error); fprintf(stderr, "Error in setting shadow color %s: %s (ignoring)\n", osd->settings.bg_color, osd_error);
} }
} }
} }
@ -455,7 +457,7 @@ init_color(xosd_xft* osd, const char* color, unsigned int alpha, XftColor* xft_c
FUNCTION_START(); FUNCTION_START();
XRenderColor bgRender; XRenderColor bgRender;
if (!XftColorAllocName(osd->display, osd->visual, osd->colormap, color, xft_color)) { if (!XftColorAllocName(osd->display, osd->visual, osd->colormap, color, xft_color)) {
osd_error = "Could not allocate color"; osd_error = "Could not allocate text color";
return -1; return -1;
} }
if(alpha < 100) { if(alpha < 100) {
@ -564,11 +566,11 @@ osd_init(xosd_xft *osd)
XSelectInput(osd->display, osd->window, ExposureMask); XSelectInput(osd->display, osd->window, ExposureMask);
/* Xft. */ /* Xft. */
if (init_color(osd, osd->settings.color, 0, &osd->color) == -1) { if (init_color(osd, osd->settings.text_color, osd->settings.text_alpha, &osd->text_color) == -1) {
FUNCTION_END(); FUNCTION_END();
return -1; return -1;
} }
if (init_color(osd, osd->settings.shadow_color, 0, &osd->shadow_color)) { if (init_color(osd, osd->settings.shadow_color, osd->settings.shadow_alpha, &osd->shadow_color)) {
FUNCTION_END(); FUNCTION_END();
return -1; return -1;
} }
@ -681,7 +683,7 @@ int osd_destroy(xosd_xft *osd)
return 0; return 0;
send_event(osd, XOSD_XFT_event_Exit); send_event(osd, XOSD_XFT_event_Exit);
pthread_join(osd->event_thread, NULL); pthread_join(osd->event_thread, NULL);
XftColorFree(osd->display, osd->visual, osd->colormap, &osd->color); XftColorFree(osd->display, osd->visual, osd->colormap, &osd->text_color);
XftDrawDestroy(osd->draw); XftDrawDestroy(osd->draw);
XDestroyWindow(osd->display, osd->window); XDestroyWindow(osd->display, osd->window);
XCloseDisplay(osd->display); XCloseDisplay(osd->display);
@ -747,11 +749,12 @@ void osd_set_padding(xosd_xft *osd, const char *padding)
/* }}} */ /* }}} */
/* osd_set_color -- set color {{{ */ /* osd_set_textcolor -- set text color {{{ */
void osd_set_color(xosd_xft *osd, const char *color) void osd_set_textcolor(xosd_xft *osd, const char *textcolor, unsigned int textalpha)
{ {
FUNCTION_START(); FUNCTION_START();
osd->settings.color = color; osd->settings.text_color = textcolor;
osd->settings.text_alpha = textalpha;
if(osd->display != NULL) { if(osd->display != NULL) {
send_event(osd, XOSD_XFT_event_Foreground); send_event(osd, XOSD_XFT_event_Foreground);
send_expose_event(osd); send_expose_event(osd);
@ -762,11 +765,11 @@ void osd_set_color(xosd_xft *osd, const char *color)
/* }}} */ /* }}} */
/* osd_set_bgcolor -- set background color {{{ */ /* osd_set_bgcolor -- set background color {{{ */
void osd_set_bgcolor(xosd_xft *osd, const char *bgcolor, unsigned int alpha) void osd_set_bgcolor(xosd_xft *osd, const char *bgcolor, unsigned int bgalpha)
{ {
FUNCTION_START(); FUNCTION_START();
osd->settings.bg_color = bgcolor; osd->settings.bg_color = bgcolor;
osd->settings.bg_alpha = alpha; osd->settings.bg_alpha = bgalpha;
if(osd->display != NULL) { if(osd->display != NULL) {
send_event(osd, XOSD_XFT_event_Background); send_event(osd, XOSD_XFT_event_Background);
send_expose_event(osd); send_expose_event(osd);
@ -787,10 +790,11 @@ void osd_set_shadowoffset(xosd_xft *osd, int offset)
/* }}} */ /* }}} */
/* osd_set_shadowcolor -- set shadow color {{{ */ /* osd_set_shadowcolor -- set shadow color {{{ */
void osd_set_shadowcolor(xosd_xft *osd, const char *shadowcolor) void osd_set_shadowcolor(xosd_xft *osd, const char *shadowcolor, unsigned int shadowalpha)
{ {
FUNCTION_START(); FUNCTION_START();
osd->settings.shadow_color = shadowcolor; osd->settings.shadow_color = shadowcolor;
osd->settings.shadow_alpha = shadowalpha;
if(osd->display != NULL) { if(osd->display != NULL) {
send_event(osd, XOSD_XFT_event_Shadow); send_event(osd, XOSD_XFT_event_Shadow);
send_expose_event(osd); send_expose_event(osd);

View file

@ -50,7 +50,7 @@ static struct option long_options[] = {
/* Main options */ /* Main options */
{"bg-alpha", 1, NULL, 'a'}, {"bg-alpha", 1, NULL, 'a'},
{"bg-color", 1, NULL, 'b'}, {"bg-color", 1, NULL, 'b'},
{"color", 1, NULL, 'c'}, {"text-color", 1, NULL, 'c'},
{"delay-in-millis", 1, NULL, 'd'}, {"delay-in-millis", 1, NULL, 'd'},
#ifdef DEBUG #ifdef DEBUG
{"debug", 1, NULL, 'D'}, {"debug", 1, NULL, 'D'},
@ -78,7 +78,8 @@ xosd_xft *osd;
/* Default Values */ /* Default Values */
char* font = "mono:size=12"; char* font = "mono:size=12";
char* color = "lightblue"; char* text_color = "lightblue";
int text_alpha = 100;
char* bg_color = "black"; char* bg_color = "black";
int bg_alpha = 100; int bg_alpha = 100;
char* padding = "10"; char* padding = "10";
@ -133,7 +134,7 @@ int main(int argc, char *argv[])
font = optarg; font = optarg;
break; break;
case 'c': case 'c':
color = optarg; text_color = optarg;
break; break;
case 'p': case 'p':
padding = optarg; padding = optarg;
@ -210,7 +211,7 @@ int main(int argc, char *argv[])
osd_set_font(osd, font); osd_set_font(osd, font);
osd_set_monitor(osd, monitor); osd_set_monitor(osd, monitor);
osd_set_padding(osd, padding); osd_set_padding(osd, padding);
osd_set_color(osd, color); osd_set_textcolor(osd, text_color, text_alpha);
osd_set_bgcolor(osd, bg_color, bg_alpha); osd_set_bgcolor(osd, bg_color, bg_alpha);
osd_set_xinerama(osd, use_xinerama); osd_set_xinerama(osd, use_xinerama);
osd_set_xrandr(osd, use_xrandr); osd_set_xrandr(osd, use_xrandr);
@ -287,7 +288,7 @@ help(char **argv)
" -D, --debug=<level> The debug levels to be enabled\n" " -D, --debug=<level> The debug levels to be enabled\n"
" <level>: CSV of none function,locking,select,trace,value,update,all\n" " <level>: CSV of none function,locking,select,trace,value,update,all\n"
#endif #endif
"\n\n", geometry, text_align, font, color, padding, bg_color, bg_alpha, nlines ); "\n\n", geometry, text_align, font, text_color, padding, bg_color, bg_alpha, nlines );
} }
/* vim: foldmethod=marker tabstop=2 shiftwidth=2 expandtab /* vim: foldmethod=marker tabstop=2 shiftwidth=2 expandtab

View file

@ -78,7 +78,8 @@ xosd_xft *osd;
/* Default Values */ /* Default Values */
char* font = "mixed:size=36"; char* font = "mixed:size=36";
char* color = "red"; char* text_color = "red";
int text_alpha = 100;
char* bg_color = "black"; char* bg_color = "black";
int bg_alpha = 100; int bg_alpha = 100;
char* padding = "0"; char* padding = "0";
@ -127,7 +128,7 @@ reset_osd(xosd_xft* osd, char** argv)
osd_set_font(osd, font); osd_set_font(osd, font);
osd_set_monitor(osd, monitor); osd_set_monitor(osd, monitor);
osd_set_padding(osd, padding); osd_set_padding(osd, padding);
osd_set_color(osd, color); osd_set_textcolor(osd, text_color, text_alpha);
osd_set_bgcolor(osd, bg_color, bg_alpha); osd_set_bgcolor(osd, bg_color, bg_alpha);
} }
@ -244,7 +245,7 @@ demo_color(xosd_xft* osd, char **argv)
} }
for(int i = 0; i < sizeof(colors)/sizeof(char*); i++) { for(int i = 0; i < sizeof(colors)/sizeof(char*); i++) {
printf("Colors { bg: %s, fg: %s }\n", bg_colors[i], colors[i]); printf("Colors { bg: %s, fg: %s }\n", bg_colors[i], colors[i]);
osd_set_color(osd, colors[i]); osd_set_textcolor(osd, colors[i], text_alpha);
osd_set_bgcolor(osd, bg_colors[i], bg_alpha); osd_set_bgcolor(osd, bg_colors[i], bg_alpha);
pause_demo(); pause_demo();
} }

View file

@ -81,10 +81,12 @@ xosd_xft *osd;
/* Default Values */ /* Default Values */
char* font = "SauceCodePro Nerd Font:size=64:antialias=true"; char* font = "SauceCodePro Nerd Font:size=64:antialias=true";
char* color = "ghostwhite"; char* text_color = "ghostwhite";
int text_alpha = 50;
char* bg_color = "black"; char* bg_color = "black";
int bg_alpha = 50; int bg_alpha = 50;
char* shadow_color = "lightgrey"; char* shadow_color = "lightgrey";
int shadow_alpha = 50;
int shadow_offset = 0; int shadow_offset = 0;
char* padding = "0"; char* padding = "0";
int delay_millis = 1000; int delay_millis = 1000;
@ -157,7 +159,7 @@ int main(int argc, char *argv[])
font = optarg; font = optarg;
break; break;
case 'c': case 'c':
color = optarg; text_color = optarg;
break; break;
case 'p': case 'p':
padding = optarg; padding = optarg;
@ -242,9 +244,9 @@ int main(int argc, char *argv[])
osd_set_font(osd, font); osd_set_font(osd, font);
osd_set_monitor(osd, monitor); osd_set_monitor(osd, monitor);
osd_set_padding(osd, padding); osd_set_padding(osd, padding);
osd_set_color(osd, color); osd_set_textcolor(osd, text_color, text_alpha);
osd_set_bgcolor(osd, bg_color, bg_alpha); osd_set_bgcolor(osd, bg_color, bg_alpha);
osd_set_shadowcolor(osd, shadow_color); osd_set_shadowcolor(osd, shadow_color, shadow_alpha);
osd_set_shadowoffset(osd, shadow_offset); osd_set_shadowoffset(osd, shadow_offset);
osd_set_xinerama(osd, use_xinerama); osd_set_xinerama(osd, use_xinerama);
osd_set_xrandr(osd, use_xrandr); osd_set_xrandr(osd, use_xrandr);
@ -315,7 +317,7 @@ help(char **argv)
" -D, --debug=<level> The debug levels to be enabled\n" " -D, --debug=<level> The debug levels to be enabled\n"
" <level>: CSV of none function,locking,select,trace,value,update,all\n" " <level>: CSV of none function,locking,select,trace,value,update,all\n"
#endif #endif
"\n\n", geometry, text_align, font, color, padding, bg_color, bg_alpha ); "\n\n", geometry, text_align, font, text_color, padding, bg_color, bg_alpha );
} }
/* vim: foldmethod=marker tabstop=2 shiftwidth=2 expandtab /* vim: foldmethod=marker tabstop=2 shiftwidth=2 expandtab

View file

@ -37,7 +37,7 @@ int main(int argc, char *argv[])
} }
osd_set_geometry(osd, &g); osd_set_geometry(osd, &g);
osd_set_font(osd, "mono:size=16"); osd_set_font(osd, "mono:size=16");
osd_set_color(osd, "lightblue"); osd_set_textcolor(osd, "lightblue", 100);
osd_set_bgcolor(osd, "black", 100); osd_set_bgcolor(osd, "black", 100);
char* message = "HELLO XOSD-XFT" ; char* message = "HELLO XOSD-XFT" ;

View file

@ -99,7 +99,7 @@ xosd_xft *osd_create();
* ARGUMENTS * ARGUMENTS
* geometry The geometry string * geometry The geometry string
* textalign Text alignment string * textalign Text alignment string
* g Geometry object to fill * g Geometry object to fill
* RETURNS * RETURNS
* NULL on error * NULL on error
*/ */
@ -141,33 +141,35 @@ void osd_set_monitor(xosd_xft *osd, int monitor);
*/ */
void osd_set_padding(xosd_xft *osd, const char *padding); void osd_set_padding(xosd_xft *osd, const char *padding);
/* osd_set_color -- Set the color for the OSD window /* osd_set_textcolor -- Set the text color for the OSD window
* *
* ARGUMENTS * ARGUMENTS
* osd A xosd_xft object * osd A xosd_xft object
* color The color * color The color
* alpha The alpha value (0-100)
* *
*/ */
void osd_set_color(xosd_xft *osd, const char *color); void osd_set_textcolor(xosd_xft *osd, const char *text_color, unsigned int textalpha);
/* osd_set_bgcolor -- Set the bgcolor and alpha for the OSD window /* osd_set_bgcolor -- Set the background color and alpha for the OSD window
* *
* ARGUMENTS * ARGUMENTS
* osd A xosd_xft object * osd A xosd_xft object
* bgcolor The background color * bgcolor The background color
* alpha Tha alpha value (0-100) * alpha The alpha value (0-100)
* *
*/ */
void osd_set_bgcolor(xosd_xft *osd, const char *bgcolor, unsigned int alpha); void osd_set_bgcolor(xosd_xft *osd, const char *bgcolor, unsigned int bgalpha);
/* osd_set_shadowcolor -- Set the shadowcolor for the OSD window /* osd_set_shadowcolor -- Set the shadow color for the OSD window
* *
* ARGUMENTS * ARGUMENTS
* osd A xosd_xft object * osd A xosd_xft object
* shadowcolor The shadow color * shadowcolor The shadow color
* alpha The alpha value (0-100)
* *
*/ */
void osd_set_shadowcolor(xosd_xft *osd, const char *shadowcolor); void osd_set_shadowcolor(xosd_xft *osd, const char *shadowcolor, unsigned int shadowalpha);
/* osd_set_shadowoffset -- Set the offset for the shadow (0 - none) /* osd_set_shadowoffset -- Set the offset for the shadow (0 - none)
* *