[PATCH] wmaker: set the color pixel for TrueColor display

3 views
Skip to first unread message

david.m...@gmail.com

unread,
Feb 18, 2026, 9:36:15 PM (6 days ago) Feb 18
to Window Maker Development
As mentioned in commit 67e2f5e1ca9847e2093e5122363b5bbcf91c3e59,
for TrueColor display it's not necessary to allocate a color but
it is required to set the pixel property of the XColor.
---
 src/resources.c | 37 +++++++++++++++++++++++++++++--------
 1 file changed, 29 insertions(+), 8 deletions(-)

diff --git a/src/resources.c b/src/resources.c
index ee427915..61ed48a6 100644
--- a/src/resources.c
+++ b/src/resources.c
@@ -35,20 +35,41 @@
 #include "resources.h"
 #include "screen.h"
 
-int wGetColorForColormap(WScreen *scr, Colormap colormap, const char *color_name, XColor *color)
+static unsigned long scale_color_component(unsigned short value, unsigned long mask)
 {
- if (scr->w_visual->class == TrueColor) {
- XColor dummy_exact;
- if (!XLookupColor(dpy, colormap, color_name, &dummy_exact, color)) {
- wwarning(_("could not lookup color \"%s\""), color_name);
- return False;
- }
- return True;
+ unsigned long m = mask;
+ int shift = 0, bits = 0;
+
+ if (!m)
+ return 0;
+
+ while (!(m & 1)) {
+ shift++;
+ m >>= 1;
+ }
+ while (m) {
+ bits++;
+ m >>= 1;
  }
+
+ return ((unsigned long)(value >> (16 - bits)) & ((1UL << bits) - 1)) << shift;
+}
+
+int wGetColorForColormap(WScreen *scr, Colormap colormap, const char *color_name, XColor *color)
+{
  if (!XParseColor(dpy, colormap, color_name, color)) {
  wwarning(_("could not parse color \"%s\""), color_name);
  return False;
  }
+
+ if (scr->w_visual->class == TrueColor) {
+ /* Compute pixel directly from RGB components using the visual's channel masks */
+ color->pixel = scale_color_component(color->red,   scr->w_visual->red_mask)
+              | scale_color_component(color->green, scr->w_visual->green_mask)
+              | scale_color_component(color->blue,  scr->w_visual->blue_mask);
+ return True;
+ }
+
  if (!XAllocColor(dpy, colormap, color)) {
  wwarning(_("could not allocate color \"%s\""), color_name);
  return False;
--
2.43.0
0001-wmaker-set-the-color-pixel-for-TrueColor-display.patch
Reply all
Reply to author
Forward
0 new messages