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/utf8.o
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 */
Dlocking = (1<<1), /* Locking */
Dselect = (1<<2), /* select() processing */
Dtrace = (1<<3), /* Programm progess */
Dtrace = (1<<3), /* Program progess */
Dvalue = (1<<4), /* Computed values */
Dupdate = (1<<5), /* Display update processing */
Dall = -1 /* Everything */
@ -87,10 +87,12 @@ typedef struct _osd_settings
int maxlines;
int nlines;
const char* fontname;
const char* color;
const char* text_color;
unsigned int text_alpha;
const char* bg_color;
unsigned int bg_alpha;
const char* shadow_color;
unsigned int shadow_alpha;
int shadow_offset;
const char* padding;
const char* text_align;
@ -123,7 +125,7 @@ struct xosd_xft
XftFont* font;
/* Colors */
XftColor color;
XftColor text_color;
XftColor bg_color;
XftColor shadow_color;

View file

@ -39,10 +39,12 @@ void load_defaults(osd_settings *settings)
settings->use_xinerama = 1;
#endif
settings->fontname = osd_default_font;
settings->color = "#0000ee";
settings->text_color = "#0000ee";
settings->text_alpha = 100;
settings->bg_color = "black";
settings->bg_alpha = 100;
settings->shadow_color = "lightgrey";
settings->shadow_alpha = 100;
settings->shadow_offset = 0;
settings->padding = "0";
settings->text_align = "center";
@ -401,7 +403,7 @@ event_loop(void *osdv)
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->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);
}
@ -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);
} else if (ev.xclient.data.l[0] == XOSD_XFT_event_Foreground) {
XftColor xft_color ;
if(init_color(osd, osd->settings.color, 0, &xft_color) != -1) {
XftColorFree(osd->display, osd->visual, osd->colormap, &osd->color);
osd->color = xft_color;
if(init_color(osd, osd->settings.text_color, osd->settings.text_alpha, &xft_color) != -1) {
XftColorFree(osd->display, osd->visual, osd->colormap, &osd->text_color);
osd->text_color = xft_color;
} 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) {
XftColor xft_color ;
@ -430,15 +432,15 @@ event_loop(void *osdv)
XftColorFree(osd->display, osd->visual, osd->colormap, &osd->bg_color);
osd->bg_color = xft_color;
} 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) {
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);
osd->shadow_color = xft_color;
} 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();
XRenderColor bgRender;
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;
}
if(alpha < 100) {
@ -564,11 +566,11 @@ osd_init(xosd_xft *osd)
XSelectInput(osd->display, osd->window, ExposureMask);
/* 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();
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();
return -1;
}
@ -681,7 +683,7 @@ int osd_destroy(xosd_xft *osd)
return 0;
send_event(osd, XOSD_XFT_event_Exit);
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);
XDestroyWindow(osd->display, osd->window);
XCloseDisplay(osd->display);
@ -747,11 +749,12 @@ void osd_set_padding(xosd_xft *osd, const char *padding)
/* }}} */
/* osd_set_color -- set color {{{ */
void osd_set_color(xosd_xft *osd, const char *color)
/* osd_set_textcolor -- set text color {{{ */
void osd_set_textcolor(xosd_xft *osd, const char *textcolor, unsigned int textalpha)
{
FUNCTION_START();
osd->settings.color = color;
osd->settings.text_color = textcolor;
osd->settings.text_alpha = textalpha;
if(osd->display != NULL) {
send_event(osd, XOSD_XFT_event_Foreground);
send_expose_event(osd);
@ -762,11 +765,11 @@ void osd_set_color(xosd_xft *osd, const char *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();
osd->settings.bg_color = bgcolor;
osd->settings.bg_alpha = alpha;
osd->settings.bg_alpha = bgalpha;
if(osd->display != NULL) {
send_event(osd, XOSD_XFT_event_Background);
send_expose_event(osd);
@ -787,10 +790,11 @@ void osd_set_shadowoffset(xosd_xft *osd, int offset)
/* }}} */
/* 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();
osd->settings.shadow_color = shadowcolor;
osd->settings.shadow_alpha = shadowalpha;
if(osd->display != NULL) {
send_event(osd, XOSD_XFT_event_Shadow);
send_expose_event(osd);

View file

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

View file

@ -78,7 +78,8 @@ xosd_xft *osd;
/* Default Values */
char* font = "mixed:size=36";
char* color = "red";
char* text_color = "red";
int text_alpha = 100;
char* bg_color = "black";
int bg_alpha = 100;
char* padding = "0";
@ -127,7 +128,7 @@ reset_osd(xosd_xft* osd, char** argv)
osd_set_font(osd, font);
osd_set_monitor(osd, monitor);
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);
}
@ -244,7 +245,7 @@ demo_color(xosd_xft* osd, char **argv)
}
for(int i = 0; i < sizeof(colors)/sizeof(char*); 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);
pause_demo();
}

View file

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

View file

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

View file

@ -99,7 +99,7 @@ xosd_xft *osd_create();
* ARGUMENTS
* geometry The geometry string
* textalign Text alignment string
* g Geometry object to fill
* g Geometry object to fill
* RETURNS
* 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);
/* osd_set_color -- Set the color for the OSD window
/* osd_set_textcolor -- Set the text color for the OSD window
*
* ARGUMENTS
* 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
* osd A xosd_xft object
* 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
* osd A xosd_xft object
* 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)
*