#2d-graphics #graphics #2d #alignment #figure

figures

A math library specialized for 2d screen graphics

7 releases

0.2.2 Jan 5, 2024
0.2.1 Dec 28, 2023
0.1.2 Sep 2, 2021
0.1.1 Aug 29, 2021
0.0.0-reserve.0 Aug 10, 2021

#134 in Math

Download history 220/week @ 2024-01-01 126/week @ 2024-01-08 43/week @ 2024-02-19 45/week @ 2024-02-26 9/week @ 2024-03-04 42/week @ 2024-03-11 9/week @ 2024-03-18 2/week @ 2024-03-25 50/week @ 2024-04-01 7/week @ 2024-04-08 6/week @ 2024-04-15

65 downloads per month
Used in 7 crates (3 directly)

MIT/Apache

220KB
5K SLoC

Figures

figures is considered alpha and unsupported crate version Documentation for main branch

A primarily integer-based 2d graphics math library.

Inspiration

Sharp graphics are achieved by ensuring that drawing is aligned to pixel boundaries. If a 1px-square dot is drawn at 0.99 pixels offset, the dot may look fuzzy because its color will be shared across multiple pixels. While this can give the illusion of subpixel imaging, it can also be undesired on high-dpi displays.

This library embraces integer types for its data representation to allow for predictable math to be performed without loss of precision. It supports subdividing physical pixels into 4 subpixels, allowing for subpixel layout while providing consistent results.

Pixels (Px) and Device-Independent Pixels (Lp)

In this crate, a pixel (Px) is a single colorable location on a screen. A display's resolution, such as 1920x1080, is its measurement in pixels. A pixel can vary in size greatly -- a modern smartphone's display is often over 300 pixels per inch while a 23-inch 1080p monitor contains roughly 96 pixels-per-inch (ppi).

As an alternative to pixels, this crate also provides its own measurement unit: device-independent pixels (Lp). This type offers many constructors using real-world measurements that developers and designers are familiar with, and handles converting to the display's scale for the developer.

Project Status

This project is early in development as part of Kludgine and Gooey. It is considered alpha and unsupported at this time, and the primary focus for @ecton is to use this for his own projects. Feature requests and bug fixes will be prioritized based on @ecton's own needs.

If you would like to contribute, bug fixes are always appreciated. Before working on a new feature, please open an issue proposing the feature and problem it aims to solve. Doing so will help prevent friction in merging pull requests, as it ensures changes fit the vision the maintainers have for Gooey.

Dependencies

~0–39MB
~614K SLoC