]> git.eshelyaron.com Git - emacs.git/commitdiff
Implement gamma-correction on Haiku
authorPo Lu <luangruo@yahoo.com>
Wed, 18 May 2022 12:36:50 +0000 (12:36 +0000)
committerPo Lu <luangruo@yahoo.com>
Wed, 18 May 2022 12:37:54 +0000 (12:37 +0000)
* src/dispextern.h: Add `gamma_correct' prototype on Haiku as
well.
* src/haikufns.c (gamma_correct): New function.
* src/haikuterm.c (haiku_defined_color): Gamma-correct colors if
their pixels are being allocated.

src/dispextern.h
src/haikufns.c
src/haikuterm.c

index a7f478acdf837d763edf8f19c60b79bc337c9eb4..910f630a50c02cf5d6ffeb59d7eb5dfcd0c7522c 100644 (file)
@@ -3615,6 +3615,9 @@ void gamma_correct (struct frame *, XColor *);
 #ifdef HAVE_NTGUI
 void gamma_correct (struct frame *, COLORREF *);
 #endif
+#ifdef HAVE_HAIKU
+void gamma_correct (struct frame *, Emacs_Color *);
+#endif
 
 #ifdef HAVE_WINDOW_SYSTEM
 
index 8b6296e6ae12b1e0d59ad07faad975af9d63fe84..76a8569970a85d606896bbe7576e17784409c5be 100644 (file)
@@ -268,6 +268,22 @@ haiku_set_tab_bar_lines (struct frame *f, Lisp_Object value, Lisp_Object oldval)
     haiku_change_tab_bar_height (f, nlines * FRAME_LINE_HEIGHT (f));
 }
 
+void
+gamma_correct (struct frame *f, Emacs_Color *color)
+{
+  if (f->gamma)
+    {
+      color->red = (pow (color->red / 65535.0, f->gamma)
+                   * 65535.0 + 0.5);
+      color->green = (pow (color->green / 65535.0, f->gamma)
+                     * 65535.0 + 0.5);
+      color->blue = (pow (color->blue / 65535.0, f->gamma)
+                    * 65535.0 + 0.5);
+      color->pixel = RGB_TO_ULONG (color->red / 256,
+                                  color->green / 256,
+                                  color->blue / 256);
+    }
+}
 
 int
 haiku_get_color (const char *name, Emacs_Color *color)
index af20d1c11c846f41f3acc866e5da54086d29cbf6..2db1e352ffba323ee38f44195c9a9492a78a4e87 100644 (file)
@@ -575,7 +575,14 @@ static bool
 haiku_defined_color (struct frame *f, const char *name,
                     Emacs_Color *color, bool alloc, bool make_index)
 {
-  return !haiku_get_color (name, color);
+  int rc;
+
+  rc = !haiku_get_color (name, color);
+
+  if (rc && f->gamma && alloc)
+    gamma_correct (f, color);
+
+  return rc;
 }
 
 /* Adapted from xterm `x_draw_box_rect'.  */