aboutsummaryrefslogtreecommitdiff
path: root/liberty-xui.c
diff options
context:
space:
mode:
Diffstat (limited to 'liberty-xui.c')
-rw-r--r--liberty-xui.c17
1 files changed, 12 insertions, 5 deletions
diff --git a/liberty-xui.c b/liberty-xui.c
index 3f193b5..7058b41 100644
--- a/liberty-xui.c
+++ b/liberty-xui.c
@@ -1269,14 +1269,21 @@ x11_render_label (struct widget *self)
XRenderColor solid = *x11_fg (self), colors[3] = { solid, solid, solid };
colors[2].alpha = 0;
- double portion = MIN (1, 2.0 * font->list->font->height / space);
+ // Nvidia's XRender appears to not add (x, y) to (srcx, srcy),
+ // and works correctly if we pass self->x as srcx further on.
+ //
+ // Instead of special-casing nvidia_drv.so, let's have the gradient
+ // also extend to the left, in order to make text legible at all.
+ //
+ // We could also detect the behaviour experimentally in run-time.
+ double portion = MIN (1, 2. * font->list->font->height / (self->x + space));
XFixed stops[3] = { 0, XDoubleToFixed (1 - portion), XDoubleToFixed (1) };
- XLinearGradient gradient = { {}, { XDoubleToFixed (space), 0 } };
+ XLinearGradient gradient = { {}, { XDoubleToFixed (self->x + space), 0 } };
// Note that this masking is a very expensive operation.
Picture source =
XRenderCreateLinearGradient (g_xui.dpy, &gradient, stops, colors, 3);
- x11_font_render (font, PictOpOver, source, -self->x, 0, self->x, self->y,
+ x11_font_render (font, PictOpOver, source, 0, 0, self->x, self->y,
self->text);
XRenderFreePicture (g_xui.dpy, source);
}
@@ -1884,6 +1891,8 @@ x11_init (struct poller *poller, struct attrs *app_attrs, size_t app_attrs_len)
if (!(g_xui.dpy = XkbOpenDisplay
(NULL, &g_xui.xkb_base_event_code, NULL, NULL, NULL, NULL)))
exit_fatal ("cannot open display");
+ if (!XftInit (NULL))
+ print_warning ("Fontconfig initialization failed");
if (!XftDefaultHasRender (g_xui.dpy))
exit_fatal ("XRender is not supported");
if (!(g_xui.x11_im = XOpenIM (g_xui.dpy, NULL, NULL, NULL)))
@@ -1912,8 +1921,6 @@ x11_init (struct poller *poller, struct attrs *app_attrs, size_t app_attrs_len)
g_xui.x11_xsettings = xdg_xsettings_make ();
xdg_xsettings_update (&g_xui.x11_xsettings, g_xui.dpy);
- if (!FcInit ())
- print_warning ("Fontconfig initialization failed");
if (!(g_xui.xft_fonts = x11_font_open (0)))
exit_fatal ("cannot open a font");