From b4c7205794343755d425f8fc5ec8b1e1d61f25b0 Mon Sep 17 00:00:00 2001 From: Olaf Wintermann Date: Sun, 29 Mar 2026 16:02:36 +0200 Subject: [PATCH] add window functions --- application/src/main.rs | 3 ++- ui-rs/src/ui/mod.rs | 4 +++- ui-rs/src/ui/toolkit.rs | 5 +++++ ui-rs/src/ui/window.rs | 33 +++++++++++++++++++++++++++++++++ 4 files changed, 43 insertions(+), 2 deletions(-) create mode 100644 ui-rs/src/ui/window.rs diff --git a/application/src/main.rs b/application/src/main.rs index 2a8d14e..a584c1e 100644 --- a/application/src/main.rs +++ b/application/src/main.rs @@ -11,6 +11,7 @@ struct App; impl ui::Application for App { fn on_startup(&self) { - + let obj = ui::window("Test Window"); + obj.show(); } } diff --git a/ui-rs/src/ui/mod.rs b/ui-rs/src/ui/mod.rs index 03628f1..8a061fe 100644 --- a/ui-rs/src/ui/mod.rs +++ b/ui-rs/src/ui/mod.rs @@ -1,6 +1,8 @@ mod ffi; mod toolkit; mod application; +mod window; pub use toolkit::*; -pub use application::*; \ No newline at end of file +pub use application::*; +pub use window::*; diff --git a/ui-rs/src/ui/toolkit.rs b/ui-rs/src/ui/toolkit.rs index f36d57c..ab5b688 100644 --- a/ui-rs/src/ui/toolkit.rs +++ b/ui-rs/src/ui/toolkit.rs @@ -1,6 +1,11 @@ #![allow(dead_code)] use std::ffi::{c_char, c_int, CString}; +use crate::ui::ffi; + +pub struct UiObject { + pub ptr: *const ffi::UiObject +} extern "C" { fn ui_init(appname: *const c_char, argc: c_int, argv: *const *const c_char); diff --git a/ui-rs/src/ui/window.rs b/ui-rs/src/ui/window.rs new file mode 100644 index 0000000..972c101 --- /dev/null +++ b/ui-rs/src/ui/window.rs @@ -0,0 +1,33 @@ +#![allow(dead_code)] +#[allow(unused_imports)] + +use std::ffi::{c_char, c_int, c_void}; +use std::ffi::CString; +use crate::ui::toolkit; +use crate::ui::ffi::UiObject; + +extern "C" { + fn ui_window(title: *const c_char) -> *const UiObject; + fn ui_sidebar_window(title: *const c_char) -> *const UiObject; + fn ui_splitview_window(title: *const c_char, sidebar: c_int) -> *const UiObject; + fn ui_simple_window(title: *const c_char) -> *const UiObject; + + + fn ui_show(ui: *const UiObject); +} + +impl toolkit::UiObject { + pub fn show(&self) { + unsafe { + ui_show(self.ptr); + } + } +} + +pub fn window(title: &str) -> toolkit::UiObject { + unsafe { + let str = CString::new(title).unwrap(); + let objptr = ui_window(str.as_ptr()); + return toolkit::UiObject { ptr: objptr }; + } +} \ No newline at end of file -- 2.47.3