aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorYuuki Harano2019-07-21 23:11:50 +0900
committerJeff Walsh2020-11-22 14:46:55 +1100
commitb3a20d7a21795f4e2847938ace6dd454f6b4e870 (patch)
treead882363e3caf03a081ace89560cb13ac0ea0fa3 /src
parentbfbcb112484c3521cd9238e1c84aa961c2c89c2f (diff)
downloademacs-b3a20d7a21795f4e2847938ace6dd454f6b4e870.tar.gz
emacs-b3a20d7a21795f4e2847938ace6dd454f6b4e870.zip
Implement Scroll-bar-forground and scroll-bar-background
* src/pgtkterm.h (struct pgtk_output): * src/pgtkterm.c (x_free_frame_resources): * src/pgtkfns.c (pgtk_set_scroll_bar_foreground) (pgtk_set_scroll_bar_background, pgtk_frame_parm_handlers) (Fx_create_frame): * src/gtkutil.c (xg_finish_scroll_bar_creation):handle scrollbar css values * etc/org.gnu.emacs.defaults.gschema.xml: add scroll bar fields scroll-bar-foreground, scroll-bar-background 実装。
Diffstat (limited to 'src')
-rw-r--r--src/gtkutil.c8
-rw-r--r--src/pgtkfns.c65
-rw-r--r--src/pgtkterm.c16
-rw-r--r--src/pgtkterm.h4
4 files changed, 77 insertions, 16 deletions
diff --git a/src/gtkutil.c b/src/gtkutil.c
index 6c2691ecd99..b202aa02e2b 100644
--- a/src/gtkutil.c
+++ b/src/gtkutil.c
@@ -4054,6 +4054,14 @@ xg_finish_scroll_bar_creation (struct frame *f,
4054 /* Set the cursor to an arrow. */ 4054 /* Set the cursor to an arrow. */
4055 xg_set_cursor (webox, FRAME_DISPLAY_INFO (f)->xg_cursor); 4055 xg_set_cursor (webox, FRAME_DISPLAY_INFO (f)->xg_cursor);
4056 4056
4057#ifdef HAVE_PGTK
4058 GtkStyleContext *ctxt = gtk_widget_get_style_context(wscroll);
4059 gtk_style_context_add_provider(ctxt, GTK_STYLE_PROVIDER(FRAME_OUTPUT_DATA (f)->scrollbar_foreground_css_provider),
4060 GTK_STYLE_PROVIDER_PRIORITY_USER);
4061 gtk_style_context_add_provider(ctxt, GTK_STYLE_PROVIDER(FRAME_OUTPUT_DATA (f)->scrollbar_background_css_provider),
4062 GTK_STYLE_PROVIDER_PRIORITY_USER);
4063#endif
4064
4057 bar->x_window = scroll_id; 4065 bar->x_window = scroll_id;
4058} 4066}
4059 4067
diff --git a/src/pgtkfns.c b/src/pgtkfns.c
index f7edc073a02..a8f81761b3d 100644
--- a/src/pgtkfns.c
+++ b/src/pgtkfns.c
@@ -743,6 +743,48 @@ pgtk_set_tool_bar_position (struct frame *f,
743 wrong_choice (choice, new_value); 743 wrong_choice (choice, new_value);
744} 744}
745 745
746static void
747pgtk_set_scroll_bar_foreground (struct frame *f, Lisp_Object new_value, Lisp_Object old_value)
748{
749 GtkCssProvider *css_provider = FRAME_X_OUTPUT (f)->scrollbar_foreground_css_provider;
750
751 if (NILP (new_value)) {
752 gtk_css_provider_load_from_data(css_provider, "", -1, NULL);
753 } else if (STRINGP (new_value)) {
754 Emacs_Color rgb;
755
756 if (!pgtk_parse_color (SSDATA (new_value), &rgb))
757 error ("Unknown color.");
758
759 char css[64];
760 sprintf(css, "scrollbar slider { background-color: #%06x; }", (unsigned int) rgb.pixel & 0xffffff);
761 gtk_css_provider_load_from_data(css_provider, css, -1, NULL);
762
763 } else
764 error ("Invalid scroll-bar-foreground.");
765}
766
767static void
768pgtk_set_scroll_bar_background (struct frame *f, Lisp_Object new_value, Lisp_Object old_value)
769{
770 GtkCssProvider *css_provider = FRAME_X_OUTPUT (f)->scrollbar_background_css_provider;
771
772 if (NILP (new_value)) {
773 gtk_css_provider_load_from_data(css_provider, "", -1, NULL);
774 } else if (STRINGP (new_value)) {
775 Emacs_Color rgb;
776
777 if (!pgtk_parse_color (SSDATA (new_value), &rgb))
778 error ("Unknown color.");
779
780 char css[64];
781 sprintf(css, "scrollbar trough { background-color: #%06x; }", (unsigned int) rgb.pixel & 0xffffff);
782 gtk_css_provider_load_from_data(css_provider, css, -1, NULL);
783
784 } else
785 error ("Invalid scroll-bar-background.");
786}
787
746/* Note: see frame.c for template, also where generic functions are impl */ 788/* Note: see frame.c for template, also where generic functions are impl */
747frame_parm_handler pgtk_frame_parm_handlers[] = 789frame_parm_handler pgtk_frame_parm_handlers[] =
748{ 790{
@@ -771,8 +813,8 @@ frame_parm_handler pgtk_frame_parm_handlers[] =
771 gui_set_horizontal_scroll_bars, /* generic OK */ 813 gui_set_horizontal_scroll_bars, /* generic OK */
772 gui_set_visibility, /* generic OK */ 814 gui_set_visibility, /* generic OK */
773 x_set_tool_bar_lines, 815 x_set_tool_bar_lines,
774 0, /* x_set_scroll_bar_foreground, will ignore */ 816 pgtk_set_scroll_bar_foreground,
775 0, /* x_set_scroll_bar_background, will ignore */ 817 pgtk_set_scroll_bar_background,
776 gui_set_screen_gamma, /* generic OK */ 818 gui_set_screen_gamma, /* generic OK */
777 gui_set_line_spacing, /* generic OK, sets f->extra_line_spacing to int */ 819 gui_set_line_spacing, /* generic OK, sets f->extra_line_spacing to int */
778 gui_set_left_fringe, /* generic OK */ 820 gui_set_left_fringe, /* generic OK */
@@ -1043,13 +1085,12 @@ This function is an internal primitive--use `make-frame' instead. */)
1043 FRAME_X_OUTPUT(f)->icon_bitmap = -1; 1085 FRAME_X_OUTPUT(f)->icon_bitmap = -1;
1044#endif 1086#endif
1045 FRAME_FONTSET (f) = -1; 1087 FRAME_FONTSET (f) = -1;
1046#if 0
1047 FRAME_X_OUTPUT(f)->scroll_bar_foreground_pixel = -1;
1048 FRAME_X_OUTPUT(f)->scroll_bar_background_pixel = -1;
1049#endif
1050 FRAME_X_OUTPUT(f)->white_relief.pixel = -1; 1088 FRAME_X_OUTPUT(f)->white_relief.pixel = -1;
1051 FRAME_X_OUTPUT(f)->black_relief.pixel = -1; 1089 FRAME_X_OUTPUT(f)->black_relief.pixel = -1;
1052 1090
1091 FRAME_X_OUTPUT(f)->scrollbar_foreground_css_provider = gtk_css_provider_new();
1092 FRAME_X_OUTPUT(f)->scrollbar_background_css_provider = gtk_css_provider_new();
1093
1053 fset_icon_name (f, 1094 fset_icon_name (f,
1054 gui_display_get_arg (dpyinfo, parms, Qicon_name, "iconName", "Title", 1095 gui_display_get_arg (dpyinfo, parms, Qicon_name, "iconName", "Title",
1055 RES_TYPE_STRING)); 1096 RES_TYPE_STRING));
@@ -1195,14 +1236,10 @@ This function is an internal primitive--use `make-frame' instead. */)
1195 gui_default_parameter (f, parms, Qno_special_glyphs, Qnil, 1236 gui_default_parameter (f, parms, Qno_special_glyphs, Qnil,
1196 NULL, NULL, RES_TYPE_BOOLEAN); 1237 NULL, NULL, RES_TYPE_BOOLEAN);
1197 1238
1198#if 0 1239 gui_default_parameter (f, parms, Qscroll_bar_foreground, Qnil,
1199 x_default_scroll_bar_color_parameter (f, parms, Qscroll_bar_foreground, 1240 "scrollBarForeground", "ScrollBarForeground", RES_TYPE_STRING);
1200 "scrollBarForeground", 1241 gui_default_parameter (f, parms, Qscroll_bar_background, Qnil,
1201 "ScrollBarForeground", true); 1242 "scrollBarBackground", "ScrollBarBackground", RES_TYPE_STRING);
1202 x_default_scroll_bar_color_parameter (f, parms, Qscroll_bar_background,
1203 "scrollBarBackground",
1204 "ScrollBarBackground", false);
1205#endif
1206 1243
1207 /* Init faces before gui_default_parameter is called for the 1244 /* Init faces before gui_default_parameter is called for the
1208 scroll-bar-width parameter because otherwise we end up in 1245 scroll-bar-width parameter because otherwise we end up in
diff --git a/src/pgtkterm.c b/src/pgtkterm.c
index 5890326430f..4665a934718 100644
--- a/src/pgtkterm.c
+++ b/src/pgtkterm.c
@@ -194,8 +194,6 @@ x_free_frame_resources (struct frame *f)
194 if (f == hlinfo->mouse_face_mouse_frame) 194 if (f == hlinfo->mouse_face_mouse_frame)
195 reset_mouse_highlight (hlinfo); 195 reset_mouse_highlight (hlinfo);
196 196
197 gtk_widget_destroy(FRAME_GTK_OUTER_WIDGET(f));
198
199 if (FRAME_X_OUTPUT(f)->border_color_css_provider != NULL) { 197 if (FRAME_X_OUTPUT(f)->border_color_css_provider != NULL) {
200 GtkStyleContext *ctxt = gtk_widget_get_style_context(FRAME_GTK_OUTER_WIDGET(f)); 198 GtkStyleContext *ctxt = gtk_widget_get_style_context(FRAME_GTK_OUTER_WIDGET(f));
201 GtkCssProvider *old = FRAME_X_OUTPUT(f)->border_color_css_provider; 199 GtkCssProvider *old = FRAME_X_OUTPUT(f)->border_color_css_provider;
@@ -203,6 +201,20 @@ x_free_frame_resources (struct frame *f)
203 FRAME_X_OUTPUT(f)->border_color_css_provider = NULL; 201 FRAME_X_OUTPUT(f)->border_color_css_provider = NULL;
204 } 202 }
205 203
204 if (FRAME_X_OUTPUT(f)->scrollbar_foreground_css_provider != NULL) {
205 GtkCssProvider *old = FRAME_X_OUTPUT(f)->scrollbar_foreground_css_provider;
206 g_object_unref (old);
207 FRAME_X_OUTPUT(f)->scrollbar_foreground_css_provider = NULL;
208 }
209
210 if (FRAME_X_OUTPUT(f)->scrollbar_background_css_provider != NULL) {
211 GtkCssProvider *old = FRAME_X_OUTPUT(f)->scrollbar_background_css_provider;
212 g_object_unref (old);
213 FRAME_X_OUTPUT(f)->scrollbar_background_css_provider = NULL;
214 }
215
216 gtk_widget_destroy(FRAME_GTK_OUTER_WIDGET(f));
217
206 if (FRAME_X_OUTPUT(f)->cr_surface_visible_bell != NULL) { 218 if (FRAME_X_OUTPUT(f)->cr_surface_visible_bell != NULL) {
207 cairo_surface_destroy(FRAME_X_OUTPUT(f)->cr_surface_visible_bell); 219 cairo_surface_destroy(FRAME_X_OUTPUT(f)->cr_surface_visible_bell);
208 FRAME_X_OUTPUT(f)->cr_surface_visible_bell = NULL; 220 FRAME_X_OUTPUT(f)->cr_surface_visible_bell = NULL;
diff --git a/src/pgtkterm.h b/src/pgtkterm.h
index c85a9ea097e..4c6ef0f6bb8 100644
--- a/src/pgtkterm.h
+++ b/src/pgtkterm.h
@@ -265,6 +265,10 @@ struct pgtk_output
265 unsigned long border_pixel; 265 unsigned long border_pixel;
266 GtkCssProvider *border_color_css_provider; 266 GtkCssProvider *border_color_css_provider;
267 267
268 /* scrollbar color */
269 GtkCssProvider *scrollbar_foreground_css_provider;
270 GtkCssProvider *scrollbar_background_css_provider;
271
268 /* Widget whose cursor is hourglass_cursor. This widget is temporarily 272 /* Widget whose cursor is hourglass_cursor. This widget is temporarily
269 mapped to display an hourglass cursor. */ 273 mapped to display an hourglass cursor. */
270 GtkWidget *hourglass_widget; 274 GtkWidget *hourglass_widget;