unofficial mirror of bug-gnu-emacs@gnu.org 
 help / color / mirror / code / Atom feed
From: Eli Zaretskii <eliz@gnu.org>
To: cpardo@imayhem.com
Cc: 73730@debbugs.gnu.org, kbrown@cornell.edu
Subject: bug#73730: 31.0.50; Support for color fonts on MS-Windows
Date: Wed, 16 Oct 2024 14:32:47 +0300	[thread overview]
Message-ID: <86zfn4p9k0.fsf@gnu.org> (raw)
In-Reply-To: <861q0gqpkf.fsf@gnu.org> (message from Eli Zaretskii on Wed, 16 Oct 2024 14:01:36 +0300)

> Cc: 73730@debbugs.gnu.org
> Date: Wed, 16 Oct 2024 14:01:36 +0300
> From: Eli Zaretskii <eliz@gnu.org>
> 
> > Date: Wed, 16 Oct 2024 00:18:20 +0200
> > Cc: 73730@debbugs.gnu.org
> > From: Cecilio Pardo <cpardo@imayhem.com>
> > 
> > The attached patch works without a new font driver.
> 
> Thanks a lot for working on this!

And here's the first bug report after applying this patch:

  emacs -Q
  M-: (w32-find-non-USB-fonts) RET

This pops up the Emacs Abort dialog.  The backtrace and some
additional information are below.  The error from
GetGdiCompatibleGlyphMetrics (0x80070057) seems to be E_INVALIDARG.

Perhaps if w32_dwrite_text_extents fails, it should not abort, but
instead fall back on the old code?

If you cannot reproduce this (maybe it depends on what fonts are
installed), feel free to ask me to provide more information or try
some solutions.  In case it matters, this is a 32-bit build configured
as --with-wide-int --without-native-compilation.

  Thread 1 received signal SIGTRAP, Trace/breakpoint trap.
  0x76611813 in KERNELBASE!DebugBreak () from C:\WINDOWS\SysWOW64\KernelBase.dll
  (gdb) bt
  #0  0x76611813 in KERNELBASE!DebugBreak ()
     from C:\WINDOWS\SysWOW64\KernelBase.dll
  #1  0x012f47e1 in emacs_abort () at w32fns.c:11570
  #2  0x013221ba in verify_hr (hr=-2147024809,
      msg=0x18cbe58 <IID_IDWriteFactory+48> "Failed to GetGdiCompatibleGlyphMetrics") at w32dwrite.c:504
  #3  0x01322430 in text_extents_internal (dwrite_font_face=0x9600720,
      font_size=0, code=0xbfc6c0, nglyphs=1, metrics=0xbfc6b6) at w32dwrite.c:588
  #4  0x013226d4 in w32_dwrite_text_extents (font=0xbf3e9f0, code=0xbfc6c0,
      nglyphs=1, metrics=0xbfc6b6) at w32dwrite.c:654
  #5  0x012fb29a in w32font_text_extents (font=0xbf3e9f0, code=0xbfc6c0,
      nglyphs=1, metrics=0xbfc6b6) at w32font.c:464
  #6  0x01229249 in Ffont_get_glyphs (font_object=XIL(0xa00000000bf3e9f0),
      from=make_fixnum(0), to=make_fixnum(3), object=XIL(0xa00000000bc5cd60))
      at font.c:5454
  #7  0x011f1176 in funcall_subr (subr=0x187cb40 <Sfont_get_glyphs>, numargs=4,
      args=0xa2eb2a0) at eval.c:3144
  #8  0x0125eeb2 in exec_byte_code (fun=XIL(0xa00000000bd9e450),
      args_template=257, nargs=1, args=0xbfcf70) at bytecode.c:813
  #9  0x011f198b in funcall_lambda (fun=XIL(0xa00000000bd9e450), nargs=1,
      arg_vector=0xbfcf68) at eval.c:3229
  #10 0x011f0a51 in funcall_general (fun=XIL(0xa00000000bd9e450), numargs=1,
      args=0xbfcf68) at eval.c:3021
  #11 0x011f0d7a in Ffuncall (nargs=2, args=0xbfcf60) at eval.c:3070
  #12 0x01206ebc in mapcar1 (leni=76, vals=0x0, fn=XIL(0xa00000000bd9e450),
      seq=XIL(0xc000000000f3ec30)) at fns.c:3370
  #13 0x01207af8 in Fmapc (function=XIL(0xa00000000bd9e450),
      sequence=XIL(0xc000000000f3ec30)) at fns.c:3507
  #14 0x011f10c7 in funcall_subr (subr=0x187bb40 <Smapc>, numargs=2,
      args=0xa2eb1f0) at eval.c:3140
  #15 0x0125eeb2 in exec_byte_code (fun=XIL(0xa000000009d8ab78),
      args_template=0, nargs=0, args=0xa2eb200) at bytecode.c:813
  #16 0x011f198b in funcall_lambda (fun=XIL(0xa000000009d8aa58), nargs=0,
      arg_vector=0xbfd6d0) at eval.c:3229
  #17 0x011f17a6 in apply_lambda (fun=XIL(0xa000000009d8aa58), args=XIL(0),
      count=480) at eval.c:3192
  #18 0x011ef553 in eval_sub (form=XIL(0xc000000000efa680)) at eval.c:2622
  #19 0x011ee62c in Feval (form=XIL(0xc000000000efa680), lexical=XIL(0x30))
      at eval.c:2439
  #20 0x011f10c7 in funcall_subr (subr=0x187a1c0 <Seval>, numargs=2,
      args=0xa2eb1a0) at eval.c:3140
  #21 0x0125eeb2 in exec_byte_code (fun=XIL(0xa0000000098cdce8),
      args_template=513, nargs=2, args=0xa2eb2f8) at bytecode.c:813
  #22 0x011f198b in funcall_lambda (fun=XIL(0xa00000000bd346a0), nargs=0,
      arg_vector=0xbfe040) at eval.c:3229
  #23 0x011f0a51 in funcall_general (fun=XIL(0xa00000000bd346a0), numargs=0,
      args=0xbfe040) at eval.c:3021
  #24 0x011f0d7a in Ffuncall (nargs=1, args=0xbfe038) at eval.c:3070
  #25 0x011e67ba in call0 (fn=XIL(0xa00000000bd346a0)) at lisp.h:3528
  #26 0x011eb1e1 in Fhandler_bind_1 (nargs=3, args=0xa2eb128) at eval.c:1463
  #27 0x011f1523 in funcall_subr (subr=0x187a080 <Shandler_bind_1>, numargs=3,
      args=0xa2eb128) at eval.c:3161
  #28 0x0125eeb2 in exec_byte_code (fun=XIL(0xa00000000997d720),
      args_template=1025, nargs=4, args=0xbfe9e0) at bytecode.c:813
  #29 0x011f198b in funcall_lambda (fun=XIL(0xa00000000997d720), nargs=4,
      arg_vector=0xbfe9c0) at eval.c:3229
  #30 0x011f0a51 in funcall_general (fun=XIL(0xa00000000997d720), numargs=4,
      args=0xbfe9c0) at eval.c:3021
  #31 0x011f0d7a in Ffuncall (nargs=5, args=0xbfe9b8) at eval.c:3070
  #32 0x011e1c1a in Ffuncall_interactively (nargs=5, args=0xbfe9b8)
      at callint.c:250
  #33 0x011f1523 in funcall_subr (subr=0x18798c0 <Sfuncall_interactively>,
      numargs=5, args=0xbfe9b8) at eval.c:3161
  #34 0x011f09ea in funcall_general (fun=XIL(0xa0000000018798c0), numargs=5,
      args=0xbfe9b8) at eval.c:3017
  #35 0x011f0d7a in Ffuncall (nargs=6, args=0xbfe9b0) at eval.c:3070
  #36 0x011efedd in Fapply (nargs=3, args=0xbfebd8) at eval.c:2742
  #37 0x011e226a in Fcall_interactively (function=XIL(0x7fcb530),
      record_flag=XIL(0), keys=XIL(0xa000000009ef2300)) at callint.c:342
  #38 0x011f110f in funcall_subr (subr=0x1879900 <Scall_interactively>,
      numargs=3, args=0xa2eb078) at eval.c:3142
  #39 0x0125eeb2 in exec_byte_code (fun=XIL(0xa000000009f0ad40),
      args_template=1025, nargs=1, args=0xbff7a0) at bytecode.c:813
  #40 0x011f198b in funcall_lambda (fun=XIL(0xa000000009f0ad40), nargs=1,
      arg_vector=0xbff798) at eval.c:3229
  #41 0x011f0a51 in funcall_general (fun=XIL(0xa000000009f0ad40), numargs=1,
      args=0xbff798) at eval.c:3021
  #42 0x011f0d7a in Ffuncall (nargs=2, args=0xbff790) at eval.c:3070
  #43 0x010f681d in command_loop_1 () at keyboard.c:1545
  #44 0x011eba71 in internal_condition_case (bfun=0x10f5c2d <command_loop_1>,
      handlers=XIL(0x90), hfun=0x10f4c86 <cmd_error>) at eval.c:1598
  #45 0x010f5692 in command_loop_2 (handlers=XIL(0x90)) at keyboard.c:1163
  #46 0x011eabee in internal_catch (tag=XIL(0x12750),
      func=0x10f565b <command_loop_2>, arg=XIL(0x90)) at eval.c:1277
  #47 0x010f55fd in command_loop () at keyboard.c:1141
  #48 0x010f46e6 in recursive_edit_1 () at keyboard.c:749
  #49 0x010f4984 in Frecursive_edit () at keyboard.c:832
  #50 0x010efaa5 in main (argc=2, argv=0x7c72570) at emacs.c:2624

  Lisp Backtrace:
  "font-get-glyphs" (0xa2eb2a0)
  0xbd9e450 PVEC_CLOSURE
  "mapc" (0xa2eb1f0)
  "w32-find-non-USB-fonts" (0xbfd6d0)
  "eval" (0xa2eb1a0)
  0xbd34678 PVEC_CLOSURE
  0xbd346a0 PVEC_CLOSURE
  "handler-bind-1" (0xa2eb128)
  "eval-expression" (0xbfe9c0)
  "funcall-interactively" (0xbfe9b8)
  "call-interactively" (0xa2eb078)
  "command-execute" (0xbff798)
  (gdb) fr 6
  #6  0x01229249 in Ffont_get_glyphs (font_object=XIL(0xa00000000bf3e9f0),
      from=make_fixnum(0), to=make_fixnum(3), object=XIL(0xa00000000bc5cd60))
      at font.c:5454
  5454          font->driver->text_extents (font, &code, 1, &metrics);
  (gdb) pp font_object
  #<font-object "-outline-Sans Serif Collection-regular-normal-normal-sans-*-*-*-*-p-*-iso10646-1">
  (gdb) fr 3
  #3  0x01322430 in text_extents_internal (dwrite_font_face=0x9600720,
      font_size=0, code=0xbfc6c0, nglyphs=1, metrics=0xbfc6b6) at w32dwrite.c:588
  588       verify_hr (hr, "Failed to GetGdiCompatibleGlyphMetrics");
  (gdb) p/x hr
  $1 = 0x80070057
  (gdb) fr 5
  #5  0x012fb29a in w32font_text_extents (font=0xbf3e9f0, code=0xbfc6c0,
      nglyphs=1, metrics=0xbfc6b6) at w32font.c:464
  464           w32_dwrite_text_extents (font, code, nglyphs, metrics);
  (gdb) p *w32_font
  $2 = {
    font = {
      header = {
	size = 1661034513
      },
      props = {XIL(0x9b40), XIL(0xe910), XIL(0xa5622a0), XIL(0x103b0),
	XIL(0xb010), make_fixnum(20544), make_fixnum(25632), make_fixnum(25664),
	make_fixnum(0), XIL(0), make_fixnum(0), XIL(0), XIL(0xc00000000be75600),
	XIL(0), XIL(0x800000000bce6cf0), XIL(0x800000000bce6ce0), XIL(0)},
      min_width = 11,
      max_width = 76,
      pixel_size = 0,
      height = 39,
      space_width = 11,
      average_width = 11,
      ascent = 26,
      descent = 13,
      underline_thickness = 1,
      underline_position = 2,
      vertical_centering = false,
      baseline_offset = 0,
      relative_compose = 0,
      default_ascent = 26,
      encoding_charset = -1,
      repertory_charset = -1,
      driver = 0x19c78a0 <harfbuzz_font_driver>
    },
    metrics = {
      tmHeight = 39,
      tmAscent = 26,
      tmDescent = 13,
      tmInternalLeading = 23,
      tmExternalLeading = 0,
      tmAveCharWidth = 11,
      tmMaxCharWidth = 76,
      tmWeight = 400,
      tmOverhang = 0,
      tmDigitizedAspectX = 96,
      tmDigitizedAspectY = 96,
      tmFirstChar = 0 L'\000',
      tmLastChar = 65071 L'\xfe2f',
      tmDefaultChar = 1 L'\001',
      tmBreakChar = 2 L'\002',
      tmItalic = 0 '\000',
      tmUnderlined = 0 '\000',
      tmStruckOut = 0 '\000',
      tmPitchAndFamily = 39 '\'',
      tmCharSet = 0 '\000'
    },
    glyph_idx = 16,
    cached_metrics = 0x0,
    n_cache_blocks = 0,
    hfont = 0x2d0a1e66
  }
  (gdb)





  reply	other threads:[~2024-10-16 11:32 UTC|newest]

Thread overview: 15+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-10-10 11:16 bug#73730: 31.0.50; Support for color fonts on MS-Windows Cecilio Pardo
2024-10-10 13:08 ` Eli Zaretskii
2024-10-10 15:14   ` Cecilio Pardo
2024-10-10 16:33     ` Eli Zaretskii
2024-10-10 16:46       ` Cecilio Pardo
2024-10-15 22:18   ` Cecilio Pardo
2024-10-16 11:01     ` Eli Zaretskii
2024-10-16 11:32       ` Eli Zaretskii [this message]
2024-10-16 21:35       ` Cecilio Pardo
2024-10-17  6:21         ` Eli Zaretskii
2024-10-17 10:38           ` Cecilio Pardo
2024-10-10 21:50 ` Cecilio Pardo
2024-10-11  3:36   ` Eli Zaretskii
2024-10-11  6:28     ` Eli Zaretskii
2024-10-11  7:19       ` Cecilio Pardo

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=86zfn4p9k0.fsf@gnu.org \
    --to=eliz@gnu.org \
    --cc=73730@debbugs.gnu.org \
    --cc=cpardo@imayhem.com \
    --cc=kbrown@cornell.edu \
    /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).