unofficial mirror of emacs-devel@gnu.org 
 help / color / mirror / code / Atom feed
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.



  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).