Due to the (lack of) precision of floating-point values, comparison
results may differ slightly between architectures, leading to the
`check_stretching` test failing when building for i386. This can be
fixed by adjusting the value against which we compare the ratio between
x/y scaling factors in `calculate_transformation`.
Due to the way the panel size is calculated, there might be a small
empty space on the sides or top of the layout. This can be an issue,
especially when this empty space is located on the sides, as touch
events in this area are not taken into account.
By allowing a small difference in horizontal and vertical scaling, we
can ensure the panel occupies the whole display width in cases where
this would be problematic.
This actually removes the size request from panel creation. Incidentally, this still works becuae the following configure event gets the sizes from glib.
The library is small and simple enough to be considered "finished". In addition, it doesn't seem to be shipped by Debian.
In relation to its usefulness, it's little effrt to copy it.
This will help make the init procedure safer, by limiting the number of Rust objects that need to be carried to the C side and may be mangled on the way there.
The second benefit is that it allows outputs to become part of new state management.
This reverts commit 5c1b28e4ed8b046a251609e5f7db4b4df9e710f5.
It has only been needed to move Rust structure across C bridges. That's unneeded with more integration.
This ensures that the new state machine is fed events, as well as that its results are applied.
The old ad-hoc system is removed.
There is one regression where the last layout will be used when the panel is brought up manually.
Handling visibility state ad-hoc has shortcomings in testability and locality, and this module attmepts to rectify that by creating an explicit state machine, along with a loop to drive it.
Actually applying state is not implemented here.