From f43b79979b5bb7077b37c78b183160e007454088 Mon Sep 17 00:00:00 2001 From: Jon Rubens Date: Mon, 22 Jan 2024 16:26:09 -0800 Subject: [PATCH] Attempt at adding alpha_background functionality to NS --- src/nsfns.m | 9 ++++----- src/nsfont.m | 2 +- src/nsterm.h | 2 +- src/nsterm.m | 44 ++++++++++++++++++++++++-------------------- 4 files changed, 30 insertions(+), 27 deletions(-) diff --git a/src/nsfns.m b/src/nsfns.m index b0281aac257..705c8e5aab7 100644 --- a/src/nsfns.m +++ b/src/nsfns.m @@ -282,7 +282,7 @@ Turn the input menu (an NSMenu) into a lisp list for tracking on lisp side. [f->output_data.ns->foreground_color release]; f->output_data.ns->foreground_color = col; - FRAME_FOREGROUND_PIXEL (f) = [col unsignedLong]; + FRAME_FOREGROUND_PIXEL (f) = [[col colorWithAlphaComponent: f->alpha_background] unsignedLong]; if (FRAME_NS_VIEW (f)) { @@ -301,7 +301,7 @@ Turn the input menu (an NSMenu) into a lisp list for tracking on lisp side. struct face *face; NSColor *col; NSView *view = FRAME_NS_VIEW (f); - EmacsCGFloat alpha; + EmacsCGFloat alpha = f->alpha_background; block_input (); if (ns_lisp_to_color (arg, &col)) @@ -315,12 +315,11 @@ Turn the input menu (an NSMenu) into a lisp list for tracking on lisp side. [f->output_data.ns->background_color release]; f->output_data.ns->background_color = col; - FRAME_BACKGROUND_PIXEL (f) = [col unsignedLong]; - alpha = [col alphaComponent]; + FRAME_BACKGROUND_PIXEL (f) = [[col colorWithAlphaComponent: alpha] unsignedLong]; if (view != nil) { - [[view window] setBackgroundColor: col]; + [[view window] setBackgroundColor: [col colorWithAlphaComponent: alpha]]; if (alpha != (EmacsCGFloat) 1.0) [[view window] setOpaque: NO]; diff --git a/src/nsfont.m b/src/nsfont.m index 1205fbe5263..9da964956e1 100644 --- a/src/nsfont.m +++ b/src/nsfont.m @@ -1185,7 +1185,7 @@ is false when (FROM > 0 || TO < S->nchars). */ { if (s->hl != DRAW_CURSOR) [(NS_FACE_BACKGROUND (face) != 0 - ? [NSColor colorWithUnsignedLong:NS_FACE_BACKGROUND (face)] + ? [[NSColor colorWithUnsignedLong:NS_FACE_BACKGROUND (face)] colorWithAlphaComponent: s->f->alpha_background] : FRAME_BACKGROUND_COLOR (s->f)) set]; else [FRAME_CURSOR_COLOR (s->f) set]; diff --git a/src/nsterm.h b/src/nsterm.h index c2965cfcc0f..7b0a1db601d 100644 --- a/src/nsterm.h +++ b/src/nsterm.h @@ -1017,7 +1017,7 @@ #define FRAME_NS_WINDOW(f) ((f)->output_data.ns->window_desc) #define FRAME_NATIVE_WINDOW(f) FRAME_NS_WINDOW (f) #define FRAME_FOREGROUND_COLOR(f) ((f)->output_data.ns->foreground_color) -#define FRAME_BACKGROUND_COLOR(f) ((f)->output_data.ns->background_color) +#define FRAME_BACKGROUND_COLOR(f) ([(f)->output_data.ns->background_color colorWithAlphaComponent: f->alpha_background]) #define NS_FACE_FOREGROUND(f) ((f)->foreground) #define NS_FACE_BACKGROUND(f) ((f)->background) diff --git a/src/nsterm.m b/src/nsterm.m index 518b38658d1..1fd7ea54dae 100644 --- a/src/nsterm.m +++ b/src/nsterm.m @@ -2618,8 +2618,9 @@ Hide the window (X11 semantics) block_input (); ns_focus (f, &r, 1); - [[NSColor colorWithUnsignedLong:NS_FACE_BACKGROUND - (FACE_FROM_ID (f, DEFAULT_FACE_ID))] set]; + [[[NSColor colorWithUnsignedLong:NS_FACE_BACKGROUND + (FACE_FROM_ID (f, DEFAULT_FACE_ID))] + colorWithAlphaComponent: f->alpha_background] set]; NSRectFill (r); ns_unfocus (f); @@ -2647,7 +2648,7 @@ Hide the window (X11 semantics) r = NSIntersectionRect (r, [view frame]); ns_focus (f, &r, 1); - [[NSColor colorWithUnsignedLong:NS_FACE_BACKGROUND (face)] set]; + [[[NSColor colorWithUnsignedLong:NS_FACE_BACKGROUND (face)] colorWithAlphaComponent: f->alpha_background] set]; NSRectFill (r); @@ -2751,7 +2752,7 @@ Hide the window (X11 semantics) return; ns_focus (f, NULL, 1); - [[NSColor colorWithUnsignedLong:NS_FACE_BACKGROUND (face)] set]; + [[[NSColor colorWithUnsignedLong:NS_FACE_BACKGROUND (face)] colorWithAlphaComponent: f->alpha_background] set]; NSRectFill (NSMakeRect (0, margin, width, border)); NSRectFill (NSMakeRect (0, 0, border, height)); NSRectFill (NSMakeRect (0, margin, width, border)); @@ -2802,7 +2803,7 @@ Hide the window (X11 semantics) NSRect r = NSMakeRect (0, y, FRAME_PIXEL_WIDTH (f), height); ns_focus (f, &r, 1); - [[NSColor colorWithUnsignedLong:NS_FACE_BACKGROUND (face)] set]; + [[[NSColor colorWithUnsignedLong:NS_FACE_BACKGROUND (face)] colorWithAlphaComponent: f->alpha_background] set]; NSRectFill (NSMakeRect (0, y, width, height)); NSRectFill (NSMakeRect (FRAME_PIXEL_WIDTH (f) - width, y, width, height)); @@ -2966,8 +2967,7 @@ Hide the window (X11 semantics) if (! NSIsEmptyRect (clearRect)) { NSTRACE_RECT ("clearRect", clearRect); - - [[NSColor colorWithUnsignedLong:face->background] set]; + [[[NSColor colorWithUnsignedLong:face->background] colorWithAlphaComponent: f->alpha_background] set]; NSRectFill (clearRect); } @@ -2994,7 +2994,7 @@ Hide the window (X11 semantics) if (!p->cursor_p) bm_color = [NSColor colorWithUnsignedLong:face->foreground]; else if (p->overlay_p) - bm_color = [NSColor colorWithUnsignedLong:face->background]; + bm_color = [[NSColor colorWithUnsignedLong:face->background] colorWithAlphaComponent: f->alpha_background]; else bm_color = f->output_data.ns->cursor_color; @@ -3491,7 +3491,7 @@ larger if there are taller display elements (e.g., characters if (s->face->use_box_color_for_shadows_p) color = [NSColor colorWithUnsignedLong: s->face->box_color]; else - color = [NSColor colorWithUnsignedLong: s->face->background]; + color = [[NSColor colorWithUnsignedLong: s->face->background] colorWithAlphaComponent: s->f->alpha_background]; if (s->hl == DRAW_CURSOR) color = FRAME_CURSOR_COLOR (s->f); @@ -3719,7 +3719,7 @@ Function modeled after x_draw_glyph_string_box (). if (s->face->box == FACE_SIMPLE_BOX && s->face->box_color) { ns_draw_box (r, abs (hthickness), abs (vthickness), - [NSColor colorWithUnsignedLong:face->box_color], + [[NSColor colorWithUnsignedLong:face->box_color] colorWithAlphaComponent: s->f->alpha_background], left_p, right_p); } else @@ -3757,8 +3757,10 @@ Function modeled after x_draw_glyph_string_box (). { if (s->hl != DRAW_CURSOR) [(NS_FACE_BACKGROUND (face) != 0 - ? [NSColor colorWithUnsignedLong:NS_FACE_BACKGROUND (face)] + ? [[NSColor colorWithUnsignedLong:NS_FACE_BACKGROUND (face)] + colorWithAlphaComponent: s->f->alpha_background] : FRAME_BACKGROUND_COLOR (s->f)) set]; + else if (face && (NS_FACE_BACKGROUND (face) == [(NSColor *) FRAME_CURSOR_COLOR (s->f) unsignedLong])) @@ -3902,7 +3904,7 @@ Function modeled after x_draw_glyph_string_box (). otherwise, since we composite the image under NS (instead of mucking with its background color), we must clear just the image area. */ - [[NSColor colorWithUnsignedLong:NS_FACE_BACKGROUND (face)] set]; + [[[NSColor colorWithUnsignedLong:NS_FACE_BACKGROUND (face)] colorWithAlphaComponent: s->f->alpha_background] set]; if (bg_height > s->slice.height || s->img->hmargin || s->img->vmargin || s->img->mask || s->img->pixmap == 0 || s->width != s->background_width) @@ -3972,7 +3974,7 @@ Function modeled after x_draw_glyph_string_box (). if (s->hl == DRAW_CURSOR) { [FRAME_CURSOR_COLOR (s->f) set]; - tdCol = [NSColor colorWithUnsignedLong: NS_FACE_BACKGROUND (face)]; + tdCol = [[NSColor colorWithUnsignedLong: NS_FACE_BACKGROUND (face)] colorWithAlphaComponent: s->f->alpha_background]; } else tdCol = [NSColor colorWithUnsignedLong: NS_FACE_FOREGROUND (face)]; @@ -4066,10 +4068,10 @@ Function modeled after x_draw_glyph_string_box (). face = FACE_FROM_ID (s->f, MOUSE_FACE_ID); prepare_face_for_display (s->f, face); - [[NSColor colorWithUnsignedLong: face->background] set]; + [[[NSColor colorWithUnsignedLong: face->background] colorWithAlphaComponent: s->f->alpha_background] set]; } else - [[NSColor colorWithUnsignedLong: s->face->background] set]; + [[[NSColor colorWithUnsignedLong: s->face->background] colorWithAlphaComponent: s->f->alpha_background] set]; NSRectFill (NSMakeRect (x, y, w, h)); } } @@ -4095,7 +4097,7 @@ Function modeled after x_draw_glyph_string_box (). if (s->hl == DRAW_CURSOR) [FRAME_CURSOR_COLOR (s->f) set]; else - [[NSColor colorWithUnsignedLong: s->face->background] set]; + [[[NSColor colorWithUnsignedLong: s->face->background] colorWithAlphaComponent: s->f->alpha_background] set]; NSRectFill (NSMakeRect (x, s->y, background_width, s->height)); } @@ -8374,8 +8376,9 @@ - (void)toggleFullScreen: (id)sender w = (EmacsWindow *)[self window]; onFirstScreen = [[w screen] isEqual:[[NSScreen screens] objectAtIndex:0]]; f = emacsframe; - col = [NSColor colorWithUnsignedLong:NS_FACE_BACKGROUND - (FACE_FROM_ID (f, DEFAULT_FACE_ID))]; + col = [[NSColor colorWithUnsignedLong:NS_FACE_BACKGROUND + (FACE_FROM_ID (f, DEFAULT_FACE_ID))] + colorWithAlphaComponent: f->alpha_background]; if (fs_state != FULLSCREEN_BOTH) { @@ -9171,8 +9174,9 @@ - (instancetype) initWithEmacsFrame: (struct frame *) f f->border_width = [self borderWidth]; - col = [NSColor colorWithUnsignedLong:NS_FACE_BACKGROUND - (FACE_FROM_ID (f, DEFAULT_FACE_ID))]; + col = [[NSColor colorWithUnsignedLong:NS_FACE_BACKGROUND + (FACE_FROM_ID (f, DEFAULT_FACE_ID))] + colorWithAlphaComponent: f->alpha_background]; [self setBackgroundColor:col]; if ([col alphaComponent] != (EmacsCGFloat) 1.0) [self setOpaque:NO]; -- 2.39.3 (Apple Git-145)