]> git.eshelyaron.com Git - emacs.git/commitdiff
Add terminal hook query_frame_background_color
authorAlexander Gramiak <agrambot@gmail.com>
Sun, 14 Apr 2019 02:41:31 +0000 (20:41 -0600)
committerAlexander Gramiak <agrambot@gmail.com>
Fri, 26 Apr 2019 22:55:39 +0000 (16:55 -0600)
* src/termhooks.c (query_frame_background_color): New terminal hook.

* src/image.c (image_query_frame_background_color): Remove. Use the
terminal hook instead.

* src/nsterm.m:
* src/w32term.c:
* src/xterm.c: Implement and set the new terminal hook.

src/image.c
src/nsterm.m
src/termhooks.h
src/w32term.c
src/xterm.c

index 0023b9369c16849ecd86ccd09cb60dd94c8d4f4b..bf594987eb835ce9878c1dd307b68c4103ad39b3 100644 (file)
@@ -1306,22 +1306,6 @@ image_background_transparent (struct image *img, struct frame *f, XImagePtr_or_D
   return img->background_transparent;
 }
 
-#if defined (HAVE_PNG) || defined (HAVE_IMAGEMAGICK) || defined (HAVE_RSVG)
-
-/* Store F's background color into *BGCOLOR.  */
-static void
-image_query_frame_background_color (struct frame *f, XColor *bgcolor)
-{
-#ifndef HAVE_NS
-  bgcolor->pixel = FRAME_BACKGROUND_PIXEL (f);
-  x_query_color (f, bgcolor);
-#else
-  ns_query_color (FRAME_BACKGROUND_COLOR (f), bgcolor, 1);
-#endif
-}
-
-#endif /* HAVE_PNG || HAVE_IMAGEMAGICK || HAVE_RSVG */
-
 /***********************************************************************
                  Helper functions for X image types
  ***********************************************************************/
@@ -6363,7 +6347,8 @@ png_load_body (struct frame *f, struct image *img, struct png_load_context *c)
                                                     &color,
                                                     false,
                                                     false)
-         : (image_query_frame_background_color (f, &color), true))
+         : (FRAME_TERMINAL (f)->query_frame_background_color (f, &color),
+             true))
        /* The user specified `:background', use that.  */
        {
          int shift = bit_depth == 16 ? 0 : 8;
@@ -8816,7 +8801,7 @@ imagemagick_load_image (struct frame *f, struct image *img,
                                                     &bgcolor,
                                                     false,
                                                     false))
-      image_query_frame_background_color (f, &bgcolor);
+      FRAME_TERMINAL (f)->query_frame_background_color (f, &bgcolor);
 
     bg_wand = NewPixelWand ();
     PixelSetRed   (bg_wand, (double) bgcolor.red   / 65535);
@@ -9555,7 +9540,7 @@ svg_load_image (struct frame *f, struct image *img, char *contents,
                                                     &background,
                                                     false,
                                                     false))
-      image_query_frame_background_color (f, &background);
+      FRAME_TERMINAL (f)->query_frame_background_color (f, &background);
 
     /* SVG pixmaps specify transparency in the last byte, so right
        shift 8 bits to get rid of it, since emacs doesn't support
index 1217eb8e18967a534fcc8f6a3658cc503709f82d..cf1ff055304d65c7e1a836220b758e5420ec43bf 100644 (file)
@@ -2447,6 +2447,14 @@ ns_defined_color (struct frame *f,
   return 1;
 }
 
+static void
+ns_query_frame_background_color (struct frame *f, XColor *bgcolor)
+/* --------------------------------------------------------------------------
+     External (hook): Store F's background color into *BGCOLOR
+   -------------------------------------------------------------------------- */
+{
+  ns_query_color (FRAME_BACKGROUND_COLOR (f), bgcolor, true);
+}
 
 static void
 ns_set_frame_alpha (struct frame *f)
@@ -5233,6 +5241,7 @@ ns_create_terminal (struct ns_display_info *dpyinfo)
   terminal->read_socket_hook = ns_read_socket;
   terminal->frame_up_to_date_hook = ns_frame_up_to_date;
   terminal->defined_color_hook = ns_defined_color;
+  terminal->query_frame_background_color = ns_query_frame_background_color;
   terminal->mouse_position_hook = ns_mouse_position;
   terminal->get_focus_frame = ns_get_focus_frame;
   terminal->focus_frame_hook = ns_focus_frame;
index fbc372613300c84a2f46ea0537d88d035a57e7f0..54f09e03033b075fb8a61b22d28a0e3f4fc1a481 100644 (file)
@@ -513,6 +513,10 @@ struct terminal
 
    */
 
+  /* This hook is called to store the frame's background color into
+     BGCOLOR.  */
+  void (*query_frame_background_color) (struct frame *f, XColor *bgcolor);
+
 #if defined (HAVE_X_WINDOWS) || defined (HAVE_NTGUI)
   /* On frame F, translate pixel colors to RGB values for the NCOLORS
      colors in COLORS.  Use cached information, if available.  */
index 9d050984f78bde764cdce20e1a3d7b0f29d89bf0..65c1baf20f6f0a2d75693e951dd6dad2de84472e 100644 (file)
@@ -1608,6 +1608,14 @@ w32_query_colors (struct frame *f, XColor *colors, int ncolors)
     }
 }
 
+/* Store F's background color into *BGCOLOR.  */
+
+static void
+w32_query_frame_background_color (struct frame *f, XColor *bgcolor)
+{
+  bgcolor->pixel = FRAME_BACKGROUND_PIXEL (f);
+  w32_query_colors (f, bgcolor, 1);
+}
 
 /* Set up the foreground color for drawing relief lines of glyph
    string S.  RELIEF is a pointer to a struct relief containing the GC
@@ -7160,6 +7168,7 @@ w32_create_terminal (struct w32_display_info *dpyinfo)
   terminal->read_socket_hook = w32_read_socket;
   terminal->frame_up_to_date_hook = w32_frame_up_to_date;
   terminal->defined_color_hook = w32_defined_color;
+  terminal->query_frame_background_color = w32_query_frame_background_color;
   terminal->query_colors = w32_query_colors;
   terminal->mouse_position_hook = w32_mouse_position;
   terminal->get_focus_frame = w32_get_focus_frame;
index d65ad98c4c6134f233e66870359bdc889cc7cca6..c710d1c918b265b89c98140ba96fd28dc1f6629e 100644 (file)
@@ -2325,6 +2325,14 @@ x_query_colors (struct frame *f, XColor *colors, int ncolors)
   XQueryColors (FRAME_X_DISPLAY (f), FRAME_X_COLORMAP (f), colors, ncolors);
 }
 
+/* Store F's background color into *BGCOLOR.  */
+
+static void
+x_query_frame_background_color (struct frame *f, XColor *bgcolor)
+{
+  bgcolor->pixel = FRAME_BACKGROUND_PIXEL (f);
+  x_query_colors (f, bgcolor, 1);
+}
 
 /* On frame F, translate the color name to RGB values.  Use cached
    information, if possible.
@@ -13272,6 +13280,7 @@ x_create_terminal (struct x_display_info *dpyinfo)
   terminal->frame_up_to_date_hook = XTframe_up_to_date;
   terminal->buffer_flipping_unblocked_hook = XTbuffer_flipping_unblocked_hook;
   terminal->defined_color_hook = x_defined_color;
+  terminal->query_frame_background_color = x_query_frame_background_color;
   terminal->query_colors = x_query_colors;
   terminal->mouse_position_hook = XTmouse_position;
   terminal->get_focus_frame = x_get_focus_frame;