Sign in

    sdl3

    SDL3 MoonBit binding fork with native stub build flag fixes.

    SDL3
    rhodonite
    Download zip
    Version
    0.1.2
    License
    Apache-2.0
    Last updated
    5 months ago
    Downloads
    33

    No dependencies

    #SDL3 MoonBit Binding

    #RhodoniteMBT-specific fork

    emadurandal/sdl3 is a RhodoniteMBT-specific fork of the SDL3 MoonBit binding. It exists so Rhodonite's native SDL3/WebGPU packages can publish a dependency whose C stubs carry the SDL3 include flags needed by Homebrew-based macOS builds.

    For general SDL3 MoonBit use, prefer the upstream package Kaida-Amethyst/sdl3. Use this fork only when you are depending on RhodoniteMBT native runtime packages or intentionally want the same build-flag behavior.

    #Fork Notice

    This package is derived from Kaida-Amethyst/sdl3 0.1.1 (https://github.com/moonbit-community/sdl3.mbt), licensed under Apache-2.0.

    RhodoniteMBT maintains this fork as emadurandal/sdl3 so the SDL3 binding's native C stubs pass Homebrew include directories to the compiler via stub-cc-flags.

    #⚠️ 开发中项目警告

    此项目仍在积极开发中,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

    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.