That'd be great! Yes, the vector font is a bit of a pain - it was an attempt to balance flash memory usage with visual quality, but at the end of a day it was made with an algorithm and there wasn't as much effort put in as there could have been :)
To add to this at one point in the past the font had quite a few more points in it, but then I had to make it lower resolution because on some platforms I was running out of flash memory.
We could potentially create a new font with higher quality and use it on platforms that do have enough memory though.
I guess you figured out that there's a built-in (small) bitmap font as well, and you can drag in other bitmap fonts if you need? http://www.espruino.com/Fonts
The data is in a .h file - there's no good reason for that :)
vectorFonts[ch - vectorFontOffset] contains the width and the number of vertices. We just iterate through summing the vertex count to get the actual offset in vectorFontPolys (rather than using a 16 bit index for each character)
vectorFontPolys contains the vertices as 7 bit unsigned X/Y pairs. It's just a series of regular polygons, and the top bit of 'Y' marks when one polygon ends
The actual font is only 96 high out of the 128 value range to allow for some overshoot - eg on W where the font is wider than it is high.
The font code is scattered with IN_FLASH_MEMORY and READ_FLASH_UINT8 defines - these are just for the ESP8266 as it hates reading unaligned data from flash memory.
The code I used to generate it isn't shared as it relies on a whole bunch of code I had lying around from another project that may not be shareable. I could send it to you personally but it's obviously not doing such a good job, so it may be better to just start from scratch.
Espruino is a JavaScript interpreter for low-power Microcontrollers. This site is both a support community for Espruino and a place to share what you are working on.
Hi Scott,
That'd be great! Yes, the vector font is a bit of a pain - it was an attempt to balance flash memory usage with visual quality, but at the end of a day it was made with an algorithm and there wasn't as much effort put in as there could have been :)
To add to this at one point in the past the font had quite a few more points in it, but then I had to make it lower resolution because on some platforms I was running out of flash memory.
We could potentially create a new font with higher quality and use it on platforms that do have enough memory though.
I guess you figured out that there's a built-in (small) bitmap font as well, and you can drag in other bitmap fonts if you need? http://www.espruino.com/Fonts
The actual vector font is at:
https://github.com/espruino/Espruino/blob/master/libs/graphics/vector_font.h
and the rendering code is:
https://github.com/espruino/Espruino/blob/master/libs/graphics/graphics.c#L416
As far as I recall:
.h
file - there's no good reason for that :)vectorFonts[ch - vectorFontOffset]
contains the width and the number of vertices. We just iterate through summing the vertex count to get the actual offset invectorFontPolys
(rather than using a 16 bit index for each character)vectorFontPolys
contains the vertices as 7 bit unsigned X/Y pairs. It's just a series of regular polygons, and the top bit of 'Y' marks when one polygon endsW
where the font is wider than it is high.IN_FLASH_MEMORY
andREAD_FLASH_UINT8
defines - these are just for the ESP8266 as it hates reading unaligned data from flash memory.The code I used to generate it isn't shared as it relies on a whole bunch of code I had lying around from another project that may not be shareable. I could send it to you personally but it's obviously not doing such a good job, so it may be better to just start from scratch.