A SDL2-based graphics library, batteries-included.
This package provides the wheel for a graphical application or a game.
Basic concepts and features:
Figure: convenient SDL texture, once created, it can be translated or rotated during rendering.
Component: a reusable widget with event handlers, its figures can also be cached.
Hot Config Replacement: view components can be constructed by an external yaml file with live preview.
built-in components: some common components are predefined. You can define a new component by yourself.
minilight
A simple but powerful graphics library.
NB: This library is fairly unstable and highly experimental.
Build
You first need to install sdl2 packages.
For Ubuntu 18.04:
~$ sudo apt install -y libsdl2-dev libsdl2-image-dev libsdl2-ttf-dev libsdl2-gfx-dev
For ghc-8.8, use a version >= 0.4.3
Tutorial
Create a new project. Assume that you have the resource
directory under the project root, which contains the resource stuff.
Here is an example, specifying resources/app.yml
for the configuration file and resources
for the watching directory (dynamic hot reloading).
import Control.Monad
import Data.Component.Resolver (resolver)
import MiniLight
main :: IO ()
main = runLightT $ do
runMiniloop
( defConfig { appConfigFile = Just "resources/app.yml"
, hotConfigReplacement = Just "resources"
, componentResolver = resolver
}
)
()
return
In resources/app.yml
, you can write your application configuration.
_vars:
window:
width: 800
height: 600
app:
- name: layer
properties:
image: resources/background.png
position:
x: 0
y: 0
- name: message-layer
properties:
window:
image: resources/window-base.png
position:
x: 0
y: ${${var:window.height} - ${ref:..size.height}}
size:
width: ${var:window.width}
height: 150
next:
image: resources/text-pause.png
division:
x: 1
y: 6
interval: 40
engine:
messages: This is a message.
color: [255,255,255,255]
font:
family: IPAGothic
size: 22
For the configuration syntax, see MiniLight.Loader.
For the pre-defined components, see the modules under Data.Component
.
Examples
See examples.