MoonBit bindings for SDL
Dependencies
import {
"klaseca/sdl@0.0.1",
}fn main {
try! @sdl.App().run(setup)
}
fn setup(app : @sdl.App) -> Unit raise @sdl.SdlError {
let window = @sdl.Window(
title="MoonBit SDL",
width=800,
height=480,
resizable=true,
)
defer window.destroy()
let renderer = @sdl.Renderer(window)
defer renderer.destroy()
app.run_loop(() => {
renderer.set_draw_color(@sdl.Color::rgb(r=24, g=28, b=36))
renderer.clear()
renderer.present()
})
}let window = @sdl.Window(
title="MoonBit SDL",
width=800,
height=480,
resizable=true,
)
defer window.destroy()window.set_placement(Centered)
window.set_placement(CenteredOnDisplay(1))match @sdl.poll_event() {
Some(Quit) => ()
Some(WindowCloseRequested(event)) => println("close requested: \{event.window_id}")
Some(_) | None => ()
}let window = @sdl.Window(
title="MoonBit SDL",
width=800,
height=480,
close_behavior=Hide,
)let redraw = window.on(Exposed, _event => {
renderer.clear()
renderer.present()
})
defer redraw.dispose()let resized = window.on(Resized, event => {
if event.size is Some(size) {
println("window size: \{size.width}x\{size.height}")
}
})
defer resized.dispose()let renderer = @sdl.Renderer(window)
defer renderer.destroy()
renderer.set_draw_color(@sdl.Color::rgb(r=70, g=155, b=255))
renderer.clear()
renderer.fill_rect(x=280.0, y=160.0, w=240.0, h=160.0)
renderer.present()let texture = renderer.create_texture(
width=256,
height=256,
format=@sdl.Bgra8888,
access=@sdl.Streaming,
)
defer texture.destroy()let tray = @sdl.Tray(
tooltip="MoonBit SDL",
menu=@sdl.Menu()
.button(label="Show window", on_click=() => window.show())
.button(label="About", on_click=() => {
window.show_simple_message_box(
title="MoonBit SDL",
message="Hello from tray",
)
})
.checkbox(label="Enabled", checked=true)
.separator()
.submenu(
label="More",
menu=@sdl.Menu().button(label="Quit", on_click=() => app.exit()),
),
)
defer tray.destroy()@sdl.Clipboard::set_text("Copied from MoonBit")
let text = @sdl.Clipboard::text()fn open_window() -> Unit raise @sdl.SdlError {
let window = @sdl.Window(title="Example", width=640, height=480)
defer window.destroy()
}type Apppub type Clipboardpub(all) enum Event {
Quit
KeyDown(KeyboardEvent)
KeyUp(KeyboardEvent)
MouseMotion(MouseMotionEvent)
MouseButtonDown(MouseButtonEvent)
MouseButtonUp(MouseButtonEvent)
TextInput(TextInputEvent)
WindowExposed(WindowEvent)
WindowResized(WindowEvent)
WindowPixelSizeChanged(WindowEvent)
WindowCloseRequested(WindowEvent)
Other(UInt)
} derive(Eq, Debug)type EventListenerpub struct Menu {
// private fields
}pub(all) struct Properties {
raw : UInt
}fn Properties::set_string(self : Properties, name~ : Bytes, value~ : String?) -> Unit raise SdlErrortype Rendererfn Renderer::create_texture(self : Renderer, width~ : Int, height~ : Int, format? : PixelFormat, access? : TextureAccess) -> Texture raise SdlErrortype Texturefn Texture::Texture(renderer : Renderer, width~ : Int, height~ : Int, format? : PixelFormat, access? : TextureAccess) -> Texture raise SdlErrortype Traytype Windowfn Window::Window(title~ : String, width~ : Int, height~ : Int, placement? : WindowPlacement, hidden? : Bool, resizable? : Bool, borderless? : Bool, always_on_top? : Bool, high_pixel_density? : Bool, constrain_popup? : Bool, external_graphics_context? : Bool, fullscreen? : Bool, maximized? : Bool, minimized? : Bool, menu? : Bool, modal? : Bool, mouse_grabbed? : Bool, focusable? : Bool, opengl? : Bool, metal? : Bool, vulkan? : Bool, transparent? : Bool, tooltip? : Bool, utility? : Bool, custom_properties? : Array[Property], close_behavior? : WindowCloseBehavior) -> Window raise SdlErrorfn Window::on(self : Window, name : WindowEventName, callback : (WindowEvent) -> Unit) -> EventListener raise SdlErrorpub(all) struct WindowEvent {
window_id : UInt
name : WindowEventName
size : Size?
} derive(Eq, Debug)MoonBit bindings for SDL
Dependencies