* 23.0.60; broken mouse-face highlighting in Gnus
@ 2008-02-11 15:47 Stephen Berman
2008-02-16 23:56 ` 23.0.60; Deja vu font breaks " Stephen Berman
0 siblings, 1 reply; 10+ messages in thread
From: Stephen Berman @ 2008-02-11 15:47 UTC (permalink / raw)
To: emacs-devel
1. emacs -Q
2. Eval this:
(setq gnus-summary-line-format "%U%R%z%((%4L) %-20,20f \x2502 %*%B%s%)\n"
gnus-sum-thread-tree-root "\x25b6 "
gnus-sum-thread-tree-false-root "\x25b7 "
gnus-sum-thread-tree-vertical "\x2502 "
gnus-sum-thread-tree-leaf-with-other "\x251c\x2500\x25b8 ..."
gnus-sum-thread-tree-single-leaf "\x2570\x2500\x25b8 ...")
3. M-x gnus, browse a group that has threaded messages and see the fancy
threading display produced by the above settings in the Summary buffer.
4. Select a subject header in the Summary buffer, such that the subject
contains one of the fancy threading characters, or one of the strings
"Re: ", "RE: ", "23.", "2.", and place the cursor on one of these
characters (on the first character in the strings "Re: ", "RE: ", "23.",
"2.").
5. Move the mouse over the subject header and observe the highlighting
everywhere except the character after the cursor (in the case of
"\x251c\x2500\x25b8 ..." and "\x2570\x2500\x25b8 ...", if the cursor is
over "\x2500", the both the immediately preceding and immediately
following characters are not highlighted).
Repeat the above in Emacs 23.0.50 but with the following settings in
step 2 (since the above are invalid characters in pre-unicode-2 Emacs):
(setq gnus-summary-line-format "%U%R%z%((%4L) %-20,20f \x49022 %*%B%s%)\n"
gnus-sum-thread-tree-root "\x490f6 "
gnus-sum-thread-tree-false-root "\x490f7 "
gnus-sum-thread-tree-leaf-with-other "\x4903c\x49020\x490fa ..."
gnus-sum-thread-tree-vertical "\x49022"
gnus-sum-thread-tree-single-leaf "\x490b0\x49020\x490fa ...")
Now at step 5 the entire subject shows mouse-face highlighting as it
should, i.e. no gaps.
Steve Berman
^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: 23.0.60; Deja vu font breaks mouse-face highlighting in Gnus
2008-02-11 15:47 23.0.60; broken mouse-face highlighting in Gnus Stephen Berman
@ 2008-02-16 23:56 ` Stephen Berman
2008-02-17 0:40 ` Johan Bockgård
0 siblings, 1 reply; 10+ messages in thread
From: Stephen Berman @ 2008-02-16 23:56 UTC (permalink / raw)
To: emacs-devel
On Mon, 11 Feb 2008 16:47:28 +0100 Stephen Berman <Stephen.Berman@gmx.net> wrote:
> 1. emacs -Q
> 2. Eval this:
> (setq gnus-summary-line-format "%U%R%z%((%4L) %-20,20f \x2502 %*%B%s%)\n"
> gnus-sum-thread-tree-root "\x25b6 "
> gnus-sum-thread-tree-false-root "\x25b7 "
> gnus-sum-thread-tree-vertical "\x2502 "
> gnus-sum-thread-tree-leaf-with-other "\x251c\x2500\x25b8 ..."
> gnus-sum-thread-tree-single-leaf "\x2570\x2500\x25b8 ...")
> 3. M-x gnus, browse a group that has threaded messages and see the fancy
> threading display produced by the above settings in the Summary buffer.
> 4. Select a subject header in the Summary buffer, such that the subject
> contains one of the fancy threading characters, or one of the strings
> "Re: ", "RE: ", "23.", "2.", and place the cursor on one of these
> characters (on the first character in the strings "Re: ", "RE: ", "23.",
> "2.").
> 5. Move the mouse over the subject header and observe the highlighting
> everywhere except the character after the cursor (in the case of
> "\x251c\x2500\x25b8 ..." and "\x2570\x2500\x25b8 ...", if the cursor is
> over "\x2500", the both the immediately preceding and immediately
> following characters are not highlighted).
>
> Repeat the above in Emacs 23.0.50 but with the following settings in
> step 2 (since the above are invalid characters in pre-unicode-2 Emacs):
> (setq gnus-summary-line-format "%U%R%z%((%4L) %-20,20f \x49022 %*%B%s%)\n"
> gnus-sum-thread-tree-root "\x490f6 "
> gnus-sum-thread-tree-false-root "\x490f7 "
> gnus-sum-thread-tree-leaf-with-other "\x4903c\x49020\x490fa ..."
> gnus-sum-thread-tree-vertical "\x49022"
> gnus-sum-thread-tree-single-leaf "\x490b0\x49020\x490fa ...")
> Now at step 5 the entire subject shows mouse-face highlighting as it
> should, i.e. no gaps.
I made a mistake above: either step 1 should be this:
1'. emacs -Q -fn "Dejavu Sans Mono"
or before step 5 use set-frame-font to switch to Dejavu Sans Mono (then
it's without anti-aliasing, but that does not matter). Other Dejavu
fonts also show the gap in highlighting, but the range of susceptible
strings seems to be less than with Dejavu Sans Mono. I have tried using
a number of other fonts but so far haven't found any others that show
the display problem.
Steve Berman
^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: 23.0.60; Deja vu font breaks mouse-face highlighting in Gnus
2008-02-16 23:56 ` 23.0.60; Deja vu font breaks " Stephen Berman
@ 2008-02-17 0:40 ` Johan Bockgård
2008-02-17 13:07 ` Stephen Berman
0 siblings, 1 reply; 10+ messages in thread
From: Johan Bockgård @ 2008-02-17 0:40 UTC (permalink / raw)
To: emacs-devel
Stephen Berman <Stephen.Berman@gmx.net> writes:
> Other Dejavu fonts also show the gap in highlighting, but the range of
> susceptible strings seems to be less than with Dejavu Sans Mono. I
> have tried using a number of other fonts but so far haven't found any
> others that show the display problem.
The problem happens for characters that stick out of their box. It is
most noticeable with an italic font.
E.g. try
(font-lock-mode 0)
(insert (propertize "XXXXXX" 'face 'italic 'mouse-face 'highlight))
The responsible code is this part in `draw_glyphs':
/* If there are any glyphs with lbearing < 0 or rbearing > width in
the row, redraw some glyphs in front or following the glyph
strings built above. */
if (head && !overlaps && row->contains_overlapping_glyphs_p)
{
...
--
Johan Bockgård
^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: 23.0.60; Deja vu font breaks mouse-face highlighting in Gnus
2008-02-17 0:40 ` Johan Bockgård
@ 2008-02-17 13:07 ` Stephen Berman
2008-02-17 20:25 ` Johan Bockgård
0 siblings, 1 reply; 10+ messages in thread
From: Stephen Berman @ 2008-02-17 13:07 UTC (permalink / raw)
To: emacs-devel
On Sun, 17 Feb 2008 01:40:58 +0100 bojohan+news@dd.chalmers.se (Johan Bockgård) wrote:
> Stephen Berman <Stephen.Berman@gmx.net> writes:
>
>> Other Dejavu fonts also show the gap in highlighting, but the range of
>> susceptible strings seems to be less than with Dejavu Sans Mono. I
>> have tried using a number of other fonts but so far haven't found any
>> others that show the display problem.
>
> The problem happens for characters that stick out of their box. It is
> most noticeable with an italic font.
>
> E.g. try
>
> (font-lock-mode 0)
> (insert (propertize "XXXXXX" 'face 'italic 'mouse-face 'highlight))
I had also tried an italic Dejavu and it showed the problem but, as I
said, not with as many strings; here's a case in point:
(progn (font-lock-mode 0)
(insert (propertize "Re: 23.0.60" 'mouse-face 'highlight))
(insert (propertize "Re: 23.0.60" 'face 'italic 'mouse-face 'highlight)))
I see a gap in mouse-face highlighting when the cursor is over the
unitalicized "R" and "2" but not when it is over the italicized ones.
Do you see that too? This seems contrary to you characterization of the
triggering conditions, i.e. characters that stick out of their box, but
I do not know the properties of the font nor understand the code you
pointed to, so maybe it is no contradiction.
> The responsible code is this part in `draw_glyphs':
>
> /* If there are any glyphs with lbearing < 0 or rbearing > width in
> the row, redraw some glyphs in front or following the glyph
> strings built above. */
> if (head && !overlaps && row->contains_overlapping_glyphs_p)
> {
> ...
How did you figure this out? Do you just know the code well and realize
that draw_glyphs was involved, or did you arrive there by using gdb? If
the latter, could you tell me how you did it? That might help me make
more useful bug reports and perhaps even suggest bug fixes.
Steve Berman
^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: 23.0.60; Deja vu font breaks mouse-face highlighting in Gnus
2008-02-17 13:07 ` Stephen Berman
@ 2008-02-17 20:25 ` Johan Bockgård
2008-02-17 20:47 ` Bad drawing of xft fonts overlapping box cursor Johan Bockgård
2008-02-18 0:36 ` 23.0.60; Deja vu font breaks mouse-face highlighting in Gnus Stephen Berman
0 siblings, 2 replies; 10+ messages in thread
From: Johan Bockgård @ 2008-02-17 20:25 UTC (permalink / raw)
To: emacs-devel
Stephen Berman <Stephen.Berman@gmx.net> writes:
> I had also tried an italic Dejavu and it showed the problem but, as I
> said, not with as many strings; here's a case in point:
>
> (progn (font-lock-mode 0)
> (insert (propertize "Re: 23.0.60" 'mouse-face 'highlight))
> (insert (propertize "Re: 23.0.60" 'face 'italic 'mouse-face 'highlight)))
>
> I see a gap in mouse-face highlighting when the cursor is over the
> unitalicized "R" and "2" but not when it is over the italicized ones.
> Do you see that too? This seems contrary to you characterization of the
> triggering conditions, i.e. characters that stick out of their box, but
> I do not know the properties of the font nor understand the code you
> pointed to, so maybe it is no contradiction.
Well, when I try this I notice a problem with highlighting next to the
cursor to the right of the R in the non-italic case and to the left of
the 3 in the italic case. (Going from unslanted to slanted makes the
lower right of "R" extend less, while OTOH slanting "3" makes the lower
curve protrude to the left.) I haven't examined the font in detail, but
in any case `contains_overlapping_glyphs_p' is the relevant variable.
The problem goes away if you add a `&& hl == DRAW_NORMAL_TEXT' test to
the conditional below (but I don't think this fix is entirely right.)
>> The responsible code is this part in `draw_glyphs':
>>
>> /* If there are any glyphs with lbearing < 0 or rbearing > width in
>> the row, redraw some glyphs in front or following the glyph
>> strings built above. */
>> if (head && !overlaps && row->contains_overlapping_glyphs_p)
>> {
>> ...
>
> How did you figure this out? Do you just know the code well and realize
> that draw_glyphs was involved, or did you arrive there by using gdb? If
> the latter, could you tell me how you did it? That might help me make
> more useful bug reports and perhaps even suggest bug fixes.
Actually, I had already discovered another problem with precisely this
code that I had been planning to report. That one also involved display
problems around the (box) cursor, which led me to x_draw_window_cursor
-> draw_phys_cursor_glyph -> draw_glyphs (with hl=DRAW_CURSOR;
similarly, mouse-face highlighting is produced by draw_glyphs with
hl=DRAW_MOUSE_FACE). (I was somewhat familiar with the box cursor
drawing code, http://article.gmane.org/gmane.emacs.devel/81652.) gdb
helped revealing the difference between the working and non-working
cases (contains_overlapping_glyphs_p).
--
Johan Bockgård
^ permalink raw reply [flat|nested] 10+ messages in thread
* Bad drawing of xft fonts overlapping box cursor
2008-02-17 20:25 ` Johan Bockgård
@ 2008-02-17 20:47 ` Johan Bockgård
2008-02-18 0:36 ` Stephen Berman
2008-02-18 0:36 ` 23.0.60; Deja vu font breaks mouse-face highlighting in Gnus Stephen Berman
1 sibling, 1 reply; 10+ messages in thread
From: Johan Bockgård @ 2008-02-17 20:47 UTC (permalink / raw)
To: emacs-devel
[-- Attachment #1: Type: text/plain, Size: 1080 bytes --]
bojohan+news@dd.chalmers.se (Johan Bockgård) writes:
> Actually, I had already discovered another problem with precisely this
> code
[draw_glyphs]
/* If there are any glyphs with lbearing < 0 or rbearing > width in
the row, redraw some glyphs in front or following the glyph
strings built above. */
> that I had been planning to report.
So here is that report:
In some fonts certain characters can produce overlaps with the box
cursor. This leads to uglily drawn characters.
emacs -Q -xrm \
'emacs*font: bitstream vera sans mono:pixelsize=17
Xft.hintstyle: hintmedium' \
-fg white -bg black -cr green
(progn
(switch-to-buffer "*test*")
(insert "W\nW\nW")
(dotimes (_ 50)
(redisplay)
(goto-char 4)
(redisplay)
(goto-char 6)))
It looks like what happens is that each time the cursor is placed next
to the problematic character another copy of the character is drawn.
For antialiased fonts this produces the effect that the half transparent
pixels become more and more solid.
[-- Attachment #2: emacs-badfont.png --]
[-- Type: image/png, Size: 1815 bytes --]
[-- Attachment #3: Type: text/plain, Size: 21 bytes --]
--
Johan Bockgård
^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: 23.0.60; Deja vu font breaks mouse-face highlighting in Gnus
2008-02-17 20:25 ` Johan Bockgård
2008-02-17 20:47 ` Bad drawing of xft fonts overlapping box cursor Johan Bockgård
@ 2008-02-18 0:36 ` Stephen Berman
2008-02-18 1:12 ` Johan Bockgård
1 sibling, 1 reply; 10+ messages in thread
From: Stephen Berman @ 2008-02-18 0:36 UTC (permalink / raw)
To: emacs-devel
On Sun, 17 Feb 2008 21:25:18 +0100 bojohan+news@dd.chalmers.se (Johan Bockgård) wrote:
> Stephen Berman <Stephen.Berman@gmx.net> writes:
>
>> I had also tried an italic Dejavu and it showed the problem but, as I
>> said, not with as many strings; here's a case in point:
>>
>> (progn (font-lock-mode 0)
>> (insert (propertize "Re: 23.0.60" 'mouse-face 'highlight))
>> (insert (propertize "Re: 23.0.60" 'face 'italic 'mouse-face 'highlight)))
>>
>> I see a gap in mouse-face highlighting when the cursor is over the
>> unitalicized "R" and "2" but not when it is over the italicized ones.
>> Do you see that too? This seems contrary to you characterization of the
>> triggering conditions, i.e. characters that stick out of their box, but
>> I do not know the properties of the font nor understand the code you
>> pointed to, so maybe it is no contradiction.
>
> Well, when I try this I notice a problem with highlighting next to the
> cursor to the right of the R in the non-italic case and to the left of
> the 3 in the italic case. (Going from unslanted to slanted makes the
> lower right of "R" extend less, while OTOH slanting "3" makes the lower
> curve protrude to the left.)
It sounds likes like you're describing a subtle problem with the drawing
of the italic characters; perhaps, but I don't see any problem with
highlighting in the italicized text, while in the unitalicized test,
when the cursor is over the "R" the following "e" lacks mouse-face
highlighting, likewise with "3" when the cursor is over the "2".
Anyway, I have some additional observations:
- The highlighting gap only occurs with the filled box cursor-type, not
with hollow, bar (not even with type '(bar . 10), which appears to
have the same extent as the box cursor with 12 point Dejavu), or
hbar. However, with '(hbar . 8) and higher height values, putting the
cursor over the first "R", which is at (point-min) does not show the
highlighting gap, but then typing C-b or <left> does make the gap
appear over the following "e".
- When I eval the above sexp (or just the unitalicized part) with 14
point Dejavu, and then move the cursor from the end to the beginning,
the gap appears over the "3" when the cursor is over the "2", and
remains as the cursor continues to the left, until it is over the "R"
at (point-min), and then there is a highlighting gap over the the "e"
and the "3". Now typing C-b or <left> eliminates the gap over the "3"
(but the one over the "e" remains). I do not see the double gap with
12 point Dejavu.
- For kicks I tried the above sexp with the font settings you gave in
your followup posting, i.e.: emacs -Q -xrm 'emacs*font: bitstream vera
sans mono:pixelsize=17'. With this, I see no highlighting gap with
the unitalicized text (Bitstream Vera and Dejavu differ here), but the
italicized text shows strange redisplay effects under mouse-face
highlighting. First, my system appears to lack an italicized 17 point
Bitstream Vera Sans, and the italicized text is in 12 point. When I
put the mouse over the text to hightlight it, the italicized text
loses its slant and also takes up much less horizontal space, as if
condensed. But when I start to move the cursor over the italicized
(but under highlighting not italicized) text, then the original
spacing replaces the condensed spacing character by character.
> I haven't examined the font in detail, but
> in any case `contains_overlapping_glyphs_p' is the relevant variable.
> The problem goes away if you add a `&& hl == DRAW_NORMAL_TEXT' test to
> the conditional below (but I don't think this fix is entirely right.)
>
>>> The responsible code is this part in `draw_glyphs':
>>>
>>> /* If there are any glyphs with lbearing < 0 or rbearing > width in
>>> the row, redraw some glyphs in front or following the glyph
>>> strings built above. */
>>> if (head && !overlaps && row->contains_overlapping_glyphs_p)
>>> {
>>> ...
>>
>> How did you figure this out? Do you just know the code well and realize
>> that draw_glyphs was involved, or did you arrive there by using gdb? If
>> the latter, could you tell me how you did it? That might help me make
>> more useful bug reports and perhaps even suggest bug fixes.
>
> Actually, I had already discovered another problem with precisely this
> code that I had been planning to report. That one also involved display
> problems around the (box) cursor, which led me to x_draw_window_cursor
> -> draw_phys_cursor_glyph -> draw_glyphs (with hl=DRAW_CURSOR;
> similarly, mouse-face highlighting is produced by draw_glyphs with
> hl=DRAW_MOUSE_FACE). (I was somewhat familiar with the box cursor
> drawing code, http://article.gmane.org/gmane.emacs.devel/81652.) gdb
> helped revealing the difference between the working and non-working
> cases (contains_overlapping_glyphs_p).
Thanks for the details.
Steve Berman
^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: Bad drawing of xft fonts overlapping box cursor
2008-02-17 20:47 ` Bad drawing of xft fonts overlapping box cursor Johan Bockgård
@ 2008-02-18 0:36 ` Stephen Berman
2008-02-18 0:58 ` Jason Rumney
0 siblings, 1 reply; 10+ messages in thread
From: Stephen Berman @ 2008-02-18 0:36 UTC (permalink / raw)
To: emacs-devel
On Sun, 17 Feb 2008 21:47:13 +0100 bojohan+news@dd.chalmers.se (Johan Bockgård) wrote:
> In some fonts certain characters can produce overlaps with the box
> cursor. This leads to uglily drawn characters.
>
> emacs -Q -xrm \
> 'emacs*font: bitstream vera sans mono:pixelsize=17
> Xft.hintstyle: hintmedium' \
> -fg white -bg black -cr green
>
> (progn
> (switch-to-buffer "*test*")
> (insert "W\nW\nW")
> (dotimes (_ 50)
> (redisplay)
> (goto-char 4)
> (redisplay)
> (goto-char 6)))
>
> It looks like what happens is that each time the cursor is placed next
> to the problematic character another copy of the character is drawn.
> For antialiased fonts this produces the effect that the half transparent
> pixels become more and more solid.
When I try this I do not see any difference in the "W"s. I also tried
with 500 repetitions and I magnified the screen display, but all three
characters look identical. This is on GNU Emacs 23.0.60.5
(i686-pc-linux-gnu, GTK+ Version 2.12.0) of 2008-02-14 on escher running
under openSUSE 10.3.
Steve Berman
^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: Bad drawing of xft fonts overlapping box cursor
2008-02-18 0:36 ` Stephen Berman
@ 2008-02-18 0:58 ` Jason Rumney
0 siblings, 0 replies; 10+ messages in thread
From: Jason Rumney @ 2008-02-18 0:58 UTC (permalink / raw)
To: Stephen Berman; +Cc: emacs-devel
On Sun, 17 Feb 2008 21:47:13 +0100 bojohan+news@dd.chalmers.se (Johan
Bockgård) wrote:
> In some fonts certain characters can produce overlaps with the box
> cursor. This leads to uglily drawn characters.
>
When investigating whether the new font backend had made a particular
cursor display bug on Windows disappear a few months back, I noticed
that the old font code is still used for drawing box cursors. As far as
I could tell, that was the case on all platforms. I didn't get a
response to the mail where I mentioned it, so I don't know whether it is
an oversight or a known TODO, and whether it has since been fixed. It
might be worth setting a breakpoint in the box cursor drawing code in
xterm.c and see if it is hit, and how it ends up drawing the text.
^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: 23.0.60; Deja vu font breaks mouse-face highlighting in Gnus
2008-02-18 0:36 ` 23.0.60; Deja vu font breaks mouse-face highlighting in Gnus Stephen Berman
@ 2008-02-18 1:12 ` Johan Bockgård
0 siblings, 0 replies; 10+ messages in thread
From: Johan Bockgård @ 2008-02-18 1:12 UTC (permalink / raw)
To: emacs-devel
Stephen Berman <Stephen.Berman@gmx.net> writes:
> - The highlighting gap only occurs with the filled box cursor-type,
> not with hollow, bar (not even with type '(bar . 10), which appears to
> have the same extent as the box cursor with 12 point Dejavu), or hbar.
Only the box cursor is drawn by draw_glyphs.
--
Johan Bockgård
^ permalink raw reply [flat|nested] 10+ messages in thread
end of thread, other threads:[~2008-02-18 1:12 UTC | newest]
Thread overview: 10+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2008-02-11 15:47 23.0.60; broken mouse-face highlighting in Gnus Stephen Berman
2008-02-16 23:56 ` 23.0.60; Deja vu font breaks " Stephen Berman
2008-02-17 0:40 ` Johan Bockgård
2008-02-17 13:07 ` Stephen Berman
2008-02-17 20:25 ` Johan Bockgård
2008-02-17 20:47 ` Bad drawing of xft fonts overlapping box cursor Johan Bockgård
2008-02-18 0:36 ` Stephen Berman
2008-02-18 0:58 ` Jason Rumney
2008-02-18 0:36 ` 23.0.60; Deja vu font breaks mouse-face highlighting in Gnus Stephen Berman
2008-02-18 1:12 ` Johan Bockgård
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.