Which file(s) are the drawing functions defined in? I’ll take a look at the code at some point but if it is possible to create an n-sided polygon, it should be possible to support SVG style paths.
I don’t really think its worth adding support for SVG files themselves but I feel like the ability to define custom shapes would be really useful and allow people to do a lot more with the library. It makes sense to implement that in a way which people are familiar with so I feel using the SVG path syntax is a good way to go. Assuming polygons can be supported, the only real issue is the arcs and bezier curves which would require a few equations to implement, which is always so much ‘fun’.
If SVG paths are implemented though, it makes it so much easier for users to add icons to their displays. All of the icons over at material design icons are available as svg and the path could easily be copied over into the program. It opens up easy access to more complex graphics without needing storage for bitmaps and a bunch of code to read that from memory and draw it on the display. It may even allow really rich animation capabilities depending on how well the draw function performs.
For reference: https://developer.mozilla.org/en/docs/Web/SVG/Tutorial/Paths
On the anti-aliasing side of things, it really only needs to be available on a layer by layer basis. If and when transparency support is added to layers, anti-aliasing between layers should be easy to do. The idea behind anti-aliasing would be to allow for drawing between pixels so you could technically draw a rectangle at (0.5, 0.5) and it would light up the first column and row of the screen at half the brightness of the fill color. This technique would smooth out stepped lines and also make animations look much smoother as the motion of a pixel transitions gradually between the two LEDs.
Usually you would achieve this affect by using transparency and alpha blending but it really isn’t required in this case. Take for example a black background on which you draw a white rectangle. You draw the rectangle at (0.6, 0.6) with a certain width or height which don’t really matter for this example. The top corner is technically supposed to be drawn in (0,0) but as it is only 0.4 pixels into that grid square, the current algorithm rounds that down and doesn’t fill that pixel. Instead, what could be done is to analyze the amount of that pixel which is white and the amount which is black. In this case it is 0.60.6 + 0.40.6 + 0.40.6 = 84% black and 0.40.4 = 16% white. You can then use those values to perform a weighted average on the current pixel color and the new pixel color.