Highlights of this release
This release was mainly about making Zircon more robust and prepare it to be used in a multiplatform environment (jvm, browser, native). There are also some new enhancements and features added, like:
- New True Type Fonts. Take a look here, here, here and here.
- Multi-size Tile support: here.
- Markov Chain based
Modifierslike bubbly lava effect, glitch and static.
- Component decoration refurbishment.
- New components, like the TextBox
which also supports inline
Components and typing effects
- The LogArea component.
- New color themes.
- A new example tutorial project following in the footsteps of Trystan’s blog series.
- Embedded images
There are numerous new features in this release:
#100: Support all Input events on components properly.
Inputevents can be properly listened to on
InputListeners can be added or the specific listener methods can be called with a lambda like
#90: Add the option to enable beta features in Zircon
Now there is a switch in
AppConfigwhich can be used to enable beta features like
Animations and the
#89: Add the option to run Zircon in debug mode
This can also be enabled now from
AppConfig. It will display specific log entries and also the current FPS. This feature will be enhanced later.
#76: Introduce ShutdownHook in Zircon
ShutdownHookcan be used to notify the user before Zircon closes
#75: Improve Animation to return an AnimationResult
Animationwill now return a handle which can be used to interact with the
- #54: Embedding images/bitmaps
#46: Implement “Log” Component
LogAreacomponent was implemented (great thanks to coldwarrl!).
#8: TileColor transformations
The following transformations were implemented:
tint: adding a different color to this one
shade: lighten or darken the color
invert: flip the color to its opposite (blue vs red for example)
These are the enhancements which were done in this release:
- #112: Allow Position and Size to have negative values, and add a check in the components framework not to allow them there.
#107: Reconcile the usage of properties vs functions (eg: size(), position() vs size and position
These were streamlined and the weird getters (
size(), etc) are now gone. Now there is a proper getter / setter for everything and mutator/transformer methods which return the object are prefixed with
#105: Separate Modifier into tile transformer and texture transformer modifiers.
Now there are two kinds of
Modifiers. One which modifies how textures are transformed, and one which can modify a
Tilebefore it is rendered.
#103: Reconcile getTileAt, setTileAt, getRelativeTileAt and setRelativeTileAt.
These were “sanetized” now it is straightforward and well documented which is which and how to use them.
#102: Provide a proper
snapshot()instead of a
snapshot()method returns a proper
Snapshotobject instead of just a
#84: Font to Tile refactor
This was a rather thorough change. Previously Zircon used the
Fontabstraction which was now refactored to
TilesetResourcewhich streamlines and simplifies how
Tiles can be loaded and used. It is now also easier to write support for new kinds of fonts, tiles, and such.
#83: Refactor Blink handling and Animation handling to be part of the incremental rendering
Animationtiming is now handled by the continuous renderer. This does not change how the API works, but makes the code of Zircon more robust, and less error prone.
#82: Continuous rendering
Now Zircon does continuous rendering: the user will no longer have to call
refreshand other such methods in order to redraw the screen. The
Applicationclass was also introduced to accommodate this change.
#81: Multiplatform refactor
The majority of the code in
zircon.jvmwere moved to
ImageDictionaryTilesetResource. The related example can be found here and it looks like this.
#74: Streamline how Positions and Sizes work
Previously it was not possible to create
Positions with a negative component (
y), not it is possible, and it is only limited in specific places (like
#73: Improve TileGraphics performance
TileGraphicsused arrays before, now it uses sparse
Maps. This enhances performance, and also makes it possible to have
TileGraphicswith stupid size.
#69: CombineWith should resize new image to fit TileGraphics
combineWithis called on a
TileGraphicsit will properly be resized to accommodate the other image.
#67: Add word wrap to CharacterTileString
CharacterTileStringnow supports word wrap!
FontTextureRegionabstraction for different backends.
Tiledrawing for different backends (Swing, LibGDX, etc) was a bit convoluted. Now this is streamlined.
#60: Proper modularization depending on GUI backend
Zircon was split into multiple projects (
zircon.jvm.libgdx). This makes the artifacts more lightweight, and the codebase is also separated along the GUI framework backends.
#59: Component wrapping refurbishment
Component wrapping was refactored. Now
ComponentDecorationRenderers can be added to any
Componentduring creation. This makes it possible to apply any decoration to any component.
#55: Fix and test TextBox
This was a bit convoluted before, now it is better and has more tests.
#38: Half-width Tile support
Now it is possible to use
TilesetResources which are not square, there are also some added tilesets like
#32: Tile alignment by pixel
Tiles can be aligned by using
AbsolutePosition. Note that this feature is still in beta.
The following bugs were fixed:
- #111: Fix RadioButton.select() to change the selection in its parent as well
- #77: Swing terminal is not being redrawn in response to exposure event
- #66: Adding Components to a Container which is not yet attached to a ContainerHandler will lead to positioning problems
- #65: RadioButtonGroup throws stacktrace if you click empty space
- #64: Minimizing a swing terminal and then restoring it causes the screen to go grey
- #47: Adding a component to a container which has no font before attaching that container to a Screen leads to font error.
There are several things on the radar, like:
- Refactor parallelism and concurrency to use Kotlin coroutines
- Finish custom
- Add floating, modal and scrollable components
- Drag’n drop support
- Component themes
- Simple and easy to use data binding and MVC support
If you think that you can contribute or just have an idea feel free to join the discussion on our Discord server.