From f8a612cd4773279efd5c4214f92733c32cbcb6a0 Mon Sep 17 00:00:00 2001 From: Hugo Locurcio Date: Wed, 8 Feb 2023 02:01:32 +0100 Subject: [PATCH] Update Using fonts documentation for 4.0.beta17 - Mention subpixel positioning should be disabled for fonts with a pixel art appearance. - Update bitmap font import dock image and document image/character margin. - Fixed character range example to match the font image (it previously had to be reduced by 1 due to an off-by-one error in the importer code). --- tutorials/ui/gui_using_fonts.rst | 17 +++++++++++++++++ ...font_from_image_example_configuration.webp | Bin 11700 -> 13406 bytes 2 files changed, 17 insertions(+) diff --git a/tutorials/ui/gui_using_fonts.rst b/tutorials/ui/gui_using_fonts.rst index 524582fa3..7def043ae 100644 --- a/tutorials/ui/gui_using_fonts.rst +++ b/tutorials/ui/gui_using_fonts.rst @@ -105,6 +105,14 @@ of *printable* (visible) ASCII characters. Make sure the **Character Ranges** option doesn't exceed the number of **Columns** × **Rows** defined. Otherwise, the font will fail to import. +If your font image contains margins not used for font glyphs (such as +attribution information), try adjusting **Image Margin**. This is a margin +applied only once around the whole image. + +If your font image contains guides (in the form of lines between glyphs) or +if spacing between characters appears incorrect, try adjusting **Character +Margin**. This margin is applied for every imported glyph. + Loading a font file ------------------- @@ -203,6 +211,15 @@ best quality, at the cost of longer rasterization times. Changing antialiasing, hinting and subpixel positioning has the most visible effect at smaller font sizes. +.. warning:: + + Fonts that have a pixel art appearance should have their subpixel positioning + mode set to **Disabled**. Otherwise, the font may appear to have uneven pixel + sizes. + + This step is not required for bitmap fonts, as subpixel positioning is only + relevant for dynamic fonts (which are usually made of vector elements). + .. _doc_using_fonts_mipmaps: Mipmaps diff --git a/tutorials/ui/img/using_fonts_bitmap_font_from_image_example_configuration.webp b/tutorials/ui/img/using_fonts_bitmap_font_from_image_example_configuration.webp index af822c2bb8946699f4700c4a6c8c492142ebdf61..f79cebc2ab0cad8a04628574b8d470f5d6e98c7f 100644 GIT binary patch literal 13406 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

d2sZYCA>qpuRt9RMLWslBRn*uccisDtt>G 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 KTKc2rCISGlMU5f=