From c9231076e44e5cb7a1b023c24bbdcd35288b2881 Mon Sep 17 00:00:00 2001 From: Peter Hinch Date: Fri, 14 Jan 2022 14:49:53 +0000 Subject: [PATCH] Add c_to_python_font.py. --- icon_fonts/README.md | 54 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 54 insertions(+) create mode 100644 icon_fonts/README.md diff --git a/icon_fonts/README.md b/icon_fonts/README.md new file mode 100644 index 0000000..15130c2 --- /dev/null +++ b/icon_fonts/README.md @@ -0,0 +1,54 @@ +# Icon Fonts + +It is possible to display icons by incorporating their images in a font file. +There are `.ttf` and `.otf` files available which can be converted to Python +using `font_to_py.py`. I have not had much success with these. I also wanted +to create my own icons. I also experimented with using a font editor to modify +an existing font. I found the font editor unintuitive and hard to use. + +The solution offered here uses the Linux `bitmap` editor plus a utility to +convert a set of its output files to a Python font file. The image below shows +typical usage. + +![Image](./icon_font.jpg) + +# The bitmap editor + +This is documented in the man pages, but it is easy and intuitive to use. To +generate (say) 19x19 icons, issue +```bash +$ bitmap -size 19x19 +``` +Save each bitmap under a different name: I use a `.c` extension as they are C +source files. + +You need to create an additional icon to provide the output under error +conditions, i.e. if an attempt is made to display a glyph not in the font. + +# The file list + +Create a text file listing the bitmap filenames, one filename per line. The +icon to be used as the default (error) image should be first. Subsequent icons +will be assigned to characters "A", "B", "C"... + +# Creating the Python font + +Assuming a file list `my_file_list.txt`, the following will create +`my_font.py`. It requires Python 3.8 or later. The `font_to_py.py` file should +be in the same directory. + +```bash +$ ./c_to_python_font.py my_file_list.txt my_font.py +``` + +# Using the font + +The following will print `icon[2]` where `icon[0]` is the default and `icon[1]` +is associated with "A". +```python +# Instantiate the ssd display object +import my_font +import CWriter +wri = CWriter(ssd, my_font) +wri.printstring("B") +```