mirror of
https://github.com/eliasstepanik/imgui-rs.git
synced 2026-01-26 12:59:00 +00:00
Add first widgets
This commit is contained in:
parent
d970e287d1
commit
4f5982dfa9
81
src/lib.rs
81
src/lib.rs
@ -10,7 +10,7 @@ extern crate libc;
|
|||||||
#[cfg(feature = "sdl2")]
|
#[cfg(feature = "sdl2")]
|
||||||
extern crate sdl2;
|
extern crate sdl2;
|
||||||
|
|
||||||
use libc::{c_float, c_int, c_uchar};
|
use libc::{c_char, c_float, c_int, c_uchar};
|
||||||
use std::marker::PhantomData;
|
use std::marker::PhantomData;
|
||||||
use std::mem;
|
use std::mem;
|
||||||
use std::ptr;
|
use std::ptr;
|
||||||
@ -25,6 +25,27 @@ pub mod glium_renderer;
|
|||||||
|
|
||||||
pub struct ImGui;
|
pub struct ImGui;
|
||||||
|
|
||||||
|
#[macro_export]
|
||||||
|
macro_rules! im_str {
|
||||||
|
($e:expr) => ({
|
||||||
|
let value = concat!($e, "\0");
|
||||||
|
unsafe { ImStr::from_bytes(value.as_bytes()) }
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
pub struct ImStr<'a> {
|
||||||
|
bytes: &'a [u8]
|
||||||
|
}
|
||||||
|
|
||||||
|
impl<'a> ImStr<'a> {
|
||||||
|
pub unsafe fn from_bytes(bytes: &'a [u8]) -> ImStr<'a> {
|
||||||
|
ImStr {
|
||||||
|
bytes: bytes
|
||||||
|
}
|
||||||
|
}
|
||||||
|
fn as_ptr(&self) -> *const c_char { self.bytes.as_ptr() as *const c_char }
|
||||||
|
}
|
||||||
|
|
||||||
pub struct TextureHandle<'a> {
|
pub struct TextureHandle<'a> {
|
||||||
pub width: u32,
|
pub width: u32,
|
||||||
pub height: u32,
|
pub height: u32,
|
||||||
@ -116,14 +137,11 @@ pub struct Frame<'a> {
|
|||||||
_phantom: PhantomData<&'a ImGui>
|
_phantom: PhantomData<&'a ImGui>
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static FMT: &'static [u8] = b"%s\0";
|
||||||
|
|
||||||
|
fn fmt_ptr() -> *const c_char { FMT.as_ptr() as *const c_char }
|
||||||
|
|
||||||
impl<'a> Frame<'a> {
|
impl<'a> Frame<'a> {
|
||||||
pub fn show_test_window(&mut self) -> bool {
|
|
||||||
let mut opened = true;
|
|
||||||
unsafe {
|
|
||||||
ffi::igShowTestWindow(&mut opened);
|
|
||||||
}
|
|
||||||
opened
|
|
||||||
}
|
|
||||||
pub fn render<F, E>(self, mut f: F) -> Result<(), E>
|
pub fn render<F, E>(self, mut f: F) -> Result<(), E>
|
||||||
where F: FnMut(DrawList<'a>) -> Result<(), E> {
|
where F: FnMut(DrawList<'a>) -> Result<(), E> {
|
||||||
unsafe {
|
unsafe {
|
||||||
@ -144,6 +162,53 @@ impl<'a> Frame<'a> {
|
|||||||
}
|
}
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
pub fn show_test_window(&mut self) -> bool {
|
||||||
|
let mut opened = true;
|
||||||
|
unsafe {
|
||||||
|
ffi::igShowTestWindow(&mut opened);
|
||||||
|
}
|
||||||
|
opened
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Widgets
|
||||||
|
impl<'a> Frame<'a> {
|
||||||
|
pub fn text<'b>(&mut self, text: ImStr<'b>) {
|
||||||
|
// TODO: use igTextUnformatted
|
||||||
|
unsafe {
|
||||||
|
ffi::igText(fmt_ptr(), text.as_ptr());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
pub fn text_colored<'b, A>(&mut self, col: A, text: ImStr<'b>) where A: Into<ImVec4> {
|
||||||
|
unsafe {
|
||||||
|
ffi::igTextColored(col.into(), fmt_ptr(), text.as_ptr());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
pub fn text_disabled<'b>(&mut self, text: ImStr<'b>) {
|
||||||
|
unsafe {
|
||||||
|
ffi::igTextDisabled(fmt_ptr(), text.as_ptr());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
pub fn text_wrapped<'b>(&mut self, text: ImStr<'b>) {
|
||||||
|
unsafe {
|
||||||
|
ffi::igTextWrapped(fmt_ptr(), text.as_ptr());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
pub fn label_text<'b>(&mut self, label: ImStr<'b>, text: ImStr<'b>) {
|
||||||
|
unsafe {
|
||||||
|
ffi::igLabelText(label.as_ptr(), fmt_ptr(), text.as_ptr());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
pub fn bullet(&mut self) {
|
||||||
|
unsafe {
|
||||||
|
ffi::igBullet();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
pub fn bullet_text<'b>(&mut self, text: ImStr<'b>) {
|
||||||
|
unsafe {
|
||||||
|
ffi::igBulletText(fmt_ptr(), text.as_ptr());
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
struct RenderDrawListsState(*mut ffi::ImDrawData);
|
struct RenderDrawListsState(*mut ffi::ImDrawData);
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user