From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.io!.POSTED.blaine.gmane.org!not-for-mail From: Daniel =?UTF-8?Q?Mart=C3=ADn?= via "Bug reports for GNU Emacs, the Swiss army knife of text editors" Newsgroups: gmane.emacs.bugs Subject: bug#62573: 29.0.60; Cursor color not being inverted in emacs-29 Date: Sun, 02 Apr 2023 23:24:15 +0200 Message-ID: References: <83edp420lx.fsf@gnu.org> <83bkk817rr.fsf@gnu.org> <87mt3rru3q.fsf@yahoo.com> Reply-To: Daniel =?UTF-8?Q?Mart=C3=ADn?= Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="=-=-=" Injection-Info: ciao.gmane.io; posting-host="blaine.gmane.org:116.202.254.214"; logging-data="1706"; mail-complaints-to="usenet@ciao.gmane.io" User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/28.2 (darwin) Cc: 62573@debbugs.gnu.org, Eli Zaretskii , Al Haji-Ali To: Po Lu Original-X-From: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane-mx.org@gnu.org Sun Apr 02 23:25:21 2023 Return-path: Envelope-to: geb-bug-gnu-emacs@m.gmane-mx.org Original-Received: from lists.gnu.org ([209.51.188.17]) by ciao.gmane.io with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1pj5CS-0000CR-9Z for geb-bug-gnu-emacs@m.gmane-mx.org; Sun, 02 Apr 2023 23:25:20 +0200 Original-Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1pj5CD-0000Ge-G7; Sun, 02 Apr 2023 17:25:05 -0400 Original-Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1pj5CB-0000G5-AU for bug-gnu-emacs@gnu.org; Sun, 02 Apr 2023 17:25:03 -0400 Original-Received: from debbugs.gnu.org ([209.51.188.43]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1pj5CB-0005J5-1a for bug-gnu-emacs@gnu.org; Sun, 02 Apr 2023 17:25:03 -0400 Original-Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.84_2) (envelope-from ) id 1pj5CA-0003Ff-8v for bug-gnu-emacs@gnu.org; Sun, 02 Apr 2023 17:25:02 -0400 X-Loop: help-debbugs@gnu.org Resent-From: Daniel =?UTF-8?Q?Mart=C3=ADn?= Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Sun, 02 Apr 2023 21:25:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 62573 X-GNU-PR-Package: emacs Original-Received: via spool by 62573-submit@debbugs.gnu.org id=B62573.168047066712451 (code B ref 62573); Sun, 02 Apr 2023 21:25:02 +0000 Original-Received: (at 62573) by debbugs.gnu.org; 2 Apr 2023 21:24:27 +0000 Original-Received: from localhost ([127.0.0.1]:42847 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1pj5Bb-0003Ek-D9 for submit@debbugs.gnu.org; Sun, 02 Apr 2023 17:24:27 -0400 Original-Received: from sonic309-25.consmr.mail.ir2.yahoo.com ([77.238.179.83]:41632) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1pj5BX-0003EV-R1 for 62573@debbugs.gnu.org; Sun, 02 Apr 2023 17:24:25 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yahoo.es; s=s2048; t=1680470658; bh=4ScXLc5oCrpj+s73oLd1T5d6PJGruGIrVv9DJZ9q39c=; h=From:To:Cc:Subject:References:Date:In-Reply-To:From:Subject:Reply-To; b=TFzO8mqPzGr3bP2L8V/oalfDcBdQUkMe92zDBg8oT/TaUJ5Ynyt7e555ZXDUGryT8JJPM14ZnG71p1wS9wLYlv6EEdvIUyBZ5jFPSxHKIcewk9NNs72H0G6Px/n23tQ4DgMB3JV0Sl9QIOOqmj2BFIxEkXc1EqC52GJlCg5mn4Nw+w6YpbZ/UmTBZ74Yc4VDZ17e+qjUrLw8/s5bElPgkDT8UjeC/f+TDk8dK7S1T6Nq4f6fydV+NT/SurGx2LFth6Rrhqq68mA22qm/2lh4qv/NtkKf2t2KqAeHVyU+IvfDA3XUi2AyaNpIwGvqrpjETx0hRg5/wjoMJqKUbbD/AA== X-SONIC-DKIM-SIGN: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yahoo.com; s=s2048; t=1680470658; bh=TOTtMKn/uDhekYKfUEKvAjMfcuGNTgm9NU6FRxpRAMw=; h=X-Sonic-MF:From:To:Subject:Date:From:Subject; b=aJdH5EPQvEecNUEcekKFoHXW1ygtAtI+T8A/RQKNnhgGWOjEoUhTcN5ghTvI6Zjzu809RhFRl3AEQ2mFJPQNRo4vtIsOLmYX6wwoXwaHFoOR32t98wHSe4VLqqk2AMuXx/1svczFJ99xpUNKEaboJfZ6fwzUe0exNtwRH0cCLb/H8DutSPxpCqOyxN75UdARyzlUChtsB/E+K80/+464WL/xWYMYyeuMZoLbVt/aHZxmKrXUfnk3G/ZscPbikewjVcwYaQozojvu6AqigViQ9TjZ6xUzBkC/LiqYThe4m31eLeJSlUyJ8lEhLSQguIfvx6Ohgcfbl9ioTej6u4/qcg== X-YMail-OSG: 2sYyT_cVM1m30lOhP3KjgrFuGZvMVttmVZXAuo2sm0IP.7lJS3P8vO4hl6TGpAw _OjaE.7vgb9aTD7NZKMdF8k3qQyRmWgQjFqNklLzocL6HXWXTlvRuZo8Xaf6frNkmeDQCrto7FVk 5NPOBAV2DIoNVRPAMKoZUFDuywMHy3jJkSeuSCbjm0.X_4V0F16bTUW3nyPMcsYW5WOqM1pTDb29 IzOBDP_pIvmKKrTjCZFDr0644LzUTSyM2ndcYhz2opps3Ik.kc8HS3hYlXVxDBdyfEYsPIc5EYj1 EJ5JFHGZg6pPnLhu9tYF6odsTtpztMAnmQHRPL7EDa8fuEJTtwmzUW84LoWS4D9QimaZioqc6dwG rGm.w3vg3wVda4O40S5RN6tERys7F6UYXy8dyG0rBBJP339TfyhZwnqMiLDla57CseDl.I3ZPMIG 1DydvDUlQu3HtKEEw8EHzsUYi07hUHjdQOidymOhS6i1qcKBLltfPEBbgaClZA9iRVXtG_6NF9P4 N1uiR5YswAkpeDfkz69g_XiDuGzugRNwpeDdhTrTWUfwhqutnHAEeVB1n4bDYWf06blixaG2ni8g t.gMHkq3TVRL.rc2gXF0Ggf2jYHHxPfaXKgg7mphRb.K3jkx4J1rpWwFVqwvxpFpKhT1T4GBDH3n 5_R5WKUbU9U5JBJoyzU.EBWeJ2zJRE3ZKY1cI4tXwT7ghfQIUuPDiF7CCr2b8hUT0WF3R1ocCpT3 7FNl4hWp8KtHju8qD0aHFD9R0WTLvUIIe9CdwGM4QQ918_B1ZOgQAY1xzqPS3covujIFzAwIop8f EbC69ih1GKXFZbAVcO3N3jgIxOAS5qofTo_NSLf8YL X-Sonic-MF: X-Sonic-ID: fd139522-47cd-4041-8a93-b5c6fa5eb26e Original-Received: from sonic.gate.mail.ne1.yahoo.com by sonic309.consmr.mail.ir2.yahoo.com with HTTP; Sun, 2 Apr 2023 21:24:18 +0000 Original-Received: by hermes--production-ir2-74cd8fc864-jl5bm (Yahoo Inc. Hermes SMTP Server) with ESMTPA ID 85228670b14f7496d640058656ac9a72; Sun, 02 Apr 2023 21:24:16 +0000 (UTC) In-Reply-To: <87mt3rru3q.fsf@yahoo.com> (Po Lu's message of "Sun, 02 Apr 2023 08:44:09 +0800") X-Mailer: WebService/1.1.21284 mail.backend.jedi.jws.acl:role.jedi.acl.token.atz.jws.hermes.yahoo X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list X-BeenThere: bug-gnu-emacs@gnu.org List-Id: "Bug reports for GNU Emacs, the Swiss army knife of text editors" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane-mx.org@gnu.org Original-Sender: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane-mx.org@gnu.org Xref: news.gmane.io gmane.emacs.bugs:259131 Archived-At: --=-=-= Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable Po Lu writes: > Daniel Mart=C3=ADn writes: > >> I've solved the bug by replicating that logic in the appropriate places, >> nsterm.m and macfont.m: > > Nice, thanks. > >> + CGColorRef colorref =3D get_cgcolor_from_nscolor (FRAME_C= URSOR_COLOR (f), f); > > This row is now wider than 80 columns. Please wrap it. > Alright, I have also extracted a couple of macros because there were already some macros for similar code patterns. >> struct face *face =3D s->face; >> if (!face->stipple) >> - { >> - if (s->hl !=3D DRAW_CURSOR) >> - [(NS_FACE_BACKGROUND (face) !=3D 0 >> - ? [NSColor colorWithUnsignedLong:NS_FACE_BACKGROUND (face)] >> - : FRAME_BACKGROUND_COLOR (s->f)) set]; >> - else >> - [FRAME_CURSOR_COLOR (s->f) set]; >> - } >> + { >> + if (s->hl !=3D DRAW_CURSOR) >> + [(NS_FACE_BACKGROUND (face) !=3D 0 >> + ? [NSColor colorWithUnsignedLong:NS_FACE_BACKGROUND (= face)] >> + : FRAME_BACKGROUND_COLOR (s->f)) set]; >> + else if (face && NS_FACE_BACKGROUND (face) >> + =3D=3D [(NSColor*)FRAME_CURSOR_COLOR (s->f) unsi= gnedLong]) >> + [[NSColor colorWithUnsignedLong:NS_FACE_FOREGROUND (fac= e)] set]; >> + else >> + [FRAME_CURSOR_COLOR (s->f) set]; >> + } >> else >> { >> struct ns_display_info *dpyinfo =3D FRAME_DISPLAY_INFO (s= ->f); >> > > Please write: > > (face && (NS_FACE_BACKGROUND (face) > =3D=3D [(NSColor *) FRAME_CURSOR_COLOR (s->f) > unsignedLong])) > > instead. Done. > >> Could you give it a try on macOS and GNUstep? Thank you. > > Works for me, thanks. > > P.S. I think what needs to be done is to make the NS port keep track of > glyph string colors through GCs, so that the relevant code can be easily > synchronized with X. Yes, I agree that we should refactor the code to use GCs in order to avoid these differences with X. Maybe I can work on that and suggest a patch for the master branch. --=-=-= Content-Type: text/x-patch Content-Disposition: attachment; filename=0001-Change-cursor-color-on-NS-port-when-it-matches-the-f.patch >From f824d2e59921f14aa61ece17e8401c8a47c77d5f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Mart=C3=ADn?= Date: Sun, 2 Apr 2023 22:39:44 +0200 Subject: [PATCH] Change cursor color on NS port when it matches the face background * src/macfont.m (CG_SET_FILL_COLOR_WITH_FRAME_CURSOR): New macro. (CG_SET_FILL_COLOR_WITH_FRAME_BACKGROUND): New macro. (macfont_draw): When the cursor's color matches the face background, set the fill color of the cursor to the face foreground. * src/nsterm.m (ns_maybe_dumpglyphs_background): When dumping the background of a glyph string, apply the logic mentioned above. (Bug#62573) --- src/macfont.m | 32 ++++++++++++++++++++++++++------ src/nsterm.m | 20 ++++++++++++-------- 2 files changed, 38 insertions(+), 14 deletions(-) diff --git a/src/macfont.m b/src/macfont.m index d0cdbcd08c7..a582bc1e38e 100644 --- a/src/macfont.m +++ b/src/macfont.m @@ -642,6 +642,20 @@ static void mac_font_get_glyphs_for_variants (CFDataRef, UTF32Char, CGContextSetFillColorWithColor (context, refcol_); \ CGColorRelease (refcol_); \ } while (0) +#define CG_SET_FILL_COLOR_WITH_FRAME_CURSOR(context, frame) \ + do { \ + CGColorRef refcol_ = \ + get_cgcolor_from_nscolor (FRAME_CURSOR_COLOR (frame), frame); \ + CGContextSetFillColorWithColor (context, refcol_); \ + CGColorRelease (refcol_); \ + } while (0) +#define CG_SET_FILL_COLOR_WITH_FRAME_BACKGROUND(context, frame) \ + do { \ + CGColorRef refcol_ = \ + get_cgcolor_from_nscolor (FRAME_BACKGROUND_COLOR (frame), frame); \ + CGContextSetFillColorWithColor (context, refcol_); \ + CGColorRelease (refcol_); \ + } while (0) #define CG_SET_STROKE_COLOR_WITH_FACE_FOREGROUND(context, face) \ do { \ CGColorRef refcol_ = get_cgcolor (NS_FACE_FOREGROUND (face)); \ @@ -2933,9 +2947,12 @@ So we use CTFontDescriptorCreateMatchingFontDescriptor (no { if (s->hl == DRAW_CURSOR) { - CGColorRef colorref = get_cgcolor_from_nscolor (FRAME_CURSOR_COLOR (f), f); - CGContextSetFillColorWithColor (context, colorref); - CGColorRelease (colorref); + if (face && (NS_FACE_BACKGROUND (face) + == [(NSColor *) FRAME_CURSOR_COLOR (f) + unsignedLong])) + CG_SET_FILL_COLOR_WITH_FACE_FOREGROUND (context, face); + else + CG_SET_FILL_COLOR_WITH_FRAME_CURSOR (context, f); } else CG_SET_FILL_COLOR_WITH_FACE_BACKGROUND (context, face); @@ -2949,9 +2966,12 @@ So we use CTFontDescriptorCreateMatchingFontDescriptor (no CGContextScaleCTM (context, 1, -1); if (s->hl == DRAW_CURSOR) { - CGColorRef colorref = get_cgcolor_from_nscolor (FRAME_BACKGROUND_COLOR (f), f); - CGContextSetFillColorWithColor (context, colorref); - CGColorRelease (colorref); + if (face && (NS_FACE_BACKGROUND (face) + == [(NSColor *) FRAME_CURSOR_COLOR (f) + unsignedLong])) + CG_SET_FILL_COLOR_WITH_FACE_BACKGROUND (context, face); + else + CG_SET_FILL_COLOR_WITH_FRAME_BACKGROUND (context, f); } else CG_SET_FILL_COLOR_WITH_FACE_FOREGROUND (context, face); diff --git a/src/nsterm.m b/src/nsterm.m index 46007ec4fcb..637bc4b6419 100644 --- a/src/nsterm.m +++ b/src/nsterm.m @@ -3750,14 +3750,18 @@ Function modeled after x_draw_glyph_string_box (). { struct face *face = s->face; if (!face->stipple) - { - if (s->hl != DRAW_CURSOR) - [(NS_FACE_BACKGROUND (face) != 0 - ? [NSColor colorWithUnsignedLong:NS_FACE_BACKGROUND (face)] - : FRAME_BACKGROUND_COLOR (s->f)) set]; - else - [FRAME_CURSOR_COLOR (s->f) set]; - } + { + if (s->hl != DRAW_CURSOR) + [(NS_FACE_BACKGROUND (face) != 0 + ? [NSColor colorWithUnsignedLong:NS_FACE_BACKGROUND (face)] + : FRAME_BACKGROUND_COLOR (s->f)) set]; + else if (face && (NS_FACE_BACKGROUND (face) + == [(NSColor *) FRAME_CURSOR_COLOR (s->f) + unsignedLong])) + [[NSColor colorWithUnsignedLong:NS_FACE_FOREGROUND (face)] set]; + else + [FRAME_CURSOR_COLOR (s->f) set]; + } else { struct ns_display_info *dpyinfo = FRAME_DISPLAY_INFO (s->f); -- 2.34.1 --=-=-=--