unofficial mirror of emacs-devel@gnu.org 
 help / color / mirror / code / Atom feed
From: Stefan Monnier <monnier@iro.umontreal.ca>
To: Chong Yidong <cyd@stupidchicken.com>
Cc: 129@emacsbugs.donarmstrong.com, emacs-devel@gnu.org
Subject: Re: bug#129: Mouse highlighting fails for font sizes.
Date: Thu, 10 Apr 2008 22:28:41 -0400	[thread overview]
Message-ID: <jwvd4oxdtpf.fsf-monnier+emacs@gnu.org> (raw)
In-Reply-To: <871w5dw445.fsf@stupidchicken.com> (Chong Yidong's message of "Thu, 10 Apr 2008 21:51:38 -0400")

>> At some point, the Unicode-2 branch redisplay was changed to allow
>> mouse-highlighted text to have a different font size from the
>> unhighlighted characters.  Unfortunately, this doesn't mesh well with
>> the existing code in note_mouse_highlight, which assumes the highlighted
>> glyphs overlap exactly with unhighlighted glyphs.
>> 
>> (defface foo-face
>> '((t :height 1.5))
>> "Face")
>> 
>> (defface bar-face
>> '((t :height 1.0))
>> "Face")
>> 
>> (defun foo-test ()
>> (interactive)
>> (switch-to-buffer "*Test*")
>> (erase-buffer)
>> (insert "Copying Conditions")
>> (put-text-property (point-min) (point-max) 'face 'foo-face)
>> (put-text-property (point-min) (point-max) 'mouse-face '(bar-face highlight)))

> After thinking some more, I think it's problematic to let
> mouse-highlighted text differ in size from the unhighlighted characters.
> Even if we fix the redisplay engine to correctly update the glyph row in
> such situations, there's the problem of how to decide when to perform
> highlighting.

> Consider a buffer containing the letters "A B" in a big font, which I
> schematically depict as

>  -A- -B-

> Suppose the letter A has a mouse highlight face that contains a small
> font.  So if we put the cursor over it, in the position marked ^, we see

>  A -B-
>  ^

> Now, move the cursor slightly to the right, so that it moves off the
> highlighted A:

>  A -B-
>   ^

> The highlighting disappears, and we see

>  -A- -B-
>   ^

> But the mouse is now again on the letter A, which means we need to
> highlight!

> Is the benefit of allowing a different-sized mouse-face significant?  If
> not, I propose imposing (or restoring) the restricting that only the
> foreground-color and background-color of the mouse-face takes effect;
> all other properties are ignored, and taken from the underlying face.

> What do you think?

I think resizing on mouse-movement is a bad idea indeed (for the
meta-stable problem you mention above, for other technical reasons, as
well as for purely aesthetic reasons).
But restricting "same size properties" for mouse-face is problematic as
well: we may want to use boldness for highlighting but it's not
guaranteed to preserve the size.  It's more restrictive than necessary.

So the best idea I can come up with is: don't restrict the face, but
when highlighting, don't change the size of the box in which the text
is drawn.  This works perfectly for changes that preserve the size, it
works fine for changes that reduce the size (the reduced-size text is
just surrounded with more whitespace than necessary, but the user won't
be surprised).  It doesn't work well if the size is increased (you get
clipping), but there's not much we can do in that case anyway, so it's
probably OK.

Of course, I have no idea how easy it'd be to implement that.
So maybe in the short term it's best to simply rule out size-changes.

Another problem with the mouse-highlighting is the flickering we get
whenever we redisplay: because the mouse-highlighting is done outside of
the main redisplay, it needs to be undone before redisplay and
re-applied afterwards.  This is problematic when you have a timer
changing the display every second.


        Stefan




  reply	other threads:[~2008-04-11  2:28 UTC|newest]

Thread overview: 4+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <87lk3lh1de.fsf@stupidchicken.com>
2008-04-11  1:51 ` bug#129: Mouse highlighting fails for font sizes Chong Yidong
2008-04-11  2:28   ` Stefan Monnier [this message]
2008-04-11  2:59     ` Chong Yidong
2008-04-11  4:05   ` Kenichi Handa

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=jwvd4oxdtpf.fsf-monnier+emacs@gnu.org \
    --to=monnier@iro.umontreal.ca \
    --cc=129@emacsbugs.donarmstrong.com \
    --cc=cyd@stupidchicken.com \
    --cc=emacs-devel@gnu.org \
    /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).