diff --git a/README.markdown b/README.markdown index 85c2247..47aa3e9 100644 --- a/README.markdown +++ b/README.markdown @@ -14,14 +14,14 @@ Wrapped Dear ImGui version: 1.66b ```rust ui.window(im_str!("Hello world")) - .size((300.0, 100.0), ImGuiCond::FirstUseEver) + .size([300.0, 100.0], Condition::FirstUseEver) .build(|| { ui.text(im_str!("Hello world!")); ui.text(im_str!("こんにちは世界!")); ui.text(im_str!("This...is...imgui-rs!")); ui.separator(); 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])); }) ``` diff --git a/imgui-examples/Cargo.lock b/imgui-examples/Cargo.lock index d0935d7..677fca6 100644 --- a/imgui-examples/Cargo.lock +++ b/imgui-examples/Cargo.lock @@ -375,46 +375,46 @@ dependencies = [ [[package]] name = "imgui" -version = "0.0.24-pre" +version = "0.1.0-pre" dependencies = [ "bitflags 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)", "glium 0.25.0 (registry+https://github.com/rust-lang/crates.io-index)", - "imgui-sys 0.0.24-pre", + "imgui-sys 0.1.0-pre", "lazy_static 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)", "parking_lot 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "imgui-examples" -version = "0.0.24-pre" +version = "0.1.0-pre" dependencies = [ "glium 0.25.0 (registry+https://github.com/rust-lang/crates.io-index)", "image 0.21.2 (registry+https://github.com/rust-lang/crates.io-index)", - "imgui 0.0.24-pre", - "imgui-glium-renderer 0.0.24-pre", - "imgui-winit-support 0.0.24-pre", + "imgui 0.1.0-pre", + "imgui-glium-renderer 0.1.0-pre", + "imgui-winit-support 0.1.0-pre", ] [[package]] name = "imgui-glium-renderer" -version = "0.0.24-pre" +version = "0.1.0-pre" dependencies = [ "glium 0.25.0 (registry+https://github.com/rust-lang/crates.io-index)", - "imgui 0.0.24-pre", + "imgui 0.1.0-pre", ] [[package]] name = "imgui-sys" -version = "0.0.24-pre" +version = "0.1.0-pre" dependencies = [ "cc 1.0.37 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "imgui-winit-support" -version = "0.0.24-pre" +version = "0.1.0-pre" dependencies = [ - "imgui 0.0.24-pre", + "imgui 0.1.0-pre", "winit 0.19.1 (registry+https://github.com/rust-lang/crates.io-index)", ] diff --git a/imgui-examples/examples/color_button.rs b/imgui-examples/examples/color_button.rs index 16076a2..55fc6dd 100644 --- a/imgui-examples/examples/color_button.rs +++ b/imgui-examples/examples/color_button.rs @@ -39,8 +39,8 @@ fn main() { fn example_selector(state: &mut State, ui: &Ui) { ui.window(im_str!("Color button examples")) - .position((20.0, 20.0), Condition::Appearing) - .size((700.0, 80.0), Condition::Appearing) + .position([20.0, 20.0], Condition::Appearing) + .size([700.0, 80.0], Condition::Appearing) .resizable(false) .build(|| { let ex1 = ui.radio_button(im_str!("Example 1: Basics"), &mut state.example, 1); @@ -53,8 +53,8 @@ fn example_selector(state: &mut State, ui: &Ui) { fn example_1(state: &mut State, ui: &Ui) { ui.window(im_str!("Example 1: Basics")) - .size((700.0, 300.0), Condition::Appearing) - .position((20.0, 120.0), Condition::Appearing) + .size([700.0, 300.0], Condition::Appearing) + .position([20.0, 120.0], Condition::Appearing) .build(|| { ui.text_wrapped(im_str!( "Color button is a widget that displays a color value as a clickable rectangle. \ @@ -65,7 +65,7 @@ fn example_1(state: &mut State, ui: &Ui) { ui.text("This button is black:"); if ui - .color_button(im_str!("Black color"), (0.0, 0.0, 0.0, 1.0)) + .color_button(im_str!("Black color"), [0.0, 0.0, 0.0, 1.0]) .build() { state.notify_text = "*** Black button was clicked"; @@ -73,7 +73,7 @@ fn example_1(state: &mut State, ui: &Ui) { ui.text("This button is red:"); if ui - .color_button(im_str!("Red color"), (1.0, 0.0, 0.0, 1.0)) + .color_button(im_str!("Red color"), [1.0, 0.0, 0.0, 1.0]) .build() { state.notify_text = "*** Red button was clicked"; @@ -81,8 +81,8 @@ fn example_1(state: &mut State, ui: &Ui) { ui.text("This button is BIG because it has a custom size:"); if ui - .color_button(im_str!("Green color"), (0.0, 1.0, 0.0, 1.0)) - .size((100.0, 50.0)) + .color_button(im_str!("Green color"), [0.0, 1.0, 0.0, 1.0]) + .size([100.0, 50.0]) .build() { state.notify_text = "*** BIG button was clicked"; @@ -90,7 +90,7 @@ fn example_1(state: &mut State, ui: &Ui) { ui.text("This button doesn't use the tooltip at all:"); if ui - .color_button(im_str!("No tooltip"), (0.0, 0.0, 1.0, 1.0)) + .color_button(im_str!("No tooltip"), [0.0, 0.0, 1.0, 1.0]) .tooltip(false) .build() { @@ -101,8 +101,8 @@ fn example_1(state: &mut State, ui: &Ui) { fn example_2(ui: &Ui) { ui.window(im_str!("Example 2: Alpha component")) - .size((700.0, 320.0), Condition::Appearing) - .position((20.0, 140.0), Condition::Appearing) + .size([700.0, 320.0], Condition::Appearing) + .position([20.0, 140.0], Condition::Appearing) .build(|| { ui.text_wrapped(im_str!( "The displayed color is passed to the button as four float values between \ @@ -111,7 +111,7 @@ fn example_2(ui: &Ui) { )); ui.text("This button ignores the alpha component:"); - ui.color_button(im_str!("Red color"), (1.0, 0.0, 0.0, 0.5)) + ui.color_button(im_str!("Red color"), [1.0, 0.0, 0.0, 0.5]) .alpha(false) .build(); @@ -127,7 +127,7 @@ fn example_2(ui: &Ui) { ui.text_wrapped(im_str!( "ColorPreview::Opaque (default) doesn't show the alpha component at all" )); - ui.color_button(im_str!("Red + ColorPreview::Opaque"), (1.0, 0.0, 0.0, 0.5)) + ui.color_button(im_str!("Red + ColorPreview::Opaque"), [1.0, 0.0, 0.0, 0.5]) .preview(ColorPreview::Opaque) .build(); @@ -138,7 +138,7 @@ fn example_2(ui: &Ui) { )); ui.color_button( im_str!("Red + ColorPreview::HalfAlpha"), - (1.0, 0.0, 0.0, 0.5), + [1.0, 0.0, 0.0, 0.5], ) .preview(ColorPreview::HalfAlpha) .build(); @@ -148,7 +148,7 @@ fn example_2(ui: &Ui) { "ColorPreview::Alpha uses a checkerboard pattern in the entire color area to \ illustrate the alpha component" )); - ui.color_button(im_str!("Red + ColorPreview::Alpha"), (1.0, 0.0, 0.0, 0.5)) + ui.color_button(im_str!("Red + ColorPreview::Alpha"), [1.0, 0.0, 0.0, 0.5]) .preview(ColorPreview::Alpha) .build(); }); diff --git a/imgui-examples/examples/custom_textures.rs b/imgui-examples/examples/custom_textures.rs index 884c85b..a75936a 100644 --- a/imgui-examples/examples/custom_textures.rs +++ b/imgui-examples/examples/custom_textures.rs @@ -24,7 +24,7 @@ struct CustomTexturesApp { struct Lenna { texture_id: TextureId, - size: (f32, f32), + size: [f32; 2], } impl CustomTexturesApp { @@ -72,12 +72,12 @@ impl CustomTexturesApp { fn show_textures(&self, ui: &Ui) { ui.window(im_str!("Hello textures")) - .size((400.0, 600.0), Condition::FirstUseEver) + .size([400.0, 600.0], Condition::FirstUseEver) .build(|| { ui.text(im_str!("Hello textures!")); if let Some(my_texture_id) = self.my_texture_id { ui.text("Some generated texture"); - ui.image(my_texture_id, (100.0, 100.0)).build(); + ui.image(my_texture_id, [100.0, 100.0]).build(); } if let Some(lenna) = &self.lenna { @@ -109,7 +109,7 @@ impl Lenna { let texture_id = textures.insert(Rc::new(gl_texture)); Ok(Lenna { texture_id, - size: (width as f32, height as f32), + size: [width as f32, height as f32], }) } diff --git a/imgui-examples/examples/hello_world.rs b/imgui-examples/examples/hello_world.rs index dad8a55..1e34925 100644 --- a/imgui-examples/examples/hello_world.rs +++ b/imgui-examples/examples/hello_world.rs @@ -12,7 +12,7 @@ fn main() { fn hello_world<'a>(ui: &Ui<'a>) -> bool { ui.window(im_str!("Hello world")) - .size((300.0, 100.0), Condition::FirstUseEver) + .size([300.0, 100.0], Condition::FirstUseEver) .build(|| { ui.text(im_str!("Hello world!")); ui.text(im_str!("こんにちは世界!")); diff --git a/imgui-examples/examples/support/mod.rs b/imgui-examples/examples/support/mod.rs index f750e1d..50b1925 100644 --- a/imgui-examples/examples/support/mod.rs +++ b/imgui-examples/examples/support/mod.rs @@ -2,7 +2,7 @@ use glium::{ backend::{Context, Facade}, Texture2d, }; -use imgui::{FontGlyphRange, ImFontConfig, self, Ui}; +use imgui::{self, FontGlyphRange, ImFontConfig, Ui}; use imgui_winit_support::{HiDpiMode, WinitPlatform}; use std::rc::Rc; use std::time::Instant; @@ -55,7 +55,8 @@ where imgui.io_mut().font_global_scale = (1.0 / hidpi_factor) as f32; - let mut renderer = GliumRenderer::init(&mut imgui, &display).expect("Failed to initialize renderer"); + let mut renderer = + GliumRenderer::init(&mut imgui, &display).expect("Failed to initialize renderer"); let mut last_frame = Instant::now(); let mut quit = false; diff --git a/imgui-examples/examples/test_drawing_channels_split.rs b/imgui-examples/examples/test_drawing_channels_split.rs index e0d8813..9f8ec2c 100644 --- a/imgui-examples/examples/test_drawing_channels_split.rs +++ b/imgui-examples/examples/test_drawing_channels_split.rs @@ -23,14 +23,14 @@ fn main() { draw_list .add_line( canvas_pos, - [canvas_pos.0 + RADIUS, canvas_pos.1 + RADIUS], + [canvas_pos[0] + RADIUS, canvas_pos[1] + RADIUS], RED, ) .thickness(5.0) .build(); channels.set_current(0); - let center = (canvas_pos.0 + RADIUS, canvas_pos.1 + RADIUS); + let center = [canvas_pos[0] + RADIUS, canvas_pos[1] + RADIUS]; draw_list .add_circle(center, RADIUS, WHITE) .thickness(10.0) diff --git a/imgui-examples/examples/test_window_impl.rs b/imgui-examples/examples/test_window_impl.rs index 631f027..5189bb2 100644 --- a/imgui-examples/examples/test_window_impl.rs +++ b/imgui-examples/examples/test_window_impl.rs @@ -167,7 +167,7 @@ impl Default for AutoResizeState { struct CustomRenderingState { sz: f32, col: [f32; 3], - points: Vec<(f32, f32)>, + points: Vec<[f32; 2]>, adding_line: bool, } @@ -284,7 +284,7 @@ fn show_test_window(ui: &Ui, state: &mut State, opened: &mut bool) { .scroll_bar(!state.no_scrollbar) .collapsible(!state.no_collapse) .menu_bar(!state.no_menu) - .size((550.0, 680.0), Condition::FirstUseEver); + .size([550.0, 680.0], Condition::FirstUseEver); if !state.no_close { window = window.opened(opened) } @@ -390,8 +390,8 @@ fn show_test_window(ui: &Ui, state: &mut State, opened: &mut bool) { ui.small_button(im_str!("Button")); }); ui.tree_node(im_str!("Colored text")).build(|| { - ui.text_colored((1.0, 0.0, 1.0, 1.0), im_str!("Pink")); - 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_colored([1.0, 1.0, 0.0, 1.0], im_str!("Yellow")); ui.text_disabled(im_str!("Disabled")); }); @@ -399,7 +399,7 @@ fn show_test_window(ui: &Ui, state: &mut State, opened: &mut bool) { ui.input_text_multiline( im_str!("multiline"), &mut state.text_multiline, - (300., 100.), + [300., 100.], ).build(); }); @@ -636,7 +636,7 @@ CTRL+click on individual component to input value.\n", name, false, ImGuiSelectableFlags::empty(), - ImVec2::new(0.0, 0.0), + [0.0, 0.0] ) { state.selected_fish = Some(index); } @@ -650,7 +650,7 @@ CTRL+click on individual component to input value.\n", them by clicking outside the window." )); - if ui.button(im_str!("Delete.."), (0.0, 0.0)) { + if ui.button(im_str!("Delete.."), [0.0, 0.0]) { ui.open_popup(im_str!("Delete?")); } ui.popup_modal(im_str!("Delete?")).always_auto_resize(true).build(|| { @@ -659,17 +659,17 @@ CTRL+click on individual component to input value.\n", ui.with_style_var(StyleVar::FramePadding([0.0, 0.0]), || { ui.checkbox(im_str!("Don't ask me next time"), &mut state.dont_ask_me_next_time); - if ui.button(im_str!("OK"), (120.0, 0.0)) { + if ui.button(im_str!("OK"), [120.0, 0.0]) { ui.close_current_popup(); } ui.same_line(0.0); - if ui.button(im_str!("Cancel"), (120.0, 0.0)) { + if ui.button(im_str!("Cancel"), [120.0, 0.0]) { ui.close_current_popup(); } }); }); - if ui.button(im_str!("Stacked modals.."), (0.0, 0.0)) { + if ui.button(im_str!("Stacked modals.."), [0.0, 0.0]) { ui.open_popup(im_str!("Stacked 1")); } ui.popup_modal(im_str!("Stacked 1")).build(|| { @@ -683,17 +683,17 @@ CTRL+click on individual component to input value.\n", ui.color_edit(im_str!("color"), &mut state.stacked_modals_color).build(); - if ui.button(im_str!("Add another modal.."), (0.0, 0.0)) { + if ui.button(im_str!("Add another modal.."), [0.0, 0.0]) { ui.open_popup(im_str!("Stacked 2")) ; } ui.popup_modal(im_str!("Stacked 2")).build(|| { ui.text("Hello from Stacked The Second"); - if ui.button(im_str!("Close"), (0.0, 0.0)) { + if ui.button(im_str!("Close"), [0.0, 0.0]) { ui.close_current_popup(); } }); - if ui.button(im_str!("Close"), (0.0, 0.0)) { + if ui.button(im_str!("Close"), [0.0, 0.0]) { ui.close_current_popup(); } }); @@ -756,7 +756,7 @@ fn show_example_menu_file<'a>(ui: &Ui<'a>, state: &mut FileMenuState) { ui.menu_item(im_str!("Enabled")) .selected(&mut state.enabled) .build(); - ui.child_frame(im_str!("child"), (0.0, 60.0)) + ui.child_frame(im_str!("child"), [0.0, 60.0]) .show_borders(true) .build(|| { for i in 0..10 { @@ -806,7 +806,7 @@ output your content because that would create a feedback loop.", fn show_example_app_fixed_overlay(ui: &Ui, opened: &mut bool) { const DISTANCE: f32 = 10.0; - let window_pos = (DISTANCE, DISTANCE); + let window_pos = [DISTANCE, DISTANCE]; ui.with_color_var(StyleColor::WindowBg, [0.0, 0.0, 0.0, 0.3], || { ui.window(im_str!("Example: Fixed Overlay")) .opened(opened) @@ -830,7 +830,7 @@ fn show_example_app_fixed_overlay(ui: &Ui, opened: &mut bool) { fn show_example_app_manipulating_window_title(ui: &Ui) { ui.window(im_str!("Same title as another window##1")) - .position((100.0, 100.0), Condition::FirstUseEver) + .position([100.0, 100.0], Condition::FirstUseEver) .build(|| { ui.text( "This is window 1. @@ -838,7 +838,7 @@ My title is the same as window 2, but my identifier is unique.", ); }); ui.window(im_str!("Same title as another window##2")) - .position((100.0, 200.0), Condition::FirstUseEver) + .position([100.0, 200.0], Condition::FirstUseEver) .build(|| { ui.text( "This is window 2. @@ -850,13 +850,13 @@ My title is the same as window 1, but my identifier is unique.", let num = ui.get_frame_count(); // The C++ version uses rand() here let title = im_str!("Animated title {} {}###AnimatedTitle", chars[ch_idx], num); ui.window(&title) - .position((100.0, 300.0), Condition::FirstUseEver) + .position([100.0, 300.0], Condition::FirstUseEver) .build(|| ui.text("This window has a changing title")); } fn show_example_app_custom_rendering(ui: &Ui, state: &mut CustomRenderingState, opened: &mut bool) { ui.window(im_str!("Example: Custom rendering")) - .size((350.0, 560.0), Condition::FirstUseEver) + .size([350.0, 560.0], Condition::FirstUseEver) .opened(opened) .build(|| { ui.text("Primitives"); @@ -865,13 +865,13 @@ fn show_example_app_custom_rendering(ui: &Ui, state: &mut CustomRenderingState, let draw_list = ui.get_window_draw_list(); let p = ui.get_cursor_screen_pos(); let spacing = 8.0; - let mut y = p.1 + 4.0; + let mut y = p[1] + 4.0; for n in 0..2 { - let mut x = p.0 + 4.0; + let mut x = p[0] + 4.0; let thickness = if n == 0 { 1.0 } else { 4.0 }; draw_list .add_circle( - (x + state.sz * 0.5, y + state.sz * 0.5), + [x + state.sz * 0.5, y + state.sz * 0.5], state.sz * 0.5, state.col, ) @@ -880,18 +880,18 @@ fn show_example_app_custom_rendering(ui: &Ui, state: &mut CustomRenderingState, .build(); x += state.sz + spacing; draw_list - .add_rect((x, y), (x + state.sz, y + state.sz), state.col) + .add_rect([x, y], [x + state.sz, y + state.sz], state.col) .thickness(thickness) .build(); x += state.sz + spacing; draw_list - .add_rect((x, y), (x + state.sz, y + state.sz), state.col) + .add_rect([x, y], [x + state.sz, y + state.sz], state.col) .thickness(thickness) .rounding(10.0) .build(); x += state.sz + spacing; draw_list - .add_rect((x, y), (x + state.sz, y + state.sz), state.col) + .add_rect([x, y], [x + state.sz, y + state.sz], state.col) .thickness(thickness) .rounding(10.0) .round_top_right(false) @@ -900,45 +900,45 @@ fn show_example_app_custom_rendering(ui: &Ui, state: &mut CustomRenderingState, x += state.sz + spacing; draw_list .add_triangle( - (x + state.sz * 0.5, y), - (x + state.sz, y + state.sz - 0.5), - (x, y + state.sz - 0.5), + [x + state.sz * 0.5, y], + [x + state.sz, y + state.sz - 0.5], + [x, y + state.sz - 0.5], state.col, ) .thickness(thickness) .build(); x += state.sz + spacing; draw_list - .add_line((x, y), (x + state.sz, y), state.col) + .add_line([x, y], [x + state.sz, y], state.col) .thickness(thickness) .build(); x += state.sz + spacing; draw_list - .add_line((x, y), (x + state.sz, y + state.sz), state.col) + .add_line([x, y], [x + state.sz, y + state.sz], state.col) .thickness(thickness) .build(); x += state.sz + spacing; draw_list - .add_line((x, y), (x, y + state.sz), state.col) + .add_line([x, y], [x, y + state.sz], state.col) .thickness(thickness) .build(); x += spacing; draw_list .add_bezier_curve( - (x, y), - (x + state.sz * 1.3, y + state.sz * 0.3), - (x + state.sz - state.sz * 1.3, y + state.sz - state.sz * 0.3), - (x + state.sz, y + state.sz), + [x, y], + [x + state.sz * 1.3, y + state.sz * 0.3], + [x + state.sz - state.sz * 1.3, y + state.sz - state.sz * 0.3], + [x + state.sz, y + state.sz], state.col, ) .thickness(thickness) .build(); y += state.sz + spacing; } - let mut x = p.0 + 4.0; + let mut x = p[0] + 4.0; draw_list .add_circle( - (x + state.sz * 0.5, y + state.sz * 0.5), + [x + state.sz * 0.5, y + state.sz * 0.5], state.sz * 0.5, state.col, ) @@ -947,18 +947,18 @@ fn show_example_app_custom_rendering(ui: &Ui, state: &mut CustomRenderingState, .build(); x += state.sz + spacing; draw_list - .add_rect((x, y), (x + state.sz, y + state.sz), state.col) + .add_rect([x, y], [x + state.sz, y + state.sz], state.col) .filled(true) .build(); x += state.sz + spacing; draw_list - .add_rect((x, y), (x + state.sz, y + state.sz), state.col) + .add_rect([x, y], [x + state.sz, y + state.sz], state.col) .filled(true) .rounding(10.0) .build(); x += state.sz + spacing; draw_list - .add_rect((x, y), (x + state.sz, y + state.sz), state.col) + .add_rect([x, y], [x + state.sz, y + state.sz], state.col) .filled(true) .rounding(10.0) .round_top_right(false) @@ -967,9 +967,9 @@ fn show_example_app_custom_rendering(ui: &Ui, state: &mut CustomRenderingState, x += state.sz + spacing; draw_list .add_triangle( - (x + state.sz * 0.5, y), - (x + state.sz, y + state.sz - 0.5), - (x, y + state.sz - 0.5), + [x + state.sz * 0.5, y], + [x + state.sz, y + state.sz - 0.5], + [x, y + state.sz - 0.5], state.col, ) .filled(true) @@ -980,23 +980,23 @@ fn show_example_app_custom_rendering(ui: &Ui, state: &mut CustomRenderingState, const MULTICOLOR_RECT_CORNER_COLOR3: [f32; 3] = [1.0, 1.0, 0.0]; const MULTICOLOR_RECT_CORNER_COLOR4: [f32; 3] = [0.0, 1.0, 0.0]; draw_list.add_rect_filled_multicolor( - (x, y), - (x + state.sz, y + state.sz), + [x, y], + [x + state.sz, y + state.sz], MULTICOLOR_RECT_CORNER_COLOR1, MULTICOLOR_RECT_CORNER_COLOR2, MULTICOLOR_RECT_CORNER_COLOR3, MULTICOLOR_RECT_CORNER_COLOR4, ); - ui.dummy(((state.sz + spacing) * 8.0, (state.sz + spacing) * 3.0)); + ui.dummy([(state.sz + spacing) * 8.0, (state.sz + spacing) * 3.0]); ui.separator(); ui.text(im_str!("Canvas example")); - if ui.button(im_str!("Clear"), (0.0, 0.0)) { + if ui.button(im_str!("Clear"), [0.0, 0.0]) { state.points.clear(); } if state.points.len() >= 2 { ui.same_line(0.0); - if ui.button(im_str!("Undo"), (0.0, 0.0)) { + if ui.button(im_str!("Undo"), [0.0, 0.0]) { state.points.pop(); state.points.pop(); } @@ -1017,11 +1017,11 @@ fn show_example_app_custom_rendering(ui: &Ui, state: &mut CustomRenderingState, let canvas_pos = ui.get_cursor_screen_pos(); // Resize canvas to what's available let mut canvas_size = ui.get_content_region_avail(); - if canvas_size.0 < 50.0 { - canvas_size.0 = 50.0; + if canvas_size[0] < 50.0 { + canvas_size[0] = 50.0; } - if canvas_size.1 < 50.0 { - canvas_size.1 = 50.0; + if canvas_size[1] < 50.0 { + canvas_size[1] = 50.0; } const CANVAS_CORNER_COLOR1: [f32; 3] = [0.2, 0.2, 0.2]; const CANVAS_CORNER_COLOR2: [f32; 3] = [0.2, 0.2, 0.24]; @@ -1029,7 +1029,10 @@ fn show_example_app_custom_rendering(ui: &Ui, state: &mut CustomRenderingState, const CANVAS_CORNER_COLOR4: [f32; 3] = [0.2, 0.2, 0.24]; draw_list.add_rect_filled_multicolor( canvas_pos, - (canvas_pos.0 + canvas_size.0, canvas_pos.1 + canvas_size.1), + [ + canvas_pos[0] + canvas_size[0], + canvas_pos[1] + canvas_size[1], + ], CANVAS_CORNER_COLOR1, CANVAS_CORNER_COLOR2, CANVAS_CORNER_COLOR3, @@ -1039,7 +1042,10 @@ fn show_example_app_custom_rendering(ui: &Ui, state: &mut CustomRenderingState, draw_list .add_rect( canvas_pos, - (canvas_pos.0 + canvas_size.0, canvas_pos.1 + canvas_size.1), + [ + canvas_pos[0] + canvas_size[0], + canvas_pos[1] + canvas_size[1], + ], CANVAS_BORDER_COLOR, ) .build(); @@ -1047,7 +1053,7 @@ fn show_example_app_custom_rendering(ui: &Ui, state: &mut CustomRenderingState, let mut adding_preview = false; ui.invisible_button(im_str!("canvas"), canvas_size); let mouse_pos = ui.io().mouse_pos; - let mouse_pos_in_canvas = (mouse_pos[0] - canvas_pos.0, mouse_pos[1] - canvas_pos.1); + let mouse_pos_in_canvas = [mouse_pos[0] - canvas_pos[0], mouse_pos[1] - canvas_pos[1]]; if state.adding_line { adding_preview = true; state.points.push(mouse_pos_in_canvas); @@ -1070,7 +1076,10 @@ fn show_example_app_custom_rendering(ui: &Ui, state: &mut CustomRenderingState, } draw_list.with_clip_rect_intersect( canvas_pos, - (canvas_pos.0 + canvas_size.0, canvas_pos.1 + canvas_size.1), + [ + canvas_pos[0] + canvas_size[0], + canvas_pos[1] + canvas_size[1], + ], || { const LINE_COLOR: [f32; 3] = [1.0, 1.0, 0.0]; for line in state.points.chunks(2) { @@ -1080,8 +1089,8 @@ fn show_example_app_custom_rendering(ui: &Ui, state: &mut CustomRenderingState, let (p1, p2) = (line[0], line[1]); draw_list .add_line( - (canvas_pos.0 + p1.0, canvas_pos.1 + p1.1), - (canvas_pos.0 + p2.0, canvas_pos.1 + p2.1), + [canvas_pos[0] + p1[0], canvas_pos[1] + p1[1]], + [canvas_pos[0] + p2[0], canvas_pos[1] + p2[1]], LINE_COLOR, ) .thickness(2.0) diff --git a/imgui-gfx-examples/Cargo.lock b/imgui-gfx-examples/Cargo.lock index e2583f4..7ffff64 100644 --- a/imgui-gfx-examples/Cargo.lock +++ b/imgui-gfx-examples/Cargo.lock @@ -347,49 +347,49 @@ dependencies = [ [[package]] name = "imgui" -version = "0.0.24-pre" +version = "0.1.0-pre" dependencies = [ "bitflags 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)", "gfx 0.18.1 (registry+https://github.com/rust-lang/crates.io-index)", - "imgui-sys 0.0.24-pre", + "imgui-sys 0.1.0-pre", "lazy_static 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)", "parking_lot 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "imgui-gfx-examples" -version = "0.0.24-pre" +version = "0.1.0-pre" dependencies = [ "gfx 0.18.1 (registry+https://github.com/rust-lang/crates.io-index)", "gfx_window_dxgi 0.19.1 (registry+https://github.com/rust-lang/crates.io-index)", "gfx_window_glutin 0.31.0 (registry+https://github.com/rust-lang/crates.io-index)", "glutin 0.21.0 (registry+https://github.com/rust-lang/crates.io-index)", - "imgui 0.0.24-pre", - "imgui-gfx-renderer 0.0.24-pre", - "imgui-winit-support 0.0.24-pre", + "imgui 0.1.0-pre", + "imgui-gfx-renderer 0.1.0-pre", + "imgui-winit-support 0.1.0-pre", ] [[package]] name = "imgui-gfx-renderer" -version = "0.0.24-pre" +version = "0.1.0-pre" dependencies = [ "gfx 0.18.1 (registry+https://github.com/rust-lang/crates.io-index)", - "imgui 0.0.24-pre", + "imgui 0.1.0-pre", "winapi 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "imgui-sys" -version = "0.0.24-pre" +version = "0.1.0-pre" dependencies = [ "cc 1.0.37 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "imgui-winit-support" -version = "0.0.24-pre" +version = "0.1.0-pre" dependencies = [ - "imgui 0.0.24-pre", + "imgui 0.1.0-pre", "winit 0.19.1 (registry+https://github.com/rust-lang/crates.io-index)", ] diff --git a/imgui-gfx-examples/examples/hello_gfx.rs b/imgui-gfx-examples/examples/hello_gfx.rs index 0158560..8f7bc61 100644 --- a/imgui-gfx-examples/examples/hello_gfx.rs +++ b/imgui-gfx-examples/examples/hello_gfx.rs @@ -16,7 +16,7 @@ fn hello_world<'a>(ui: &Ui<'a>) -> bool { let window_title = im_str!("Hello world (DirectX)"); ui.window(window_title) - .size((300.0, 100.0), Condition::FirstUseEver) + .size([300.0, 100.0], Condition::FirstUseEver) .build(|| { ui.text(im_str!("Hello world!")); ui.text(im_str!("こんにちは世界!")); diff --git a/src/child_frame.rs b/src/child_frame.rs index fa7f24b..8aab496 100644 --- a/src/child_frame.rs +++ b/src/child_frame.rs @@ -2,19 +2,19 @@ use std::marker::PhantomData; use crate::legacy::ImGuiWindowFlags; use crate::sys; -use crate::{ImStr, ImVec2, Ui}; +use crate::{ImStr, Ui}; #[must_use] pub struct ChildFrame<'ui, 'p> { name: &'p ImStr, - size: ImVec2, + size: [f32; 2], border: bool, flags: ImGuiWindowFlags, _phantom: PhantomData<&'ui Ui<'ui>>, } impl<'ui, 'p> ChildFrame<'ui, 'p> { - pub fn new>(_: &Ui<'ui>, name: &'p ImStr, size: S) -> ChildFrame<'ui, 'p> { + pub fn new(_: &Ui<'ui>, name: &'p ImStr, size: [f32; 2]) -> ChildFrame<'ui, 'p> { ChildFrame { name, size: size.into(), @@ -101,7 +101,7 @@ impl<'ui, 'p> ChildFrame<'ui, 'p> { let render_child_frame = unsafe { sys::igBeginChild( self.name.as_ptr(), - self.size, + self.size.into(), self.border, self.flags.bits(), ) diff --git a/src/color_editors.rs b/src/color_editors.rs index 2fdba9f..bc4150e 100644 --- a/src/color_editors.rs +++ b/src/color_editors.rs @@ -4,7 +4,7 @@ use std::ptr; use crate::legacy::ImGuiColorEditFlags; use crate::sys; -use crate::{ImStr, ImVec2, ImVec4, Ui}; +use crate::{ImStr, Ui}; /// Mutable reference to an editable color value. #[derive(Debug)] @@ -356,20 +356,20 @@ impl<'ui, 'p> ColorPicker<'ui, 'p> { #[must_use] pub struct ColorButton<'ui, 'p> { desc_id: &'p ImStr, - color: ImVec4, + color: [f32; 4], flags: ImGuiColorEditFlags, - size: ImVec2, + size: [f32; 2], _phantom: PhantomData<&'ui Ui<'ui>>, } impl<'ui, 'p> ColorButton<'ui, 'p> { /// Constructs a new color button builder. - pub fn new(_: &Ui<'ui>, desc_id: &'p ImStr, color: ImVec4) -> Self { + pub fn new(_: &Ui<'ui>, desc_id: &'p ImStr, color: [f32; 4]) -> Self { ColorButton { desc_id, color, flags: ImGuiColorEditFlags::empty(), - size: ImVec2::zero(), + size: [0.0, 0.0], _phantom: PhantomData, } } @@ -408,7 +408,7 @@ impl<'ui, 'p> ColorButton<'ui, 'p> { /// /// Use 0.0 for width and/or height to use the default size. #[inline] - pub fn size>(mut self, size: S) -> Self { + pub fn size(mut self, size: [f32; 2]) -> Self { self.size = size.into(); self } @@ -417,9 +417,9 @@ impl<'ui, 'p> ColorButton<'ui, 'p> { unsafe { sys::igColorButton( self.desc_id.as_ptr(), - self.color, + self.color.into(), self.flags.bits(), - self.size, + self.size.into(), ) } } diff --git a/src/image.rs b/src/image.rs index a6cfaa0..cc7944b 100644 --- a/src/image.rs +++ b/src/image.rs @@ -3,7 +3,7 @@ use std::os::raw::c_void; use crate::render::renderer::TextureId; use crate::sys; -use crate::{ImVec2, ImVec4, Ui}; +use crate::Ui; /// Represent an image about to be drawn. /// See [`Ui::image`]. @@ -12,36 +12,23 @@ use crate::{ImVec2, ImVec4, Ui}; #[must_use] pub struct Image<'ui> { texture_id: TextureId, - size: ImVec2, - uv0: ImVec2, - uv1: ImVec2, - tint_col: ImVec4, - border_col: ImVec4, + size: [f32; 2], + uv0: [f32; 2], + uv1: [f32; 2], + tint_col: [f32; 4], + border_col: [f32; 4], _phantom: PhantomData<&'ui Ui<'ui>>, } impl<'ui> Image<'ui> { - pub fn new(_: &Ui<'ui>, texture_id: TextureId, size: S) -> Self - where - S: Into, - { - const DEFAULT_UV0: ImVec2 = ImVec2 { x: 0.0, y: 0.0 }; - const DEFAULT_UV1: ImVec2 = ImVec2 { x: 1.0, y: 1.0 }; - const DEFAULT_TINT_COL: ImVec4 = ImVec4 { - x: 1.0, - y: 1.0, - z: 1.0, - w: 1.0, - }; - const DEFAULT_BORDER_COL: ImVec4 = ImVec4 { - x: 0.0, - y: 0.0, - z: 0.0, - w: 0.0, - }; + pub fn new(_: &Ui<'ui>, texture_id: TextureId, size: [f32; 2]) -> Self { + const DEFAULT_UV0: [f32; 2] = [0.0, 0.0]; + const DEFAULT_UV1: [f32; 2] = [1.0, 1.0]; + const DEFAULT_TINT_COL: [f32; 4] = [1.0, 1.0, 1.0, 1.0]; + const DEFAULT_BORDER_COL: [f32; 4] = [0.0, 0.0, 0.0, 0.0]; Image { texture_id, - size: size.into(), + size, uv0: DEFAULT_UV0, uv1: DEFAULT_UV1, tint_col: DEFAULT_TINT_COL, @@ -50,28 +37,28 @@ impl<'ui> Image<'ui> { } } /// Set size (default based on texture) - pub fn size>(mut self, size: T) -> Self { - self.size = size.into(); + pub fn size(mut self, size: [f32; 2]) -> Self { + self.size = size; self } /// Set uv0 (default `[0.0, 0.0]`) - pub fn uv0>(mut self, uv0: T) -> Self { - self.uv0 = uv0.into(); + pub fn uv0(mut self, uv0: [f32; 2]) -> Self { + self.uv0 = uv0; self } /// Set uv1 (default `[1.0, 1.0]`) - pub fn uv1>(mut self, uv1: T) -> Self { - self.uv1 = uv1.into(); + pub fn uv1(mut self, uv1: [f32; 2]) -> Self { + self.uv1 = uv1; self } /// Set tint color (default: no tint color) - pub fn tint_col>(mut self, tint_col: T) -> Self { - self.tint_col = tint_col.into(); + pub fn tint_col(mut self, tint_col: [f32; 4]) -> Self { + self.tint_col = tint_col; self } /// Set border color (default: no border) - pub fn border_col>(mut self, border_col: T) -> Self { - self.border_col = border_col.into(); + pub fn border_col(mut self, border_col: [f32; 4]) -> Self { + self.border_col = border_col; self } /// Draw image where the cursor currently is @@ -79,11 +66,11 @@ impl<'ui> Image<'ui> { unsafe { sys::igImage( self.texture_id.id() as *mut c_void, - self.size, - self.uv0, - self.uv1, - self.tint_col, - self.border_col, + self.size.into(), + self.uv0.into(), + self.uv1.into(), + self.tint_col.into(), + self.border_col.into(), ); } } @@ -96,38 +83,25 @@ impl<'ui> Image<'ui> { #[must_use] pub struct ImageButton<'ui> { texture_id: TextureId, - size: ImVec2, - uv0: ImVec2, - uv1: ImVec2, + size: [f32; 2], + uv0: [f32; 2], + uv1: [f32; 2], frame_padding: i32, - bg_col: ImVec4, - tint_col: ImVec4, + bg_col: [f32; 4], + tint_col: [f32; 4], _phantom: PhantomData<&'ui Ui<'ui>>, } impl<'ui> ImageButton<'ui> { - pub fn new(_: &Ui<'ui>, texture_id: TextureId, size: S) -> Self - where - S: Into, - { - const DEFAULT_UV0: ImVec2 = ImVec2 { x: 0.0, y: 0.0 }; - const DEFAULT_UV1: ImVec2 = ImVec2 { x: 1.0, y: 1.0 }; + pub fn new(_: &Ui<'ui>, texture_id: TextureId, size: [f32; 2]) -> Self { + const DEFAULT_UV0: [f32; 2] = [0.0, 0.0]; + const DEFAULT_UV1: [f32; 2] = [1.0, 1.0]; const DEFAULT_FRAME_PADDING: i32 = -1; - const DEFAULT_BG_COL: ImVec4 = ImVec4 { - x: 0.0, - y: 0.0, - z: 0.0, - w: 0.0, - }; - const DEFAULT_TINT_COL: ImVec4 = ImVec4 { - x: 1.0, - y: 1.0, - z: 1.0, - w: 1.0, - }; + const DEFAULT_BG_COL: [f32; 4] = [0.0, 0.0, 0.0, 0.0]; + const DEFAULT_TINT_COL: [f32; 4] = [1.0, 1.0, 1.0, 1.0]; ImageButton { texture_id, - size: size.into(), + size: size, uv0: DEFAULT_UV0, uv1: DEFAULT_UV1, frame_padding: DEFAULT_FRAME_PADDING, @@ -137,18 +111,18 @@ impl<'ui> ImageButton<'ui> { } } /// Set size (default based on texture) - pub fn size>(mut self, size: T) -> Self { - self.size = size.into(); + pub fn size(mut self, size: [f32; 2]) -> Self { + self.size = size; self } /// Set uv0 (default `[0.0, 0.0]`) - pub fn uv0>(mut self, uv0: T) -> Self { - self.uv0 = uv0.into(); + pub fn uv0(mut self, uv0: [f32; 2]) -> Self { + self.uv0 = uv0; self } /// Set uv1 (default `[1.0, 1.0]`) - pub fn uv1>(mut self, uv1: T) -> Self { - self.uv1 = uv1.into(); + pub fn uv1(mut self, uv1: [f32; 2]) -> Self { + self.uv1 = uv1; self } /// Set frame padding (default: uses frame padding from style). @@ -160,13 +134,13 @@ impl<'ui> ImageButton<'ui> { self } /// Set tint color (default: no tint color) - pub fn tint_col>(mut self, tint_col: T) -> Self { - self.tint_col = tint_col.into(); + pub fn tint_col(mut self, tint_col: [f32; 4]) -> Self { + self.tint_col = tint_col; self } /// Set background color (default: no background color) - pub fn background_col>(mut self, bg_col: T) -> Self { - self.bg_col = bg_col.into(); + pub fn background_col(mut self, bg_col: [f32; 4]) -> Self { + self.bg_col = bg_col; self } /// Draw image button where the cursor currently is @@ -174,12 +148,12 @@ impl<'ui> ImageButton<'ui> { unsafe { sys::igImageButton( self.texture_id.id() as *mut c_void, - self.size, - self.uv0, - self.uv1, + self.size.into(), + self.uv0.into(), + self.uv1.into(), self.frame_padding, - self.bg_col, - self.tint_col, + self.bg_col.into(), + self.tint_col.into(), ) } } diff --git a/src/input_widget.rs b/src/input_widget.rs index bb4af9a..401630d 100644 --- a/src/input_widget.rs +++ b/src/input_widget.rs @@ -208,12 +208,12 @@ pub struct InputTextMultiline<'ui, 'p> { label: &'p ImStr, buf: &'p mut ImString, flags: ImGuiInputTextFlags, - size: sys::ImVec2, + size: [f32; 2], _phantom: PhantomData<&'ui Ui<'ui>>, } impl<'ui, 'p> InputTextMultiline<'ui, 'p> { - pub fn new(_: &Ui<'ui>, label: &'p ImStr, buf: &'p mut ImString, size: sys::ImVec2) -> Self { + pub fn new(_: &Ui<'ui>, label: &'p ImStr, buf: &'p mut ImString, size: [f32; 2]) -> Self { InputTextMultiline { label, buf, @@ -243,7 +243,7 @@ impl<'ui, 'p> InputTextMultiline<'ui, 'p> { self.label.as_ptr(), ptr, capacity, - self.size, + self.size.into(), self.flags.bits(), callback, data, diff --git a/src/lib.rs b/src/lib.rs index 6ab7147..b412b5b 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -42,7 +42,6 @@ pub use self::sliders::{ }; pub use self::string::{ImStr, ImString}; pub use self::style::*; -pub use self::sys::{ImVec2, ImVec4}; pub use self::trees::{CollapsingHeader, TreeNode}; pub use self::window::Window; pub use self::window_draw_list::{ChannelsSplit, ImColor, WindowDrawList}; @@ -209,22 +208,22 @@ impl<'ui> Ui<'ui> { Window::new(self, name) } /// Get current window's size in pixels - pub fn get_window_size(&self) -> (f32, f32) { + pub fn get_window_size(&self) -> [f32; 2] { let size = unsafe { sys::igGetWindowSize_nonUDT2() }; size.into() } /// Get current window's position in pixels - pub fn get_window_pos(&self) -> (f32, f32) { + pub fn get_window_pos(&self) -> [f32; 2] { let size = unsafe { sys::igGetWindowPos_nonUDT2() }; size.into() } - pub fn get_window_content_region_min(&self) -> (f32, f32) { + pub fn get_window_content_region_min(&self) -> [f32; 2] { let size = unsafe { sys::igGetWindowContentRegionMin_nonUDT2() }; size.into() } - pub fn get_window_content_region_max(&self) -> (f32, f32) { + pub fn get_window_content_region_max(&self) -> [f32; 2] { let size = unsafe { sys::igGetWindowContentRegionMax_nonUDT2() }; size.into() } @@ -301,7 +300,7 @@ impl<'ui> Ui<'ui> { /// Fill a space of `size` in pixels with nothing on the current window. /// Can be used to move the cursor on the window. - pub fn dummy>(&self, size: S) { + pub fn dummy(&self, size: [f32; 2]) { unsafe { sys::igDummy(size.into()) } } @@ -310,37 +309,37 @@ impl<'ui> Ui<'ui> { /// /// This is especially useful for drawing, as the drawing API uses /// screen coordiantes. - pub fn get_cursor_screen_pos(&self) -> (f32, f32) { + pub fn get_cursor_screen_pos(&self) -> [f32; 2] { let size = unsafe { sys::igGetCursorScreenPos_nonUDT2() }; size.into() } /// Set cursor position on the screen, in screen coordinates. /// This sets the point on which the next widget will be drawn. - pub fn set_cursor_screen_pos>(&self, pos: P) { + pub fn set_cursor_screen_pos(&self, pos: [f32; 2]) { unsafe { sys::igSetCursorScreenPos(pos.into()) } } /// Get cursor position on the screen, in window coordinates. - pub fn get_cursor_pos(&self) -> (f32, f32) { + pub fn get_cursor_pos(&self) -> [f32; 2] { let size = unsafe { sys::igGetCursorPos_nonUDT2() }; size.into() } /// Set cursor position on the screen, in window coordinates. /// This sets the point on which the next widget will be drawn. - pub fn set_cursor_pos>(&self, pos: P) { + pub fn set_cursor_pos(&self, pos: [f32; 2]) { unsafe { sys::igSetCursorPos(pos.into()) } } - pub fn get_content_region_max(&self) -> (f32, f32) { + pub fn get_content_region_max(&self) -> [f32; 2] { let size = unsafe { sys::igGetContentRegionMax_nonUDT2() }; size.into() } /// Get available space left between the cursor and the edges of the current /// window. - pub fn get_content_region_avail(&self) -> (f32, f32) { + pub fn get_content_region_avail(&self) -> [f32; 2] { let size = unsafe { sys::igGetContentRegionAvail_nonUDT2() }; size.into() } @@ -429,10 +428,7 @@ impl<'ui> Ui<'ui> { sys::igTextUnformatted(start as *const c_char, end as *const c_char); } } - pub fn text_colored<'p, A>(&self, col: A, text: &'p ImStr) - where - A: Into, - { + pub fn text_colored<'p>(&self, col: [f32; 4], text: &'p ImStr) { unsafe { sys::igTextColored(col.into(), fmt_ptr(), text.as_ptr()); } @@ -475,7 +471,7 @@ impl<'ui> Ui<'ui> { sys::igBulletText(fmt_ptr(), text.as_ptr()); } } - pub fn button<'p, S: Into>(&self, label: &'p ImStr, size: S) -> bool { + pub fn button(&self, label: &ImStr, size: [f32; 2]) -> bool { unsafe { sys::igButton(label.as_ptr(), size.into()) } } pub fn small_button<'p>(&self, label: &'p ImStr) -> bool { @@ -483,7 +479,7 @@ impl<'ui> Ui<'ui> { } /// Make a invisible event. Can be used to conveniently catch events when /// mouse hovers or click the area covered by this invisible button. - pub fn invisible_button<'p, S: Into>(&self, label: &'p ImStr, size: S) -> bool { + pub fn invisible_button(&self, label: &ImStr, size: [f32; 2]) -> bool { unsafe { sys::igInvisibleButton(label.as_ptr(), size.into()) } } pub fn checkbox<'p>(&self, label: &'p ImStr, value: &'p mut bool) -> bool { @@ -496,11 +492,11 @@ impl<'ui> Ui<'ui> { pub fn input_text<'p>(&self, label: &'p ImStr, buf: &'p mut ImString) -> InputText<'ui, 'p> { InputText::new(self, label, buf) } - pub fn input_text_multiline<'p, S: Into>( + pub fn input_text_multiline<'p>( &self, label: &'p ImStr, buf: &'p mut ImString, - size: S, + size: [f32; 2], ) -> InputTextMultiline<'ui, 'p> { InputTextMultiline::new(self, label, buf, size.into()) } @@ -693,11 +689,7 @@ impl<'ui> Ui<'ui> { ColorPicker::new(self, label, value.into()) } /// Constructs a new color button builder. - pub fn color_button<'p, C: Into>( - &self, - desc_id: &'p ImStr, - color: C, - ) -> ColorButton<'ui, 'p> { + pub fn color_button<'p>(&self, desc_id: &'p ImStr, color: [f32; 4]) -> ColorButton<'ui, 'p> { ColorButton::new(self, desc_id, color.into()) } /// Initialize current options (generally on application startup) if you want to select a @@ -722,12 +714,12 @@ impl<'ui> Ui<'ui> { // Widgets: Selectable / Lists impl<'ui> Ui<'ui> { - pub fn selectable<'p, S: Into>( + pub fn selectable( &self, - label: &'p ImStr, + label: &ImStr, selected: bool, flags: ImGuiSelectableFlags, - size: S, + size: [f32; 2], ) -> bool { unsafe { sys::igSelectable(label.as_ptr(), selected, flags.bits(), size.into()) } } @@ -747,7 +739,7 @@ impl<'ui> Ui<'ui> { /// ui.text("Hover over me"); /// if ui.is_item_hovered() { /// ui.tooltip(|| { - /// ui.text_colored((1.0, 0.0, 0.0, 1.0), im_str!("I'm red!")); + /// ui.text_colored([1.0, 0.0, 0.0, 1.0], im_str!("I'm red!")); /// }); /// } /// } @@ -834,12 +826,12 @@ impl<'ui> Ui<'ui> { /// # use imgui::*; /// # let mut imgui = Context::create(); /// # let ui = imgui.frame(); - /// if ui.button(im_str!("Show modal"), (0.0, 0.0)) { + /// if ui.button(im_str!("Show modal"), [0.0, 0.0]) { /// ui.open_popup(im_str!("modal")); /// } /// ui.popup_modal(im_str!("modal")).build(|| { /// ui.text("Content of my modal"); - /// if ui.button(im_str!("OK"), (0.0, 0.0)) { + /// if ui.button(im_str!("OK"), [0.0, 0.0]) { /// ui.close_current_popup(); /// } /// }); @@ -962,20 +954,14 @@ impl<'ui> Ui<'ui> { // Image impl<'ui> Ui<'ui> { - pub fn image(&self, texture: TextureId, size: S) -> Image - where - S: Into, - { + pub fn image(&self, texture: TextureId, size: [f32; 2]) -> Image { Image::new(self, texture, size) } } // ImageButton impl<'ui> Ui<'ui> { - pub fn image_button(&self, texture: TextureId, size: S) -> ImageButton - where - S: Into, - { + pub fn image_button(&self, texture: TextureId, size: [f32; 2]) -> ImageButton { ImageButton::new(self, texture, size) } } @@ -992,8 +978,8 @@ impl<'ui> Ui<'ui> { text: &ImStr, hide_text_after_double_hash: bool, wrap_width: f32, - ) -> ImVec2 { - let result: [f32; 2] = unsafe { + ) -> [f32; 2] { + unsafe { sys::igCalcTextSize_nonUDT2( text.as_ptr(), std::ptr::null(), @@ -1001,8 +987,7 @@ impl<'ui> Ui<'ui> { wrap_width, ) .into() - }; - result.into() + } } } @@ -1012,7 +997,7 @@ impl<'ui> Ui<'ui> { unsafe { sys::igGetTextLineHeightWithSpacing() } } /// Get previously drawn item's size - pub fn get_item_rect_size(&self) -> (f32, f32) { + pub fn get_item_rect_size(&self) -> [f32; 2] { let size = unsafe { sys::igGetItemRectSize_nonUDT2() }; size.into() } @@ -1027,7 +1012,7 @@ impl<'ui> Ui<'ui> { /// # let mut imgui = Context::create(); /// # let ui = imgui.frame(); /// ui.progress_bar(0.6) - /// .size((100.0, 12.0)) + /// .size([100.0, 12.0]) /// .overlay_text(im_str!("Progress!")) /// .build(); /// ``` @@ -1050,19 +1035,15 @@ impl<'ui> Ui<'ui> { /// .build(|| { /// ui.separator(); /// - /// ui.child_frame(im_str!("child frame"), (400.0, 100.0)) + /// ui.child_frame(im_str!("child frame"), [400.0, 100.0]) /// .show_borders(true) /// .always_show_vertical_scroll_bar(true) /// .build(|| { - /// ui.text_colored((1.0, 0.0, 0.0, 1.0), im_str!("hello mate!")); + /// ui.text_colored([1.0, 0.0, 0.0, 1.0], im_str!("hello mate!")); /// }); /// }); - pub fn child_frame<'p, S: Into>( - &self, - name: &'p ImStr, - size: S, - ) -> ChildFrame<'ui, 'p> { - ChildFrame::new(self, name, size.into()) + pub fn child_frame<'p>(&self, name: &'p ImStr, size: [f32; 2]) -> ChildFrame<'ui, 'p> { + ChildFrame::new(self, name, size) } } @@ -1196,12 +1177,7 @@ impl<'ui> Ui<'ui> { /// ui.text_wrapped(im_str!("AB")); /// }); /// ``` - pub fn with_color_var + Copy>( - &self, - var: StyleColor, - color: C, - f: F, - ) { + pub fn with_color_var(&self, var: StyleColor, color: [f32; 4], f: F) { unsafe { sys::igPushStyleColor(var as _, color.into()); } @@ -1225,11 +1201,7 @@ impl<'ui> Ui<'ui> { /// ui.text_wrapped(im_str!("AB")); /// }); /// ``` - pub fn with_color_vars + Copy>( - &self, - color_vars: &[(StyleColor, C)], - f: F, - ) { + pub fn with_color_vars(&self, color_vars: &[(StyleColor, [f32; 4])], f: F) { for &(color_var, color) in color_vars { unsafe { sys::igPushStyleColor(color_var as _, color.into()); @@ -1243,14 +1215,13 @@ impl<'ui> Ui<'ui> { impl<'ui> Ui<'ui> { /// Runs a function after temporarily pushing an array of values to the /// style and color stack. - pub fn with_style_and_color_vars( + pub fn with_style_and_color_vars( &self, style_vars: &[StyleVar], - color_vars: &[(StyleColor, C)], + color_vars: &[(StyleColor, [f32; 4])], f: F, ) where F: FnOnce(), - C: Into + Copy, { self.with_style_vars(style_vars, || { self.with_color_vars(color_vars, f); diff --git a/src/plothistogram.rs b/src/plothistogram.rs index dc6d7ea..3a22f8d 100644 --- a/src/plothistogram.rs +++ b/src/plothistogram.rs @@ -3,7 +3,7 @@ use std::os::raw::c_float; use std::{f32, mem, ptr}; use sys; -use super::{ImStr, ImVec2, Ui}; +use super::{ImStr, Ui}; #[must_use] pub struct PlotHistogram<'ui, 'p> { @@ -13,7 +13,7 @@ pub struct PlotHistogram<'ui, 'p> { overlay_text: Option<&'p ImStr>, scale_min: f32, scale_max: f32, - graph_size: ImVec2, + graph_size: [f32; 2], _phantom: PhantomData<&'ui Ui<'ui>>, } @@ -26,7 +26,7 @@ impl<'ui, 'p> PlotHistogram<'ui, 'p> { overlay_text: None, scale_min: f32::MAX, scale_max: f32::MAX, - graph_size: ImVec2::new(0.0f32, 0.0f32), + graph_size: [0.0, 0.0], _phantom: PhantomData, } } @@ -56,8 +56,8 @@ impl<'ui, 'p> PlotHistogram<'ui, 'p> { } #[inline] - pub fn graph_size>(mut self, graph_size: S) -> Self { - self.graph_size = graph_size.into(); + pub fn graph_size(mut self, graph_size: [f32; 2]) -> Self { + self.graph_size = graph_size; self } @@ -71,7 +71,7 @@ impl<'ui, 'p> PlotHistogram<'ui, 'p> { self.overlay_text.map(|x| x.as_ptr()).unwrap_or(ptr::null()), self.scale_min, self.scale_max, - self.graph_size, + self.graph_size.into(), mem::size_of::() as i32, ); } diff --git a/src/plotlines.rs b/src/plotlines.rs index a8e1b7f..444c982 100644 --- a/src/plotlines.rs +++ b/src/plotlines.rs @@ -3,7 +3,7 @@ use std::os::raw::c_float; use std::{f32, mem, ptr}; use sys; -use super::{ImStr, ImVec2, Ui}; +use super::{ImStr, Ui}; #[must_use] pub struct PlotLines<'ui, 'p> { @@ -13,7 +13,7 @@ pub struct PlotLines<'ui, 'p> { overlay_text: Option<&'p ImStr>, scale_min: f32, scale_max: f32, - graph_size: ImVec2, + graph_size: [f32; 2], _phantom: PhantomData<&'ui Ui<'ui>>, } @@ -26,7 +26,7 @@ impl<'ui, 'p> PlotLines<'ui, 'p> { overlay_text: None, scale_min: f32::MAX, scale_max: f32::MAX, - graph_size: ImVec2::new(0.0f32, 0.0f32), + graph_size: [0.0, 0.0], _phantom: PhantomData, } } @@ -56,8 +56,8 @@ impl<'ui, 'p> PlotLines<'ui, 'p> { } #[inline] - pub fn graph_size>(mut self, graph_size: S) -> Self { - self.graph_size = graph_size.into(); + pub fn graph_size(mut self, graph_size: [f32; 2]) -> Self { + self.graph_size = graph_size; self } @@ -71,7 +71,7 @@ impl<'ui, 'p> PlotLines<'ui, 'p> { self.overlay_text.map(|x| x.as_ptr()).unwrap_or(ptr::null()), self.scale_min, self.scale_max, - self.graph_size, + self.graph_size.into(), mem::size_of::() as i32, ); } diff --git a/src/progressbar.rs b/src/progressbar.rs index 00e357d..12bcddd 100644 --- a/src/progressbar.rs +++ b/src/progressbar.rs @@ -3,13 +3,13 @@ use std::marker::PhantomData; use std::ptr; use sys; -use super::{ImStr, ImVec2, Ui}; +use super::{ImStr, Ui}; /// Progress bar widget. #[must_use] pub struct ProgressBar<'ui, 'p> { fraction: f32, - size: ImVec2, + size: [f32; 2], overlay_text: Option<&'p ImStr>, _phantom: PhantomData<&'ui Ui<'ui>>, } @@ -23,7 +23,7 @@ impl<'ui, 'p> ProgressBar<'ui, 'p> { pub fn new(_: &Ui<'ui>, fraction: f32) -> Self { ProgressBar { fraction, - size: ImVec2::new(-1.0, 0.0), + size: [-1.0, 0.0], overlay_text: None, _phantom: PhantomData, } @@ -40,8 +40,8 @@ impl<'ui, 'p> ProgressBar<'ui, 'p> { /// align to the end of the axis, zero will let the progress bar choose a /// size and positive values will use the given size. #[inline] - pub fn size>(mut self, size: S) -> Self { - self.size = size.into(); + pub fn size(mut self, size: [f32; 2]) -> Self { + self.size = size; self } @@ -51,7 +51,7 @@ impl<'ui, 'p> ProgressBar<'ui, 'p> { unsafe { sys::igProgressBar( self.fraction, - self.size, + self.size.into(), self.overlay_text.map(|x| x.as_ptr()).unwrap_or(ptr::null()), ); } diff --git a/src/window.rs b/src/window.rs index 42a677f..138c6b7 100644 --- a/src/window.rs +++ b/src/window.rs @@ -7,10 +7,10 @@ use crate::{Condition, ImStr, Ui}; #[must_use] pub struct Window<'ui, 'p> { - pos: (f32, f32), + pos: [f32; 2], pos_cond: Condition, - pos_pivot: (f32, f32), - size: (f32, f32), + pos_pivot: [f32; 2], + size: [f32; 2], size_cond: Condition, name: &'p ImStr, opened: Option<&'p mut bool>, @@ -21,10 +21,10 @@ pub struct Window<'ui, 'p> { impl<'ui, 'p> Window<'ui, 'p> { pub fn new(_: &Ui<'ui>, name: &'p ImStr) -> Window<'ui, 'p> { Window { - pos: (0.0, 0.0), + pos: [0.0, 0.0], pos_cond: Condition::Never, - pos_pivot: (0.0, 0.0), - size: (0.0, 0.0), + pos_pivot: [0.0, 0.0], + size: [0.0, 0.0], size_cond: Condition::Never, name, opened: None, @@ -33,18 +33,18 @@ impl<'ui, 'p> Window<'ui, 'p> { } } #[inline] - pub fn position(mut self, pos: (f32, f32), cond: Condition) -> Self { + pub fn position(mut self, pos: [f32; 2], cond: Condition) -> Self { self.pos = pos; self.pos_cond = cond; self } #[inline] - pub fn position_pivot(mut self, pivot: (f32, f32)) -> Self { + pub fn position_pivot(mut self, pivot: [f32; 2]) -> Self { self.pos_pivot = pivot; self } #[inline] - pub fn size(mut self, size: (f32, f32), cond: Condition) -> Self { + pub fn size(mut self, size: [f32; 2], cond: Condition) -> Self { self.size = size; self.size_cond = cond; self diff --git a/src/window_draw_list.rs b/src/window_draw_list.rs index 55fdca9..2a35c70 100644 --- a/src/window_draw_list.rs +++ b/src/window_draw_list.rs @@ -1,7 +1,7 @@ use sys; use sys::{ImDrawList, ImU32}; -use super::{ImVec2, ImVec4, Ui}; +use super::Ui; use crate::legacy::ImDrawCornerFlags; use std::marker::PhantomData; @@ -28,12 +28,6 @@ impl From for ImColor { } } -impl From for ImColor { - fn from(v: ImVec4) -> Self { - ImColor(unsafe { sys::igColorConvertFloat4ToU32(v) }) - } -} - impl From<[f32; 4]> for ImColor { fn from(v: [f32; 4]) -> Self { ImColor(unsafe { sys::igColorConvertFloat4ToU32(v.into()) }) @@ -149,10 +143,8 @@ impl<'ui> ChannelsSplit<'ui> { /// Drawing functions impl<'ui> WindowDrawList<'ui> { /// Returns a line from point `p1` to `p2` with color `c`. - pub fn add_line(&'ui self, p1: P1, p2: P2, c: C) -> Line<'ui> + pub fn add_line(&'ui self, p1: [f32; 2], p2: [f32; 2], c: C) -> Line<'ui> where - P1: Into, - P2: Into, C: Into, { Line::new(self, p1, p2, c) @@ -160,10 +152,8 @@ impl<'ui> WindowDrawList<'ui> { /// Returns a rectangle whose upper-left corner is at point `p1` /// and lower-right corner is at point `p2`, with color `c`. - pub fn add_rect(&'ui self, p1: P1, p2: P2, c: C) -> Rect<'ui> + pub fn add_rect(&'ui self, p1: [f32; 2], p2: [f32; 2], c: C) -> Rect<'ui> where - P1: Into, - P2: Into, C: Into, { Rect::new(self, p1, p2, c) @@ -174,17 +164,15 @@ impl<'ui> WindowDrawList<'ui> { /// The remains parameters are the respective color of the corners /// in the counter-clockwise starting from the upper-left corner /// first. - pub fn add_rect_filled_multicolor( + pub fn add_rect_filled_multicolor( &self, - p1: P1, - p2: P2, + p1: [f32; 2], + p2: [f32; 2], col_upr_left: C1, col_upr_right: C2, col_bot_right: C3, col_bot_left: C4, ) where - P1: Into, - P2: Into, C1: Into, C2: Into, C3: Into, @@ -205,29 +193,30 @@ impl<'ui> WindowDrawList<'ui> { /// Returns a triangle with the given 3 vertices `p1`, `p2` and `p3` /// and color `c`. - pub fn add_triangle(&'ui self, p1: P1, p2: P2, p3: P3, c: C) -> Triangle<'ui> + pub fn add_triangle( + &'ui self, + p1: [f32; 2], + p2: [f32; 2], + p3: [f32; 2], + c: C, + ) -> Triangle<'ui> where - P1: Into, - P2: Into, - P3: Into, C: Into, { Triangle::new(self, p1, p2, p3, c) } /// Returns a circle with the given `center`, `radius` and `color`. - pub fn add_circle(&'ui self, center: P, radius: f32, color: C) -> Circle<'ui> + pub fn add_circle(&'ui self, center: [f32; 2], radius: f32, color: C) -> Circle<'ui> where - P: Into, C: Into, { Circle::new(self, center, radius, color) } /// Draw a text whose upper-left corner is at point `pos`. - pub fn add_text(&self, pos: P, col: C, text: T) + pub fn add_text(&self, pos: [f32; 2], col: C, text: T) where - P: Into, C: Into, T: AsRef, { @@ -243,19 +232,15 @@ impl<'ui> WindowDrawList<'ui> { /// Returns a Bezier curve stretching from `pos0` to `pos1`, whose /// curvature is defined by `cp0` and `cp1`. - pub fn add_bezier_curve( + pub fn add_bezier_curve( &'ui self, - pos0: P1, - cp0: P2, - cp1: P3, - pos1: P4, + pos0: [f32; 2], + cp0: [f32; 2], + cp1: [f32; 2], + pos1: [f32; 2], color: C, ) -> BezierCurve<'ui> where - P1: Into, - P2: Into, - P3: Into, - P4: Into, C: Into, { BezierCurve::new(self, pos0, cp0, cp1, pos1, color) @@ -265,10 +250,8 @@ impl<'ui> WindowDrawList<'ui> { /// /// Clip all drawings done within the closure `f` in the given /// rectangle. - pub fn with_clip_rect(&self, min: P1, max: P2, f: F) + pub fn with_clip_rect(&self, min: [f32; 2], max: [f32; 2], f: F) where - P1: Into, - P2: Into, F: FnOnce(), { unsafe { sys::ImDrawList_PushClipRect(self.draw_list, min.into(), max.into(), false) } @@ -281,10 +264,8 @@ impl<'ui> WindowDrawList<'ui> { /// Clip all drawings done within the closure `f` in the given /// rectangle. Intersect with all clipping rectangle previously on /// the stack. - pub fn with_clip_rect_intersect(&self, min: P1, max: P2, f: F) + pub fn with_clip_rect_intersect(&self, min: [f32; 2], max: [f32; 2], f: F) where - P1: Into, - P2: Into, F: FnOnce(), { unsafe { sys::ImDrawList_PushClipRect(self.draw_list, min.into(), max.into(), true) } @@ -296,23 +277,21 @@ impl<'ui> WindowDrawList<'ui> { /// Represents a line about to be drawn #[must_use = "should call .build() to draw the object"] pub struct Line<'ui> { - p1: ImVec2, - p2: ImVec2, + p1: [f32; 2], + p2: [f32; 2], color: ImColor, thickness: f32, draw_list: &'ui WindowDrawList<'ui>, } impl<'ui> Line<'ui> { - fn new(draw_list: &'ui WindowDrawList, p1: P1, p2: P2, c: C) -> Self + fn new(draw_list: &'ui WindowDrawList, p1: [f32; 2], p2: [f32; 2], c: C) -> Self where - P1: Into, - P2: Into, C: Into, { Self { - p1: p1.into(), - p2: p2.into(), + p1, + p2, color: c.into(), thickness: 1.0, draw_list, @@ -330,8 +309,8 @@ impl<'ui> Line<'ui> { unsafe { sys::ImDrawList_AddLine( self.draw_list.draw_list, - self.p1, - self.p2, + self.p1.into(), + self.p2.into(), self.color.into(), self.thickness, ) @@ -342,8 +321,8 @@ impl<'ui> Line<'ui> { /// Represents a rectangle about to be drawn #[must_use = "should call .build() to draw the object"] pub struct Rect<'ui> { - p1: ImVec2, - p2: ImVec2, + p1: [f32; 2], + p2: [f32; 2], color: ImColor, rounding: f32, flags: ImDrawCornerFlags, @@ -353,15 +332,13 @@ pub struct Rect<'ui> { } impl<'ui> Rect<'ui> { - fn new(draw_list: &'ui WindowDrawList, p1: P1, p2: P2, c: C) -> Self + fn new(draw_list: &'ui WindowDrawList, p1: [f32; 2], p2: [f32; 2], c: C) -> Self where - P1: Into, - P2: Into, C: Into, { Self { - p1: p1.into(), - p2: p2.into(), + p1, + p2, color: c.into(), rounding: 0.0, flags: ImDrawCornerFlags::All, @@ -420,8 +397,8 @@ impl<'ui> Rect<'ui> { unsafe { sys::ImDrawList_AddRectFilled( self.draw_list.draw_list, - self.p1, - self.p2, + self.p1.into(), + self.p2.into(), self.color.into(), self.rounding, self.flags.bits(), @@ -431,8 +408,8 @@ impl<'ui> Rect<'ui> { unsafe { sys::ImDrawList_AddRect( self.draw_list.draw_list, - self.p1, - self.p2, + self.p1.into(), + self.p2.into(), self.color.into(), self.rounding, self.flags.bits(), @@ -446,9 +423,9 @@ impl<'ui> Rect<'ui> { /// Represents a triangle about to be drawn on the window #[must_use = "should call .build() to draw the object"] pub struct Triangle<'ui> { - p1: ImVec2, - p2: ImVec2, - p3: ImVec2, + p1: [f32; 2], + p2: [f32; 2], + p3: [f32; 2], color: ImColor, thickness: f32, filled: bool, @@ -456,17 +433,20 @@ pub struct Triangle<'ui> { } impl<'ui> Triangle<'ui> { - fn new(draw_list: &'ui WindowDrawList, p1: P1, p2: P2, p3: P3, c: C) -> Self + fn new( + draw_list: &'ui WindowDrawList, + p1: [f32; 2], + p2: [f32; 2], + p3: [f32; 2], + c: C, + ) -> Self where - P1: Into, - P2: Into, - P3: Into, C: Into, { Self { - p1: p1.into(), - p2: p2.into(), - p3: p3.into(), + p1, + p2, + p3, color: c.into(), thickness: 1.0, filled: false, @@ -492,9 +472,9 @@ impl<'ui> Triangle<'ui> { unsafe { sys::ImDrawList_AddTriangleFilled( self.draw_list.draw_list, - self.p1, - self.p2, - self.p3, + self.p1.into(), + self.p2.into(), + self.p3.into(), self.color.into(), ) } @@ -502,9 +482,9 @@ impl<'ui> Triangle<'ui> { unsafe { sys::ImDrawList_AddTriangle( self.draw_list.draw_list, - self.p1, - self.p2, - self.p3, + self.p1.into(), + self.p2.into(), + self.p3.into(), self.color.into(), self.thickness, ) @@ -516,7 +496,7 @@ impl<'ui> Triangle<'ui> { /// Represents a circle about to be drawn #[must_use = "should call .build() to draw the object"] pub struct Circle<'ui> { - center: ImVec2, + center: [f32; 2], radius: f32, color: ImColor, num_segments: u32, @@ -526,13 +506,12 @@ pub struct Circle<'ui> { } impl<'ui> Circle<'ui> { - pub fn new(draw_list: &'ui WindowDrawList, center: P, radius: f32, color: C) -> Self + pub fn new(draw_list: &'ui WindowDrawList, center: [f32; 2], radius: f32, color: C) -> Self where - P: Into, C: Into, { Self { - center: center.into(), + center, radius, color: color.into(), num_segments: 12, @@ -567,7 +546,7 @@ impl<'ui> Circle<'ui> { unsafe { sys::ImDrawList_AddCircleFilled( self.draw_list.draw_list, - self.center, + self.center.into(), self.radius, self.color.into(), self.num_segments as i32, @@ -577,7 +556,7 @@ impl<'ui> Circle<'ui> { unsafe { sys::ImDrawList_AddCircle( self.draw_list.draw_list, - self.center, + self.center.into(), self.radius, self.color.into(), self.num_segments as i32, @@ -591,10 +570,10 @@ impl<'ui> Circle<'ui> { /// Represents a Bezier curve about to be drawn #[must_use = "should call .build() to draw the object"] pub struct BezierCurve<'ui> { - pos0: ImVec2, - cp0: ImVec2, - pos1: ImVec2, - cp1: ImVec2, + pos0: [f32; 2], + cp0: [f32; 2], + pos1: [f32; 2], + cp1: [f32; 2], color: ImColor, thickness: f32, /// If num_segments is not set, the bezier curve is auto-tessalated. @@ -603,26 +582,22 @@ pub struct BezierCurve<'ui> { } impl<'ui> BezierCurve<'ui> { - fn new( + fn new( draw_list: &'ui WindowDrawList, - pos0: P1, - cp0: P2, - cp1: P3, - pos1: P4, + pos0: [f32; 2], + cp0: [f32; 2], + cp1: [f32; 2], + pos1: [f32; 2], c: C, ) -> Self where - P1: Into, - P2: Into, - P3: Into, - P4: Into, C: Into, { Self { - pos0: pos0.into(), - cp0: cp0.into(), - pos1: pos1.into(), - cp1: cp1.into(), + pos0, + cp0, + cp1, + pos1, color: c.into(), thickness: 1.0, num_segments: None, @@ -648,10 +623,10 @@ impl<'ui> BezierCurve<'ui> { unsafe { sys::ImDrawList_AddBezierCurve( self.draw_list.draw_list, - self.pos0, - self.cp0, - self.cp1, - self.pos1, + self.pos0.into(), + self.cp0.into(), + self.cp1.into(), + self.pos1.into(), self.color.into(), self.thickness, self.num_segments.unwrap_or(0) as i32,