[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
feature/pgtk d68633b 056/100: * src/pgtkterm.c (pgtk_defined_color): sup
From: |
Yuuki Harano |
Subject: |
feature/pgtk d68633b 056/100: * src/pgtkterm.c (pgtk_defined_color): support gtk special colors |
Date: |
Tue, 24 Nov 2020 08:02:37 -0500 (EST) |
branch: feature/pgtk
commit d68633bfa1124e32f6aa6a288a9c7b2098a39bd8
Author: Yuuki Harano <masm+github@masm11.me>
Commit: Jeff Walsh <jeff.walsh@drtusers-MacBook-Pro.local>
* src/pgtkterm.c (pgtk_defined_color): support gtk special colors
Color functions take the frame
* src/gtkutil.c (xg_check_special_colors): pass frame as argument.
* src/pgtkfns.c (x_set_foreground_color, x_set_background_color,
x_set_cursor_color, pgtk_set_scroll_bar_foreground,
pgtk_set_scroll_bar_background, Fxw_color_defined_p,
Fxw_color_values): pass frame as argument.
* src/pgtkterm.c (pgtk_parse_color): take frame as argument.
(pgtk_lisp_to_color): take frame as argument, and pass it.
Remove pgtk_lisp_to_color
* src/pgtkfns.c (x_set_foreground_color, x_set_background_color,
x_set_cursor_color): use x_decode_color instead of pgtk_lisp_to_color.
(Fxw_color_defined_p, Fxw_color_values):
use pgtk_defined_color instead of pgtk_lisp_to_color.
* src/pgtkterm.c (pgtk_lisp_to_color): remove.
* src/gtkutil.c (xg_check_special_colors): change color format
* src/pgtkterm.h: remove pgtk_lisp_to_color declaration
---
src/gtkutil.c | 5 ++--
src/pgtkfns.c | 80 ++++++++++++++++++++--------------------------------------
src/pgtkterm.c | 20 +++------------
src/pgtkterm.h | 3 +--
4 files changed, 36 insertions(+), 72 deletions(-)
diff --git a/src/gtkutil.c b/src/gtkutil.c
index 16fac6c..ce08ffec 100644
--- a/src/gtkutil.c
+++ b/src/gtkutil.c
@@ -710,11 +710,12 @@ xg_check_special_colors (struct frame *f,
r = col.red * 65535,
g = col.green * 65535,
b = col.blue * 65535;
- sprintf (buf, "rgb:%04x/%04x/%04x", r, g, b);
#ifndef HAVE_PGTK
+ sprintf (buf, "rgb:%04x/%04x/%04x", r, g, b);
success_p = x_parse_color (f, buf, color) != 0;
#else
- success_p = pgtk_parse_color (buf, color) != 0;
+ sprintf (buf, "#%04x%04x%04x", r, g, b);
+ success_p = pgtk_parse_color (f, buf, color) != 0;
#endif
#else
GtkStyle *gsty = gtk_widget_get_style (FRAME_GTK_WIDGET (f));
diff --git a/src/pgtkfns.c b/src/pgtkfns.c
index 79c9aab..feda093 100644
--- a/src/pgtkfns.c
+++ b/src/pgtkfns.c
@@ -133,22 +133,11 @@ pgtk_display_info_for_name (Lisp_Object name)
static void
x_set_foreground_color (struct frame *f, Lisp_Object arg, Lisp_Object oldval)
{
- Emacs_Color col;
-
- /* Must block_input, because pgtk_lisp_to_color does block/unblock_input
- which means that col may be deallocated in its unblock_input if there
- is user input, unless we also block_input. */
- block_input ();
- if (pgtk_lisp_to_color (arg, &col))
- {
- store_frame_param (f, Qforeground_color, oldval);
- unblock_input ();
- error ("Unknown color");
- }
+ unsigned long fg;
- FRAME_X_OUTPUT(f)->foreground_color = col.pixel;
-
- FRAME_FOREGROUND_PIXEL (f) = col.pixel;
+ fg = x_decode_color (f, arg, BLACK_PIX_DEFAULT (f));
+ FRAME_FOREGROUND_PIXEL (f) = fg;
+ FRAME_X_OUTPUT(f)->foreground_color = fg;
if (FRAME_GTK_WIDGET (f))
{
@@ -157,40 +146,30 @@ x_set_foreground_color (struct frame *f, Lisp_Object arg,
Lisp_Object oldval)
if (FRAME_VISIBLE_P (f))
SET_FRAME_GARBAGED (f);
}
- unblock_input ();
}
static void
x_set_background_color (struct frame *f, Lisp_Object arg, Lisp_Object oldval)
{
- Emacs_Color col;
+ unsigned long bg;
- block_input ();
- if (pgtk_lisp_to_color (arg, &col))
- {
- store_frame_param (f, Qbackground_color, oldval);
- unblock_input ();
- error ("Unknown color");
- }
+ bg = x_decode_color (f, arg, WHITE_PIX_DEFAULT (f));
+ FRAME_BACKGROUND_PIXEL (f) = bg;
/* clear the frame */
if (FRAME_VISIBLE_P (f))
pgtk_clear_frame (f);
- PGTK_TRACE("x_set_background_color: col.pixel=%08lx.", col.pixel);
- FRAME_X_OUTPUT(f)->background_color = col.pixel;
- FRAME_BACKGROUND_PIXEL (f) =
- ARGB_TO_ULONG ((unsigned int)(0xff), (unsigned int)(col.red>>8), (unsigned
int)(col.green>>8), (unsigned int)(col.blue>>8));
+ PGTK_TRACE("x_set_background_color: col.pixel=%08lx.", bg);
+ FRAME_X_OUTPUT(f)->background_color = bg;
- xg_set_background_color(f, col.pixel);
+ xg_set_background_color(f, bg);
update_face_from_frame_parameter (f, Qbackground_color, arg);
PGTK_TRACE("visible_p=%d.", FRAME_VISIBLE_P(f));
if (FRAME_VISIBLE_P (f))
SET_FRAME_GARBAGED (f);
-
- unblock_input ();
}
static void
@@ -209,20 +188,16 @@ x_set_cursor_color (struct frame *f, Lisp_Object arg,
Lisp_Object oldval)
{
unsigned long fore_pixel, pixel;
struct pgtk_output *x = f->output_data.pgtk;
- Emacs_Color col;
if (!NILP (Vx_cursor_fore_pixel))
{
- if (pgtk_lisp_to_color(Vx_cursor_fore_pixel, &col))
- signal_error ("Undefined color", Vx_cursor_fore_pixel);
- fore_pixel = col.pixel;
+ fore_pixel = x_decode_color (f, Vx_cursor_fore_pixel,
+ WHITE_PIX_DEFAULT (f));
}
else
fore_pixel = FRAME_BACKGROUND_PIXEL (f);
- if (pgtk_lisp_to_color(arg, &col))
- signal_error ("Undefined color", arg);
- pixel = col.pixel;
+ pixel = x_decode_color (f, arg, BLACK_PIX_DEFAULT (f));
/* Make sure that the cursor color differs from the background color. */
if (pixel == FRAME_BACKGROUND_PIXEL (f))
@@ -817,7 +792,7 @@ pgtk_set_scroll_bar_foreground (struct frame *f,
Lisp_Object new_value, Lisp_Obj
} else if (STRINGP (new_value)) {
Emacs_Color rgb;
- if (!pgtk_parse_color (SSDATA (new_value), &rgb))
+ if (!pgtk_parse_color (f, SSDATA (new_value), &rgb))
error ("Unknown color.");
char css[64];
@@ -838,7 +813,7 @@ pgtk_set_scroll_bar_background (struct frame *f,
Lisp_Object new_value, Lisp_Obj
} else if (STRINGP (new_value)) {
Emacs_Color rgb;
- if (!pgtk_parse_color (SSDATA (new_value), &rgb))
+ if (!pgtk_parse_color (f, SSDATA (new_value), &rgb))
error ("Unknown color.");
char css[64];
@@ -2149,7 +2124,14 @@ DEFUN ("xw-color-defined-p", Fxw_color_defined_p,
Sxw_color_defined_p, 1, 2, 0,
(Lisp_Object color, Lisp_Object frame)
{
Emacs_Color col;
- return pgtk_lisp_to_color (color, &col) ? Qnil : Qt;
+ struct frame *f = decode_window_system_frame (frame);
+
+ CHECK_STRING (color);
+
+ if (pgtk_defined_color (f, SSDATA (color), &col, false, false))
+ return Qt;
+ else
+ return Qnil;
}
@@ -2158,20 +2140,14 @@ DEFUN ("xw-color-values", Fxw_color_values,
Sxw_color_values, 1, 2, 0,
(Lisp_Object color, Lisp_Object frame)
{
Emacs_Color col;
+ struct frame *f = decode_window_system_frame (frame);
CHECK_STRING (color);
- block_input ();
-
- if (pgtk_lisp_to_color (color, &col))
- {
- unblock_input ();
- return Qnil;
- }
-
- unblock_input ();
-
- return list3i (col.red, col.green, col.blue);
+ if (pgtk_defined_color (f, SSDATA (color), &col, false, false))
+ return list3i (col.red, col.green, col.blue);
+ else
+ return Qnil;
}
diff --git a/src/pgtkterm.c b/src/pgtkterm.c
index 2d1a990..ef8daba 100644
--- a/src/pgtkterm.c
+++ b/src/pgtkterm.c
@@ -6436,7 +6436,9 @@ pgtk_defined_color (struct frame *f,
int r;
block_input ();
- r = pgtk_parse_color (name, color_def);
+ r = xg_check_special_colors(f, name, color_def);
+ if (!r)
+ r = pgtk_parse_color (f, name, color_def);
unblock_input ();
return r;
}
@@ -6449,7 +6451,7 @@ pgtk_defined_color (struct frame *f,
and names we've actually looked up; list-colors-display is probably
the most color-intensive case we're likely to hit. */
-int pgtk_parse_color (const char *color_name, Emacs_Color *color)
+int pgtk_parse_color (struct frame *f, const char *color_name, Emacs_Color
*color)
{
PGTK_TRACE("pgtk_parse_color: %s", color_name);
@@ -6468,20 +6470,6 @@ int pgtk_parse_color (const char *color_name,
Emacs_Color *color)
return 0;
}
-int
-pgtk_lisp_to_color (Lisp_Object color, Emacs_Color *col)
-/* --------------------------------------------------------------------------
- Convert a Lisp string object to a NS color
- --------------------------------------------------------------------------
*/
-{
- PGTK_TRACE("pgtk_lisp_to_color");
- if (STRINGP (color))
- return !pgtk_parse_color (SSDATA (color), col);
- else if (SYMBOLP (color))
- return !pgtk_parse_color (SSDATA (SYMBOL_NAME (color)), col);
- return 1;
-}
-
/* On frame F, translate pixel colors to RGB values for the NCOLORS
colors in COLORS. On W32, we no longer try to map colors to
a palette. */
diff --git a/src/pgtkterm.h b/src/pgtkterm.h
index 706198a..b92a2cd 100644
--- a/src/pgtkterm.h
+++ b/src/pgtkterm.h
@@ -534,8 +534,7 @@ extern bool pgtk_defined_color (struct frame *f,
bool makeIndex);
extern void pgtk_query_color (struct frame *f, Emacs_Color *color);
extern void pgtk_query_colors (struct frame *f, Emacs_Color *colors, int
ncolors);
-extern int pgtk_parse_color (const char *color_name, Emacs_Color *color);
-extern int pgtk_lisp_to_color (Lisp_Object color, Emacs_Color *col);
+extern int pgtk_parse_color (struct frame *f, const char *color_name,
Emacs_Color *color);
/* Implemented in pgtkterm.c */
extern void pgtk_clear_area (struct frame *f, int x, int y, int width, int
height);
- feature/pgtk d437aab 092/100: Avoid gtk warnings on X, (continued)
- feature/pgtk d437aab 092/100: Avoid gtk warnings on X, Yuuki Harano, 2020/11/24
- feature/pgtk 886fcb2 096/100: Update copyright dates for PGTK files, Yuuki Harano, 2020/11/24
- feature/pgtk d6ef9af 100/100: Fix crash when .schema.xml is not installed, Yuuki Harano, 2020/11/24
- feature/pgtk 12cc104 009/100: Cleanup x_* to gui_ to match upstream work, Yuuki Harano, 2020/11/24
- feature/pgtk fde74fa 028/100: implement pgtk-frame-list-z-order same as frame-list., Yuuki Harano, 2020/11/24
- feature/pgtk c9e6b44 044/100: Some work toward posframe on wayland, Yuuki Harano, 2020/11/24
- feature/pgtk 964dfcf 062/100: * src/pgtkgui.h: change coding style, Yuuki Harano, 2020/11/24
- feature/pgtk da3c351 019/100: border_color/pixel width, Yuuki Harano, 2020/11/24
- feature/pgtk 014d56f 052/100: * src/pgtkterm.c: Remove incorrect mark_object call., Yuuki Harano, 2020/11/24
- feature/pgtk bc35a1e 032/100: Make multipdisplay work by limiting selection while enabed, Yuuki Harano, 2020/11/24
- feature/pgtk d68633b 056/100: * src/pgtkterm.c (pgtk_defined_color): support gtk special colors,
Yuuki Harano <=
- feature/pgtk 6957f94 024/100: Add PGTK support for fullscreen, Yuuki Harano, 2020/11/24
- feature/pgtk ae3bb14 029/100: implement restacking and cleanup frame z order, Yuuki Harano, 2020/11/24
- feature/pgtk 49645df 047/100: minimize gtkutil.c differences., Yuuki Harano, 2020/11/24
- feature/pgtk d2a29e8 040/100: emacsclient should use both of DISPLAY and WAYLAND_DISPLAY., Yuuki Harano, 2020/11/24
- feature/pgtk be47e34 077/100: Re-port image drawing code from X, Yuuki Harano, 2020/11/24
- feature/pgtk 0b69b73 085/100: Fix crash when child frame updates toolbar, Yuuki Harano, 2020/11/24
- feature/pgtk 1d549fa 015/100: Add support for make-frame-(in)visible, Yuuki Harano, 2020/11/24
- feature/pgtk 19da22e 018/100: Add support for handing the internal border, Yuuki Harano, 2020/11/24
- feature/pgtk e021e23 043/100: End Resize flickering by copying surface rather than just clearing, Yuuki Harano, 2020/11/24
- feature/pgtk fd61a86 030/100: improve some efficiency - simplify draws, Yuuki Harano, 2020/11/24