Pushrod is a Cross Platform UI Widget Library for Rust.
It is intended to be lightweight, easy to use, and easy to understand. Pushrod draws inspiration from 16-bit GUI-based systems and other GUI libraries over the years.
Dependencies
Pushrod uses the following dependencies:
[dependencies]
piston_window = "^0.89.0"
find_folder = "^0.3.0"
To use the crate in your project, add the following dependencies:
[dependencies]
rust-pushrod = "^0.1"
Core Components
pushrod::core
is the core library components, representing the main run loop, the callback
store mechanism, and the widget store.
pushrod::event
is the event system, reserved for 0.2.x.
pushrod::widget
is the core Widget
library.
Callbacks
Callbacks are introduced in the Widget
libraries as a way to action upon an event that
was triggered. If no callback is registered for a particular event, it is bypassed, and
no default action occurs.
The following callbacks are available:
- Main window resizing
- Main window (un)focusing
- Mouse pointer entering a
Widget
- Mouse pointer exiting a
Widget
- Mouse pointer moving inside a
Widget
- Mouse scrolling a mouse wheel inside a
Widget
- A keyboard press event happening inside a
Widget
- Mouse button click down inside the scope of a
Widget
- Mouse button click release inside and outside of a
Widget
Widgets
The following Widget
objects are provided:
BaseWidget
is a top-level Widget
object. It can be configured with
an origin, size, and background color. If you wish to design your own Widget
, you would
want to either extend the BaseWidget
, or use it as a backing in your own Widget
object.
(See BoxWidget
for an example of how to use it in tandem with another object.)
BoxWidget
incorporates a BaseWidget
, extending it to include a border color and width.
TextWidget
provides a way to display text in the main window. Fonts are in ttf
format,
which can be downloaded from Google, so long as they are free/open source. One has been
included with the source distribution in the assets
directory.
TimerWidget
provides a rudimentary timer, which increases ticks based on the screen
refresh. After a timer has expired, a callback is triggered, allowing an action to occur.
ImageWidget
draws an image on the screen. png
format has been tested, but jpg
and gif
formats should also work, as they are part of the Piston library.