brillo-1.13.3: Painless 2D vector graphics, animations, and simulations powered by GLFW
Safe HaskellSafe-Inferred
LanguageGHC2021

Brillo

Description

Brillo hides the pain of drawing simple vector graphics behind a nice data type and a few display functions.

Getting something on the screen is as easy as:

import Brillo
main = display (InWindow "Nice Window" (200, 200) (10, 10)) white (Circle 80)

Once the window is open you can use the following:

* Quit
  - esc-key

* Move Viewport
  - arrow keys
  - left-click drag

* Zoom Viewport
  - page up/down-keys
  - control-left-click drag
  - right-click drag
  - mouse wheel

* Rotate Viewport
  - home/end-keys
  - alt-left-click drag

* Reset Viewport
  r-key

Animations can be constructed similarly using the animate.

If you want to run a simulation based around finite time steps then try simulate.

If you want to manage your own key/mouse events then use play.

Brillo uses OpenGL under the hood, but you don't have to worry about any of that.

Brillo programs should be compiled with -threaded, otherwise the GHC runtime will limit the frame-rate to around 20Hz.

For more information, check out https://github.com/ad-si/Brillo.

Synopsis

Documentation

data Display Source #

Describes how Brillo should display its output.

Constructors

InWindow String (Int, Int) (Int, Int)

Display in a window with the given name, size and position.

FullScreen

Display full screen.

Instances

Instances details
Read Display Source # 
Instance details

Defined in Brillo.Data.Display

Show Display Source # 
Instance details

Defined in Brillo.Data.Display

Eq Display Source # 
Instance details

Defined in Brillo.Data.Display

Methods

(==) :: Display -> Display -> Bool #

(/=) :: Display -> Display -> Bool #

display Source #

Arguments

:: Display

Display mode.

-> Color

Background color.

-> Picture

The picture to draw.

-> IO () 

Open a new window and display the given picture.

animate Source #

Arguments

:: Display

Display mode.

-> Color

Background color.

-> (Float -> Picture)

Function to produce the next frame of animation. It is passed the time in seconds since the program started.

-> IO () 

Open a new window and display the given animation.

Once the window is open you can use the same commands as with display.

simulate Source #

Arguments

:: Display

Display mode.

-> Color

Background color.

-> Int

Number of simulation steps to take for each second of real time.

-> model

The initial model.

-> (model -> Picture)

A function to convert the model to a picture.

-> (ViewPort -> Float -> model -> model)

A function to step the model one iteration. It is passed the current viewport and the amount of time for this simulation step (in seconds).

-> IO () 

Run a finite-time-step simulation in a window. You decide how the model is represented, how to convert the model to a picture, and how to advance the model for each unit of time. This function does the rest.

Once the window is open you can use the same commands as with display.

play Source #

Arguments

:: Display

Display mode.

-> Color

Background color.

-> Int

Number of simulation steps to take for each second of real time.

-> world

The initial world.

-> (world -> Picture)

A function to convert the world a picture.

-> (Event -> world -> world)

A function to handle input events.

-> (Float -> world -> world)

A function to step the world one iteration. It is passed the period of time (in seconds) needing to be advanced.

-> IO () 

Play a game in a window. Like simulate, but you manage your own input events.