From 59bc82c0b9e6072f3e889efe74a126e0a9228302 Mon Sep 17 00:00:00 2001 From: Seiji Zenitani Date: Fri, 28 Nov 2008 05:40:36 +0000 Subject: [PATCH] * frame.c (x_set_alpha) [NS_IMPL_COCOA]: Call x_set_frame_alpha. * nsfns.m (ns_frame_parm_handlers): Set alpha handler. * nsterm.m (x_set_frame_alpha): New function. --- src/ChangeLog | 8 ++++++++ src/frame.c | 2 +- src/nsfns.m | 2 +- src/nsterm.m | 44 +++++++++++++++++++++++++++++++++++++++++++- 4 files changed, 53 insertions(+), 3 deletions(-) diff --git a/src/ChangeLog b/src/ChangeLog index c8c1c7636af..df1fcc6dacb 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,11 @@ +2008-11-28 Seiji Zenitani + + * frame.c (x_set_alpha) [NS_IMPL_COCOA]: Call x_set_frame_alpha. + + * nsfns.m (ns_frame_parm_handlers): Set alpha handler. + + * nsterm.m (x_set_frame_alpha): New function. + 2008-11-27 Eli Zaretskii * xfaces.c (Fx_font_family_list, syms_of_xfaces): Fix last change. diff --git a/src/frame.c b/src/frame.c index 722cf2f96a9..611dd1e2f55 100644 --- a/src/frame.c +++ b/src/frame.c @@ -3678,7 +3678,7 @@ x_set_alpha (f, arg, oldval) for (i = 0; i < 2; i++) f->alpha[i] = newval[i]; -#if defined (HAVE_X_WINDOWS) || defined (HAVE_NTGUI) +#if defined (HAVE_X_WINDOWS) || defined (HAVE_NTGUI) || defined (NS_IMPL_COCOA) BLOCK_INPUT; x_set_frame_alpha (f); UNBLOCK_INPUT; diff --git a/src/nsfns.m b/src/nsfns.m index 2e2d6a77b75..df5c7e13daf 100644 --- a/src/nsfns.m +++ b/src/nsfns.m @@ -1040,7 +1040,7 @@ frame_parm_handler ns_frame_parm_handlers[] = 0, /* x_set_wait_for_wm, will ignore */ 0, /* x_set_fullscreen will ignore */ x_set_font_backend, /* generic OK */ - 0 + x_set_alpha }; diff --git a/src/nsterm.m b/src/nsterm.m index 83cc18184ba..fbb6e91612e 100644 --- a/src/nsterm.m +++ b/src/nsterm.m @@ -964,9 +964,15 @@ ns_frame_rehighlight (struct frame *frame) dpyinfo->x_highlight_frame != old_highlight) { if (old_highlight) + { x_update_cursor (old_highlight, 1); + x_set_frame_alpha (old_highlight); + } if (dpyinfo->x_highlight_frame) + { x_update_cursor (dpyinfo->x_highlight_frame, 1); + x_set_frame_alpha (dpyinfo->x_highlight_frame); + } } } @@ -1634,6 +1640,39 @@ ns_get_rgb_color (struct frame *f, float r, float g, float b, float a) } +void +x_set_frame_alpha (struct frame *f) +/* -------------------------------------------------------------------------- + change the entire-frame transparency + -------------------------------------------------------------------------- */ +{ + struct ns_display_info *dpyinfo = FRAME_NS_DISPLAY_INFO (f); + EmacsView *view = FRAME_NS_VIEW (f); + double alpha = 1.0; + double alpha_min = 1.0; + + if (dpyinfo->x_highlight_frame == f) + alpha = f->alpha[0]; + else + alpha = f->alpha[1]; + + if (FLOATP (Vframe_alpha_lower_limit)) + alpha_min = XFLOAT_DATA (Vframe_alpha_lower_limit); + else if (INTEGERP (Vframe_alpha_lower_limit)) + alpha_min = (XINT (Vframe_alpha_lower_limit)) / 100.0; + + if (alpha < 0.0) + return; + else if (1.0 < alpha) + alpha = 1.0; + else if (0.0 <= alpha && alpha < alpha_min && alpha_min <= 1.0) + alpha = alpha_min; + +#ifdef NS_IMPL_COCOA + [[view window] setAlphaValue: alpha]; +#endif +} + /* ========================================================================== @@ -5009,7 +5048,10 @@ if (NS_KEYLOG) NSLog (@"attributedSubstringFromRange request"); /* FIXME: for some reason needed on second and subsequent clicks away from sole-frame Emacs to get hollow box to show */ if (!windowClosing && [[self window] isVisible] == YES) - x_update_cursor (emacsframe, 1); + { + x_update_cursor (emacsframe, 1); + x_set_frame_alpha (emacsframe); + } if (emacs_event) { -- 2.39.5