From 7634ebcc4a64238caaa92fcee1158d47c71573e1 Mon Sep 17 00:00:00 2001 From: CW team Date: Tue, 15 Jul 2025 15:09:36 +0500 Subject: [PATCH 1/9] add basic documentation --- README.md | 4 +- docs/API_REFERENCE.html | 1114 +++++++++++++++++++++++++++++++++++++ USAGE.md => docs/USAGE.md | 0 logo.jpeg | Bin 154594 -> 0 bytes mjui/utils.mojo | 1 + scripts/create-app.py | 37 +- 6 files changed, 1139 insertions(+), 17 deletions(-) create mode 100644 docs/API_REFERENCE.html rename USAGE.md => docs/USAGE.md (100%) delete mode 100644 logo.jpeg diff --git a/README.md b/README.md index 46ad4c3..7821250 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,5 @@ -# CombustUI – Lightweight GUI Bindings for Mojo -

- drawing + drawing


diff --git a/docs/API_REFERENCE.html b/docs/API_REFERENCE.html new file mode 100644 index 0000000..60227d1 --- /dev/null +++ b/docs/API_REFERENCE.html @@ -0,0 +1,1114 @@ + + + + + + CombustUI-Mojo API Reference + + + + + + +
+

CombustUI-Mojo API Reference

+

Comprehensive documentation for all public functions, constants, and FFI bindings in CombustUI-Mojo.

+
+ Light + + Dark +
+
+
+ +
+ +

Application (Mojo)

+

addEventListener(id: Int, handler: EventHandler)

+

Registers an event handler for a widget identified by its id. When an event occurs for the specified widget, the handler will be triggered if the event type matches.

+

Defined in: mjui/_app.mojo

+
app.addEventListener(1, handler)
+
+

setElementById(id: Int, element: FLTK_WIDGET_POINTER)

+

Associates a raw FLTK widget pointer (FLTK_WIDGET_POINTER) with a unique integer id. This allows for easy retrieval and manipulation of widgets by their assigned ID.

+

Defined in: mjui/_app.mojo

+
app.setElementById(22, label)
+
+

getElementById(id: Int) -> FLTK_WIDGET_POINTER

+

Retrieves the FLTK_WIDGET_POINTER associated with a given id. This is crucial for accessing and manipulating specific widgets in the UI.

+

Defined in: mjui/_app.mojo

+
var label = app.getElementById(22)
+
+

markWindowPTRAsMain(ptr: FLTK_WIDGET_POINTER)

+

Designates a specific FLTK window pointer (ptr) as the main application window. The application's event loop will monitor this window for close events to determine when to terminate.

+

Defined in: mjui/_app.mojo

+
app.markWindowPTRAsMain(window)
+
+

attachLoopHook(hook: fn() raises)

+

Attaches a callable function (hook) to the application's main event loop. This hook function will be executed on every iteration of the event loop, allowing for custom logic to be run continuously.

+

Defined in: mjui/_app.mojo

+
app.attachLoopHook(my_hook)
+
+

execute()

+

Starts the main FLTK event loop. This function enters an infinite loop, continuously checking for and processing UI events, dispatching them to registered EventHandlers, and executing any attached loop hooks. The application will run until the main window is closed or an exit signal is received.

+

Defined in: mjui/_app.mojo

+
app.execute()
+
+

EventHandler (Mojo)

+

set(trigger: Int, handler: Handler)

+

Sets both the trigger event type (trigger) and the handler function (handler) for this EventHandler.

+

Defined in: mjui/EventHandler.mojo

+
handler.set(MJUI_KEYDOWN, my_handler)
+
+

attachHandler(handler: Handler)

+

Sets the handler function (handler) that will be executed when the associated event is triggered.

+

Defined in: mjui/EventHandler.mojo

+
handler.attachHandler(my_handler)
+
+

attachTrigger(trigger: Int)

+

Sets the integer trigger event type that this EventHandler will respond to.

+

Defined in: mjui/EventHandler.mojo

+
handler.attachTrigger(MJUI_KEYDOWN)
+
+

trigger()

+

Executes the currently attached handler function.

+

Defined in: mjui/EventHandler.mojo

+
handler.trigger()
+
+

Utility Functions (Mojo)

+

rgb(r: UInt32, g: UInt32, b: UInt32) -> UInt32

+

Converts individual red, green, and blue color components (0-255) into a single 32-bit integer suitable for FLTK color representation.

+

Defined in: mjui/utils.mojo

+
var color = rgb(255, 128, 0)
+
+

str_to_int8(str: String) -> List[Int8]

+

Converts a Mojo String into a List of Int8 (ASCII character codes). This is useful for passing string data to C++ FFI functions that expect byte arrays.

+

Defined in: mjui/utils.mojo

+
var ascii_codes = str_to_int8("Hello")
+
+

readFromStringBytes(bytes: StringBytes) -> String

+

Converts a StringBytes span (typically received from C++ FFI) back into a Mojo String. It reads characters until a null terminator is encountered.

+

Defined in: mjui/utils.mojo

+
var s = readFromStringBytes(bytes)
+
+

createIdFrom(id: String) -> Int

+

Generates a simple integer ID from a given String. This is done by summing the ASCII character codes of the input string, providing a unique (though not collision-proof) identifier.

+

Defined in: mjui/utils.mojo

+
var widget_id = createIdFrom("button1")
+
+

convertStringToBytes(strn: String) -> StringBytes

+

Converts a Mojo String into a StringBytes span, which is a low-level representation suitable for passing to C++ FFI functions.

+

Defined in: mjui/utils.mojo

+
var bytes = convertStringToBytes("Label")
+
+

Constants (Mojo)

+

Event Types

+

Event types used for widget and application event handling.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameValueDescriptionDefined In
MJUI_NO_EVENT0No eventmjui/const.mojo
MJUI_PUSH1Mouse/button pressmjui/const.mojo
MJUI_RELEASE2Mouse/button releasemjui/const.mojo
MJUI_ENTER3Mouse enters widgetmjui/const.mojo
MJUI_LEAVE4Mouse leaves widgetmjui/const.mojo
MJUI_DRAG5Mouse dragmjui/const.mojo
MJUI_FOCUS6Widget gains focusmjui/const.mojo
MJUI_UNFOCUS7Widget loses focusmjui/const.mojo
MJUI_KEYDOWN / MJUI_KEYBOARD8Key down eventmjui/const.mojo
MJUI_KEYUP9Key up eventmjui/const.mojo
MJUI_CLOSE10Widget/window closemjui/const.mojo
MJUI_MOVE11Widget movemjui/const.mojo
MJUI_SHORTCUT12Keyboard shortcutmjui/const.mojo
MJUI_DEACTIVATE13Widget deactivatedmjui/const.mojo
MJUI_ACTIVATE14Widget activatedmjui/const.mojo
MJUI_HIDE15Widget hiddenmjui/const.mojo
MJUI_SHOW16Widget shownmjui/const.mojo
MJUI_PASTE17Paste eventmjui/const.mojo
MJUI_SELECTIONCLEAR18Selection clearedmjui/const.mojo
MJUI_MOUSEWHEEL19Mouse wheel eventmjui/const.mojo
MJUI_DND_ENTER20Drag-and-drop entermjui/const.mojo
MJUI_DND_DRAG21Drag-and-drop dragmjui/const.mojo
MJUI_DND_LEAVE22Drag-and-drop leavemjui/const.mojo
MJUI_DND_RELEASE23Drag-and-drop releasemjui/const.mojo
MJUI_SCREEN_CONFIGURATION_CHANGED24Screen config changedmjui/const.mojo
MJUI_FULLSCREEN25Fullscreen eventmjui/const.mojo
MJUI_ZOOM_GESTURE26Zoom gesturemjui/const.mojo
MJUI_ZOOM_EVENT27Zoom eventmjui/const.mojo
+
handler.attachTrigger(MJUI_PUSH)
+
+

Cursor Types

+

Cursor types for widgets and windows.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameValueDefined In
MJUI_CURSOR_DEFAULT0mjui/const.mojo
MJUI_CURSOR_ARROW35mjui/const.mojo
MJUI_CURSOR_CROSS66mjui/const.mojo
MJUI_CURSOR_WAIT76mjui/const.mojo
MJUI_CURSOR_INSERT77mjui/const.mojo
MJUI_CURSOR_HAND31mjui/const.mojo
MJUI_CURSOR_HELP47mjui/const.mojo
MJUI_CURSOR_MOVE27mjui/const.mojo
MJUI_CURSOR_NS78mjui/const.mojo
MJUI_CURSOR_WE79mjui/const.mojo
MJUI_CURSOR_NWSE80mjui/const.mojo
MJUI_CURSOR_NESW81mjui/const.mojo
MJUI_CURSOR_N70mjui/const.mojo
MJUI_CURSOR_NE69mjui/const.mojo
MJUI_CURSOR_E49mjui/const.mojo
MJUI_CURSOR_SE8mjui/const.mojo
MJUI_CURSOR_S9mjui/const.mojo
MJUI_CURSOR_SW7mjui/const.mojo
MJUI_CURSOR_W36mjui/const.mojo
MJUI_CURSOR_NW68mjui/const.mojo
MJUI_CURSOR_NONE255mjui/const.mojo
+

Layout Flags

+

Layout direction and resize flags for flex layouts.

+ + + + + + + + + + + +
NameValueDescriptionDefined In
MJUI_MJUIEX_HORIZONTAL1Horizontal flex directionmjui/const.mojo
MJUI_MJUIEX_VERTICAL0Vertical flex directionmjui/const.mojo
RESIZE_XY100Resize in both X and Ymjui/const.mojo
RESIZE_XONLY110Resize in X onlymjui/const.mojo
RESIZE_YONLY111Resize in Y onlymjui/const.mojo
+

Box Types

+

Box types for widget backgrounds and borders.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameValueDefined In
MJUI_FLAT_BOX1mjui/const.mojo
MJUI_UP_BOX2mjui/const.mojo
MJUI_DOWN_BOX3mjui/const.mojo
MJUI_UP_FRAME4mjui/const.mojo
MJUI_DOWN_FRAME5mjui/const.mojo
MJUI_THIN_UP_BOX6mjui/const.mojo
MJUI_THIN_DOWN_BOX7mjui/const.mojo
MJUI_THIN_UP_FRAME8mjui/const.mojo
MJUI_THIN_DOWN_FRAME9mjui/const.mojo
MJUI_ENGRAVED_BOX10mjui/const.mojo
MJUI_EMBOSSED_BOX11mjui/const.mojo
MJUI_ENGRAVED_FRAME12mjui/const.mojo
MJUI_EMBOSSED_FRAME13mjui/const.mojo
MJUI_BORDER_BOX14mjui/const.mojo
MJUI_SHADOW_BOX15mjui/const.mojo
MJUI_BORDER_FRAME16mjui/const.mojo
MJUI_SHADOW_FRAME17mjui/const.mojo
MJUI_ROUNDED_BOX18mjui/const.mojo
MJUI_RSHADOW_BOX19mjui/const.mojo
MJUI_ROUNDED_FRAME20mjui/const.mojo
MJUI_RFLAT_BOX21mjui/const.mojo
MJUI_ROUND_UP_BOX22mjui/const.mojo
MJUI_ROUND_DOWN_BOX23mjui/const.mojo
MJUI_DIAMOND_UP_BOX24mjui/const.mojo
MJUI_DIAMOND_DOWN_BOX25mjui/const.mojo
MJUI_OVAL_BOX26mjui/const.mojo
MJUI_OSHADOW_BOX27mjui/const.mojo
MJUI_OVAL_FRAME28mjui/const.mojo
MJUI_OFLAT_BOX29mjui/const.mojo
MJUI_PLASTIC_UP_BOX30mjui/const.mojo
MJUI_PLASTIC_DOWN_BOX31mjui/const.mojo
MJUI_PLASTIC_UP_FRAME32mjui/const.mojo
MJUI_PLASTIC_DOWN_FRAME33mjui/const.mojo
MJUI_PLASTIC_THIN_UP_BOX34mjui/const.mojo
MJUI_PLASTIC_THIN_DOWN_BOX35mjui/const.mojo
MJUI_PLASTIC_THIN_UP_FRAME36mjui/const.mojo
MJUI_PLASTIC_THIN_DOWN_FRAME37mjui/const.mojo
MJUI_PLASTIC_ROUND_UP_BOX38mjui/const.mojo
MJUI_PLASTIC_ROUND_DOWN_BOX39mjui/const.mojo
MJUI_GTK_UP_BOX40mjui/const.mojo
MJUI_GTK_DOWN_BOX41mjui/const.mojo
MJUI_GTK_UP_FRAME42mjui/const.mojo
MJUI_GTK_DOWN_FRAME43mjui/const.mojo
MJUI_GTK_THIN_UP_BOX44mjui/const.mojo
MJUI_GTK_THIN_DOWN_BOX45mjui/const.mojo
MJUI_GTK_THIN_UP_FRAME46mjui/const.mojo
MJUI_GTK_THIN_DOWN_FRAME47mjui/const.mojo
MJUI_GTK_ROUND_UP_BOX48mjui/const.mojo
MJUI_GTK_ROUND_DOWN_BOX49mjui/const.mojo
MJUI_GLEAM_UP_BOX50mjui/const.mojo
MJUI_GLEAM_DOWN_BOX51mjui/const.mojo
MJUI_GLEAM_UP_FRAME52mjui/const.mojo
MJUI_GLEAM_DOWN_FRAME53mjui/const.mojo
MJUI_GLEAM_THIN_UP_BOX54mjui/const.mojo
MJUI_GLEAM_THIN_DOWN_BOX55mjui/const.mojo
MJUI_GLEAM_ROUND_UP_BOX56mjui/const.mojo
MJUI_GLEAM_ROUND_DOWN_BOX57mjui/const.mojo
MJUI_OXY_UP_BOX58mjui/const.mojo
MJUI_OXY_DOWN_BOX59mjui/const.mojo
MJUI_OXY_UP_FRAME60mjui/const.mojo
MJUI_OXY_DOWN_FRAME61mjui/const.mojo
MJUI_OXY_THIN_UP_BOX62mjui/const.mojo
MJUI_OXY_THIN_DOWN_BOX63mjui/const.mojo
MJUI_OXY_THIN_UP_FRAME64mjui/const.mojo
MJUI_OXY_THIN_DOWN_FRAME65mjui/const.mojo
MJUI_OXY_ROUND_UP_BOX66mjui/const.mojo
MJUI_OXY_ROUND_DOWN_BOX67mjui/const.mojo
MJUI_OXY_BUTTON_UP_BOX68mjui/const.mojo
MJUI_OXY_BUTTON_DOWN_BOX69mjui/const.mojo
MJUI_FREE_BOXTYPE70mjui/const.mojo
MJUI_MAX_BOXTYPE255mjui/const.mojo
+

Label Types

+

Label rendering types for widgets.

+ + + + + + + + + + + +
NameValueDefined In
MJUI_LABEL_TYPE_NORMAL0mjui/const.mojo
MJUI_LABEL_TYPE_SHADOW1mjui/const.mojo
MJUI_LABEL_TYPE_EMBOSSED2mjui/const.mojo
MJUI_LABEL_TYPE_MULTI3mjui/const.mojo
MJUI_LABEL_TYPE_IMAGE4mjui/const.mojo
+

Image Types

+

Image format constants for loading images.

+ + + + + + + + + + + + +
NameValueDefined In
PNG0mjui/const.mojo
JPEG1mjui/const.mojo
SVG2mjui/const.mojo
BMP3mjui/const.mojo
GIF4mjui/const.mojo
ANIM_GIF5mjui/const.mojo
+

Alignment

+

Alignment options for text and widgets.

+ + + + + + + + + + + + + + + + +
NameValueDefined In
ALIGN_CENTER0mjui/const.mojo
ALIGN_TOP1mjui/const.mojo
ALIGN_BOTTOM2mjui/const.mojo
ALIGN_LEFT3mjui/const.mojo
ALIGN_RIGHT4mjui/const.mojo
ALIGN_INSIDE5mjui/const.mojo
ALIGN_CLIP6mjui/const.mojo
ALIGN_WRAP7mjui/const.mojo
TEXT_OVER_IMAGE8mjui/const.mojo
IMAGE_OVER_TEXT9mjui/const.mojo
+

Visual Schemes

+

Visual style schemes for the UI.

+ + + + + + + + + +
NameValueDefined In
GTK0mjui/utils.mojo
GLEAM1mjui/utils.mojo
PLASTIC2mjui/utils.mojo
+
useScheme(GTK)
+
+

getEventNameFromNum(num: Int) -> String

+

Returns the string name corresponding to an integer event type number. This utility function is helpful for debugging and logging event information.

+

Defined in: mjui/const.mojo

+
var name = getEventNameFromNum(1)  # "MJUI_PUSH"
+
+

FFI Bindings (Mojo/C++)

+

Widget Management

+

mjuiGrabEvent() -> int64_t

+

Retrieves the next event from the event queue. The returned int64_t combines the widget ID and event type.

+

Defined in: mjui/fltk_bindings/libc/BaseWidgetHelpers.cc

+
var event = mjuiGrabEvent()
+
+

mjuiShowWidget(widget)

+

Makes the given FLTK widget visible.

+

Defined in: mjui/fltk_bindings/libc/BaseWidgetHelpers.cc

+
mjuiShowWidget(my_button)
+
+

mjuiHideWidget(widget)

+

Hides the given FLTK widget.

+

Defined in: mjui/fltk_bindings/libc/BaseWidgetHelpers.cc

+
mjuiHideWidget(my_label)
+
+

mjuiRedraw(widget)

+

Forces the given FLTK widget to redraw itself immediately, updating its appearance on the screen.

+

Defined in: mjui/fltk_bindings/libc/BaseWidgetHelpers.cc

+
mjuiRedraw(my_input)
+
+

mjuiSetWidgetColor(widget, color)

+

Sets the background color of the specified FLTK widget.

+

Defined in: mjui/fltk_bindings/libc/BaseWidgetHelpers.cc

+
mjuiSetWidgetColor(my_button, rgb(255, 0, 0))
+
+

mjuiSetWidgetTextColor(widget, color)

+

Sets the color of the text label for the specified FLTK widget.

+

Defined in: mjui/fltk_bindings/libc/BaseWidgetHelpers.cc

+
mjuiSetWidgetTextColor(my_label, rgb(0, 0, 0))
+
+

mjuiSetWidgetSelectionColor(widget, color)

+

Sets the selection color for the FLTK widget, typically used for highlighting selected text in input fields or selected items in lists.

+

Defined in: mjui/fltk_bindings/libc/BaseWidgetHelpers.cc

+
mjuiSetWidgetSelectionColor(my_input, rgb(0, 128, 255))
+
+

mjuiSetWidgetBox(widget, box)

+

Applies a specific box type (Fl_Boxtype) to the FLTK widget, defining its border and background style.

+

Defined in: mjui/fltk_bindings/libc/BaseWidgetHelpers.cc

+
mjuiSetWidgetBox(my_button, MJUI_FLAT_BOX)
+
+

mjuiSetWidgetLabel(widget, label)

+

Sets the text label for the specified FLTK widget.

+

Defined in: mjui/fltk_bindings/libc/BaseWidgetHelpers.cc

+
mjuiSetWidgetLabel(my_label, convertStringToBytes("New Label"))
+
+

BEGIN_WIDGET_APPEND(group)

+

Marks the beginning of adding child widgets to an FLTK group widget.

+

Defined in: mjui/fltk_bindings/libc/BaseWidgetHelpers.cc

+
BEGIN_WIDGET_APPEND(my_layout)
+// Add widgets here
+END_WIDGET_APPEND(my_layout)
+
+

END_WIDGET_APPEND(group)

+

Marks the end of adding child widgets to an FLTK group widget.

+

Defined in: mjui/fltk_bindings/libc/BaseWidgetHelpers.cc

+
END_WIDGET_APPEND(my_layout)
+
+

mjuiGetWidgetHeight(widget)

+

Returns the current height of the specified FLTK widget in pixels.

+

Defined in: mjui/fltk_bindings/libc/BaseWidgetHelpers.cc

+
var h = mjuiGetWidgetHeight(my_button)
+
+

mjuiGetWidgetWidth(widget)

+

Returns the current width of the specified FLTK widget in pixels.

+

Defined in: mjui/fltk_bindings/libc/BaseWidgetHelpers.cc

+
var w = mjuiGetWidgetWidth(my_label)
+
+

mjuiWindowSetResizable(window, widget)

+

Makes a specific widget within an Fl_Window resizable, allowing it to adapt to window resizing.

+

Defined in: mjui/fltk_bindings/libc/BaseWidgetHelpers.cc

+
mjuiWindowSetResizable(my_window, my_layout)
+
+

mjuiApplyImage(widget, image)

+

Applies an Fl_Image to an FLTK widget, typically used for buttons, labels, or custom drawing areas.

+

Defined in: mjui/fltk_bindings/libc/BaseWidgetHelpers.cc

+
var img = mjuiLoadImg(100, 100, PNG, convertStringToBytes("logo.png"))
+mjuiApplyImage(my_label, img)
+
+

mjuiImageScale(img, width, height, proportional)

+

Scales an Fl_Image to the desired width and height. If proportional is 1, the image will be scaled maintaining its aspect ratio.

+

Defined in: mjui/fltk_bindings/libc/BaseWidgetHelpers.cc

+
mjuiImageScale(img, 200, 200, 1)
+
+

Window Management

+

mjuiCreateWindow(width, height, resize, fullscreen, no_border, title_r)

+

Creates a new FLTK Fl_Double_Window with specified width, height, and options for resizeability, fullscreen mode, no_border, and a title.

+

Defined in: mjui/fltk_bindings/libc/Window/MJUIWindow.cc

+
var window = mjuiCreateWindow(800, 600, 1, 0, 0, convertStringToBytes("My App"))
+
+

mjuiWindowTitleSet(window, new_title_r)

+

Sets the title of the given Fl_Double_Window to new_title_r.

+

Defined in: mjui/fltk_bindings/libc/Window/MJUIWindow.cc

+
mjuiWindowTitleSet(window, convertStringToBytes("New Title"))
+
+

mjuiWindowVisibilityStatus(window, condition)

+

Returns the visibility status of the window. condition can be WINDOW_VISIBLE (0) or WINDOW_MINIMIZED (1). Returns 1 if true, 0 if false, -1 if condition is invalid.

+

Defined in: mjui/fltk_bindings/libc/Window/MJUIWindow.cc

+
var is_visible = mjuiWindowVisibilityStatus(window, 0)  # 0 = WINDOW_VISIBLE
+
+

mjuiWindowPositionSet(window, x, y)

+

Sets the top-left position of the Fl_Double_Window on the screen to (x, y).

+

Defined in: mjui/fltk_bindings/libc/Window/MJUIWindow.cc

+
mjuiWindowPositionSet(window, 100, 100)
+
+

Button & Input Widgets

+

mjuiCreateButton(w, h, x, y, id, label_r)

+

Creates a new custom FLTK Button widget at (x, y) with specified width, height, id, and a label.

+

Defined in: mjui/fltk_bindings/libc/Button/MJUIButton.cc

+
var button = mjuiCreateButton(100, 30, 10, 10, 1, convertStringToBytes("Click Me"))
+
+

mjuiCreateCheckButton(w, h, x, y, id, label_r)

+

Creates a new custom FLTK MJUI_CheckButton widget at (x, y) with specified width, height, id, and a label.

+

Defined in: mjui/fltk_bindings/libc/Button/MJUIButton.cc

+
var check = mjuiCreateCheckButton(100, 30, 10, 50, 2, convertStringToBytes("Check Me"))
+
+

mjuiCheckButtonGetState(checkButton)

+

Returns the current state of a MJUI_CheckButton (1 if checked, 0 if unchecked).

+

Defined in: mjui/fltk_bindings/libc/Button/MJUIButton.cc

+
var state = mjuiCheckButtonGetState(check)
+
+

mjuiCreateInput(x, y, w, h, id, numOnly, label_r)

+

Creates a single-line Input field. numOnly (1 for numeric only, 0 for any text) and label (placeholder) are configurable.

+

Defined in: mjui/fltk_bindings/libc/Input/MJUIInput.cc

+
var input = mjuiCreateInput(10, 90, 200, 30, 3, 0, convertStringToBytes("Enter text..."))
+
+

mjuiCreateMultilineInput(x, y, w, h, id, label_r)

+

Creates a multiline MultiLineInput field with a placeholder label.

+

Defined in: mjui/fltk_bindings/libc/Input/MJUIInput.cc

+
var multi = mjuiCreateMultilineInput(10, 130, 200, 60, 4, convertStringToBytes("Multiline..."))
+
+

mjuiSetInputValue(input, value)

+

Sets the current value (text) of an FLTK Fl_Input widget.

+

Defined in: mjui/fltk_bindings/libc/Input/MJUIInput.cc

+
mjuiSetInputValue(input, convertStringToBytes("Hello"))
+
+

Label & Image Widgets

+

mjuiCreateLabel(x, y, width, height, id, text)

+

Creates a new custom FLTK MJUILabel widget at (x, y) with specified width, height, id, and text.

+

Defined in: mjui/fltk_bindings/libc/Label/MJUILabel.cc

+
var label = mjuiCreateLabel(10, 10, 200, 30, 5, convertStringToBytes("Hello World"))
+
+

mjuiSetTextProperties(label, size, color, type)

+

Sets the font size, color, and type (MJUI_LABEL_TYPE_NORMAL, etc.) of the text for an MJUILabel.

+

Defined in: mjui/fltk_bindings/libc/Label/MJUILabel.cc

+
mjuiSetTextProperties(label, 14, rgb(0, 0, 0), MJUI_LABEL_TYPE_NORMAL)
+
+

mjuiTextAlign(label, alignment)

+

Sets the text alignment within an MJUILabel.

+

Defined in: mjui/fltk_bindings/libc/Label/MJUILabel.cc

+
mjuiTextAlign(label, ALIGN_CENTER)
+
+

mjuiLoadImg(width, height, imgType, path)

+

Loads an image from the specified path with desired width, height, and imgType (e.g., PNG, JPEG, SVG, GIF, ANIM_GIF). Returns an Fl_Image pointer.

+

Defined in: mjui/fltk_bindings/libc/Label/MJUILabel.cc

+
var img = mjuiLoadImg(100, 100, PNG, convertStringToBytes("logo.png"))
+
+

Layouts & Containers

+

mjuiCreateLayoutFlex(x, y, w, h, dir)

+

Creates a new FLTK MJUI_Flex layout container at (x, y) with specified width, height, and layout direction (MJUI_MJUIEX_HORIZONTAL or MJUI_MJUIEX_VERTICAL).

+

Defined in: mjui/fltk_bindings/libc/Layout/MJUILayouts.cc

+
var layout = mjuiCreateLayoutFlex(0, 0, 800, 600, MJUI_MJUIEX_VERTICAL)
+
+

mjuiSetFlexResize(l, r)

+

Sets the resize direction for a MJUI_Flex layout. r is RESIZE_XY, RESIZE_XONLY, or RESIZE_YONLY.

+

Defined in: mjui/fltk_bindings/libc/Layout/MJUILayouts.cc

+
mjuiSetFlexResize(layout, RESIZE_XY)
+
+

mjuiSetFlexMarginGapSettings(l, margin, gap)

+

Sets the margin (spacing around the layout) and gap (spacing between child widgets) for a MJUI_Flex layout. Pass -1 for either to keep current value.

+

Defined in: mjui/fltk_bindings/libc/Layout/MJUILayouts.cc

+
mjuiSetFlexMarginGapSettings(layout, 10, 5)
+
+

mjuiSetFlex(l, w, span)

+

Sets the flex span for a specific widget within a MJUI_Flex layout. The span determines how much space the widget occupies relative to other flex items.

+

Defined in: mjui/fltk_bindings/libc/Layout/MJUILayouts.cc

+
mjuiSetFlex(layout, my_button, 2)
+
+

mjuiSetMarginExplicit(l, left, top, right, bottom)

+

Sets explicit left, top, right, and bottom margins for a MJUI_Flex layout.

+

Defined in: mjui/fltk_bindings/libc/Layout/MJUILayouts.cc

+
mjuiSetMarginExplicit(layout, 5, 5, 5, 5)
+
+

mjuiFlexCalculateLayout(l)

+

Forces the MJUI_Flex layout to recalculate and apply its child widget positions and sizes based on its current properties.

+

Defined in: mjui/fltk_bindings/libc/Layout/MJUILayouts.cc

+
mjuiFlexCalculateLayout(layout)
+
+

mjuiScrollContainer(x, y, w, h)

+

Creates a new Fl_Scroll container widget at (x, y) with specified width and height, enabling scrollability for its children.

+

Defined in: mjui/fltk_bindings/libc/Layout/Containers.cc

+
var scroll = mjuiScrollContainer(0, 0, 400, 300)
+
+

mjuiScrollSetBarBGColor(s, c, sbar)

+

Sets the background color of the scroll bar for an Fl_Scroll container. sbar selects which scroll bar: 0 for vertical, 1 for horizontal, 2 for both.

+

Defined in: mjui/fltk_bindings/libc/Layout/Containers.cc

+
mjuiScrollSetBarBGColor(scroll, rgb(220, 220, 220), 0)
+
+
+
+ + \ No newline at end of file diff --git a/USAGE.md b/docs/USAGE.md similarity index 100% rename from USAGE.md rename to docs/USAGE.md diff --git a/logo.jpeg b/logo.jpeg deleted file mode 100644 index f982c0869ebaf9d6dba97e27c8eeb42810e2fe06..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 154594 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 diff --git a/mjui/utils.mojo b/mjui/utils.mojo index 75c90d0..fdc8190 100644 --- a/mjui/utils.mojo +++ b/mjui/utils.mojo @@ -9,6 +9,7 @@ fn rgb(r:UInt32, g:UInt32, b:UInt32) -> UInt32: """ return UInt32(((((r << 8) | g) << 8) | b)<<8) + fn str_to_int8(str: String) -> List[Int8]: """ Converts a string into a list of ASCII character codes. diff --git a/scripts/create-app.py b/scripts/create-app.py index 6a90da1..27125ec 100644 --- a/scripts/create-app.py +++ b/scripts/create-app.py @@ -79,7 +79,23 @@ def pixi_magic(): print(f"Run: source ~/.zshrc before running pixi shell | magic shell") elif sys.platform.startswith('linux'): - install_linux_dependencies() + hasFLTK = False + dll_path = str(Path.cwd() / 'mjui/fltk_bindings/libc/out/mjui.so') + bashrc = os.path.expanduser('~/.bashrc') + zshrc = os.path.expanduser('~/.zshrc') + + if os.path.exists(zshrc): + rc_file = zshrc + else: + rc_file = bashrc + + with open(rc_file, 'r') as rc: + if 'COMBUSTUI_DLL_PATH' in rc.read(): + print('FLTK is already installed, moving on...') + hasFLTK=True + + if not hasFLTK: + install_linux_dependencies() # Clone repo subprocess.run(['git', 'clone', 'https://github.com/Hammad-hab/CombustUI.git']) user = subprocess.run(['git', 'config', 'user.name'], capture_output=True, text=True) @@ -102,21 +118,14 @@ def pixi_magic(): os.rmdir('./examples') except: print('Failed to remove scripts and examples') - # Setup environment variable in bashrc or zshrc - dll_path = str(Path.cwd() / 'mjui/fltk_bindings/libc/out/mjui.so') - bashrc = os.path.expanduser('~/.bashrc') - zshrc = os.path.expanduser('~/.zshrc') - if os.path.exists(zshrc): - rc_file = zshrc + if not hasFLTK: + print('Editing environment variables...') + with open(rc_file, 'a') as f: + f.write(f'\nexport COMBUSTUI_DLL_PATH="{dll_path}"\n') + print(f"Added COMBUSTUI_DLL_PATH to {rc_file}.") else: - rc_file = bashrc - - print('Editing environment variables...') - with open(rc_file, 'a') as f: - f.write(f'\nexport COMBUSTUI_DLL_PATH="{dll_path}"\n') - print(f"Added COMBUSTUI_DLL_PATH to {rc_file}.") - os.system(f'source {rc_file}') + print('Env vars are already set, skipping....') # Clean up files for pattern in ('*.png', '*.jpeg', '*.md', 'CHANGELOG', 'LICENSE'): From 08a2a5927cbebcc529f15132c2f9349a634fee84 Mon Sep 17 00:00:00 2001 From: CW team Date: Wed, 16 Jul 2025 10:51:17 +0500 Subject: [PATCH 2/9] add images --- docs/API_REFERENCE.html | 334 ++++++++++++++++++++-------------------- 1 file changed, 167 insertions(+), 167 deletions(-) diff --git a/docs/API_REFERENCE.html b/docs/API_REFERENCE.html index 60227d1..c205c73 100644 --- a/docs/API_REFERENCE.html +++ b/docs/API_REFERENCE.html @@ -469,7 +469,7 @@

-

CombustUI-Mojo API Reference

+

Comprehensive documentation for all public functions, constants, and FFI bindings in CombustUI-Mojo.

Light @@ -602,79 +602,79 @@

Table of Contents

Application (Mojo)

addEventListener(id: Int, handler: EventHandler)

-

Registers an event handler for a widget identified by its id. When an event occurs for the specified widget, the handler will be triggered if the event type matches.

+

Registers an event handler for a widget identified by its id. This function allows you to associate a specific EventHandler instance with a UI widget, ensuring that when an event (like a click, keypress, or mouse movement) occurs on that widget, the appropriate handler logic is executed. The handler will only be triggered if the event type defined within the EventHandler matches the actual event that occurred.

Defined in: mjui/_app.mojo

app.addEventListener(1, handler)
 

setElementById(id: Int, element: FLTK_WIDGET_POINTER)

-

Associates a raw FLTK widget pointer (FLTK_WIDGET_POINTER) with a unique integer id. This allows for easy retrieval and manipulation of widgets by their assigned ID.

+

Associates a raw FLTK widget pointer (FLTK_WIDGET_POINTER) with a unique integer id. This mapping is crucial for managing UI elements dynamically. By assigning a simple integer ID, you can easily retrieve, update, or manipulate specific widgets throughout your application without needing to hold onto the raw FLTK pointer directly.

Defined in: mjui/_app.mojo

app.setElementById(22, label)
 

getElementById(id: Int) -> FLTK_WIDGET_POINTER

-

Retrieves the FLTK_WIDGET_POINTER associated with a given id. This is crucial for accessing and manipulating specific widgets in the UI.

+

Retrieves the FLTK_WIDGET_POINTER associated with a given integer id. This function acts as a lookup mechanism, allowing your Mojo code to get a reference to an underlying FLTK widget based on the ID previously set with setElementById. This is fundamental for performing operations on specific UI components.

Defined in: mjui/_app.mojo

var label = app.getElementById(22)
 

markWindowPTRAsMain(ptr: FLTK_WIDGET_POINTER)

-

Designates a specific FLTK window pointer (ptr) as the main application window. The application's event loop will monitor this window for close events to determine when to terminate.

+

Designates a specific FLTK window pointer (ptr) as the main application window. This is important for the application's lifecycle management. The internal event loop will monitor this designated window for close events, and once it detects that this main window has been closed by the user, the application will gracefully terminate.

Defined in: mjui/_app.mojo

app.markWindowPTRAsMain(window)
 

attachLoopHook(hook: fn() raises)

-

Attaches a callable function (hook) to the application's main event loop. This hook function will be executed on every iteration of the event loop, allowing for custom logic to be run continuously.

+

Attaches a callable function (hook) to the application's main event loop. This mechanism allows you to inject custom logic that needs to be executed continuously on every iteration of the event loop. This is useful for tasks such as updating game states, performing animations, background processing, or any other operations that require regular execution while the UI is active.

Defined in: mjui/_app.mojo

app.attachLoopHook(my_hook)
 

execute()

-

Starts the main FLTK event loop. This function enters an infinite loop, continuously checking for and processing UI events, dispatching them to registered EventHandlers, and executing any attached loop hooks. The application will run until the main window is closed or an exit signal is received.

+

Starts the main FLTK event loop. Calling this function initiates the continuous polling for and processing of UI events. It enters an infinite loop, constantly checking for user interactions (mouse clicks, keypresses, window events), dispatching them to any registered EventHandlers, and executing any attached loop hooks. The application will remain responsive and active until the designated main window is closed or an explicit exit signal is received, at which point the loop terminates.

Defined in: mjui/_app.mojo

app.execute()
 

EventHandler (Mojo)

set(trigger: Int, handler: Handler)

-

Sets both the trigger event type (trigger) and the handler function (handler) for this EventHandler.

+

Sets both the trigger event type (trigger) and the handler function (handler) for this EventHandler. This function provides a convenient way to configure an event handler, specifying precisely which type of event it should respond to and what action it should take when that event occurs.

Defined in: mjui/EventHandler.mojo

handler.set(MJUI_KEYDOWN, my_handler)
 

attachHandler(handler: Handler)

-

Sets the handler function (handler) that will be executed when the associated event is triggered.

+

Sets the handler function (handler) that will be executed when the associated event is triggered. This allows you to define the specific code block or logic that should run in response to an event, separating the event detection from the action to be performed.

Defined in: mjui/EventHandler.mojo

handler.attachHandler(my_handler)
 

attachTrigger(trigger: Int)

-

Sets the integer trigger event type that this EventHandler will respond to.

+

Sets the integer trigger event type that this EventHandler will respond to. By setting the trigger, you define which specific UI event (e.g., a button click, a key press) will cause this event handler to become active and execute its attached function.

Defined in: mjui/EventHandler.mojo

handler.attachTrigger(MJUI_KEYDOWN)
 

trigger()

-

Executes the currently attached handler function.

+

Executes the currently attached handler function. This function is typically called internally by the event loop when an event matching the `trigger` is detected for the associated widget. You can also call it manually to programmatically invoke the handler's logic.

Defined in: mjui/EventHandler.mojo

handler.trigger()
 

Utility Functions (Mojo)

rgb(r: UInt32, g: UInt32, b: UInt32) -> UInt32

-

Converts individual red, green, and blue color components (0-255) into a single 32-bit integer suitable for FLTK color representation.

+

Converts individual red, green, and blue color components (each ranging from 0-255) into a single 32-bit unsigned integer. This packed integer format is the standard color representation used by FLTK (Fast Light Toolkit) and is essential when setting widget colors or drawing custom graphics.

Defined in: mjui/utils.mojo

var color = rgb(255, 128, 0)
 

str_to_int8(str: String) -> List[Int8]

-

Converts a Mojo String into a List of Int8 (ASCII character codes). This is useful for passing string data to C++ FFI functions that expect byte arrays.

+

Converts a Mojo String into a List of Int8 (ASCII character codes). This utility is vital for interoperability with C++ FFI (Foreign Function Interface) functions, which often expect string data to be provided as a null-terminated byte array. This function correctly transforms Mojo strings into this compatible format.

Defined in: mjui/utils.mojo

var ascii_codes = str_to_int8("Hello")
 

readFromStringBytes(bytes: StringBytes) -> String

-

Converts a StringBytes span (typically received from C++ FFI) back into a Mojo String. It reads characters until a null terminator is encountered.

+

Converts a StringBytes span (a low-level byte array representation, typically received from C++ FFI functions) back into a human-readable Mojo String. The function intelligently reads the byte array until it encounters a null terminator, ensuring that only the relevant string data is converted.

Defined in: mjui/utils.mojo

var s = readFromStringBytes(bytes)
 

createIdFrom(id: String) -> Int

-

Generates a simple integer ID from a given String. This is done by summing the ASCII character codes of the input string, providing a unique (though not collision-proof) identifier.

+

Generates a simple integer ID from a given String. This is achieved by summing the ASCII character codes of the input string. While this method provides a quick and convenient way to get a unique identifier for widgets, it is important to note that it is not collision-proof for all possible string inputs and should be used where strict uniqueness guarantees are not paramount.

Defined in: mjui/utils.mojo

var widget_id = createIdFrom("button1")
 

convertStringToBytes(strn: String) -> StringBytes

-

Converts a Mojo String into a StringBytes span, which is a low-level representation suitable for passing to C++ FFI functions.

+

Converts a Mojo String into a StringBytes span. This low-level byte representation is specifically designed for efficient and safe passing of string data to C++ FFI functions. It ensures that the string data is correctly formatted for consumption by the underlying C++ libraries.

Defined in: mjui/utils.mojo

var bytes = convertStringToBytes("Label")
 
@@ -686,34 +686,34 @@

Event Types

NameValueDescriptionDefined In - MJUI_NO_EVENT0No eventmjui/const.mojo - MJUI_PUSH1Mouse/button pressmjui/const.mojo - MJUI_RELEASE2Mouse/button releasemjui/const.mojo - MJUI_ENTER3Mouse enters widgetmjui/const.mojo - MJUI_LEAVE4Mouse leaves widgetmjui/const.mojo - MJUI_DRAG5Mouse dragmjui/const.mojo - MJUI_FOCUS6Widget gains focusmjui/const.mojo - MJUI_UNFOCUS7Widget loses focusmjui/const.mojo - MJUI_KEYDOWN / MJUI_KEYBOARD8Key down eventmjui/const.mojo - MJUI_KEYUP9Key up eventmjui/const.mojo - MJUI_CLOSE10Widget/window closemjui/const.mojo - MJUI_MOVE11Widget movemjui/const.mojo - MJUI_SHORTCUT12Keyboard shortcutmjui/const.mojo - MJUI_DEACTIVATE13Widget deactivatedmjui/const.mojo - MJUI_ACTIVATE14Widget activatedmjui/const.mojo - MJUI_HIDE15Widget hiddenmjui/const.mojo - MJUI_SHOW16Widget shownmjui/const.mojo - MJUI_PASTE17Paste eventmjui/const.mojo - MJUI_SELECTIONCLEAR18Selection clearedmjui/const.mojo - MJUI_MOUSEWHEEL19Mouse wheel eventmjui/const.mojo - MJUI_DND_ENTER20Drag-and-drop entermjui/const.mojo - MJUI_DND_DRAG21Drag-and-drop dragmjui/const.mojo - MJUI_DND_LEAVE22Drag-and-drop leavemjui/const.mojo - MJUI_DND_RELEASE23Drag-and-drop releasemjui/const.mojo - MJUI_SCREEN_CONFIGURATION_CHANGED24Screen config changedmjui/const.mojo - MJUI_FULLSCREEN25Fullscreen eventmjui/const.mojo - MJUI_ZOOM_GESTURE26Zoom gesturemjui/const.mojo - MJUI_ZOOM_EVENT27Zoom eventmjui/const.mojo + MJUI_NO_EVENT0Represents the absence of an event. This value is used when no specific UI interaction or system event has occurred.mjui/const.mojo + MJUI_PUSH1Indicates a mouse button or a similar input device button has been pressed down. This event is commonly used for clickable widgets like buttons.mjui/const.mojo + MJUI_RELEASE2Signifies that a mouse button or a similar input device button has been released after being pressed. It often follows a MJUI_PUSH event.mjui/const.mojo + MJUI_ENTER3Occurs when the mouse cursor enters the bounding box of a widget. Useful for hover effects or changing widget appearance upon mouse entry.mjui/const.mojo + MJUI_LEAVE4Triggers when the mouse cursor leaves the bounding box of a widget. Typically used to revert changes made during an MJUI_ENTER event.mjui/const.mojo + MJUI_DRAG5Generated when the mouse cursor is moved while a mouse button is held down. Essential for drag-and-drop functionalities or drawing applications.mjui/const.mojo + MJUI_FOCUS6Indicates that a widget has gained input focus, meaning it is ready to receive keyboard input. This happens when a user clicks on an input field or tabs to it.mjui/const.mojo + MJUI_UNFOCUS7Occurs when a widget loses input focus, typically when another widget gains focus or the user clicks outside the widget.mjui/const.mojo + MJUI_KEYDOWN / MJUI_KEYBOARD8Fired when a keyboard key is pressed down. This event can be used to capture user input from the keyboard.mjui/const.mojo + MJUI_KEYUP9Generated when a keyboard key is released after being pressed. This complements MJUI_KEYDOWN for full key press detection.mjui/const.mojo + MJUI_CLOSE10Signifies that a widget or window is being closed. This is particularly important for window management to perform cleanup operations.mjui/const.mojo + MJUI_MOVE11Indicates that a widget has been moved on the screen, typically by user interaction or programmatic changes to its position.mjui/const.mojo + MJUI_SHORTCUT12Triggered when a keyboard shortcut is activated. This allows for quick access to specific application functionalities.mjui/const.mojo + MJUI_DEACTIVATE13Occurs when a widget becomes inactive or disabled, meaning it can no longer receive input or interact with the user.mjui/const.mojo + MJUI_ACTIVATE14Fired when a widget becomes active or re-enabled, allowing it to receive user input and interactions again.mjui/const.mojo + MJUI_HIDE15Indicates that a widget has been hidden from view. The widget still exists but is not rendered on the screen.mjui/const.mojo + MJUI_SHOW16Occurs when a previously hidden widget becomes visible again.mjui/const.mojo + MJUI_PASTE17Generated when content is pasted into an input field or a widget that supports paste operations.mjui/const.mojo + MJUI_SELECTIONCLEAR18Fired when any current text selection within a widget is cleared.mjui/const.mojo + MJUI_MOUSEWHEEL19Triggered when the mouse scroll wheel is used. This is commonly used for scrolling content within a scrollable area or zooming.mjui/const.mojo + MJUI_DND_ENTER20Indicates that a drag-and-drop operation has entered the bounding box of a widget.mjui/const.mojo + MJUI_DND_DRAG21Occurs when a drag-and-drop operation is actively being dragged over a widget.mjui/const.mojo + MJUI_DND_LEAVE22Fired when a drag-and-drop operation leaves the bounding box of a widget.mjui/const.mojo + MJUI_DND_RELEASE23Triggered when a drag-and-drop operation is released over a widget, signaling a potential drop.mjui/const.mojo + MJUI_SCREEN_CONFIGURATION_CHANGED24Occurs when the screen configuration (e.g., resolution, display settings) changes.mjui/const.mojo + MJUI_FULLSCREEN25Indicates that a window has entered or exited fullscreen mode.mjui/const.mojo + MJUI_ZOOM_GESTURE26Generated by a zoom gesture, typically on touch-enabled devices.mjui/const.mojo + MJUI_ZOOM_EVENT27A generic zoom event, which can be triggered by various input methods.mjui/const.mojo
handler.attachTrigger(MJUI_PUSH)
@@ -722,30 +722,30 @@ 

Cursor Types

Cursor types for widgets and windows.

- + - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + +
NameValueDefined In
NameValueDescriptionDefined In
MJUI_CURSOR_DEFAULT0mjui/const.mojo
MJUI_CURSOR_ARROW35mjui/const.mojo
MJUI_CURSOR_CROSS66mjui/const.mojo
MJUI_CURSOR_WAIT76mjui/const.mojo
MJUI_CURSOR_INSERT77mjui/const.mojo
MJUI_CURSOR_HAND31mjui/const.mojo
MJUI_CURSOR_HELP47mjui/const.mojo
MJUI_CURSOR_MOVE27mjui/const.mojo
MJUI_CURSOR_NS78mjui/const.mojo
MJUI_CURSOR_WE79mjui/const.mojo
MJUI_CURSOR_NWSE80mjui/const.mojo
MJUI_CURSOR_NESW81mjui/const.mojo
MJUI_CURSOR_N70mjui/const.mojo
MJUI_CURSOR_NE69mjui/const.mojo
MJUI_CURSOR_E49mjui/const.mojo
MJUI_CURSOR_SE8mjui/const.mojo
MJUI_CURSOR_S9mjui/const.mojo
MJUI_CURSOR_SW7mjui/const.mojo
MJUI_CURSOR_W36mjui/const.mojo
MJUI_CURSOR_NW68mjui/const.mojo
MJUI_CURSOR_NONE255mjui/const.mojo
MJUI_CURSOR_DEFAULT0The default cursor, typically an arrow.mjui/const.mojo
MJUI_CURSOR_ARROW35A standard arrow cursor, used for general pointing and clicking.mjui/const.mojo
MJUI_CURSOR_CROSS66A crosshair cursor, often used for drawing or selecting precise points.mjui/const.mojo
MJUI_CURSOR_WAIT76An hourglass or spinning circle cursor, indicating that the application is busy and the user should wait.mjui/const.mojo
MJUI_CURSOR_INSERT77A text insertion cursor (I-beam), used for text input fields.mjui/const.mojo
MJUI_CURSOR_HAND31A hand cursor, typically used to indicate a clickable or draggable element.mjui/const.mojo
MJUI_CURSOR_HELP47A cursor with a question mark, indicating that help is available for the element under the cursor.mjui/const.mojo
MJUI_CURSOR_MOVE27A four-directional arrow cursor, used to indicate that an element can be moved in any direction.mjui/const.mojo
MJUI_CURSOR_NS78A vertical double-headed arrow, used for resizing elements vertically (North-South).mjui/const.mojo
MJUI_CURSOR_WE79A horizontal double-headed arrow, used for resizing elements horizontally (West-East).mjui/const.mojo
MJUI_CURSOR_NWSE80A diagonal double-headed arrow (North-West to South-East), used for diagonal resizing.mjui/const.mojo
MJUI_CURSOR_NESW81A diagonal double-headed arrow (North-East to South-West), used for diagonal resizing.mjui/const.mojo
MJUI_CURSOR_N70An arrow pointing North (up), used for resizing.mjui/const.mojo
MJUI_CURSOR_NE69An arrow pointing North-East (up-right), used for resizing.mjui/const.mojo
MJUI_CURSOR_E49An arrow pointing East (right), used for resizing.mjui/const.mojo
MJUI_CURSOR_SE8An arrow pointing South-East (down-right), used for resizing.mjui/const.mojo
MJUI_CURSOR_S9An arrow pointing South (down), used for resizing.mjui/const.mojo
MJUI_CURSOR_SW7An arrow pointing South-West (down-left), used for resizing.mjui/const.mojo
MJUI_CURSOR_W36An arrow pointing West (left), used for resizing.mjui/const.mojo
MJUI_CURSOR_NW68An arrow pointing North-West (up-left), used for resizing.mjui/const.mojo
MJUI_CURSOR_NONE255An invisible cursor, used when no cursor should be displayed.mjui/const.mojo

Layout Flags

@@ -755,139 +755,139 @@

Layout Flags

NameValueDescriptionDefined In - MJUI_MJUIEX_HORIZONTAL1Horizontal flex directionmjui/const.mojo - MJUI_MJUIEX_VERTICAL0Vertical flex directionmjui/const.mojo - RESIZE_XY100Resize in both X and Ymjui/const.mojo - RESIZE_XONLY110Resize in X onlymjui/const.mojo - RESIZE_YONLY111Resize in Y onlymjui/const.mojo + MJUI_MJUIEX_HORIZONTAL1Specifies that a flex layout container should arrange its child widgets horizontally, from left to right.mjui/const.mojo + MJUI_MJUIEX_VERTICAL0Specifies that a flex layout container should arrange its child widgets vertically, from top to bottom.mjui/const.mojo + RESIZE_XY100Indicates that a widget or layout should be resizable in both horizontal (X) and vertical (Y) directions.mjui/const.mojo + RESIZE_XONLY110Indicates that a widget or layout should only be resizable in the horizontal (X) direction.mjui/const.mojo + RESIZE_YONLY111Indicates that a widget or layout should only be resizable in the vertical (Y) direction.mjui/const.mojo

Box Types

Box types for widget backgrounds and borders.

- + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameValueDefined In
NameValueDescriptionDefined In
MJUI_FLAT_BOX1mjui/const.mojo
MJUI_UP_BOX2mjui/const.mojo
MJUI_DOWN_BOX3mjui/const.mojo
MJUI_UP_FRAME4mjui/const.mojo
MJUI_DOWN_FRAME5mjui/const.mojo
MJUI_THIN_UP_BOX6mjui/const.mojo
MJUI_THIN_DOWN_BOX7mjui/const.mojo
MJUI_THIN_UP_FRAME8mjui/const.mojo
MJUI_THIN_DOWN_FRAME9mjui/const.mojo
MJUI_ENGRAVED_BOX10mjui/const.mojo
MJUI_EMBOSSED_BOX11mjui/const.mojo
MJUI_ENGRAVED_FRAME12mjui/const.mojo
MJUI_EMBOSSED_FRAME13mjui/const.mojo
MJUI_BORDER_BOX14mjui/const.mojo
MJUI_SHADOW_BOX15mjui/const.mojo
MJUI_BORDER_FRAME16mjui/const.mojo
MJUI_SHADOW_FRAME17mjui/const.mojo
MJUI_ROUNDED_BOX18mjui/const.mojo
MJUI_RSHADOW_BOX19mjui/const.mojo
MJUI_ROUNDED_FRAME20mjui/const.mojo
MJUI_RFLAT_BOX21mjui/const.mojo
MJUI_ROUND_UP_BOX22mjui/const.mojo
MJUI_ROUND_DOWN_BOX23mjui/const.mojo
MJUI_DIAMOND_UP_BOX24mjui/const.mojo
MJUI_DIAMOND_DOWN_BOX25mjui/const.mojo
MJUI_OVAL_BOX26mjui/const.mojo
MJUI_OSHADOW_BOX27mjui/const.mojo
MJUI_OVAL_FRAME28mjui/const.mojo
MJUI_OFLAT_BOX29mjui/const.mojo
MJUI_PLASTIC_UP_BOX30mjui/const.mojo
MJUI_PLASTIC_DOWN_BOX31mjui/const.mojo
MJUI_PLASTIC_UP_FRAME32mjui/const.mojo
MJUI_PLASTIC_DOWN_FRAME33mjui/const.mojo
MJUI_PLASTIC_THIN_UP_BOX34mjui/const.mojo
MJUI_PLASTIC_THIN_DOWN_BOX35mjui/const.mojo
MJUI_PLASTIC_THIN_UP_FRAME36mjui/const.mojo
MJUI_PLASTIC_THIN_DOWN_FRAME37mjui/const.mojo
MJUI_PLASTIC_ROUND_UP_BOX38mjui/const.mojo
MJUI_PLASTIC_ROUND_DOWN_BOX39mjui/const.mojo
MJUI_GTK_UP_BOX40mjui/const.mojo
MJUI_GTK_DOWN_BOX41mjui/const.mojo
MJUI_GTK_UP_FRAME42mjui/const.mojo
MJUI_GTK_DOWN_FRAME43mjui/const.mojo
MJUI_GTK_THIN_UP_BOX44mjui/const.mojo
MJUI_GTK_THIN_DOWN_BOX45mjui/const.mojo
MJUI_GTK_THIN_UP_FRAME46mjui/const.mojo
MJUI_GTK_THIN_DOWN_FRAME47mjui/const.mojo
MJUI_GTK_ROUND_UP_BOX48mjui/const.mojo
MJUI_GTK_ROUND_DOWN_BOX49mjui/const.mojo
MJUI_GLEAM_UP_BOX50mjui/const.mojo
MJUI_GLEAM_DOWN_BOX51mjui/const.mojo
MJUI_GLEAM_UP_FRAME52mjui/const.mojo
MJUI_GLEAM_DOWN_FRAME53mjui/const.mojo
MJUI_GLEAM_THIN_UP_BOX54mjui/const.mojo
MJUI_GLEAM_THIN_DOWN_BOX55mjui/const.mojo
MJUI_GLEAM_ROUND_UP_BOX56mjui/const.mojo
MJUI_GLEAM_ROUND_DOWN_BOX57mjui/const.mojo
MJUI_OXY_UP_BOX58mjui/const.mojo
MJUI_OXY_DOWN_BOX59mjui/const.mojo
MJUI_OXY_UP_FRAME60mjui/const.mojo
MJUI_OXY_DOWN_FRAME61mjui/const.mojo
MJUI_OXY_THIN_UP_BOX62mjui/const.mojo
MJUI_OXY_THIN_DOWN_BOX63mjui/const.mojo
MJUI_OXY_THIN_UP_FRAME64mjui/const.mojo
MJUI_OXY_THIN_DOWN_FRAME65mjui/const.mojo
MJUI_OXY_ROUND_UP_BOX66mjui/const.mojo
MJUI_OXY_ROUND_DOWN_BOX67mjui/const.mojo
MJUI_OXY_BUTTON_UP_BOX68mjui/const.mojo
MJUI_OXY_BUTTON_DOWN_BOX69mjui/const.mojo
MJUI_FREE_BOXTYPE70mjui/const.mojo
MJUI_MAX_BOXTYPE255mjui/const.mojo
MJUI_FLAT_BOX1A simple, flat box with no 3D appearance, often used for clean, modern interfaces.mjui/const.mojo
MJUI_UP_BOX2A box type that appears raised or extruding from the surface, creating a 3D button-like effect.mjui/const.mojo
MJUI_DOWN_BOX3A box type that appears sunken or recessed into the surface, often used to indicate a pressed state or an input field.mjui/const.mojo
MJUI_UP_FRAME4A raised frame border, similar to MJUI_UP_BOX but typically without a filled background.mjui/const.mojo
MJUI_DOWN_FRAME5A sunken frame border, similar to MJUI_DOWN_BOX but typically without a filled background.mjui/const.mojo
MJUI_THIN_UP_BOX6A thinner version of MJUI_UP_BOX, providing a subtle raised effect.mjui/const.mojo
MJUI_THIN_DOWN_BOX7A thinner version of MJUI_DOWN_BOX, providing a subtle sunken effect.mjui/const.mojo
MJUI_THIN_UP_FRAME8A thinner version of MJUI_UP_FRAME.mjui/const.mojo
MJUI_THIN_DOWN_FRAME9A thinner version of MJUI_DOWN_FRAME.mjui/const.mojo
MJUI_ENGRAVED_BOX10A box with an engraved appearance, making the content seem carved into the surface.mjui/const.mojo
MJUI_EMBOSSED_BOX11A box with an embossed appearance, making the content seem raised from the surface.mjui/const.mojo
MJUI_ENGRAVED_FRAME12An engraved frame, similar to MJUI_ENGRAVED_BOX but typically without a filled background.mjui/const.mojo
MJUI_EMBOSSED_FRAME13An embossed frame, similar to MJUI_EMBOSSED_BOX but typically without a filled background.mjui/const.mojo
MJUI_BORDER_BOX14A box with a simple border around its perimeter.mjui/const.mojo
MJUI_SHADOW_BOX15A box with a shadow effect, giving it a lifted appearance.mjui/const.mojo
MJUI_BORDER_FRAME16A simple border frame without a filled background.mjui/const.mojo
MJUI_SHADOW_FRAME17A frame with a shadow effect.mjui/const.mojo
MJUI_ROUNDED_BOX18A box with rounded corners, providing a softer aesthetic.mjui/const.mojo
MJUI_RSHADOW_BOX19A rounded box with a shadow effect.mjui/const.mojo
MJUI_ROUNDED_FRAME20A rounded frame without a filled background.mjui/const.mojo
MJUI_RFLAT_BOX21A rounded, flat box.mjui/const.mojo
MJUI_ROUND_UP_BOX22A rounded box with a raised appearance.mjui/const.mojo
MJUI_ROUND_DOWN_BOX23A rounded box with a sunken appearance.mjui/const.mojo
MJUI_DIAMOND_UP_BOX24A diamond-shaped box with a raised appearance.mjui/const.mojo
MJUI_DIAMOND_DOWN_BOX25A diamond-shaped box with a sunken appearance.mjui/const.mojo
MJUI_OVAL_BOX26An oval-shaped box.mjui/const.mojo
MJUI_OSHADOW_BOX27An oval-shaped box with a shadow effect.mjui/const.mojo
MJUI_OVAL_FRAME28An oval-shaped frame.mjui/const.mojo
MJUI_OFLAT_BOX29An oval, flat box.mjui/const.mojo
MJUI_PLASTIC_UP_BOX30A box with a plastic-like raised appearance.mjui/const.mojo
MJUI_PLASTIC_DOWN_BOX31A box with a plastic-like sunken appearance.mjui/const.mojo
MJUI_PLASTIC_UP_FRAME32A plastic-like raised frame.mjui/const.mojo
MJUI_PLASTIC_DOWN_FRAME33A plastic-like sunken frame.mjui/const.mojo
MJUI_PLASTIC_THIN_UP_BOX34A thin plastic-like raised box.mjui/const.mojo
MJUI_PLASTIC_THIN_DOWN_BOX35A thin plastic-like sunken box.mjui/const.mojo
MJUI_PLASTIC_THIN_UP_FRAME36A thin plastic-like raised frame.mjui/const.mojo
MJUI_PLASTIC_THIN_DOWN_FRAME37A thin plastic-like sunken frame.mjui/const.mojo
MJUI_PLASTIC_ROUND_UP_BOX38A rounded plastic-like raised box.mjui/const.mojo
MJUI_PLASTIC_ROUND_DOWN_BOX39A rounded plastic-like sunken box.mjui/const.mojo
MJUI_GTK_UP_BOX40A box style resembling the GTK+ toolkit's raised elements.mjui/const.mojo
MJUI_GTK_DOWN_BOX41A box style resembling the GTK+ toolkit's sunken elements.mjui/const.mojo
MJUI_GTK_UP_FRAME42A GTK+ style raised frame.mjui/const.mojo
MJUI_GTK_DOWN_FRAME43A GTK+ style sunken frame.mjui/const.mojo
MJUI_GTK_THIN_UP_BOX44A thin GTK+ style raised box.mjui/const.mojo
MJUI_GTK_THIN_DOWN_BOX45A thin GTK+ style sunken box.mjui/const.mojo
MJUI_GTK_THIN_UP_FRAME46A thin GTK+ style raised frame.mjui/const.mojo
MJUI_GTK_THIN_DOWN_FRAME47A thin GTK+ style sunken frame.mjui/const.mojo
MJUI_GTK_ROUND_UP_BOX48A rounded GTK+ style raised box.mjui/const.mojo
MJUI_GTK_ROUND_DOWN_BOX49A rounded GTK+ style sunken box.mjui/const.mojo
MJUI_GLEAM_UP_BOX50A box with a gleam-like raised appearance.mjui/const.mojo
MJUI_GLEAM_DOWN_BOX51A box with a gleam-like sunken appearance.mjui/const.mojo
MJUI_GLEAM_UP_FRAME52A gleam-like raised frame.mjui/const.mojo
MJUI_GLEAM_DOWN_FRAME53A gleam-like sunken frame.mjui/const.mojo
MJUI_GLEAM_THIN_UP_BOX54A thin gleam-like raised box.mjui/const.mojo
MJUI_GLEAM_THIN_DOWN_BOX55A thin gleam-like sunken box.mjui/const.mojo
MJUI_GLEAM_ROUND_UP_BOX56A rounded gleam-like raised box.mjui/const.mojo
MJUI_GLEAM_ROUND_DOWN_BOX57A rounded gleam-like sunken box.mjui/const.mojo
MJUI_OXY_UP_BOX58A box with an Oxygen-like (KDE Plasma) raised appearance.mjui/const.mojo
MJUI_OXY_DOWN_BOX59A box with an Oxygen-like (KDE Plasma) sunken appearance.mjui/const.mojo
MJUI_OXY_UP_FRAME60An Oxygen-like raised frame.mjui/const.mojo
MJUI_OXY_DOWN_FRAME61An Oxygen-like sunken frame.mjui/const.mojo
MJUI_OXY_THIN_UP_BOX62A thin Oxygen-like raised box.mjui/const.mojo
MJUI_OXY_THIN_DOWN_BOX63A thin Oxygen-like sunken box.mjui/const.mojo
MJUI_OXY_THIN_UP_FRAME64A thin Oxygen-like raised frame.mjui/const.mojo
MJUI_OXY_THIN_DOWN_FRAME65A thin Oxygen-like sunken frame.mjui/const.mojo
MJUI_OXY_ROUND_UP_BOX66A rounded Oxygen-like raised box.mjui/const.mojo
MJUI_OXY_ROUND_DOWN_BOX67A rounded Oxygen-like sunken box.mjui/const.mojo
MJUI_OXY_BUTTON_UP_BOX68An Oxygen-like raised button box.mjui/const.mojo
MJUI_OXY_BUTTON_DOWN_BOX69An Oxygen-like sunken button box.mjui/const.mojo
MJUI_FREE_BOXTYPE70A free box type, which can be customized.mjui/const.mojo
MJUI_MAX_BOXTYPE255Represents the maximum value for box type constants.mjui/const.mojo

Label Types

Label rendering types for widgets.

- + - - - - - + + + + +
NameValueDefined In
NameValueDescriptionDefined In
MJUI_LABEL_TYPE_NORMAL0mjui/const.mojo
MJUI_LABEL_TYPE_SHADOW1mjui/const.mojo
MJUI_LABEL_TYPE_EMBOSSED2mjui/const.mojo
MJUI_LABEL_TYPE_MULTI3mjui/const.mojo
MJUI_LABEL_TYPE_IMAGE4mjui/const.mojo
MJUI_LABEL_TYPE_NORMAL0Standard text rendering.mjui/const.mojo
MJUI_LABEL_TYPE_SHADOW1Renders text with a shadow effect, adding depth.mjui/const.mojo
MJUI_LABEL_TYPE_EMBOSSED2Renders text with an embossed effect, making it appear raised.mjui/const.mojo
MJUI_LABEL_TYPE_MULTI3Enables multi-line text rendering, allowing text to wrap within the widget's bounds.mjui/const.mojo
MJUI_LABEL_TYPE_IMAGE4Specifies that the label should display an image instead of text.mjui/const.mojo

Image Types

Image format constants for loading images.

- + - - - - - - + + + + + +
NameValueDefined In
NameValueDescriptionDefined In
PNG0mjui/const.mojo
JPEG1mjui/const.mojo
SVG2mjui/const.mojo
BMP3mjui/const.mojo
GIF4mjui/const.mojo
ANIM_GIF5mjui/const.mojo
PNG0Specifies the Portable Network Graphics (PNG) image format, known for lossless compression and support for transparency.mjui/const.mojo
JPEG1Specifies the Joint Photographic Experts Group (JPEG) image format, commonly used for photographs due to its lossy compression.mjui/const.mojo
SVG2Specifies the Scalable Vector Graphics (SVG) format, an XML-based vector image format for two-dimensional graphics with support for interactivity and animation.mjui/const.mojo
BMP3Specifies the Bitmap (BMP) image format, a raster graphics image file format used to store bitmap digital images.mjui/const.mojo
GIF4Specifies the Graphics Interchange Format (GIF), known for its support of both static and animated images with a limited color palette.mjui/const.mojo
ANIM_GIF5Specifically denotes an animated GIF image format, allowing for multiple frames to be displayed in sequence.mjui/const.mojo

Alignment

Alignment options for text and widgets.

- + - - - - - - - - - - + + + + + + + + + +
NameValueDefined In
NameValueDescriptionDefined In
ALIGN_CENTER0mjui/const.mojo
ALIGN_TOP1mjui/const.mojo
ALIGN_BOTTOM2mjui/const.mojo
ALIGN_LEFT3mjui/const.mojo
ALIGN_RIGHT4mjui/const.mojo
ALIGN_INSIDE5mjui/const.mojo
ALIGN_CLIP6mjui/const.mojo
ALIGN_WRAP7mjui/const.mojo
TEXT_OVER_IMAGE8mjui/const.mojo
IMAGE_OVER_TEXT9mjui/const.mojo
ALIGN_CENTER0Aligns content to the center of the widget's bounding box.mjui/const.mojo
ALIGN_TOP1Aligns content to the top of the widget's bounding box.mjui/const.mojo
ALIGN_BOTTOM2Aligns content to the bottom of the widget's bounding box.mjui/const.mojo
ALIGN_LEFT3Aligns content to the left of the widget's bounding box.mjui/const.mojo
ALIGN_RIGHT4Aligns content to the right of the widget's bounding box.mjui/const.mojo
ALIGN_INSIDE5Aligns content within the widget's interior, respecting padding.mjui/const.mojo
ALIGN_CLIP6Clips content that extends beyond the widget's boundaries.mjui/const.mojo
ALIGN_WRAP7Wraps text content to multiple lines if it exceeds the widget's width.mjui/const.mojo
TEXT_OVER_IMAGE8Displays text content over an image within the same widget.mjui/const.mojo
IMAGE_OVER_TEXT9Displays an image over text content within the same widget.mjui/const.mojo

Visual Schemes

From 0af867ae957a7eaf524dc3b690a7c661e9c2a245 Mon Sep 17 00:00:00 2001 From: CW team Date: Wed, 16 Jul 2025 10:51:41 +0500 Subject: [PATCH 3/9] fix: README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 7821250..67f62b2 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,5 @@

- drawing + drawing


From 439b5a773e6a9d72dae2b08bccd822fc383af04c Mon Sep 17 00:00:00 2001 From: CW team Date: Wed, 16 Jul 2025 14:11:34 +0500 Subject: [PATCH 4/9] feat: add EXAMPLES.html --- docs/API_REFERENCE.html | 481 +++++++++++++++++++---------------- docs/EXAMPLES.html | 537 ++++++++++++++++++++++++++++++++++++++++ docs/examples.json | 129 ++++++++++ 3 files changed, 932 insertions(+), 215 deletions(-) create mode 100644 docs/EXAMPLES.html create mode 100644 docs/examples.json diff --git a/docs/API_REFERENCE.html b/docs/API_REFERENCE.html index c205c73..68db0c8 100644 --- a/docs/API_REFERENCE.html +++ b/docs/API_REFERENCE.html @@ -25,6 +25,7 @@ --example-bg-light: #f4f4f8; --example-border-light: #ff7f00; /* Orange for example border */ --anchor-color-light: #ff7f00; /* Orange for anchors */ + --link-color: #ff7f00; /* Orange theme colors */ --primary-color: #ff7f00; /* Medium Orange */ @@ -66,6 +67,10 @@ color: var(--text-dark); } + body.dark-mode { + --link-color: #ffa500; + } + header { background: var(--primary-color); /* Header remains orange */ color: var(--header-text-light); @@ -146,14 +151,14 @@ margin-bottom: 0.3em; } nav a { - color: var(--nav-text-light); + color: var(--link-color); text-decoration: none; font-size: 1rem; transition: color 0.2s; } body.dark-mode nav a { - color: var(--nav-text-dark); + color: var(--link-color); } nav a:hover { @@ -446,8 +451,12 @@ const themeSwitch = document.getElementById('theme-switch'); const currentTheme = localStorage.getItem('theme'); - if (currentTheme) { - document.body.classList.add(currentTheme); + if (currentTheme === 'dark-mode') { + document.body.classList.add('dark-mode'); + themeSwitch.checked = true; + } else { + document.body.classList.remove('dark-mode'); + themeSwitch.checked = false; } themeSwitch.addEventListener('change', () => { @@ -456,20 +465,15 @@ localStorage.setItem('theme', 'dark-mode'); } else { document.body.classList.remove('dark-mode'); - localStorage.setItem('theme', 'light-mode'); + localStorage.removeItem('theme'); } }); - - // Set initial state of the switch - if (document.body.classList.contains('dark-mode')) { - themeSwitch.checked = true; - } });
- + CombustUI-Mojo Logo

Comprehensive documentation for all public functions, constants, and FFI bindings in CombustUI-Mojo.

Light @@ -484,6 +488,8 @@
+
+ CombustUI-Mojo © 2024. All rights reserved. | GitHub +
\ No newline at end of file diff --git a/docs/EXAMPLES.html b/docs/EXAMPLES.html new file mode 100644 index 0000000..4ee1144 --- /dev/null +++ b/docs/EXAMPLES.html @@ -0,0 +1,537 @@ + + + + + + CombustUI-Mojo Examples + + + + + + +
+ CombustUI-Mojo Logo +

Explore various UI examples built with CombustUI-Mojo.

+
+ Light + + Dark +
+
+
+ +
+
+
+
+ CombustUI-Mojo © 2024. All rights reserved. | GitHub +
+ + \ No newline at end of file diff --git a/docs/examples.json b/docs/examples.json new file mode 100644 index 0000000..f871162 --- /dev/null +++ b/docs/examples.json @@ -0,0 +1,129 @@ +[ + { + "Name": "Basic Window", + "Description": "This example demonstrates how to create a simple window with a title.", + "Code": [ + "from mjui._app import Application", + "from mjui.utils import rgb, convertStringToBytes, readFromStringBytes, GTK", + "from mjui.fltk_bindings.bindings import *", + "", + "fn main() raises:", + " useScheme(GTK)", + " var app = Application()", + " var window = mjuiCreateWindow(800, 600, 1, 0, 0, convertStringToBytes(\"My First Window\"))", + " app.markWindowPTRAsMain(window)", + " mjuiShowWidget(window)", + " app.execute()" + ] + }, + { + "Name": "Flexbox Layout", + "Description": "This example shows how to use a vertical flexbox layout to arrange widgets.", + "Code": [ + "from mjui._app import Application", + "from mjui.utils import rgb, convertStringToBytes, readFromStringBytes, GTK", + "from mjui.fltk_bindings.bindings import *", + "from mjui.const import *", + "", + "fn main() raises:", + " useScheme(GTK)", + " var app = Application()", + " var window = mjuiCreateWindow(400, 300, 1, 0, 0, convertStringToBytes(\"Flexbox Example\"))", + " var layout = mjuiCreateLayoutFlex(0, 0, 400, 300, MJUI_MJUIEX_VERTICAL)", + "", + " BEGIN_WIDGET_APPEND(layout)", + " var button1 = mjuiCreateButton(100, 30, 0, 0, 1, convertStringToBytes(\"Button 1\"))", + " var label1 = mjuiCreateLabel(0, 0, 150, 20, 2, convertStringToBytes(\"Label 1\"))", + " var button2 = mjuiCreateButton(100, 30, 0, 0, 3, convertStringToBytes(\"Button 2\"))", + " END_WIDGET_APPEND(layout)", + "", + " mjuiFlexCalculateLayout(layout)", + " app.markWindowPTRAsMain(window)", + " mjuiShowWidget(window)", + " app.execute()" + ] + }, + { + "Name": "Button Click Event", + "Description": "This example demonstrates how to handle a button click event using EventHandler.", + "Code": [ + "from mjui._app import Application", + "from mjui.utils import rgb, convertStringToBytes, readFromStringBytes, GTK", + "from mjui.fltk_bindings.bindings import *", + "from mjui.const import *", + "from mjui.EventHandler import EventHandler", + "", + "var click_count = 0", + "", + "fn button_handler() raises:", + " # In Mojo, top-level variables can be directly modified within functions without 'global'.\n # This simplifies state management compared to Python's 'global' keyword.\n click_count += 1", + " print(\"Button clicked!\", click_count)", + "", + "fn main() raises:", + " useScheme(GTK)", + " var app = Application()", + " var window = mjuiCreateWindow(300, 200, 1, 0, 0, convertStringToBytes(\"Button Event\"))", + " var button = mjuiCreateButton(100, 40, 100, 80, 1001, convertStringToBytes(\"Click Me\"))", + "", + " var handler = EventHandler()", + " handler.set(MJUI_PUSH, button_handler)", + " app.addEventListener(1001, handler) # Attach to button ID", + "", + " app.markWindowPTRAsMain(window)", + " mjuiShowWidget(window)", + " app.execute()" + ] + }, + { + "Name": "Text Input", + "Description": "This example shows how to use an EventHandler to capture key presses in an input field.", + "Code": [ + "from mjui._app import Application", + "from mjui.utils import rgb, convertStringToBytes, readFromStringBytes, GTK", + "from mjui.fltk_bindings.bindings import *", + "from mjui.const import *", + "from mjui.EventHandler import EventHandler", + "", + "fn key_handler() raises:", + " # This handler is triggered when a key is pressed in the input field.\n # You can get the key code using mjuiEventKey() if needed.\n print(\"Key pressed!\")", + "", + "fn main() raises:", + " useScheme(GTK)", + " var app = Application()", + " var window = mjuiCreateWindow(500, 150, 1, 0, 0, convertStringToBytes(\"Text Input\"))", + " var input_field = mjuiCreateInput(50, 50, 400, 30, 2001, 0, convertStringToBytes(\"Type something...\"))", + "", + " # Create an EventHandler for key down events and attach it to the input field.\n # This replaces the manual event loop for handling input events.\n var handler = EventHandler()", + " handler.set(MJUI_KEYDOWN, key_handler)", + " app.addEventListener(2001, handler)", + "", + " app.markWindowPTRAsMain(window)", + " mjuiShowWidget(window)", + " app.execute()" + ] + }, + { + "Name": "Image Display", + "Description": "This example demonstrates how to load and display an image in a window.", + "Code": [ + "from mjui._app import Application", + "from mjui.utils import rgb, convertStringToBytes, readFromStringBytes, GTK", + "from mjui.fltk_bindings.bindings import *", + "from mjui.const import *", + "", + "fn main() raises:", + " useScheme(GTK)", + " var app = Application()", + " var window = mjuiCreateWindow(400, 400, 1, 0, 0, convertStringToBytes(\"Image Display\"))", + " var image_label = mjuiCreateLabel(0, 0, 400, 400, 3001, convertStringToBytes(\"\")) # Label to hold image", + "", + " # You would need an actual logo.png file in the same directory as your Mojo app", + " var img = mjuiLoadImg(300, 300, PNG, convertStringToBytes(\"docs/images/logo.png\"))", + " mjuiApplyImage(image_label, img)", + "", + " app.markWindowPTRAsMain(window)", + " mjuiShowWidget(window)", + " app.execute()" + ] + } +] \ No newline at end of file From 3768c6c0b6c5cedb3aaeb1a072dc6c73df0f0b7c Mon Sep 17 00:00:00 2001 From: CW team Date: Wed, 16 Jul 2025 16:14:18 +0500 Subject: [PATCH 5/9] fix: mjuiGrabInput --- mjui/fltk_bindings/libc/Input/MJUIInput.cc | 2 +- mjui/fltk_bindings/libc/Input/MJUIInput.hh | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/mjui/fltk_bindings/libc/Input/MJUIInput.cc b/mjui/fltk_bindings/libc/Input/MJUIInput.cc index 6cbe017..d61994d 100644 --- a/mjui/fltk_bindings/libc/Input/MJUIInput.cc +++ b/mjui/fltk_bindings/libc/Input/MJUIInput.cc @@ -6,7 +6,7 @@ #include #include "string.h" -#define NUM_ONLY true + Input::Input(int x, int y, int w, int h, long int nid, int numericInput, char *label) : Fl_Input(x, y, w, h, "") { id = nid; diff --git a/mjui/fltk_bindings/libc/Input/MJUIInput.hh b/mjui/fltk_bindings/libc/Input/MJUIInput.hh index a6ee1f1..86faea6 100644 --- a/mjui/fltk_bindings/libc/Input/MJUIInput.hh +++ b/mjui/fltk_bindings/libc/Input/MJUIInput.hh @@ -35,5 +35,5 @@ class MultiLineInput : public Fl_Multiline_Input, public BaseWidget { Input* mjuiCreateInput(int x, int y, int w, int h, long int id, int numOnly, int8_t* label_r); MultiLineInput* mjuiCreateMultilineInput(int x, int y, int w, int h, long int id, int8_t* label_r); void mjuiSetInputValue(Fl_Input* input, int8_t* value); - +const char *mjuiGrabInput(Input *ptr); #endif \ No newline at end of file From 908d6933e82abb8f87ee537f160290234cef4ac2 Mon Sep 17 00:00:00 2001 From: CW team Date: Wed, 16 Jul 2025 16:28:23 +0500 Subject: [PATCH 6/9] add mjuiGrabInput to docs --- docs/API_REFERENCE.html | 10 ++++++++++ maplib/experimental/header.py | 20 +++++++++++++++----- maplib/ffi.map.gen | 6 ++++++ mjui/fltk_bindings/bindings.mojo | 2 ++ mjui/fltk_bindings/libc/Input/MJUIInput.hh | 2 +- 5 files changed, 34 insertions(+), 6 deletions(-) diff --git a/docs/API_REFERENCE.html b/docs/API_REFERENCE.html index 68db0c8..8c62c76 100644 --- a/docs/API_REFERENCE.html +++ b/docs/API_REFERENCE.html @@ -567,6 +567,7 @@

Table of Contents

  • mjuiCreateInput
  • mjuiCreateMultilineInput
  • mjuiSetInputValue
  • +
  • mjuiGrabInput
  • Label & Image Widgets @@ -1054,6 +1055,15 @@

    mjuiSetInputValue(input

    Defined in: mjui/fltk_bindings/libc/Input/MJUIInput.cc

    mjuiSetInputValue(input, convertStringToBytes("Hello"))
     
    + +

    mjuiGrabInput(input) -> StringBytes

    +

    Gets the current value (text) of an FLTK Fl_Input widget.

    +

    Defined in: mjui/fltk_bindings/libc/Input/MJUIInput.cc

    +
    var bytes = mjuiGrabInput(input)
    +var str = readFromStringBytes(bytes) # This is necessary since grab input returns bytes
    +
    + +

    Label & Image Widgets

    mjuiCreateLabel(x, y, width, height, id, text)

    Creates a new custom FLTK MJUILabel widget at (x, y) with specified width, height, id, and text.

    diff --git a/maplib/experimental/header.py b/maplib/experimental/header.py index d0d1b0d..765bee6 100644 --- a/maplib/experimental/header.py +++ b/maplib/experimental/header.py @@ -11,21 +11,31 @@ # Extracts the function name and return type from a function declaration line def get_name_ret_type(function: str): namepret = function.split(" ") # split the line by spaces - argstart = namepret[1].index('(') # find '(' to separate name from parameters - ret = namepret[0].strip() # first part is the return type + argst = 1 + if len(namepret) > 2 and namepret[0] == 'const' and namepret[1] == 'char' or namepret[1] == 'char*': + argst = 2 + + argstart = namepret[argst].index('(') # find '(' to separate name from parameters + if argst > 1: + ret = namepret[0].strip() + " " + namepret[1].strip() # first part is the return type + else: + ret = namepret[0].strip() + # Map C return types to your target types if ret == 'void': ret = 'c_void' elif 'int' in ret: ret = 'Int' + elif 'const char*' in ret or "char*" in ret: + ret = "StringBytes" elif "*" in ret: if "Fl_Image" in ret: ret = 'Int32' else: ret = 'FLTK_WIDGET_POINTER' - return namepret[1][:argstart], ret # return (function_name, return_type) + return namepret[argst][:argstart], ret # return (function_name, return_type) # Parses the arguments inside a function declaration and maps them to mojo types def get_args(function: str): @@ -60,12 +70,12 @@ def get_args(function: str): mojo_args[arg[-1].replace("*", '')] = 'Int' continue - if 'int8_t' in arg[0]: + if 'int8_t' in arg[0] : mojo_args[arg[-1].replace("*", '')] = 'StringBytes' continue # Handle pointer or widget types - if 'Fl_Image' not in arg[0] and ("Fl" in arg[0] or "MJUI" in arg[0]): + if 'Fl_Image' not in arg[0] and ("Fl" in arg[0] or "MJUI" in arg[0] or '*' in arg[1]): mojo_args[arg[-1].replace("*", '')] = 'FLTK_WIDGET_POINTER' continue elif 'Fl_Image' in arg[0]: diff --git a/maplib/ffi.map.gen b/maplib/ffi.map.gen index e7bdac7..058dbdb 100644 --- a/maplib/ffi.map.gen +++ b/maplib/ffi.map.gen @@ -182,6 +182,12 @@ "value": "StringBytes" } }, + "mjuiGrabInput": { + "returns": "StringBytes", + "arguments": { + "ptr": "FLTK_WIDGET_POINTER" + } + }, "mjuiCreateLabel": { "returns": "FLTK_WIDGET_POINTER", "arguments": { diff --git a/mjui/fltk_bindings/bindings.mojo b/mjui/fltk_bindings/bindings.mojo index bccb272..65827bb 100644 --- a/mjui/fltk_bindings/bindings.mojo +++ b/mjui/fltk_bindings/bindings.mojo @@ -31,6 +31,7 @@ alias MJUICHECKBUTTONGETSTATE_DEFINATION= fn(checkButton: FLTK_WIDGET_POINTER) - alias MJUICREATEINPUT_DEFINATION= fn(x: Int, y: Int, w: Int, h: Int, id: Int32, numOnly: Int, label_r: StringBytes) -> FLTK_WIDGET_POINTER alias MJUICREATEMULTILINEINPUT_DEFINATION= fn(x: Int, y: Int, w: Int, h: Int, id: Int32, label_r: StringBytes) -> FLTK_WIDGET_POINTER alias MJUISETINPUTVALUE_DEFINATION= fn(input: FLTK_WIDGET_POINTER, value: StringBytes) -> c_void +alias MJUIGRABINPUT_DEFINATION= fn(ptr: FLTK_WIDGET_POINTER) -> StringBytes alias MJUICREATELABEL_DEFINATION= fn(x: Int, y: Int, width: Int, height: Int, id: Int, text: StringBytes) -> FLTK_WIDGET_POINTER alias MJUISETTEXTPROPERTIES_DEFINATION= fn(label: FLTK_WIDGET_POINTER, size: Int, color: UInt32, type: Int) -> c_void alias MJUITEXTALIGN_DEFINATION= fn(label: FLTK_WIDGET_POINTER, alignment: Int) -> c_void @@ -77,6 +78,7 @@ var mjuiCheckButtonGetState = __dll.get_function[MJUICHECKBUTTONGETSTATE_DEFINAT var mjuiCreateInput = __dll.get_function[MJUICREATEINPUT_DEFINATION]("mjuiCreateInput") var mjuiCreateMultilineInput = __dll.get_function[MJUICREATEMULTILINEINPUT_DEFINATION]("mjuiCreateMultilineInput") var mjuiSetInputValue = __dll.get_function[MJUISETINPUTVALUE_DEFINATION]("mjuiSetInputValue") +var mjuiGrabInput = __dll.get_function[MJUIGRABINPUT_DEFINATION]("mjuiGrabInput") var mjuiCreateLabel = __dll.get_function[MJUICREATELABEL_DEFINATION]("mjuiCreateLabel") var mjuiSetTextProperties = __dll.get_function[MJUISETTEXTPROPERTIES_DEFINATION]("mjuiSetTextProperties") var mjuiTextAlign = __dll.get_function[MJUITEXTALIGN_DEFINATION]("mjuiTextAlign") diff --git a/mjui/fltk_bindings/libc/Input/MJUIInput.hh b/mjui/fltk_bindings/libc/Input/MJUIInput.hh index 86faea6..a61af07 100644 --- a/mjui/fltk_bindings/libc/Input/MJUIInput.hh +++ b/mjui/fltk_bindings/libc/Input/MJUIInput.hh @@ -35,5 +35,5 @@ class MultiLineInput : public Fl_Multiline_Input, public BaseWidget { Input* mjuiCreateInput(int x, int y, int w, int h, long int id, int numOnly, int8_t* label_r); MultiLineInput* mjuiCreateMultilineInput(int x, int y, int w, int h, long int id, int8_t* label_r); void mjuiSetInputValue(Fl_Input* input, int8_t* value); -const char *mjuiGrabInput(Input *ptr); +const char* mjuiGrabInput(Input *ptr); #endif \ No newline at end of file From bbc363fd7253124b9af816e8b3e44bcf96c4a0c7 Mon Sep 17 00:00:00 2001 From: CW team Date: Wed, 16 Jul 2025 16:30:51 +0500 Subject: [PATCH 7/9] re-add logo.png --- .gitignore | 1 + docs/images/logo.png | Bin 0 -> 63119 bytes 2 files changed, 1 insertion(+) create mode 100644 docs/images/logo.png diff --git a/.gitignore b/.gitignore index 429a74d..6b3cb08 100644 --- a/.gitignore +++ b/.gitignore @@ -19,4 +19,5 @@ app.mojo /cairo/*# magic environments .magic *.png +!logo.png *.gif \ No newline at end of file diff --git a/docs/images/logo.png b/docs/images/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..f39760a9bc0e4357fadf96fc99bba28e2ba15514 GIT binary patch literal 63119 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%0DQHQ&r>|n;<@=n9_ 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 z%0A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 B-lG5j literal 0 HcmV?d00001 From 76a5851b650be46144c98ac4fc669cebc8785693 Mon Sep 17 00:00:00 2001 From: CW team Date: Wed, 16 Jul 2025 16:33:19 +0500 Subject: [PATCH 8/9] add hasFLTK --- docs/API_REFERENCE.html | 1 + docs/EXAMPLES.html | 1 + scripts/create-app.py | 22 ++++++++++++++-------- 3 files changed, 16 insertions(+), 8 deletions(-) diff --git a/docs/API_REFERENCE.html b/docs/API_REFERENCE.html index 8c62c76..2acd41f 100644 --- a/docs/API_REFERENCE.html +++ b/docs/API_REFERENCE.html @@ -1,3 +1,4 @@ + diff --git a/docs/EXAMPLES.html b/docs/EXAMPLES.html index 4ee1144..d9396df 100644 --- a/docs/EXAMPLES.html +++ b/docs/EXAMPLES.html @@ -1,3 +1,4 @@ + diff --git a/scripts/create-app.py b/scripts/create-app.py index 27125ec..8e6cbf7 100644 --- a/scripts/create-app.py +++ b/scripts/create-app.py @@ -13,7 +13,6 @@ def install_linux_dependencies(): # Try to detect package manager subprocess.run(['curl', '-L', build_fltk, '-o', './build_fltk1.4.sh'], check=True) - st = os.stat('./build_fltk1.4.sh') os.chmod("./build_fltk1.4.sh", 0o755) process = subprocess.run(['./build_fltk1.4.sh'], shell=True, check=True) if process.returncode != 0: @@ -29,13 +28,20 @@ def pixi_magic(): if sys.platform == 'darwin': # Check for brew - homebrew = subprocess.run(['which', 'brew'], capture_output=True, text=True) - if homebrew.returncode != 0: - raise SystemError('Homebrew not installed. Install Homebrew and try again') - - # Install FLTK (always try, brew is idempotent) - print("Installing FLTK...") - subprocess.run(['brew', 'install', 'fltk']) + hasFLTK = False + with open('~/.zshrc', 'r') as rc: + if 'COMBUSTUI_DLL_PATH' in rc.read(): + print('FLTK is already installed, moving on...') + hasFLTK=True + + if not hasFLTK: + homebrew = subprocess.run(['which', 'brew'], capture_output=True, text=True) + if homebrew.returncode != 0: + raise SystemError('Homebrew not installed. Install Homebrew and try again') + + # Install FLTK (always try, brew is idempotent) + print("Installing FLTK...") + subprocess.run(['brew', 'install', 'fltk']) # Clone repo subprocess.run(['git', 'clone', 'https://github.com/Hammad-hab/CombustUI.git']) From dc8d48dc11cf798ec2aeee5e269a4e8b9210539e Mon Sep 17 00:00:00 2001 From: CW team Date: Wed, 16 Jul 2025 16:35:31 +0500 Subject: [PATCH 9/9] minor fixes --- build.sh | 2 ++ maplib/experimental/header.py | 4 +++- maplib/ffi.map.gen | 1 + maplib/generator.py | 4 ++-- scripts/create-app.py | 1 - 5 files changed, 8 insertions(+), 4 deletions(-) diff --git a/build.sh b/build.sh index 9d9e669..b07eec2 100755 --- a/build.sh +++ b/build.sh @@ -1,3 +1,5 @@ +set -e + cd mjui/fltk_bindings/libc/ echo "Compiling mjui-fltk bindings..." diff --git a/maplib/experimental/header.py b/maplib/experimental/header.py index 765bee6..926f31c 100644 --- a/maplib/experimental/header.py +++ b/maplib/experimental/header.py @@ -122,7 +122,9 @@ def evaluate(header, id): res = subprocess.run(['ls'] + files, capture_output=True) header_files = (res.stdout).decode('utf-8').splitlines() -ffi_map = {} +ffi_map = { + '?': 'Auto-generated using maplib' +} # Build the entire FFI map by iterating through each header for file in header_files: diff --git a/maplib/ffi.map.gen b/maplib/ffi.map.gen index 058dbdb..a0b16b4 100644 --- a/maplib/ffi.map.gen +++ b/maplib/ffi.map.gen @@ -1,4 +1,5 @@ { + "?": "Auto-generated using maplib", "mjuiGrabEvent": { "returns": "Int", "arguments": {} diff --git a/maplib/generator.py b/maplib/generator.py index 8fad684..37d2f0d 100755 --- a/maplib/generator.py +++ b/maplib/generator.py @@ -3,7 +3,6 @@ """ import json as j # Import JSON module with alias `j` -import copy import sys # === READ COMMAND LINE ARGUMENTS === @@ -34,7 +33,8 @@ # === LOOP OVER EACH FUNCTION IN THE MAP === for key, value in parsed_contents.items(): - + if key == '?': + continue # Build the argument list as `name: Type` args = [f"{arg_name}: {dtype}" for arg_name, dtype in value['arguments'].items()] args_str = ', '.join(args) diff --git a/scripts/create-app.py b/scripts/create-app.py index 8e6cbf7..9a9e9f4 100644 --- a/scripts/create-app.py +++ b/scripts/create-app.py @@ -3,7 +3,6 @@ import subprocess import shutil from pathlib import Path -import stat get_started = 'https://raw.githubusercontent.com/Hammad-hab/CombustUI/refs/heads/main/scripts/get_started.mojo' build_fltk = 'https://raw.githubusercontent.com/Hammad-hab/CombustUI/refs/heads/main/scripts/build_fltk1.4.sh'