all messages for Emacs-related lists mirrored at yhetil.org
 help / color / mirror / code / Atom feed
From: Alan Third <alan@idiocy.org>
To: Eli Zaretskii <eliz@gnu.org>
Cc: netjune@outlook.com, 38731@debbugs.gnu.org
Subject: bug#38731: [PATCH] Calculate first glyph to be redrawn when exposing (bug#38731)
Date: Fri, 27 Dec 2019 19:06:52 +0000	[thread overview]
Message-ID: <20191227190652.GA92850@breton.holly.idiocy.org> (raw)
In-Reply-To: <83a77dpu28.fsf@gnu.org>

On Fri, Dec 27, 2019 at 07:17:03PM +0200, Eli Zaretskii wrote:
> > Date: Fri, 27 Dec 2019 16:26:20 +0000
> > From: Alan Third <alan@idiocy.org>
> > Cc: netjune@outlook.com, 38731@debbugs.gnu.org
> > 
> > * src/xdisp.c (expose_area): When the face extends to the end of the
> > line calculate the first glyph to be redrawn rather than assuming it
> > starts at the first glyph in the row.
> 
> Thanks, but can you please explain the rationale behind these changes?
> I'm mildly worried why this is done in generic code, whereas the
> problem was Darwin-specific.

The problem only appears to be Darwin specific as the NS port uses the
expose functionality for all its drawing.

I have a scratch NS branch that draws to an offscreen bitmap using the
normal redisplay routines and it looks fine despite using the same
logic in the NS specific code.

This issue doesn’t show up anywhere else because it’s a rare situation
and will only appear when expose is used to redraw the frame, which
makes it even rarer. If we could force Emacs to redraw using expose on
X or Windows I’m certain the same problem would be observed.

The actual problem is that if there is a face that’s to extend to the
end of the line (for example with global-hl-line-mode) then
expose_area asks draw_glyphs to draw glyph 0 at x coordinate 0, even
though in this case there is horizontal scrolling in effect that means
glyph 0 should be at a negative x coordinate.

In my case I could see that row->x in expose_area was set to -42 but
expose_area called draw_glyphs with an x parameter of 0. This offset
the glyphs on the screen by 42 pixels. I could see this both in
debugging printfs and by actually measuring the difference between the
cursor and the equivalent text as drawn on the screen.

-- 
Alan Third





  reply	other threads:[~2019-12-27 19:06 UTC|newest]

Thread overview: 15+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <a0dc5800-db7e-4091-b385-e2c888f9472b@Spark>
2019-12-24 10:43 ` bug#38731: 27.0.50; Unexpected redisplay behaviour. Cursor can’t be moved to end of line HaiJun Zhang
2019-12-24 15:50   ` Eli Zaretskii
2019-12-24 16:42     ` HaiJun Zhang
2019-12-26 12:59     ` Alan Third
2019-12-26 13:24       ` HaiJun Zhang
2019-12-26 17:29       ` Eli Zaretskii
2019-12-27 14:35         ` Alan Third
2019-12-27 16:26           ` bug#38731: [PATCH] Calculate first glyph to be redrawn when exposing (bug#38731) Alan Third
2019-12-27 17:17             ` Eli Zaretskii
2019-12-27 19:06               ` Alan Third [this message]
2019-12-28  8:54                 ` Eli Zaretskii
2019-12-28 11:20                   ` Alan Third
2019-12-28 18:27                     ` Eli Zaretskii
2019-12-29 10:46                       ` Alan Third
2019-12-30  4:55                         ` HaiJun Zhang

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

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20191227190652.GA92850@breton.holly.idiocy.org \
    --to=alan@idiocy.org \
    --cc=38731@debbugs.gnu.org \
    --cc=eliz@gnu.org \
    --cc=netjune@outlook.com \
    /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 external index

	https://git.savannah.gnu.org/cgit/emacs.git
	https://git.savannah.gnu.org/cgit/emacs/org-mode.git

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.