From: Alan Third <alan@idiocy.org>
To: Aaron Jensen <aaronjensen@gmail.com>
Cc: 32932@debbugs.gnu.org, boris@d12frosted.io
Subject: bug#32932: 27.0.50; render bugs on macOS Mojave
Date: Thu, 8 Nov 2018 23:21:13 +0000 [thread overview]
Message-ID: <20181108232113.GA15030@breton.holly.idiocy.org> (raw)
In-Reply-To: <CAHyO48yYg_+QEOVt_AXjWKZPP8PVW8Y2JX8OVge-y6YjM3Nf+g@mail.gmail.com>
[-- Attachment #1: Type: text/plain, Size: 1129 bytes --]
On Thu, Nov 08, 2018 at 08:28:03AM -0800, Aaron Jensen wrote:
> On November 8, 2018 at 8:17:21 AM, Alan Third
> (alan@idiocy.org(mailto:alan@idiocy.org)) wrote:
>
> > If I could suppress the clearing action that would solve the problem.
> >
> > If expose_frame could draw the rectangle as it was before the
> > frame/window was marked garbaged, that would also solve the problem.
> >
> > I don’t believe the former is possible, and I don’t know if the latter
> > is possible.
>
> I’m only partially following this now, so I’m sorry if this idea
> doesn’t make sense—but if there’s a spot where the repaint actually
> happens, could you dirty the rects right before the repaint. In other
> words, queue into a queue the rect dirtying in all the places it
> happens and only actually process the dirty queue once you know you
> can paint.
Yes, and I hadn’t thought of that option. It makes a lot more sense
than queueing the clears. I’ve got another patch for you to try first,
though. This one requires the previous one (i.e. you should be able to
just apply it without the removing anything).
--
Alan Third
[-- Attachment #2: 0001-Further-changes-to-NS-drawing-bug-32932.patch --]
[-- Type: text/plain, Size: 4221 bytes --]
From 171713fb172911416ac4615f4bf3ae1802a4e756 Mon Sep 17 00:00:00 2001
From: Alan Third <alan@idiocy.org>
Date: Thu, 8 Nov 2018 23:11:31 +0000
Subject: [PATCH] Further changes to NS drawing (bug#32932)
* src/nsterm.m (ns_update_begin): Get rid of the display at the start
of redisplay.
(ns_update_window_begin): Remove redundant code that never executes.
(ns_draw_window_cursor): Perform a display when not in redisplay.
([EmacsView drawRect:]): Show the rectangle being exposed.
* src/xdisp.c (expose_window_tree) [HAVE_NS]:
(expose_frame) [HAVE_NS]: Redraw even if the frame is garbaged.
---
src/nsterm.m | 43 +++++++++----------------------------------
src/xdisp.c | 8 +++++++-
2 files changed, 16 insertions(+), 35 deletions(-)
diff --git a/src/nsterm.m b/src/nsterm.m
index bb21be4a18..9e6779d4a3 100644
--- a/src/nsterm.m
+++ b/src/nsterm.m
@@ -1061,17 +1061,6 @@ static NSRect constrain_frame_rect(NSRect frameRect, bool isFullscreen)
ns_update_auto_hide_menu_bar ();
- /* Flush any existing changes to screen before redisplay gets going.
- If we don't do this then it's possible for redisplay to mark
- areas as garbaged so they won't be redrawn in the next drawRect
- call.
-
- Is this a bad thing to do since we're effectively calling
- frame_expose from within redisplay? */
- block_input ();
- [FRAME_NS_VIEW (f) displayIfNeeded];
- unblock_input ();
-
if ([view isFullscreen] && [view fsIsNative])
{
// Fix reappearing tool bar in fullscreen for Mac OS X 10.7
@@ -1080,29 +1069,6 @@ static NSRect constrain_frame_rect(NSRect frameRect, bool isFullscreen)
if (! tbar_visible != ! [toolbar isVisible])
[toolbar setVisible: tbar_visible];
}
-
- /* drawRect may have been called for say the minibuffer, and then clip path
- is for the minibuffer. But the display engine may draw more because
- we have set the frame as garbaged. So reset clip path to the whole
- view. */
- /* FIXME: I don't think we need to do this. */
- if ([NSView focusView] == FRAME_NS_VIEW (f))
- {
- NSBezierPath *bp;
- NSRect r = [view frame];
- NSRect cr = [[view window] frame];
- /* If a large frame size is set, r may be larger than the window frame
- before constrained. In that case don't change the clip path, as we
- will clear in to the tool bar and title bar. */
- if (r.size.height
- + FRAME_NS_TITLEBAR_HEIGHT (f)
- + FRAME_TOOLBAR_HEIGHT (f) <= cr.size.height)
- {
- bp = [[NSBezierPath bezierPathWithRect: r] retain];
- [bp setClip];
- [bp release];
- }
- }
#endif
}
@@ -3158,6 +3124,12 @@ Note that CURSOR_WIDTH is meaningful only for (h)bar cursors.
ns_reset_clipping (f);
}
+ else if (! redisplaying_p)
+ {
+ /* If this function is called outside redisplay, it probably
+ means we need an immediate update. */
+ [FRAME_NS_VIEW (f) display];
+ }
}
@@ -8120,6 +8092,9 @@ - (void)drawRect: (NSRect)rect
for (int i = 0 ; i < numRects ; i++)
{
NSRect r = rectList[i];
+
+ NSTRACE_RECT ("r", r);
+
expose_frame (emacsframe,
NSMinX (r), NSMinY (r),
NSWidth (r), NSHeight (r));
diff --git a/src/xdisp.c b/src/xdisp.c
index 357f0fb30c..a59a62fb93 100644
--- a/src/xdisp.c
+++ b/src/xdisp.c
@@ -32258,7 +32258,11 @@ expose_window_tree (struct window *w, XRectangle *r)
struct frame *f = XFRAME (w->frame);
bool mouse_face_overwritten_p = false;
- while (w && !FRAME_GARBAGED_P (f))
+ while (w
+#if !defined (HAVE_NS)
+ && !FRAME_GARBAGED_P (f)
+#endif
+ )
{
mouse_face_overwritten_p
|= (WINDOWP (w->contents)
@@ -32286,12 +32290,14 @@ expose_frame (struct frame *f, int x, int y, int w, int h)
TRACE ((stderr, "expose_frame "));
+#if !defined (HAVE_NS)
/* No need to redraw if frame will be redrawn soon. */
if (FRAME_GARBAGED_P (f))
{
TRACE ((stderr, " garbaged\n"));
return;
}
+#endif
/* If basic faces haven't been realized yet, there is no point in
trying to redraw anything. This can happen when we get an expose
--
2.19.1
next prev parent reply other threads:[~2018-11-08 23:21 UTC|newest]
Thread overview: 144+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-10-04 13:05 bug#32932: 27.0.50; render bugs on macOS Mojave Aaron Jensen
2018-10-04 14:07 ` Alan Third
2018-10-04 17:33 ` Charles A. Roelli
2018-10-04 17:48 ` Aaron Jensen
2018-10-04 18:25 ` Alan Third
[not found] ` <CAHyO48xS6yOWVvw2Gu+Hjumahe5BC3-EA+Mwztz4831Ac2U6aA@mail.gmail.com>
2018-10-04 18:45 ` Alan Third
2018-10-04 21:51 ` Alan Third
2018-10-04 23:03 ` Aaron Jensen
[not found] ` <CAHyO48zMuX95RB7hRYxAxt6wH_XB6sF1kmnbWZWmjpPhnkqjdg@mail.gmail.com>
2018-10-09 7:15 ` Boris Buliga
2018-10-10 18:27 ` Alan Third
2018-10-11 3:40 ` Aaron Jensen
2018-10-14 8:19 ` Aaron Jensen
2018-10-14 9:04 ` Boris Buliga
2018-10-14 18:20 ` Alan Third
2018-10-14 20:17 ` Aaron Jensen
2018-10-16 4:53 ` Boris Buliga
2018-10-16 8:39 ` Boris Buliga
2018-10-16 19:04 ` Aaron Jensen
2018-10-19 16:26 ` Aaron Jensen
2018-10-19 18:48 ` Alan Third
2018-10-19 19:24 ` Aaron Jensen
2018-10-20 20:04 ` Alan Third
2018-10-23 2:15 ` Aaron Jensen
2018-10-24 10:42 ` Alan Third
2018-10-29 2:18 ` Aaron Jensen
2018-10-29 16:09 ` Alan Third
2018-10-29 17:41 ` Boris Buliga
2018-10-30 5:56 ` Aaron Jensen
2018-10-30 15:35 ` Boris Buliga
2018-10-31 21:59 ` Alan Third
2018-11-01 4:25 ` Aaron Jensen
2018-10-31 17:12 ` Alan Third
2018-11-01 4:51 ` Aaron Jensen
2018-11-01 4:58 ` Aaron Jensen
2018-11-01 5:11 ` Aaron Jensen
2018-11-01 6:13 ` Boris Buliga
2018-11-01 6:51 ` Aaron Jensen
2018-11-01 18:10 ` Eli Zaretskii
2018-11-01 19:52 ` Aaron Jensen
2018-11-01 20:12 ` Eli Zaretskii
2018-11-01 20:29 ` Aaron Jensen
2018-11-03 9:23 ` Eli Zaretskii
2018-11-01 22:55 ` Alan Third
2018-11-03 9:31 ` Eli Zaretskii
2018-11-03 20:36 ` Alan Third
2018-11-03 21:03 ` Eli Zaretskii
2018-11-04 13:24 ` Alan Third
2018-11-04 20:11 ` Alan Third
2018-11-05 16:11 ` Aaron Jensen
2018-11-05 18:55 ` Alan Third
2018-11-06 4:04 ` Aaron Jensen
2018-11-06 14:58 ` Aaron Jensen
2018-11-08 15:21 ` Alan Third
2018-11-08 15:35 ` Eli Zaretskii
2018-11-08 16:17 ` Alan Third
2018-11-08 16:28 ` Aaron Jensen
2018-11-08 23:21 ` Alan Third [this message]
2018-11-09 1:02 ` Aaron Jensen
2018-11-09 9:08 ` bug#32932: [PATCH v2] Fix more drawing bugs in NS port (bug#32932) Alan Third
2018-11-09 13:45 ` Aaron Jensen
2018-11-09 14:15 ` Aaron Jensen
2018-11-13 22:13 ` Alan Third
2018-11-14 17:08 ` Aaron Jensen
2018-11-14 18:19 ` Alan Third
2018-11-16 1:20 ` Aaron Jensen
2018-11-19 22:35 ` Alan Third
2018-11-20 2:30 ` Aaron Jensen
2018-11-23 18:17 ` Alan Third
2018-11-26 16:20 ` Aaron Jensen
2019-01-25 14:02 ` Aaron Jensen
2019-01-25 22:01 ` Alan Third
2018-11-09 8:02 ` bug#32932: 27.0.50; render bugs on macOS Mojave Eli Zaretskii
2018-11-08 16:51 ` Eli Zaretskii
2018-11-08 23:23 ` Alan Third
2018-11-03 17:57 ` Aaron Jensen
2018-11-03 19:09 ` Alan Third
2018-11-03 20:51 ` Alan Third
2018-11-03 23:56 ` Aaron Jensen
2018-11-04 13:24 ` Alan Third
2018-11-04 17:12 ` Aaron Jensen
2018-11-04 18:28 ` Eli Zaretskii
2018-10-04 19:43 ` Aaron Jensen
2018-11-03 17:56 ` Aaron Jensen
2018-11-03 18:17 ` Eli Zaretskii
2018-11-05 16:20 ` Aaron Jensen
2018-11-27 1:42 ` bug#32932: 26.2: Too many flickers with normal operations on macOS 10.13.6 Zhang Haijun
2019-11-11 18:16 ` bug#32932: 27.0.50; render bugs on macOS Mojave Alan Third
2019-11-12 13:27 ` Robert Pluim
2019-11-12 14:38 ` Alan Third
2020-01-25 12:44 ` Alan Third
2020-01-25 13:37 ` Eli Zaretskii
2020-01-27 11:06 ` Robert Pluim
2020-01-27 20:45 ` Alan Third
2020-01-28 3:21 ` Eli Zaretskii
2020-01-28 18:23 ` Alan Third
2020-01-28 19:35 ` Aaron Jensen
2020-01-28 20:07 ` Eli Zaretskii
2020-01-28 20:11 ` Aaron Jensen
2020-01-28 20:21 ` Eli Zaretskii
2020-01-28 20:24 ` Aaron Jensen
2020-01-29 10:08 ` Alan Third via Bug reports for GNU Emacs, the Swiss army knife of text editors
2020-01-29 16:32 ` Aaron Jensen
2020-01-29 20:04 ` Alan Third
2020-01-30 1:40 ` Aaron Jensen
2020-01-30 19:11 ` Alan Third
2020-01-30 20:07 ` Aaron Jensen
2020-01-31 14:57 ` Robert Pluim
2020-01-31 20:23 ` Alan Third
2020-01-31 20:26 ` Aaron Jensen
2020-02-01 1:26 ` Aaron Jensen
2020-02-01 14:22 ` Alan Third
2020-02-01 16:29 ` Aaron Jensen
2020-02-01 21:20 ` Alan Third
2020-02-01 23:05 ` Aaron Jensen
2020-02-02 13:42 ` Alan Third
2020-01-31 1:16 ` Stefan Kangas
2020-01-31 21:34 ` Mattias Engdegård
2020-02-02 12:31 ` Mattias Engdegård
2020-02-02 13:46 ` Alan Third
2020-02-02 16:49 ` Aaron Jensen
2020-02-02 22:30 ` Alan Third
2020-02-02 22:44 ` Mattias Engdegård
2020-02-03 0:14 ` Aaron Jensen
2020-02-03 7:39 ` Alan Third
2020-02-03 8:16 ` Aaron Jensen
2020-02-03 20:44 ` Alan Third
2020-02-03 20:46 ` Aaron Jensen
2020-02-03 21:30 ` Alan Third
2020-02-06 18:04 ` Aaron Jensen
2020-02-07 20:18 ` Alan Third
2020-02-08 1:26 ` Aaron Jensen
2020-02-08 14:13 ` Alan Third
2020-02-08 16:45 ` Aaron Jensen
2020-02-10 7:44 ` Alan Third
2020-02-10 15:21 ` Aaron Jensen
2020-02-10 17:14 ` Aaron Jensen
2020-02-10 21:33 ` Alan Third
2020-02-13 17:24 ` Aaron Jensen
2020-02-13 18:32 ` Alan Third
2020-02-03 16:04 ` Mattias Engdegård
2020-02-03 16:05 ` Aaron Jensen
2020-02-03 16:09 ` Mattias Engdegård
2020-02-03 21:28 ` Alan Third
2020-02-10 8:59 ` Robert Pluim
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
List information: https://www.gnu.org/software/emacs/
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20181108232113.GA15030@breton.holly.idiocy.org \
--to=alan@idiocy.org \
--cc=32932@debbugs.gnu.org \
--cc=aaronjensen@gmail.com \
--cc=boris@d12frosted.io \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
Code repositories for project(s) associated with this public inbox
https://git.savannah.gnu.org/cgit/emacs.git
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).