Merge pull request #48 from mulimoen/clippy_warnings

Rustfmt and clippy-lints fixes
This commit is contained in:
Joonas Javanainen 2017-04-25 22:32:49 +03:00 committed by GitHub
commit eb53a3a3cd
10 changed files with 286 additions and 222 deletions

View File

@ -27,10 +27,10 @@ fn hello_world<'a>(ui: &Ui<'a>) {
ui.window(im_str!("Hello world")) ui.window(im_str!("Hello world"))
.size((300.0, 100.0), ImGuiSetCond_FirstUseEver) .size((300.0, 100.0), ImGuiSetCond_FirstUseEver)
.build(|| { .build(|| {
ui.text(im_str!("Hello world!")); ui.text(im_str!("Hello world!"));
ui.text(im_str!("This...is...imgui-rs!")); ui.text(im_str!("This...is...imgui-rs!"));
ui.separator(); ui.separator();
let mouse_pos = ui.imgui().mouse_pos(); let mouse_pos = ui.imgui().mouse_pos();
ui.text(im_str!("Mouse Position: ({:.1},{:.1})", mouse_pos.0, mouse_pos.1)); ui.text(im_str!("Mouse Position: ({:.1},{:.1})", mouse_pos.0, mouse_pos.1));
}) })
} }

View File

@ -18,9 +18,7 @@ pub struct Support {
impl Support { impl Support {
pub fn init() -> Support { pub fn init() -> Support {
let display = glutin::WindowBuilder::new() let display = glutin::WindowBuilder::new().build_glium().unwrap();
.build_glium()
.unwrap();
let mut imgui = ImGui::init(); let mut imgui = ImGui::init();
let renderer = Renderer::init(&mut imgui, &display).unwrap(); let renderer = Renderer::init(&mut imgui, &display).unwrap();
@ -58,13 +56,15 @@ impl Support {
pub fn update_mouse(&mut self) { pub fn update_mouse(&mut self) {
let scale = self.imgui.display_framebuffer_scale(); let scale = self.imgui.display_framebuffer_scale();
self.imgui.set_mouse_pos(self.mouse_pos.0 as f32 / scale.0, self.imgui
self.mouse_pos.1 as f32 / scale.1); .set_mouse_pos(self.mouse_pos.0 as f32 / scale.0,
self.imgui.set_mouse_down(&[self.mouse_pressed.0, self.mouse_pos.1 as f32 / scale.1);
self.mouse_pressed.1, self.imgui
self.mouse_pressed.2, .set_mouse_down(&[self.mouse_pressed.0,
false, self.mouse_pressed.1,
false]); self.mouse_pressed.2,
false,
false]);
self.imgui.set_mouse_wheel(self.mouse_wheel / scale.1); self.imgui.set_mouse_wheel(self.mouse_wheel / scale.1);
self.mouse_wheel = 0.0; self.mouse_wheel = 0.0;
} }
@ -140,9 +140,7 @@ impl Support {
Event::MouseInput(state, MouseButton::Middle) => { Event::MouseInput(state, MouseButton::Middle) => {
self.mouse_pressed.2 = state == ElementState::Pressed self.mouse_pressed.2 = state == ElementState::Pressed
} }
Event::MouseWheel(MouseScrollDelta::LineDelta(_, y), TouchPhase::Moved) => { Event::MouseWheel(MouseScrollDelta::LineDelta(_, y), TouchPhase::Moved) |
self.mouse_wheel = y
}
Event::MouseWheel(MouseScrollDelta::PixelDelta(_, y), TouchPhase::Moved) => { Event::MouseWheel(MouseScrollDelta::PixelDelta(_, y), TouchPhase::Moved) => {
self.mouse_wheel = y self.mouse_wheel = y
} }

View File

@ -197,40 +197,42 @@ fn show_test_window<'a>(ui: &Ui<'a>, state: &mut State, opened: &mut bool) {
ui.menu_bar(|| { ui.menu_bar(|| {
ui.menu(im_str!("Menu")) ui.menu(im_str!("Menu"))
.build(|| { show_example_menu_file(ui, &mut state.file_menu); }); .build(|| { show_example_menu_file(ui, &mut state.file_menu); });
ui.menu(im_str!("Examples")).build(|| { ui.menu(im_str!("Examples"))
ui.menu_item(im_str!("Main menu bar")) .build(|| {
.selected(&mut state.show_app_main_menu_bar) ui.menu_item(im_str!("Main menu bar"))
.build(); .selected(&mut state.show_app_main_menu_bar)
ui.menu_item(im_str!("Console")) .build();
.selected(&mut state.show_app_console) ui.menu_item(im_str!("Console"))
.build(); .selected(&mut state.show_app_console)
ui.menu_item(im_str!("Simple layout")) .build();
.selected(&mut state.show_app_layout) ui.menu_item(im_str!("Simple layout"))
.build(); .selected(&mut state.show_app_layout)
ui.menu_item(im_str!("Long text display")) .build();
.selected(&mut state.show_app_long_text) ui.menu_item(im_str!("Long text display"))
.build(); .selected(&mut state.show_app_long_text)
ui.menu_item(im_str!("Auto-resizing window")) .build();
.selected(&mut state.show_app_auto_resize) ui.menu_item(im_str!("Auto-resizing window"))
.build(); .selected(&mut state.show_app_auto_resize)
ui.menu_item(im_str!("Simple overlay")) .build();
.selected(&mut state.show_app_fixed_overlay) ui.menu_item(im_str!("Simple overlay"))
.build(); .selected(&mut state.show_app_fixed_overlay)
ui.menu_item(im_str!("Manipulating window title")) .build();
.selected(&mut state.show_app_manipulating_window_title) ui.menu_item(im_str!("Manipulating window title"))
.build(); .selected(&mut state.show_app_manipulating_window_title)
ui.menu_item(im_str!("Custom rendering")) .build();
.selected(&mut state.show_app_custom_rendering) ui.menu_item(im_str!("Custom rendering"))
.build(); .selected(&mut state.show_app_custom_rendering)
}); .build();
ui.menu(im_str!("Help")).build(|| { });
ui.menu_item(im_str!("Metrics")) ui.menu(im_str!("Help"))
.selected(&mut state.show_app_metrics) .build(|| {
.build(); ui.menu_item(im_str!("Metrics"))
ui.menu_item(im_str!("About ImGui")) .selected(&mut state.show_app_metrics)
.selected(&mut state.show_app_about) .build();
.build(); ui.menu_item(im_str!("About ImGui"))
}); .selected(&mut state.show_app_about)
.build();
});
}); });
ui.spacing(); ui.spacing();
if ui.collapsing_header(im_str!("Help")).build() { if ui.collapsing_header(im_str!("Help")).build() {
@ -252,46 +254,53 @@ fn show_test_window<'a>(ui: &Ui<'a>, state: &mut State, opened: &mut bool) {
ui.same_line(300.0); ui.same_line(300.0);
ui.checkbox(im_str!("no collapse"), &mut state.no_collapse); ui.checkbox(im_str!("no collapse"), &mut state.no_collapse);
ui.checkbox(im_str!("no menu"), &mut state.no_menu); ui.checkbox(im_str!("no menu"), &mut state.no_menu);
ui.slider_float(im_str!("bg alpha"), &mut state.bg_alpha, 0.0, 1.0).build(); ui.slider_float(im_str!("bg alpha"), &mut state.bg_alpha, 0.0, 1.0)
.build();
ui.tree_node(im_str!("Style")).build(|| { ui.tree_node(im_str!("Style"))
// TODO: Reimplement style editor .build(|| {
ui.show_default_style_editor(); // TODO: Reimplement style editor
}); ui.show_default_style_editor();
});
ui.tree_node(im_str!("Fonts")) ui.tree_node(im_str!("Fonts"))
.label(im_str!("Fonts ({})", "TODO")) .label(im_str!("Fonts ({})", "TODO"))
.build(|| { .build(|| {
ui.text_wrapped(im_str!("Tip: Load fonts with \ ui.text_wrapped(im_str!("Tip: Load fonts with \
io.Fonts->AddFontFromFileTTF().")); io.Fonts->AddFontFromFileTTF()."));
ui.tree_node(im_str!("Atlas texture")).build(|| { ui.tree_node(im_str!("Atlas texture"))
// TODO .build(|| {
}); // TODO
}); });
});
} }
if ui.collapsing_header(im_str!("Widgets")).build() { if ui.collapsing_header(im_str!("Widgets")).build() {
ui.tree_node(im_str!("Tree")).build(|| for i in 0..5 { ui.tree_node(im_str!("Tree"))
ui.tree_node(im_str!("Child {}", i)).build(|| { .build(|| for i in 0..5 {
ui.text(im_str!("blah blah")); ui.tree_node(im_str!("Child {}", i))
ui.same_line(0.0); .build(|| {
if ui.small_button(im_str!("print")) { ui.text(im_str!("blah blah"));
println!("Child {} pressed", i); ui.same_line(0.0);
} if ui.small_button(im_str!("print")) {
}); println!("Child {} pressed", i);
}); }
ui.tree_node(im_str!("Bullets")).build(|| { });
ui.bullet_text(im_str!("Bullet point 1")); });
ui.bullet_text(im_str!("Bullet point 2\nOn multiple lines")); ui.tree_node(im_str!("Bullets"))
ui.bullet(); .build(|| {
ui.text(im_str!("Bullet point 3 (two calls)")); ui.bullet_text(im_str!("Bullet point 1"));
ui.bullet_text(im_str!("Bullet point 2\nOn multiple lines"));
ui.bullet();
ui.text(im_str!("Bullet point 3 (two calls)"));
ui.bullet(); ui.bullet();
ui.small_button(im_str!("Button")); ui.small_button(im_str!("Button"));
}); });
ui.tree_node(im_str!("Colored text")).build(|| { ui.tree_node(im_str!("Colored text"))
ui.text_colored((1.0, 0.0, 1.0, 1.0), im_str!("Pink")); .build(|| {
ui.text_colored((1.0, 1.0, 0.0, 1.0), im_str!("Yellow")); ui.text_colored((1.0, 0.0, 1.0, 1.0), im_str!("Pink"));
ui.text_disabled(im_str!("Disabled")); ui.text_colored((1.0, 1.0, 0.0, 1.0), im_str!("Yellow"));
}); ui.text_disabled(im_str!("Disabled"));
});
ui.tree_node(im_str!("Word Wrapping")).build(|| { ui.tree_node(im_str!("Word Wrapping")).build(|| {
ui.text_wrapped(im_str!("This text should automatically wrap on the edge of \ ui.text_wrapped(im_str!("This text should automatically wrap on the edge of \
the window.The current implementation for text \ the window.The current implementation for text \
@ -309,16 +318,18 @@ fn show_test_window<'a>(ui: &Ui<'a>, state: &mut State, opened: &mut bool) {
ui.text(im_str!("Test paragraph 2:")); ui.text(im_str!("Test paragraph 2:"));
// TODO // TODO
}); });
ui.tree_node(im_str!("UTF-8 Text")).build(|| { ui.tree_node(im_str!("UTF-8 Text"))
ui.text_wrapped(im_str!("CJK text will only appear if the font was loaded \ .build(|| {
ui.text_wrapped(im_str!("CJK text will only appear if the font was loaded \
with theappropriate CJK character ranges. Call \ with theappropriate CJK character ranges. Call \
io.Font->LoadFromFileTTF()manually to load extra \ io.Font->LoadFromFileTTF()manually to load extra \
character ranges.")); character ranges."));
ui.text(im_str!("Hiragana: かきくけこ (kakikukeko)")); ui.text(im_str!("Hiragana: かきくけこ (kakikukeko)"));
ui.text(im_str!("Kanjis: 日本語 (nihongo)")); ui.text(im_str!("Kanjis: 日本語 (nihongo)"));
ui.input_text(im_str!("UTF-8 input"), &mut state.buf).build(); ui.input_text(im_str!("UTF-8 input"), &mut state.buf)
}); .build();
});
ui.separator(); ui.separator();
ui.label_text(im_str!("label"), im_str!("Value")); ui.label_text(im_str!("label"), im_str!("Value"));
@ -342,108 +353,148 @@ fn show_test_window<'a>(ui: &Ui<'a>, state: &mut State, opened: &mut bool) {
im_str!("JJJJ"), im_str!("JJJJ"),
im_str!("KKKK")]; im_str!("KKKK")];
ui.combo(im_str!("combo scroll"), &mut state.item2, &items, -1); ui.combo(im_str!("combo scroll"), &mut state.item2, &items, -1);
ui.input_text(im_str!("input text"), &mut state.text).build(); ui.input_text(im_str!("input text"), &mut state.text)
.build();
ui.input_int(im_str!("input int"), &mut state.i0).build(); ui.input_int(im_str!("input int"), &mut state.i0).build();
ui.input_float(im_str!("input float"), &mut state.f0) ui.input_float(im_str!("input float"), &mut state.f0)
.step(0.01) .step(0.01)
.step_fast(1.0) .step_fast(1.0)
.build(); .build();
ui.input_float3(im_str!("input float3"), &mut state.vec3f).build(); ui.input_float3(im_str!("input float3"), &mut state.vec3f)
ui.color_edit3(im_str!("color 1"), &mut state.col1).build(); .build();
ui.color_edit4(im_str!("color 2"), &mut state.col2).build(); ui.color_edit3(im_str!("color 1"), &mut state.col1)
.build();
ui.color_edit4(im_str!("color 2"), &mut state.col2)
.build();
ui.tree_node(im_str!("Multi-component Widgets")).build(|| { ui.tree_node(im_str!("Multi-component Widgets"))
ui.input_float2(im_str!("input float2"), &mut state.vec2f).build(); .build(|| {
ui.input_int2(im_str!("input int2"), &mut state.vec2i).build(); ui.input_float2(im_str!("input float2"), &mut state.vec2f)
ui.spacing(); .build();
ui.input_int2(im_str!("input int2"), &mut state.vec2i)
.build();
ui.spacing();
ui.input_float3(im_str!("input float3"), &mut state.vec3f).build(); ui.input_float3(im_str!("input float3"), &mut state.vec3f)
ui.input_int3(im_str!("input int3"), &mut state.vec3i).build(); .build();
ui.spacing(); ui.input_int3(im_str!("input int3"), &mut state.vec3i)
}); .build();
ui.spacing();
});
} }
if ui.collapsing_header(im_str!("Popups & Modal windows")).build() { if ui.collapsing_header(im_str!("Popups & Modal windows"))
ui.tree_node(im_str!("Popups")).build(|| { .build() {
ui.text_wrapped(im_str!("When a popup is active, it inhibits interacting \ ui.tree_node(im_str!("Popups"))
.build(|| {
ui.text_wrapped(im_str!("When a popup is active, it inhibits interacting \
with windows that are behind the popup. Clicking \ with windows that are behind the popup. Clicking \
outside the popup closes it.")); outside the popup closes it."));
let names = [im_str!("Bream"), let names = [im_str!("Bream"),
im_str!("Haddock"), im_str!("Haddock"),
im_str!("Mackerel"), im_str!("Mackerel"),
im_str!("Pollock"), im_str!("Pollock"),
im_str!("Tilefish")]; im_str!("Tilefish")];
if ui.small_button(im_str!("Select..")) { if ui.small_button(im_str!("Select..")) {
ui.open_popup(im_str!("select")); ui.open_popup(im_str!("select"));
}
ui.same_line(0.0);
ui.text(match state.selected_fish {
Some(index) => names[index].clone(),
None => im_str!("<None>"),
});
ui.popup(im_str!("select"), || {
ui.text(im_str!("Aquarium"));
ui.separator();
for (index, name) in names.iter().enumerate() {
if ui.selectable(name.clone(),
false,
ImGuiSelectableFlags::empty(),
ImVec2::new(0.0, 0.0)) {
state.selected_fish = Some(index);
}
} }
ui.same_line(0.0);
ui.text(match state.selected_fish {
Some(index) => names[index].clone(),
None => im_str!("<None>"),
});
ui.popup(im_str!("select"), || {
ui.text(im_str!("Aquarium"));
ui.separator();
for (index, name) in names.iter().enumerate() {
if ui.selectable(name.clone(),
false,
ImGuiSelectableFlags::empty(),
ImVec2::new(0.0, 0.0)) {
state.selected_fish = Some(index);
}
}
});
}); });
});
} }
}) })
} }
fn show_example_app_main_menu_bar<'a>(ui: &Ui<'a>, state: &mut State) { fn show_example_app_main_menu_bar<'a>(ui: &Ui<'a>, state: &mut State) {
ui.main_menu_bar(|| { ui.main_menu_bar(|| {
ui.menu(im_str!("File")).build(|| { show_example_menu_file(ui, &mut state.file_menu); }); ui.menu(im_str!("File"))
ui.menu(im_str!("Edit")).build(|| { .build(|| { show_example_menu_file(ui, &mut state.file_menu); });
ui.menu_item(im_str!("Undo")).shortcut(im_str!("CTRL+Z")).build(); ui.menu(im_str!("Edit"))
ui.menu_item(im_str!("Redo")) .build(|| {
.shortcut(im_str!("CTRL+Y")) ui.menu_item(im_str!("Undo"))
.enabled(false) .shortcut(im_str!("CTRL+Z"))
.build(); .build();
ui.separator(); ui.menu_item(im_str!("Redo"))
ui.menu_item(im_str!("Cut")).shortcut(im_str!("CTRL+X")).build(); .shortcut(im_str!("CTRL+Y"))
ui.menu_item(im_str!("Copy")).shortcut(im_str!("CTRL+C")).build(); .enabled(false)
ui.menu_item(im_str!("Paste")).shortcut(im_str!("CTRL+V")).build(); .build();
}); ui.separator();
ui.menu_item(im_str!("Cut"))
.shortcut(im_str!("CTRL+X"))
.build();
ui.menu_item(im_str!("Copy"))
.shortcut(im_str!("CTRL+C"))
.build();
ui.menu_item(im_str!("Paste"))
.shortcut(im_str!("CTRL+V"))
.build();
});
}); });
} }
fn show_example_menu_file<'a>(ui: &Ui<'a>, state: &mut FileMenuState) { fn show_example_menu_file<'a>(ui: &Ui<'a>, state: &mut FileMenuState) {
ui.menu_item(im_str!("(dummy menu)")).enabled(false).build(); ui.menu_item(im_str!("(dummy menu)"))
.enabled(false)
.build();
ui.menu_item(im_str!("New")).build(); ui.menu_item(im_str!("New")).build();
ui.menu_item(im_str!("Open")).shortcut(im_str!("Ctrl+O")).build(); ui.menu_item(im_str!("Open"))
ui.menu(im_str!("Open Recent")).build(|| { .shortcut(im_str!("Ctrl+O"))
ui.menu_item(im_str!("fish_hat.c")).build(); .build();
ui.menu_item(im_str!("fish_hat.inl")).build(); ui.menu(im_str!("Open Recent"))
ui.menu_item(im_str!("fish_hat.h")).build(); .build(|| {
ui.menu(im_str!("More..")).build(|| { ui.menu_item(im_str!("fish_hat.c")).build();
ui.menu_item(im_str!("Hello")).build(); ui.menu_item(im_str!("fish_hat.inl")).build();
ui.menu_item(im_str!("Sailor")).build(); ui.menu_item(im_str!("fish_hat.h")).build();
ui.menu(im_str!("Recurse..")).build(|| { show_example_menu_file(ui, state); }); ui.menu(im_str!("More.."))
.build(|| {
ui.menu_item(im_str!("Hello")).build();
ui.menu_item(im_str!("Sailor")).build();
ui.menu(im_str!("Recurse.."))
.build(|| { show_example_menu_file(ui, state); });
});
}); });
}); ui.menu_item(im_str!("Save"))
ui.menu_item(im_str!("Save")).shortcut(im_str!("Ctrl+S")).build(); .shortcut(im_str!("Ctrl+S"))
.build();
ui.menu_item(im_str!("Save As..")).build(); ui.menu_item(im_str!("Save As..")).build();
ui.separator(); ui.separator();
ui.menu(im_str!("Options")).build(|| { ui.menu(im_str!("Options"))
ui.menu_item(im_str!("Enabled")).selected(&mut state.enabled).build(); .build(|| {
// TODO ui.menu_item(im_str!("Enabled"))
}); .selected(&mut state.enabled)
ui.menu(im_str!("Colors")).build(|| { .build();
// TODO // TODO
}); });
ui.menu(im_str!("Disabled")).enabled(false).build(|| { ui.menu(im_str!("Colors"))
unreachable!(); .build(|| {
}); // TODO
});
ui.menu(im_str!("Disabled"))
.enabled(false)
.build(|| {
unreachable!();
});
let mut checked = true; let mut checked = true;
ui.menu_item(im_str!("Checked")).selected(&mut checked).build(); ui.menu_item(im_str!("Checked"))
ui.menu_item(im_str!("Quit")).shortcut(im_str!("Alt+F4")).build(); .selected(&mut checked)
.build();
ui.menu_item(im_str!("Quit"))
.shortcut(im_str!("Alt+F4"))
.build();
} }
fn show_example_app_auto_resize<'a>(ui: &Ui<'a>, state: &mut AutoResizeState, opened: &mut bool) { fn show_example_app_auto_resize<'a>(ui: &Ui<'a>, state: &mut AutoResizeState, opened: &mut bool) {
@ -454,7 +505,8 @@ fn show_example_app_auto_resize<'a>(ui: &Ui<'a>, state: &mut AutoResizeState, op
ui.text(im_str!("Window will resize every-ui to the size of its content. ui.text(im_str!("Window will resize every-ui to the size of its content.
Note that you probably don't want to query the window size to Note that you probably don't want to query the window size to
output your content because that would create a feedback loop.")); output your content because that would create a feedback loop."));
ui.slider_int(im_str!("Number of lines"), &mut state.lines, 1, 20).build(); ui.slider_int(im_str!("Number of lines"), &mut state.lines, 1, 20)
.build();
for i in 0..state.lines { for i in 0..state.lines {
ui.text(im_str!("{:2$}This is line {}", "", i, i as usize * 4)); ui.text(im_str!("{:2$}This is line {}", "", i, i as usize * 4));
} }
@ -470,26 +522,26 @@ fn show_example_app_fixed_overlay<'a>(ui: &Ui<'a>, opened: &mut bool) {
.movable(false) .movable(false)
.save_settings(false) .save_settings(false)
.build(|| { .build(|| {
ui.text(im_str!("Simple overlay\non the top-left side of the screen.")); ui.text(im_str!("Simple overlay\non the top-left side of the screen."));
ui.separator(); ui.separator();
let mouse_pos = ui.imgui().mouse_pos(); let mouse_pos = ui.imgui().mouse_pos();
ui.text(im_str!("Mouse Position: ({:.1},{:.1})", mouse_pos.0, mouse_pos.1)); ui.text(im_str!("Mouse Position: ({:.1},{:.1})", mouse_pos.0, mouse_pos.1));
}) })
} }
fn show_example_app_manipulating_window_title<'a>(ui: &Ui<'a>) { fn show_example_app_manipulating_window_title<'a>(ui: &Ui<'a>) {
ui.window(im_str!("Same title as another window##1")) ui.window(im_str!("Same title as another window##1"))
.position((100.0, 100.0), ImGuiSetCond_FirstUseEver) .position((100.0, 100.0), ImGuiSetCond_FirstUseEver)
.build(|| { .build(|| {
ui.text(im_str!("This is window 1. ui.text(im_str!("This is window 1.
My title is the same as window 2, but my identifier is unique.")); My title is the same as window 2, but my identifier is unique."));
}); });
ui.window(im_str!("Same title as another window##2")) ui.window(im_str!("Same title as another window##2"))
.position((100.0, 200.0), ImGuiSetCond_FirstUseEver) .position((100.0, 200.0), ImGuiSetCond_FirstUseEver)
.build(|| { .build(|| {
ui.text(im_str!("This is window 2. ui.text(im_str!("This is window 2.
My title is the same as window 1, but my identifier is unique.")); My title is the same as window 1, but my identifier is unique."));
}); });
let chars = ['|', '/', '-', '\\']; let chars = ['|', '/', '-', '\\'];
let ch_idx = (ui.imgui().get_time() / 0.25) as usize & 3; let ch_idx = (ui.imgui().get_time() / 0.25) as usize & 3;
let num = ui.imgui().get_frame_count(); // The C++ version uses rand() here let num = ui.imgui().get_frame_count(); // The C++ version uses rand() here

View File

@ -9,7 +9,8 @@ use super::{ImGuiInputTextFlags,
ImGuiInputTextFlags_CallbackCompletion, ImGuiInputTextFlags_CallbackHistory, ImGuiInputTextFlags_CallbackCompletion, ImGuiInputTextFlags_CallbackHistory,
ImGuiInputTextFlags_CharsDecimal, ImGuiInputTextFlags_CharsHexadecimal, ImGuiInputTextFlags_CharsDecimal, ImGuiInputTextFlags_CharsHexadecimal,
ImGuiInputTextFlags_CharsNoBlank, ImGuiInputTextFlags_CharsUppercase, ImGuiInputTextFlags_CharsNoBlank, ImGuiInputTextFlags_CharsUppercase,
ImGuiInputTextFlags_EnterReturnsTrue, ImGuiInputTextFlags_NoHorizontalScroll, ImStr, Ui}; ImGuiInputTextFlags_EnterReturnsTrue, ImGuiInputTextFlags_NoHorizontalScroll, ImStr,
Ui};
macro_rules! impl_text_flags { macro_rules! impl_text_flags {
($InputType:ident) => { ($InputType:ident) => {

View File

@ -29,15 +29,16 @@ pub use imgui_sys::{ImDrawIdx, ImDrawVert, ImGuiInputTextFlags, ImGuiInputTextFl
ImGuiTreeNodeFlags_Selected, ImGuiWindowFlags, ImGuiTreeNodeFlags_Selected, ImGuiWindowFlags,
ImGuiWindowFlags_AlwaysAutoResize, ImGuiWindowFlags_AlwaysHorizontalScrollbar, ImGuiWindowFlags_AlwaysAutoResize, ImGuiWindowFlags_AlwaysHorizontalScrollbar,
ImGuiWindowFlags_AlwaysUseWindowPadding, ImGuiWindowFlags_AlwaysUseWindowPadding,
ImGuiWindowFlags_AlwaysVerticalScrollbar, ImGuiWindowFlags_HorizontalScrollbar, ImGuiWindowFlags_AlwaysVerticalScrollbar,
ImGuiWindowFlags_MenuBar, ImGuiWindowFlags_NoBringToFrontOnFocus, ImGuiWindowFlags_HorizontalScrollbar, ImGuiWindowFlags_MenuBar,
ImGuiWindowFlags_NoCollapse, ImGuiWindowFlags_NoFocusOnAppearing, ImGuiWindowFlags_NoBringToFrontOnFocus, ImGuiWindowFlags_NoCollapse,
ImGuiWindowFlags_NoInputs, ImGuiWindowFlags_NoMove, ImGuiWindowFlags_NoResize, ImGuiWindowFlags_NoFocusOnAppearing, ImGuiWindowFlags_NoInputs,
ImGuiWindowFlags_NoMove, ImGuiWindowFlags_NoResize,
ImGuiWindowFlags_NoSavedSettings, ImGuiWindowFlags_NoScrollWithMouse, ImGuiWindowFlags_NoSavedSettings, ImGuiWindowFlags_NoScrollWithMouse,
ImGuiWindowFlags_NoScrollbar, ImGuiWindowFlags_NoTitleBar, ImGuiWindowFlags_NoScrollbar, ImGuiWindowFlags_NoTitleBar,
ImGuiWindowFlags_ShowBorders, ImVec2, ImVec4}; ImGuiWindowFlags_ShowBorders, ImVec2, ImVec4};
pub use input::{ColorEdit3, ColorEdit4, InputFloat, InputFloat2, InputFloat3, InputFloat4, InputInt, pub use input::{ColorEdit3, ColorEdit4, InputFloat, InputFloat2, InputFloat3, InputFloat4,
InputInt2, InputInt3, InputInt4, InputText}; InputInt, InputInt2, InputInt3, InputInt4, InputText};
pub use menus::{Menu, MenuItem}; pub use menus::{Menu, MenuItem};
pub use plothistogram::PlotHistogram; pub use plothistogram::PlotHistogram;
pub use plotlines::PlotLines; pub use plotlines::PlotLines;
@ -121,14 +122,10 @@ impl ImGui {
log_filename: None, log_filename: None,
} }
} }
fn io(&self) -> &imgui_sys::ImGuiIO { unsafe { mem::transmute(imgui_sys::igGetIO()) } } fn io(&self) -> &imgui_sys::ImGuiIO { unsafe { &*imgui_sys::igGetIO() } }
fn io_mut(&mut self) -> &mut imgui_sys::ImGuiIO { fn io_mut(&mut self) -> &mut imgui_sys::ImGuiIO { unsafe { &mut *imgui_sys::igGetIO() } }
unsafe { mem::transmute(imgui_sys::igGetIO()) } pub fn style(&self) -> &ImGuiStyle { unsafe { &*imgui_sys::igGetStyle() } }
} pub fn style_mut(&mut self) -> &mut ImGuiStyle { unsafe { &mut *imgui_sys::igGetStyle() } }
pub fn style(&self) -> &ImGuiStyle { unsafe { mem::transmute(imgui_sys::igGetStyle()) } }
pub fn style_mut(&self) -> &mut ImGuiStyle {
unsafe { mem::transmute(imgui_sys::igGetStyle()) }
}
pub fn prepare_texture<'a, F, T>(&mut self, f: F) -> T pub fn prepare_texture<'a, F, T>(&mut self, f: F) -> T
where F: FnOnce(TextureHandle<'a>) -> T where F: FnOnce(TextureHandle<'a>) -> T
{ {
@ -144,10 +141,11 @@ impl ImGui {
&mut height, &mut height,
&mut bytes_per_pixel); &mut bytes_per_pixel);
f(TextureHandle { f(TextureHandle {
width: width as u32, width: width as u32,
height: height as u32, height: height as u32,
pixels: slice::from_raw_parts(pixels, (width * height * bytes_per_pixel) as usize), pixels: slice::from_raw_parts(pixels,
}) (width * height * bytes_per_pixel) as usize),
})
} }
} }
pub fn set_texture_id(&mut self, value: usize) { pub fn set_texture_id(&mut self, value: usize) {
@ -411,7 +409,9 @@ impl<'ui> Ui<'ui> {
pub fn pop_item_width(&self) { unsafe { imgui_sys::igPopItemWidth() } } pub fn pop_item_width(&self) { unsafe { imgui_sys::igPopItemWidth() } }
/// Runs a function after temporarily pushing a value to the item width stack. /// Runs a function after temporarily pushing a value to the item width stack.
pub fn with_item_width<F>(&self, width: f32, f: F) where F: FnOnce() { pub fn with_item_width<F>(&self, width: f32, f: F)
where F: FnOnce()
{
self.push_item_width(width); self.push_item_width(width);
f(); f();
self.pop_item_width(); self.pop_item_width();
@ -450,20 +450,18 @@ impl<'ui> Ui<'ui> {
// ID scopes // ID scopes
impl<'ui> Ui<'ui> { impl<'ui> Ui<'ui> {
/// Pushes an identifier to the ID stack. /// Pushes an identifier to the ID stack.
pub fn push_id(&self, id: i32) { pub fn push_id(&self, id: i32) { unsafe { imgui_sys::igPushIdInt(id) }; }
unsafe { imgui_sys::igPushIdInt(id) };
}
/// Pops an identifier from the ID stack. /// Pops an identifier from the ID stack.
/// ///
/// # Aborts /// # Aborts
/// The current process is aborted if the ID stack is empty. /// The current process is aborted if the ID stack is empty.
pub fn pop_id(&self) { pub fn pop_id(&self) { unsafe { imgui_sys::igPopId() }; }
unsafe { imgui_sys::igPopId() };
}
/// Runs a function after temporarily pushing a value to the ID stack. /// Runs a function after temporarily pushing a value to the ID stack.
pub fn with_id<F>(&self, id: i32, f: F) where F: FnOnce() { pub fn with_id<F>(&self, id: i32, f: F)
where F: FnOnce()
{
self.push_id(id); self.push_id(id);
f(); f();
self.pop_id(); self.pop_id();
@ -765,7 +763,5 @@ impl<'ui> Ui<'ui> {
/// .overlay_text(im_str!("Progress!")) /// .overlay_text(im_str!("Progress!"))
/// .build(); /// .build();
/// ``` /// ```
pub fn progress_bar<'p>(&self, fraction: f32) -> ProgressBar<'p> { pub fn progress_bar<'p>(&self, fraction: f32) -> ProgressBar<'p> { ProgressBar::new(fraction) }
ProgressBar::new(fraction)
}
} }

View File

@ -70,7 +70,9 @@ impl<'ui, 'p> MenuItem<'ui, 'p> {
pub fn build(self) -> bool { pub fn build(self) -> bool {
let label = self.label.as_ptr(); let label = self.label.as_ptr();
let shortcut = self.shortcut.map(|x| x.as_ptr()).unwrap_or(ptr::null()); let shortcut = self.shortcut.map(|x| x.as_ptr()).unwrap_or(ptr::null());
let selected = self.selected.map(|x| x as *mut bool).unwrap_or(ptr::null_mut()); let selected = self.selected
.map(|x| x as *mut bool)
.unwrap_or(ptr::null_mut());
let enabled = self.enabled; let enabled = self.enabled;
unsafe { imgui_sys::igMenuItemPtr(label, shortcut, selected, enabled) } unsafe { imgui_sys::igMenuItemPtr(label, shortcut, selected, enabled) }
} }

View File

@ -63,7 +63,9 @@ impl<'p> PlotLines<'p> {
self.values.as_ptr() as *const c_float, self.values.as_ptr() as *const c_float,
self.values.len() as i32, self.values.len() as i32,
self.values_offset as i32, self.values_offset as i32,
self.overlay_text.map(|x| x.as_ptr()).unwrap_or(ptr::null()), self.overlay_text
.map(|x| x.as_ptr())
.unwrap_or(ptr::null()),
self.scale_min, self.scale_min,
self.scale_max, self.scale_max,
self.graph_size, self.graph_size,

View File

@ -49,7 +49,9 @@ impl<'p> ProgressBar<'p> {
unsafe { unsafe {
imgui_sys::igProgressBar(self.fraction, imgui_sys::igProgressBar(self.fraction,
&self.size, &self.size,
self.overlay_text.map(|x| x.as_ptr()).unwrap_or(ptr::null())); self.overlay_text
.map(|x| x.as_ptr())
.unwrap_or(ptr::null()));
} }
} }
} }

View File

@ -2,8 +2,9 @@ use imgui_sys;
use std::marker::PhantomData; use std::marker::PhantomData;
use super::{ImGuiSetCond, ImGuiTreeNodeFlags, ImGuiTreeNodeFlags_Bullet, use super::{ImGuiSetCond, ImGuiTreeNodeFlags, ImGuiTreeNodeFlags_Bullet,
ImGuiTreeNodeFlags_DefaultOpen, ImGuiTreeNodeFlags_Leaf, ImGuiTreeNodeFlags_OpenOnArrow, ImGuiTreeNodeFlags_DefaultOpen, ImGuiTreeNodeFlags_Leaf,
ImGuiTreeNodeFlags_OpenOnDoubleClick, ImGuiTreeNodeFlags_Selected, ImStr, Ui}; ImGuiTreeNodeFlags_OpenOnArrow, ImGuiTreeNodeFlags_OpenOnDoubleClick,
ImGuiTreeNodeFlags_Selected, ImStr, Ui};
#[must_use] #[must_use]
pub struct TreeNode<'ui, 'p> { pub struct TreeNode<'ui, 'p> {
@ -85,7 +86,8 @@ impl<'ui, 'p> CollapsingHeader<'ui, 'p> {
} }
#[inline] #[inline]
pub fn open_on_double_click(mut self, value: bool) -> Self { pub fn open_on_double_click(mut self, value: bool) -> Self {
self.flags.set(ImGuiTreeNodeFlags_OpenOnDoubleClick, value); self.flags
.set(ImGuiTreeNodeFlags_OpenOnDoubleClick, value);
self self
} }
#[inline] #[inline]

View File

@ -9,8 +9,8 @@ use super::{ImGuiSetCond, ImGuiWindowFlags, ImGuiWindowFlags_AlwaysAutoResize,
ImGuiWindowFlags_NoCollapse, ImGuiWindowFlags_NoFocusOnAppearing, ImGuiWindowFlags_NoCollapse, ImGuiWindowFlags_NoFocusOnAppearing,
ImGuiWindowFlags_NoInputs, ImGuiWindowFlags_NoMove, ImGuiWindowFlags_NoResize, ImGuiWindowFlags_NoInputs, ImGuiWindowFlags_NoMove, ImGuiWindowFlags_NoResize,
ImGuiWindowFlags_NoSavedSettings, ImGuiWindowFlags_NoScrollWithMouse, ImGuiWindowFlags_NoSavedSettings, ImGuiWindowFlags_NoScrollWithMouse,
ImGuiWindowFlags_NoScrollbar, ImGuiWindowFlags_NoTitleBar, ImGuiWindowFlags_ShowBorders, ImGuiWindowFlags_NoScrollbar, ImGuiWindowFlags_NoTitleBar,
ImStr, ImVec2, Ui}; ImGuiWindowFlags_ShowBorders, ImStr, ImVec2, Ui};
#[must_use] #[must_use]
pub struct Window<'ui, 'p> { pub struct Window<'ui, 'p> {
@ -88,7 +88,8 @@ impl<'ui, 'p> Window<'ui, 'p> {
} }
#[inline] #[inline]
pub fn scrollable(mut self, value: bool) -> Self { pub fn scrollable(mut self, value: bool) -> Self {
self.flags.set(ImGuiWindowFlags_NoScrollWithMouse, !value); self.flags
.set(ImGuiWindowFlags_NoScrollWithMouse, !value);
self self
} }
#[inline] #[inline]
@ -123,32 +124,38 @@ impl<'ui, 'p> Window<'ui, 'p> {
} }
#[inline] #[inline]
pub fn horizontal_scrollbar(mut self, value: bool) -> Self { pub fn horizontal_scrollbar(mut self, value: bool) -> Self {
self.flags.set(ImGuiWindowFlags_HorizontalScrollbar, value); self.flags
.set(ImGuiWindowFlags_HorizontalScrollbar, value);
self self
} }
#[inline] #[inline]
pub fn no_focus_on_appearing(mut self, value: bool) -> Self { pub fn no_focus_on_appearing(mut self, value: bool) -> Self {
self.flags.set(ImGuiWindowFlags_NoFocusOnAppearing, value); self.flags
.set(ImGuiWindowFlags_NoFocusOnAppearing, value);
self self
} }
#[inline] #[inline]
pub fn no_bring_to_front_on_focus(mut self, value: bool) -> Self { pub fn no_bring_to_front_on_focus(mut self, value: bool) -> Self {
self.flags.set(ImGuiWindowFlags_NoBringToFrontOnFocus, value); self.flags
.set(ImGuiWindowFlags_NoBringToFrontOnFocus, value);
self self
} }
#[inline] #[inline]
pub fn always_vertical_scrollbar(mut self, value: bool) -> Self { pub fn always_vertical_scrollbar(mut self, value: bool) -> Self {
self.flags.set(ImGuiWindowFlags_AlwaysVerticalScrollbar, value); self.flags
.set(ImGuiWindowFlags_AlwaysVerticalScrollbar, value);
self self
} }
#[inline] #[inline]
pub fn always_horizontal_scrollbar(mut self, value: bool) -> Self { pub fn always_horizontal_scrollbar(mut self, value: bool) -> Self {
self.flags.set(ImGuiWindowFlags_AlwaysHorizontalScrollbar, value); self.flags
.set(ImGuiWindowFlags_AlwaysHorizontalScrollbar, value);
self self
} }
#[inline] #[inline]
pub fn always_use_window_padding(mut self, value: bool) -> Self { pub fn always_use_window_padding(mut self, value: bool) -> Self {
self.flags.set(ImGuiWindowFlags_AlwaysUseWindowPadding, value); self.flags
.set(ImGuiWindowFlags_AlwaysUseWindowPadding, value);
self self
} }
pub fn build<F: FnOnce()>(self, f: F) { pub fn build<F: FnOnce()>(self, f: F) {
@ -160,7 +167,9 @@ impl<'ui, 'p> Window<'ui, 'p> {
imgui_sys::igSetNextWindowSize(self.size.into(), self.size_cond); imgui_sys::igSetNextWindowSize(self.size.into(), self.size_cond);
} }
imgui_sys::igBegin2(self.name.as_ptr(), imgui_sys::igBegin2(self.name.as_ptr(),
self.opened.map(|x| x as *mut bool).unwrap_or(ptr::null_mut()), self.opened
.map(|x| x as *mut bool)
.unwrap_or(ptr::null_mut()),
ImVec2::new(0.0, 0.0), ImVec2::new(0.0, 0.0),
self.bg_alpha, self.bg_alpha,
self.flags) self.flags)