docs(font): add a typesetting section (#7351)

Co-authored-by: Victor Wheeler <vwheeler63@users.noreply.github.com>
This commit is contained in:
Gabor Kiss-Vamosi
2024-11-27 11:19:34 +01:00
committed by GitHub
parent 78be963c22
commit 6275520603

View File

@@ -15,10 +15,10 @@ For example:
Fonts have a **format** property. It describes how the glyph draw data is stored.
It has *2* categories: `Legacy simple format` and `Advanced format`.
In the legacy simple format, the font is stored in a simple array of bitmaps.
In the advanced format, the font is stored in a different way like `Vector`, `SVG`, etc.
In the most simple case, the font is stored in a simple array of bitmaps.
In the advanced format, the font can be stored in a different way like `Vector`, `SVG`, etc.
In the legacy simple format, the value stored for a pixel determines the pixel's opacity.
In case of the simple format, the value stored for a pixel determines the pixel's opacity.
This way, with higher *bpp (bit per pixel)*, the edges of the letter can be smoother.
The possible *bpp* values are 1, 2, 4 and 8 (higher values mean better quality).
@@ -45,6 +45,38 @@ To test it try
If all works well, a ✓ character should be displayed.
Typesetting
***********
Although LVGL can decode and display any Unicode characters
(assuming the font supports them), LVGL cannot correctly render
all complex languages.
The standard Latin-based languages (e.g., English, Spanish, German)
and East Asian languages such as Chinese, Japanese, and Korean (CJK)
are relatively straightforward, as their characters are simply
written from left to right.
Languages like Arabic, Persian, and Hebrew, which use Right-to-Left
(RTL) or mixed writing directions, are also supported in LVGL.
Learn more :ref:`here <bidi>`.
.. |Aacute| unicode:: U+000C1 .. LATIN CAPITAL LETTER A WITH ACUTE
.. |eacute| unicode:: U+000E9 .. LATIN SMALL LETTER E WITH ACUTE
.. |otilde| unicode:: U+000F5 .. LATIN SMALL LETTER O WITH TILDE
.. |Utilde| unicode:: U+00168 .. LATIN CAPITAL LETTER U WITH TILDE
.. |uuml| unicode:: U+000FC .. LATIN SMALL LETTER U WITH DIAERESIS
For characters such as '|eacute|', '|uuml|', '|otilde|', '|Aacute|', and '|Utilde|', it is recommended
to use the single Unicode format (NFC) rather than decomposing them into
a base letter and diacritics (e.g. ``u + ¨``).
Complex languages where subsequent characters combine into a single glyph
and where the resulting glyph has no individual Unicode representation
(e.g., Devanagari), have limited support in LVGL.
Built-in fonts
**************
@@ -123,6 +155,8 @@ Or more symbols together:
Special Features
****************
.. _bidi:
Bidirectional support
---------------------
@@ -182,29 +216,6 @@ However, there are some limitations:
- Static text (i.e. const) is not processed. E.g. texts set by :cpp:func:`lv_label_set_text` will be "Arabic processed" but :cpp:func:`lv_label_set_text_static` won't.
- Text get functions (e.g. :cpp:func:`lv_label_get_text`) will return the processed text.
Subpixel rendering
------------------
Subpixel rendering allows for tripling the horizontal resolution by
rendering anti-aliased edges on Red, Green and Blue channels instead of
at pixel level granularity. This takes advantage of the position of
physical color channels of each pixel, resulting in higher quality
letter anti-aliasing. Learn more
`here <https://en.wikipedia.org/wiki/Subpixel_rendering>`__.
For subpixel rendering, the fonts need to be generated with special
settings:
- In the online converter tick the ``Subpixel`` box
- In the command line tool use ``--lcd`` flag. Note that the generated font needs about three times more memory.
Subpixel rendering works only if the color channels of the pixels have a
horizontal layout. That is the R, G, B channels are next to each other
and not above each other. The order of color channels also needs to
match with the library settings. By default, LVGL assumes ``RGB`` order,
however this can be swapped by setting :c:macro:`LV_SUBPX_BGR` ``1`` in
*lv_conf.h*.
.. _fonts_compressed:
Compressed fonts