No description
Find a file
Jeff Epler 004085e34c bdf: Improve performance of bitmap font loading
Loading fonts can be one of the slow phases of a Magtag type project,
and run time decreases battery lifetime.  Therefore, it's warranted
to write less idiomatic Python here if it improves runtime significantly.

This change assumes that the lines within a character come in a specific
order.  While the document ostensibly defining the BDF file format
https://www.adobe.com/content/dam/acom/en/devnet/font/pdfs/5005.BDF_Spec.pdf
does not say that the order is defined, I inspected the source of the
Linux program "bdftopcf" which has been used for decades to convert
textual bdf font files into binary pcf files, and it too assumes that the
lines come in a defined order.  I doubt that bdf files that do not work
with the linux bdftopcf program are less scarce than unicorns.

I timed loading the characters "Adafruit CircuitPython" from the font
"GothamBlack-50.bdf" on a PyBadge in CircuitPython 6.0.0:

```python
font = load_font("/GothamBlack-50.bdf")
font.load_glyphs("Adafruit CircuitPython")
```

The time decreased from 919ms to 530ms (-42%).

Just reading all the lines in the font file takes 380ms.  However,
only the first 38% of the file (or so) needs to be read, so the I/O time
is about 140ms.
2020-12-05 16:00:17 -06:00
.github/workflows build.yml: add black formatting check 2020-04-07 16:12:22 -05:00
adafruit_bitmap_font bdf: Improve performance of bitmap font loading 2020-12-05 16:00:17 -06:00
docs Black reformatting with Python 3 target. 2020-04-09 17:22:09 -04:00
examples a few comments in magtag example 2020-11-22 15:04:12 -06:00
test Ran black, updated to pylint 2.x 2020-03-15 16:17:54 -04:00
.gitignore adding a displayio example 2020-08-15 16:00:25 -05:00
.pylintrc update pylintrc for black 2020-03-08 19:06:16 -05:00
.readthedocs.yml Begin polishing up bitmap font 2019-02-12 10:19:13 -08:00
CODE_OF_CONDUCT.md update code of conduct 2020-03-15 09:12:33 -05:00
LICENSE Begin polishing up bitmap font 2019-02-12 10:19:13 -08:00
README.rst fix docs link in readme 2020-08-14 21:06:59 -05:00
requirements.txt Begin polishing up bitmap font 2019-02-12 10:19:13 -08:00
setup.py setup.py fixes for correct pip installation 2020-03-18 09:55:23 -07:00

Introduction
============

.. image:: https://readthedocs.org/projects/adafruit-circuitpython-bitmap_font/badge/?version=latest
    :target: https://circuitpython.readthedocs.io/projects/bitmap-font/en/latest/
    :alt: Documentation Status

.. image:: https://img.shields.io/discord/327254708534116352.svg
    :target: https://adafru.it/discord
    :alt: Discord

.. image:: https://github.com/adafruit/Adafruit_CircuitPython_Bitmap_Font/workflows/Build%20CI/badge.svg
    :target: https://github.com/adafruit/Adafruit_CircuitPython_Bitmap_Font/actions/
    :alt: Build Status

Loads bitmap fonts into CircuitPython's displayio. BDF files are well supported. PCF and TTF
support is not yet complete.

Dependencies
=============
This driver depends on:

* `Adafruit CircuitPython <https://github.com/adafruit/circuitpython>`_

Please ensure all dependencies are available on the CircuitPython filesystem.
This is easily achieved by downloading
`the Adafruit library and driver bundle <https://github.com/adafruit/Adafruit_CircuitPython_Bundle>`_.

Installing from PyPI
--------------------
On supported GNU/Linux systems like the Raspberry Pi, you can install the driver locally `from
PyPI <https://pypi.org/project/adafruit-circuitpython-bitmap_font/>`_. To install for current user:

.. code-block:: shell

    pip3 install adafruit-circuitpython-bitmap_font

To install system-wide (this may be required in some cases):

.. code-block:: shell

    sudo pip3 install adafruit-circuitpython-bitmap_font

To install in a virtual environment in your current project:

.. code-block:: shell

    mkdir project-name && cd project-name
    python3 -m venv .env
    source .env/bin/activate
    pip3 install adafruit-circuitpython-bitmap_font

Usage Example
=============

.. code-block::python

    from adafruit_bitmap_font import bitmap_font
    from displayio import Bitmap
    font = bitmap_font.load_font("scientifica-11.bdf", Bitmap)
    print(font.get_glyph(ord("A")))


Contributing
============

Contributions are welcome! Please read our `Code of Conduct
<https://github.com/adafruit/Adafruit_CircuitPython_Bitmap_Font/blob/master/CODE_OF_CONDUCT.md>`_
before contributing to help this project stay welcoming.

Documentation
=============

For information on building library documentation, please check out `this guide <https://learn.adafruit.com/creating-and-sharing-a-circuitpython-library/sharing-our-docs-on-readthedocs#sphinx-5-1>`_.