summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlexander Gramiak <agrambot@gmail.com>2019-04-13 20:41:31 -0600
committerAlexander Gramiak <agrambot@gmail.com>2019-04-13 20:41:31 -0600
commit51ba147a0976351c48ee6b5dbec41aedf273354b (patch)
tree51aa9b3347a3a9ce0124590f4f516701c62d87ab
parent480a22c9340cc5f5c2eca67685b72135412192d0 (diff)
downloademacs-51ba147a0976351c48ee6b5dbec41aedf273354b.tar.gz
Add terminal hook query_frame_background_color
* 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.
-rw-r--r--src/image.c23
-rw-r--r--src/nsterm.m9
-rw-r--r--src/termhooks.h2
-rw-r--r--src/w32term.c9
-rw-r--r--src/xterm.c9
5 files changed, 33 insertions, 19 deletions
diff --git a/src/image.c b/src/image.c
index e3b7873f0a4..0528d46ad08 100644
--- a/src/image.c
+++ b/src/image.c
@@ -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
***********************************************************************/
@@ -6367,7 +6351,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;
@@ -8818,7 +8803,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);
@@ -9557,7 +9542,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
diff --git a/src/nsterm.m b/src/nsterm.m
index 88c16b68ecf..c5c40962199 100644
--- a/src/nsterm.m
+++ b/src/nsterm.m
@@ -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;
diff --git a/src/termhooks.h b/src/termhooks.h
index 8852be9c29b..91333b37371 100644
--- a/src/termhooks.h
+++ b/src/termhooks.h
@@ -502,6 +502,8 @@ struct terminal
/* Multi-frame and mouse support hooks. */
+ void (*query_frame_background_color) (struct frame *f, XColor *bgcolor);
+
/* Return the current position of the mouse.
Set *f to the frame the mouse is in, or zero if the mouse is in no
diff --git a/src/w32term.c b/src/w32term.c
index 9560d27a124..c8f7b9933a7 100644
--- a/src/w32term.c
+++ b/src/w32term.c
@@ -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->mouse_position_hook = w32_mouse_position;
terminal->get_focus_frame = w32_get_focus_frame;
terminal->focus_frame_hook = w32_focus_frame;
diff --git a/src/xterm.c b/src/xterm.c
index 951f71cedda..2175835d6ab 100644
--- a/src/xterm.c
+++ b/src/xterm.c
@@ -2354,6 +2354,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.
@@ -13297,6 +13305,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->mouse_position_hook = XTmouse_position;
terminal->get_focus_frame = x_get_focus_frame;
terminal->focus_frame_hook = x_focus_frame;