Hi!

For certain things, such as spaces and line/paragraph separators etc. we do 
support this: https://doc.qt.io/qt-6/qtextoption.html#Flag-enum

There's no way to customize how those look, though, except through the font.

For more detailed control, you could get the glyph runs from the layout with 
QTextLayout::glyphRuns() and then iterate over this, replacing the glyphs 
manually for these control characters but retaining the positions.

But for things like the zero-width space, there will not be space in the layout 
for any other glyph, so you might want to replace that with a normal space 
first. In practice, there will probably be a handful of zero-width characters 
you need to handle especially in advance.

Eskil Abrahamsen Blomfeldt
Senior Manager, Graphics Engines

The Qt Company
Sandakerveien 116
0484 Oslo, Norway
eskil.abrahamsen-blomfe...@qt.io
http://qt.io
________________________________
From: Interest <interest-boun...@qt-project.org> on behalf of Wang Gary 
<wzc782970...@gmail.com>
Sent: Sunday, December 15, 2024 8:23 AM
To: interest@qt-project.org <interest@qt-project.org>
Subject: [Interest] Make a specific Unicode glyph wider in a QTextLayout

Hi,

I'm attempting to implement a feature in a plain text editor that similar to 
Notepad++'s "show hidden characters", which allows toggle the visibility of 
non-printable characters, like zero-width space, CR LF and so-on, which look 
like this in Notepad++ (see the attachment for the sample document):

[image.png]

By looking at QTextLine and QTextLayout, it doesn't seems like there is a way 
to specific a certain unicode glyph's width (to reserve the space so we can 
then draw the character as visible glyphs manually). What comes to mind are the 
following two approaches:

1. Subclass QTextLayout to override the behavior of `cursorToX()` and other 
related functions.
By quickly take a look at this approach, it might be more complex than I 
thought, which will require using Qt's private header to access 
QTextEngine-related stuff.
2. Create a custom font that provides these characters, and ensure that font 
will be used before any other fonts.
I'm not exactly sure if this method is possible though.

So the question is, what's the proper approach to implement such a feature 
using Qt's public API? Do the mentioned two approaches sound right?

Thanks!
Gary

_______________________________________________
Interest mailing list
Interest@qt-project.org
https://lists.qt-project.org/listinfo/interest

Reply via email to