Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
ui-sys/target
ui-sys/Cargo.lock
ui/target
ui/Cargo.lock
3 changes: 1 addition & 2 deletions ui-sys/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -10,5 +10,4 @@ description = "Native bindings to the minimalist, cross-platform, widget set `li
libc = "0.2"

[build-dependencies]
make-cmd = "0.1"

cmake = "0.1.17"
34 changes: 23 additions & 11 deletions ui-sys/build.rs
Original file line number Diff line number Diff line change
@@ -1,22 +1,34 @@
extern crate make_cmd;
extern crate cmake;

use std::env;
use std::env::var;
use std::fs::rename;
use std::path::Path;
use std::process::Command;

fn main() {
println!("cargo:rerun-if-changed=libui");

if !Path::new("libui/.git").exists() {
Command::new("git").args(&["submodule", "update", "--init"]).status().unwrap();
Command::new("git")
.args(&["submodule", "update", "--init"])
.status()
.expect("initializing submodule libui");
}

let out_dir = env::var("OUT_DIR").unwrap();
let outdir_argument = format!("OUTDIR={}", out_dir);
let objdir_argument = format!("OBJDIR={}/obj", out_dir);
make_cmd::gnu_make().args(&["-C", "libui", &*outdir_argument, &*objdir_argument])
.status()
.unwrap();
let profile = var("PROFILE").expect("reading environment variable PROFILE");
let dst = cmake::Config::new("libui")
.profile(profile.as_str())
.build_target("")
.build();

let mut out_dir = dst.join(Path::new("build/out"));

let target = var("TARGET").expect("reading environment variable TARGET");
if target.contains("msvc") {
out_dir = out_dir.join(Path::new(profile.as_str()));
rename(out_dir.join("libui.lib"), out_dir.join("ui.lib")).expect("renaming file libui.lib");
}

println!("cargo:rustc-link-search={}", out_dir.display());
println!("cargo:rustc-link-lib=dylib=ui");
println!("cargo:rustc-link-search=native={}", out_dir);
}

2 changes: 1 addition & 1 deletion ui-sys/libui
Submodule libui updated 182 files
1 change: 0 additions & 1 deletion ui-sys/src/ffi.rs
Original file line number Diff line number Diff line change
Expand Up @@ -733,4 +733,3 @@ extern {
data: *mut c_void);
pub fn uiNewColorButton() -> *mut uiColorButton;
}

93 changes: 66 additions & 27 deletions ui-sys/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@

extern crate libc;

use libc::{c_char, c_double, c_int, c_void, intmax_t, size_t, uintmax_t};
use libc::{c_char, c_double, c_int, c_void, size_t};

pub mod platform {
pub mod macos;
Expand All @@ -25,6 +25,8 @@ extern {
pub fn uiFreeInitError(err: *const c_char);

pub fn uiMain();
pub fn uiMainSteps();
pub fn uiMainStep(wait: c_int) -> c_int;
pub fn uiQuit();

pub fn uiQueueMain(f: extern "C" fn(data: *mut c_void), data: *mut c_void);
Expand Down Expand Up @@ -71,9 +73,10 @@ extern {
-> *mut uiControl;
pub fn uiFreeControl(control: *mut uiControl);

pub fn uiControlVerifyDestroy(control: *mut uiControl);
pub fn uiControlVerifySetParent(control: *mut uiControl, new_parent: *mut uiControl);
pub fn uiControlEnabledToUser(control: *mut uiControl) -> c_int;

pub fn uiUserBugCannotSetParentOnToplevel(typ: *const c_char);
}

pub enum uiWindow {}
Expand All @@ -82,9 +85,24 @@ pub enum uiWindow {}
extern {
pub fn uiWindowTitle(w: *mut uiWindow) -> *mut c_char;
pub fn uiWindowSetTitle(w: *mut uiWindow, title: *const c_char);
pub fn uiWindowPosition(w: *mut uiWindow, x: *mut c_int, y: *mut c_int);
pub fn uiWindowSetPosition(w: *mut uiWindow, x: c_int, y: c_int);
pub fn uiWindowCenter(w: *mut uiWindow);
pub fn uiWindowOnPositionChanged(w: *mut uiWindow,
f: extern "C" fn(w: *mut uiWindow, data: *mut c_void),
data: *mut c_void);
pub fn uiWindowContentSize(w: *mut uiWindow, width: *mut c_int, height: *mut c_int);
pub fn uiWindowSetContentSize(w: *mut uiWindow, width: c_int, height: c_int);
pub fn uiWindowFullscreen(w: *mut uiWindow) -> c_int;
pub fn uiWindowSetFullscreen(w: *mut uiWindow, fullscreen: c_int);
pub fn uiWindowOnContentSizeChanged(w: *mut uiWindow,
f: extern "C" fn(w: *mut uiWindow, data: *mut c_void),
data: *mut c_void);
pub fn uiWindowOnClosing(w: *mut uiWindow,
f: extern "C" fn(w: *mut uiWindow, data: *mut c_void) -> c_int,
data: *mut c_void);
pub fn uiWindowBorderless(w: *mut uiWindow) -> c_int;
pub fn uiWindowSetBorderless(w: *mut uiWindow, fullscreen: c_int);
pub fn uiWindowSetChild(w: *mut uiWindow, child: *mut uiControl);
pub fn uiWindowMargined(w: *mut uiWindow) -> c_int;
pub fn uiWindowSetMargined(w: *mut uiWindow, margined: c_int);
Expand All @@ -109,7 +127,7 @@ pub enum uiBox {}
#[link(name = "ui")]
extern {
pub fn uiBoxAppend(b: *mut uiBox, child: *mut uiControl, stretchy: c_int);
pub fn uiBoxDelete(b: *mut uiBox, index: uintmax_t);
pub fn uiBoxDelete(b: *mut uiBox, index: c_int);
pub fn uiBoxPadded(b: *mut uiBox) -> c_int;
pub fn uiBoxSetPadded(b: *mut uiBox, padded: c_int);
pub fn uiNewHorizontalBox() -> *mut uiBox;
Expand All @@ -128,6 +146,8 @@ extern {
pub fn uiEntryReadOnly(e: *mut uiEntry) -> c_int;
pub fn uiEntrySetReadOnly(e: *mut uiEntry, readonly: c_int);
pub fn uiNewEntry() -> *mut uiEntry;
pub fn uiNewPasswordEntry() -> *mut uiEntry;
pub fn uiNewSearchEntry() -> *mut uiEntry;
}

pub enum uiCheckbox {}
Expand Down Expand Up @@ -158,11 +178,11 @@ pub enum uiTab {}
#[link(name = "ui")]
extern {
pub fn uiTabAppend(t: *mut uiTab, name: *const c_char, c: *mut uiControl);
pub fn uiTabInsertAt(t: *mut uiTab, name: *const c_char, before: uintmax_t, c: *mut uiControl);
pub fn uiTabDelete(t: *mut uiTab, index: uintmax_t);
pub fn uiTabNumPages(t: *mut uiTab) -> uintmax_t;
pub fn uiTabMargined(t: *mut uiTab, page: uintmax_t) -> c_int;
pub fn uiTabSetMargined(t: *mut uiTab, page: uintmax_t, margined: c_int);
pub fn uiTabInsertAt(t: *mut uiTab, name: *const c_char, before: c_int, c: *mut uiControl);
pub fn uiTabDelete(t: *mut uiTab, index: c_int);
pub fn uiTabNumPages(t: *mut uiTab) -> c_int;
pub fn uiTabMargined(t: *mut uiTab, page: c_int) -> c_int;
pub fn uiTabSetMargined(t: *mut uiTab, page: c_int, margined: c_int);
pub fn uiNewTab() -> *mut uiTab;
}

Expand All @@ -182,18 +202,19 @@ pub enum uiSpinbox {}

#[link(name = "ui")]
extern {
pub fn uiSpinboxValue(s: *mut uiSpinbox) -> intmax_t;
pub fn uiSpinboxSetValue(s: *mut uiSpinbox, value: intmax_t);
pub fn uiSpinboxValue(s: *mut uiSpinbox) -> c_int;
pub fn uiSpinboxSetValue(s: *mut uiSpinbox, value: c_int);
pub fn uiSpinboxOnChanged(s: *mut uiSpinbox,
f: extern "C" fn(s: *mut uiSpinbox, data: *mut c_void),
data: *mut c_void);
pub fn uiNewSpinbox(min: intmax_t, max: intmax_t) -> *mut uiSpinbox;
pub fn uiNewSpinbox(min: c_int, max: c_int) -> *mut uiSpinbox;
}

pub enum uiProgressBar {}

#[link(name = "ui")]
extern {
pub fn uiProgressBarValue(p: *mut uiProgressBar) -> c_int;
pub fn uiProgressBarSetValue(p: *mut uiProgressBar, n: c_int);
pub fn uiNewProgressBar() -> *mut uiProgressBar;
}
Expand All @@ -202,40 +223,58 @@ pub enum uiSlider {}

#[link(name = "ui")]
extern {
pub fn uiSliderValue(s: *mut uiSlider) -> intmax_t;
pub fn uiSliderSetValue(s: *mut uiSlider, value: intmax_t);
pub fn uiSliderValue(s: *mut uiSlider) -> c_int;
pub fn uiSliderSetValue(s: *mut uiSlider, value: c_int);
pub fn uiSliderOnChanged(s: *mut uiSlider,
f: extern "C" fn(s: *mut uiSlider, data: *mut c_void),
data: *mut c_void);
pub fn uiNewSlider(min: intmax_t, max: intmax_t) -> *mut uiSlider;
pub fn uiNewSlider(min: c_int, max: c_int) -> *mut uiSlider;
}

pub enum uiSeparator {}

#[link(name = "ui")]
extern {
pub fn uiNewHorizontalSeparator() -> *mut uiSeparator;
pub fn uiNewVerticalSeparator() -> *mut uiSeparator;
}

pub enum uiCombobox {}

#[link(name = "ui")]
extern {
pub fn uiComboboxAppend(c: *mut uiCombobox, text: *const c_char);
pub fn uiComboboxSelected(c: *mut uiCombobox) -> intmax_t;
pub fn uiComboboxSetSelected(c: *mut uiCombobox, n: intmax_t);
pub fn uiComboboxSelected(c: *mut uiCombobox) -> c_int;
pub fn uiComboboxSetSelected(c: *mut uiCombobox, n: c_int);
pub fn uiComboboxOnSelected(c: *mut uiCombobox,
f: extern "C" fn(c: *mut uiCombobox, data: *mut c_void),
data: *mut c_void);
pub fn uiNewCombobox() -> *mut uiCombobox;
pub fn uiNewEditableCombobox() -> *mut uiCombobox;
}

pub enum uiEditableCombobox {}

#[link(name = "ui")]
extern {
pub fn uiEditableComboboxAppend(c: *mut uiEditableCombobox, text: *const c_char);
pub fn uiEditableComboboxText(c: *mut uiEditableCombobox) -> *mut c_char;
pub fn uiEditableComboboxSetText(c: *mut uiEditableCombobox, text: *const c_char);
pub fn uiEditableComboboxOnChanged(c: *mut uiEditableCombobox,
f: extern "C" fn(c: *mut uiEditableCombobox, data: *mut c_void),
data: *mut c_void);
pub fn uiNewEditableCombobox() -> *mut uiEditableCombobox;
}

pub enum uiRadioButtons {}

#[link(name = "ui")]
extern {
pub fn uiRadioButtonsAppend(r: *mut uiRadioButtons, text: *const c_char);
pub fn uiRadioButtonsSelected(r: *mut uiRadioButtons) -> c_int;
pub fn uiRadioButtonsSetSelected(r: *mut uiRadioButtons, value: c_int);
pub fn uiRadioButtonsOnSelected(r: *mut uiRadioButtons,
f: extern "C" fn(r: *mut uiRadioButtons, data: *mut c_void),
data: *mut c_void);
pub fn uiNewRadioButtons() -> *mut uiRadioButtons;
}

Expand All @@ -261,6 +300,7 @@ extern {
pub fn uiMultilineEntryReadOnly(e: *mut uiMultilineEntry) -> c_int;
pub fn uiMultilineEntrySetReadOnly(e: *mut uiMultilineEntry, readonly: c_int);
pub fn uiNewMultilineEntry() -> *mut uiMultilineEntry;
pub fn uiNewNonWrappingMultilineEntry() -> *mut uiMultilineEntry;
}

pub enum uiMenuItem {}
Expand Down Expand Up @@ -321,15 +361,15 @@ pub struct uiAreaHandler {

#[link(name = "ui")]
extern {
pub fn uiAreaSetSize(a: *mut uiArea, width: intmax_t, height: intmax_t);
pub fn uiAreaSetSize(a: *mut uiArea, width: c_int, height: c_int);
pub fn uiAreaQueueRedrawAll(a: *mut uiArea);
pub fn uiAreaScrollTo(a: *mut uiArea,
x: c_double,
y: c_double,
width: c_double,
height: c_double);
pub fn uiNewArea(ah: *mut uiAreaHandler) -> *mut uiArea;
pub fn uiNewScrollingArea(ah: *mut uiAreaHandler, width: intmax_t, height: intmax_t)
pub fn uiNewScrollingArea(ah: *mut uiAreaHandler, width: c_int, height: c_int)
-> *mut uiArea;
}

Expand Down Expand Up @@ -523,8 +563,8 @@ pub enum uiDrawFontFamilies {}

extern "C" {
pub fn uiDrawListFontFamilies() -> *mut uiDrawFontFamilies;
pub fn uiDrawFontFamiliesNumFamilies(ff: *mut uiDrawFontFamilies) -> uintmax_t;
pub fn uiDrawFontFamiliesFamily(ff: *mut uiDrawFontFamilies, n: uintmax_t) -> *mut c_char;
pub fn uiDrawFontFamiliesNumFamilies(ff: *mut uiDrawFontFamilies) -> c_int;
pub fn uiDrawFontFamiliesFamily(ff: *mut uiDrawFontFamilies, n: c_int) -> *mut c_char;
pub fn uiDrawFreeFontFamilies(ff: *mut uiDrawFontFamilies);
}

Expand Down Expand Up @@ -612,8 +652,8 @@ extern "C" {
height: *mut c_double);

pub fn uiDrawTextLayoutSetColor(layout: *mut uiDrawTextLayout,
startChar: intmax_t,
endChar: intmax_t,
startChar: c_int,
endChar: c_int,
r: c_double,
g: c_double,
b: c_double,
Expand Down Expand Up @@ -641,10 +681,10 @@ pub struct uiAreaMouseEvent {
pub AreaWidth: c_double,
pub AreaHeight: c_double,

pub Down: uintmax_t,
pub Up: uintmax_t,
pub Down: c_int,
pub Up: c_int,

pub Count: uintmax_t,
pub Count: c_int,

pub Modifiers: uiModifiers,

Expand Down Expand Up @@ -741,4 +781,3 @@ extern {
data: *mut c_void);
pub fn uiNewColorButton() -> *mut uiColorButton;
}

10 changes: 5 additions & 5 deletions ui/examples/controlgallery.rs
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,8 @@

extern crate ui;

use ui::{BoxControl, Button, Checkbox, ColorButton, Combobox, DateTimePicker, Entry};
use ui::{BoxControl, Button, Checkbox, ColorButton, Combobox, EditableCombobox,
DateTimePicker, Entry};
use ui::{FontButton, Group, InitOptions, Label, Menu, MenuItem, ProgressBar, RadioButtons};
use ui::{Separator, Slider, Spinbox, Tab, Window};

Expand Down Expand Up @@ -97,7 +98,7 @@ fn run() {
cbox.append("Combobox Item 3");
inner.append(cbox.into(), false);

let cbox = Combobox::new_editable();
let cbox = EditableCombobox::new();
cbox.append("Editable Item 1");
cbox.append("Editable Item 2");
cbox.append("Editable Item 3");
Expand Down Expand Up @@ -133,15 +134,14 @@ fn open_clicked(_: &MenuItem, mainwin: &Window) {
}

fn save_clicked(_: &MenuItem, mainwin: &Window) {
match ui::open_file(mainwin) {
match ui::save_file(mainwin) {
Some(filename) => {
ui::msg_box(mainwin, "File selected (don't worry, it's still there)", &*filename)
}
None => ui::msg_box_error(mainwin, "No file selected", "Don't be alarmed!"),
}
}

fn update(_: i64) {
fn update(_: i32) {
// TODO(pcwalton)
}

Loading