Tk Source Code

View Ticket
Login
Ticket UUID: d41b4dc3a6cce62cb4fa281ed0b0b90886f82dca
Title: Windows: last cluster of a drawn range loses its trailing glyphs (combining marks)
Type: Bug Version: trunk
Submitter: serhiy.storchaka Created on: 2026-09-19 10:30:51
Subsystem: 47. Win Fonts Assigned To: aku
Priority: 5 Medium Severity: Minor
Status: Closed Last Modified: 2026-09-30 18:32:27
Resolution: Fixed Closed By: oehhar
    Closed on: 2026-09-30 18:32:27
Description:

In 9.1 on Windows, Tk_DrawCharsInContext() draws the glyphs [min(logClust), max(logClust)+1) for the requested character range, i.e. only the first glyph of the last cluster in the range. The remaining glyphs of that cluster (combining marks) are lost. In RTL runs logClust points at the highest glyph of a cluster, so the glyphs below it are lost too.

Examples (canvas or text widget, Segoe UI / Nirmala UI):

  • q̈ is drawn as q
  • q̈q is drawn as qq (Uniscribe itemizes the two separately)
  • Devanagari दी is drawn as द
  • Arabic سبَ is drawn without the fatha

Precomposed glyphs (é, ñ in Segoe UI) hide the problem, and font measure is not affected.

User Comments: oehhar added on 2026-09-30 18:32:27:

Here is my test script which uses the arabic example above:

pack [label .l -text "سبَ" -font {-family "Segoe UI" -size 72}]

The test result is in the attached image. You can see, that the final flying bar is only painted with the patch.

Merged to main by [2c6b901e].

Bug closed. Thanks Serhiy and Kevin !

Take care, Harald


serhiy.storchaka added on 2026-09-19 10:36:46:

Fixed in [34fbe71048] (branch win-draw-last-cluster-glyphs).


Attachments: