Commit 5d8b0fad authored by Alexander Gramiak's avatar Alexander Gramiak
Browse files

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.
parent 41e20ee4
......@@ -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
......
......@@ -2447,6 +2447,14 @@ so some key presses (TAB) are swallowed by the system. */
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 @@ static Lisp_Object ns_new_font (struct frame *f, Lisp_Object font_object,
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;
......
......@@ -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. */
......
......@@ -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;
......
......@@ -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;
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment