From: Eli Zaretskii <eliz@gnu.org>
To: Po Lu <luangruo@yahoo.com>
Cc: emacs-devel@gnu.org
Subject: Re: Stipples and scroll optimizations
Date: Sun, 08 May 2022 13:46:56 +0300 [thread overview]
Message-ID: <838rrcwbbz.fsf@gnu.org> (raw)
In-Reply-To: <87sfpk4bzl.fsf@yahoo.com> (message from Po Lu on Sun, 08 May 2022 17:20:14 +0800)
> From: Po Lu <luangruo@yahoo.com>
> Cc: emacs-devel@gnu.org
> Date: Sun, 08 May 2022 17:20:14 +0800
>
> Eli Zaretskii <eliz@gnu.org> writes:
>
> > Sorry, I don't understand: what is the "previous" glyph matrix, and
> > how can you use it for this test?
>
> I mean the glyph matrix representing what is currently on the glass, the
> "current matrix".
But that can be different (even VERY different) from what _should_ be
on the glass. We cannot rely on the current matrix for making such
decisions.
> > Really? I see that 'struct face' has a 'stipple' member, which is set
> > in realize_gui_face, and that happens when we realize the face, long
> > before x_draw_glyph_string is called. And each glyph in a glyph_row
> > has a face_id member, which allows you to get at the corresponding
> > face structure. Why cannot you use this to detect glyph_row's that
> > use stipples? The only type of glyph whose stipple is ignored is the
> > cursor glyph, and that hardly matters for your purposes here, no?
>
> Whether or not a stipple is present usually depends on the `stippled_p'
> flag, which is set in `x_set_glyph_string_gc'. But for starters,
> drawing an image glyph might change that flag, and an image might also
> obscure the stipple entirely, in which case we don't want to inhibit the
> scrolling optimization.
The logic is very simple (see x_set_glyph_string_gc) and depends only
the kind of "highlight" with which a glyph string should be
displayed. All types of highlight except DRAW_CURSOR do the same when
the set the stippled_p flag of a glyph string: they all set it if the
face's 'stipple' member is non-zero. Why cannot update_window do the
same? If drawing the image glyph can change the flag (though I cannot
see where it does), then the same logic that depends on seeing image
glyphs in a glyph-row can be added to update_window.
So I still don't see what difficulties could there be in the method I
suggested, and what would be the advantages of doing what you wanted
after the first call to x_draw_glyph_string.
Please also note that update_window, and with it scrolling_window,
work _per_glyph_row_, whereas x_draw_glyph_string works
_per_glyph_string_, which is part of a glyph row. So theoretically,
it could be that the first calls to x_draw_glyph_string don't see any
stippled face, and thus don't set the flag you want, so by the time
you realize that scrolling_window cannot be used it's too late. (And
in general, scrolling_window is called _before_ we call
update_window_line, which is where x_draw_glyph_string is called.
next prev parent reply other threads:[~2022-05-08 10:46 UTC|newest]
Thread overview: 12+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <87a6bs5w05.fsf.ref@yahoo.com>
2022-05-08 7:22 ` Stipples and scroll optimizations Po Lu
2022-05-08 7:30 ` Eli Zaretskii
2022-05-08 7:34 ` Po Lu
2022-05-08 7:40 ` Eli Zaretskii
2022-05-08 7:58 ` Po Lu
2022-05-08 9:06 ` Eli Zaretskii
2022-05-08 9:20 ` Po Lu
2022-05-08 10:46 ` Eli Zaretskii [this message]
2022-05-08 10:59 ` Po Lu
2022-05-08 11:29 ` Eli Zaretskii
2022-05-08 11:46 ` Po Lu
2022-05-08 11:07 ` Po Lu
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=838rrcwbbz.fsf@gnu.org \
--to=eliz@gnu.org \
--cc=emacs-devel@gnu.org \
--cc=luangruo@yahoo.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 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).