sdl3

Use sdl3 in MoonBit

SDL3
moon add Kaida-Amethyst/sdl3@0.1.1
Download zip
Version
0.1.1
License
Apache-2.0
Last updated
4 months ago
Downloads
252
README

#SDL3 MoonBit Binding

#⚠️ 开发中项目警告

此项目仍在积极开发中,API 可能会发生重大变化。不建议在生产环境中使用。

#项目简介

这是一个为 SDL3 图形库提供的 MoonBit 语言绑定,允许开发者在 MoonBit 中使用 SDL3 的各种功能,包括窗口管理、渲染、事件处理等。

#示例代码

以下是一个简单的示例,创建一个黑色窗口并绘制一些基本图形:

fn main {
match (try! main_err()) {
Ok(_) => ()
Err(e) => println(e)
}
}

fn main_err() -> Unit raise {
let ctx = @sdl3.Context::new()
let window = ctx.createWindow("Simple Black Window", width=800, height=600)
let renderer = window.createRenderer()
let timer = ctx.getTimer()

let mut quit = false
while !quit {
let events = ctx.getEvents()
if events.iter().any(e => e.getType() is Quit) {
quit = true
}

// 清除屏幕为白色
renderer.setDrawColor(White)
renderer.clear()

// 绘制黑色点和线
renderer.setDrawColor(Black)
renderer.point(400, 300)
renderer.line((100, 100), (700, 500))

// 绘制红色矩形
renderer.setDrawColor(Red)
let rect = ctx.createRect(anchor=(200, 200), width=300, height=300)
renderer.drawRect(rect)

renderer.present()
timer.delay(16)
}

ctx.quit()
}

#许可证

本项目采用 Apache-2.0 许可证。

#
ClearRendererError

pub suberror ClearRendererError {
ClearRendererError(String)
} derive(Show)

#
CreateWindowError

pub suberror CreateWindowError {
CreateWindowError(String)
} derive(Show)

#
DrawGeometryError

pub suberror DrawGeometryError {
DrawGeometryError(String)
} derive(Show)

#
InitializeSDLError

pub suberror InitializeSDLError {
InitializeSDLError(String)
} derive(Show)

#
RenderPresentError

pub suberror RenderPresentError {
RenderPresentError(String)
} derive(Show)

#
RenderRendError

pub suberror RenderRendError {
RenderRendError(String)
} derive(Show)

#
SetDrawColorError

pub suberror SetDrawColorError {
SetDrawColorError(String)
} derive(Show)

#
Color

pub(all) enum Color {
Red
Green
Blue
Yellow
Cyan
Magenta
Black
White
Gray
LightGray
DarkGray
Orange
Purple
Pink
Brown
Lime
Navy
Maroon
Olive
Teal
Silver
Crimson
FireBrick
DarkRed
LightPink
HotPink
DeepPink
MediumVioletRed
PaleVioletRed
DarkOrange
OrangeRed
Tomato
Coral
LightSalmon
Salmon
DarkSalmon
LightCoral
Gold
LightYellow
LemonChiffon
LightGoldenrodYellow
PapayaWhip
Moccasin
PeachPuff
PaleGoldenrod
Khaki
DarkKhaki
LightGreen
DarkGreen
ForestGreen
SeaGreen
MediumSeaGreen
LightSeaGreen
DarkSeaGreen
YellowGreen
OliveDrab
LawnGreen
Chartreuse
GreenYellow
SpringGreen
MediumSpringGreen
LimeGreen
LightBlue
DarkBlue
MediumBlue
SkyBlue
LightSkyBlue
DeepSkyBlue
DodgerBlue
CornflowerBlue
SteelBlue
LightSteelBlue
PowderBlue
LightCyan
CadetBlue
Turquoise
DarkTurquoise
MediumTurquoise
PaleTurquoise
Aqua
DarkCyan
Violet
Plum
Thistle
Lavender
MediumOrchid
MediumPurple
BlueViolet
DarkViolet
DarkOrchid
DarkMagenta
Indigo
SlateBlue
DarkSlateBlue
MediumSlateBlue
SaddleBrown
Sienna
Chocolate
Peru
SandyBrown
BurlyWood
Tan
RosyBrown
Goldenrod
DarkGoldenrod
Gainsboro
DimGray
SlateGray
LightSlateGray
DarkSlateGray
Beige
Bisque
BlanchedAlmond
Cornsilk
Ivory
FloralWhite
Snow
GhostWhite
MintCream
Azure
AliceBlue
Lavenderblush
Seashell
Honeydew
Transparent
RGB(Byte, Byte, Byte)
} derive(Eq, Show)

Color representation supporting both predefined colors and custom RGB/RGBA values

#
Color::to_rgb

fn Color::to_rgb(self : Color) -> (Byte, Byte, Byte)

Convert color to RGB bytes (red, green, blue)

#
Context

pub struct Context {
windows : Array[Window]
}

#
Context::createWindow

fn Context::createWindow(self : Context, title : String, width~ : Int, height~ : Int) -> Window raise

Create a new window.

Parameters

  • title: The title of the window.
  • width: The width of the window.
  • height: The height of the window.

It returns a new Window instance.

#
Context::getEvents

fn Context::getEvents(self : Context) -> Array[Event]

Get all events from the event queue.

It returns an array of Event instances.

#
Context::getTimer

fn Context::getTimer(self : Context) -> Timer

Get a timer instance.

It returns a Timer instance.

#
Context::new

fn Context::new() -> Context raise

Create a new context. This function initializes the SDL library. It returns a new Context instance.

#
Context::quit

fn Context::quit(self : Context) -> Unit

Quit the SDL library. This function should be called before the program exits.

#
Event

#
Event::getType

fn Event::getType(self : Event) -> EventType

#
Event::inner

#deprecated("Use `struct T(A)` to declare a newtype and use `.0` access the underlying type instead.")
fn Event::inner(self : Event) ->
SDL_Event
Convert newtype to its underlying type, automatically derived.

#
EventType

pub(all) enum EventType {
Quit
Terminating
LowMemory
WILL_ENTER_BACKGROUND
DID_ENTER_BACKGROUND
WILL_ENTER_FOREGROUND
DID_ENTER_FOREGROUND
LOCALE_CHANGED
SYSTEM_THEME_CHANGED
DISPLAY_ORIENTATION
DISPLAY_ADDED
DISPLAY_REMOVED
DISPLAY_MOVED
DISPLAY_DESKTOP_MODE_CHANGED
DISPLAY_CURRENT_MODE_CHANGED
DISPLAY_CONTENT_SCALE_CHANGED
WINDOW_SHOWN
WINDOW_HIDDEN
WINDOW_EXPOSED
WINDOW_MOVED
WINDOW_RESIZED
WINDOW_PIXEL_SIZE_CHANGED
WINDOW_METAL_VIEW_RESIZED
WINDOW_MINIMIZED
WINDOW_MAXIMIZED
WINDOW_RESTORED
WINDOW_MOUSE_ENTER
WINDOW_MOUSE_LEAVE
WINDOW_FOCUS_GAINED
WINDOW_FOCUS_LOST
WINDOW_CLOSE_REQUESTED
WINDOW_HIT_TEST
WINDOW_ICCPROF_CHANGED
WINDOW_DISPLAY_CHANGED
WINDOW_DISPLAY_SCALE_CHANGED
WINDOW_SAFE_AREA_CHANGED
WINDOW_OCCLUDED
WINDOW_ENTER_FULLSCREEN
WINDOW_LEAVE_FULLSCREEN
WINDOW_DESTROYED
WINDOW_HDR_STATE_CHANGED
KEY_DOWN
KEY_UP
TEXT_EDITING
TEXT_INPUT
KEYMAP_CHANGED
KEYBOARD_ADDED
KEYBOARD_REMOVED
TEXT_EDITING_CANDIDATES
MOUSE_MOTION
MOUSE_BUTTON_DOWN
MOUSE_BUTTON_UP
MOUSE_WHEEL
MOUSE_ADDED
MOUSE_REMOVED
JOYSTICK_AXIS_MOTION
JOYSTICK_BALL_MOTION
JOYSTICK_HAT_MOTION
JOYSTICK_BUTTON_DOWN
JOYSTICK_BUTTON_UP
JOYSTICK_ADDED
JOYSTICK_REMOVED
JOYSTICK_BATTERY_UPDATED
JOYSTICK_UPDATE_COMPLETE
GAMEPAD_AXIS_MOTION
GAMEPAD_BUTTON_DOWN
GAMEPAD_BUTTON_UP
GAMEPAD_ADDED
GAMEPAD_REMOVED
GAMEPAD_REMAPPED
GAMEPAD_TOUCHPAD_DOWN
GAMEPAD_TOUCHPAD_MOTION
GAMEPAD_TOUCHPAD_UP
GAMEPAD_SENSOR_UPDATE
GAMEPAD_UPDATE_COMPLETE
GAMEPAD_STEAM_HANDLE_UPDATED
FINGER_DOWN
FINGER_UP
FINGER_MOTION
FINGER_CANCELED
CLIPBOARD_UPDATE
DROP_FILE
DROP_TEXT
DROP_BEGIN
DROP_COMPLETE
DROP_POSITION
AUDIO_DEVICE_ADDED
AUDIO_DEVICE_REMOVED
AUDIO_DEVICE_FORMAT_CHANGED
SENSOR_UPDATE
PEN_PROXIMITY_IN
PEN_PROXIMITY_OUT
PEN_DOWN
PEN_UP
PEN_BUTTON_DOWN
PEN_BUTTON_UP
PEN_MOTION
PEN_AXIS
CAMERA_DEVICE_ADDED
CAMERA_DEVICE_REMOVED
CAMERA_DEVICE_APPROVED
CAMERA_DEVICE_DENIED
RENDER_TARGETS_RESET
RENDER_DEVICE_RESET
RENDER_DEVICE_LOST
PRIVATE0
PRIVATE1
PRIVATE2
PRIVATE3
POLL_SENTINEL
USER
InValidEventType
}

#
Renderer

pub struct Renderer {
base :
SDL_Renderer

r : Byte
g : Byte
b : Byte
a : Byte
}

#
Renderer::clear

fn Renderer::clear(self : Renderer) -> Unit raise ClearRendererError

Clear the renderer.

#
Renderer::drawGeometry

fn Renderer::drawGeometry(self : Renderer, vertexes : Array[(Double, Double)], color_alpha? : Array[(Color, Byte)], texture_coords? : Array[(Double, Double)], indices? : Array[Int]) -> Unit raise

#
Renderer::drawLine

fn Renderer::drawLine(self : Renderer, start : (Double, Double), end : (Double, Double), color? : Color, alpha? : Int) -> Unit raise

#
Renderer::drawLines

fn Renderer::drawLines(self : Renderer, points : Array[(Double, Double)], color? : Color, alpha? : Int) -> Unit raise

#
Renderer::drawPoint

fn Renderer::drawPoint(self : Renderer, x : Double, y : Double, color? : Color, alpha? : Int) -> Unit raise

#
Renderer::drawPoints

fn Renderer::drawPoints(self : Renderer, points : Array[(Double, Double)], color? : Color, alpha? : Int) -> Unit raise

#
Renderer::drawRect

fn Renderer::drawRect(self : Renderer, anchor : (Double, Double), width : Double, height : Double, color? : Color, alpha? : Int, fill? : Bool) -> Unit raise

#
Renderer::drawRects

fn Renderer::drawRects(self : Renderer, rects : Array[((Double, Double), Double, Double)], color? : Color, alpha? : Int, fill? : Bool) -> Unit raise

#
Renderer::present

fn Renderer::present(self : Renderer) -> Unit raise RenderPresentError

Present the renderer.

#
Renderer::refreshBackGround

fn Renderer::refreshBackGround(self : Renderer, color : Color) -> Unit raise

#
Renderer::setDefaultColor

fn Renderer::setDefaultColor(self : Renderer) -> Unit

#
Renderer::setDrawAlpha

fn Renderer::setDrawAlpha(self : Renderer, alpha : Int) -> Unit raise SetDrawColorError

#
Renderer::setDrawColor

fn Renderer::setDrawColor(self : Renderer, color : Color, alpha? : Int) -> Unit raise SetDrawColorError

Set the draw color for the renderer.

Parameters

  • color: The color to set.
  • alpha: The alpha value of the color.

#
Timer

pub struct Timer {
}

#
Timer::delay

fn Timer::delay(self : Timer, ms : Int) -> Unit

Delay for a certain amount of time.

Parameters

  • ms: The number of milliseconds to delay.

#
Window

pub struct Window {
base :
SDL_Window

renderer : Renderer?
}

#
Window::createRenderer

fn Window::createRenderer(self : Window) -> Renderer raise

Create a new renderer for the window.

It returns a new Renderer instance.

#
Window::getRenderer

fn Window::getRenderer(self : Window) -> Renderer?

Get the renderer for the window.

It returns a Renderer instance if it exists, otherwise None.