Upgrade to imgui/cimgui 1.52

This commit is contained in:
Joonas Javanainen 2017-11-12 23:32:44 +02:00
parent 3d81002202
commit 6a363840ec
No known key found for this signature in database
GPG Key ID: D39CCA5CB19B9179
6 changed files with 278 additions and 231 deletions

View File

@ -8,10 +8,19 @@
- `tooltip`
- `tooltip_text`
### Changed
- Upgrade to imgui/cimgui 1.52
### Deprecated
- Various imgui-sys things that were deprecated in imgui/cimgui 1.52
### Removed
- Non-namespaced flags
- Various imgui-sys things that were deprecated in imgui/cimgui 1.51
- `Window::bg_alpha`. Push a color change with `with_color_var` instead
- `color_edit3`
- `color_edit4`

View File

@ -170,9 +170,7 @@ fn main() {
fn show_help_marker(ui: &Ui, desc: &str) {
ui.text_disabled(im_str!("(?)"));
if ui.is_item_hovered() {
ui.tooltip(|| {
ui.text(desc);
});
ui.tooltip(|| { ui.text(desc); });
}
}
@ -455,7 +453,7 @@ fn show_test_window(ui: &Ui, state: &mut State, opened: &mut bool) {
ui.same_line(0.0);
show_help_marker(
ui,
"Currently all this does is to lift the 0..1 \
"Currently all this does is to lift the 0..1 \
limits on dragging widgets.",
);
@ -468,7 +466,7 @@ fn show_test_window(ui: &Ui, state: &mut State, opened: &mut bool) {
ui.same_line(0.0);
show_help_marker(
ui,
"Right-click on the individual color widget to \
"Right-click on the individual color widget to \
show options.",
);
let misc_flags = {
@ -486,8 +484,8 @@ fn show_test_window(ui: &Ui, state: &mut State, opened: &mut bool) {
ui.same_line(0.0);
show_help_marker(
ui,
"Click on the colored square to open a color picker.
CTRL+click on individual component to input value.\n"
"Click on the colored square to open a color picker.
CTRL+click on individual component to input value.\n",
);
ui.color_edit(im_str!("MyColor##1"), &mut s.color)
.flags(misc_flags)
@ -510,10 +508,10 @@ CTRL+click on individual component to input value.\n"
ui.same_line(0.0);
show_help_marker(
ui,
"With the inputs(false) function you can hide all \
"With the inputs(false) function you can hide all \
the slider/text inputs.\n \
With the label(false) function you can pass a non-empty label which \
will only be used for the tooltip and picker popup."
will only be used for the tooltip and picker popup.",
);
ui.color_edit(im_str!("MyColor##3"), &mut s.color)
.flags(misc_flags)
@ -695,24 +693,28 @@ output your content because that would create a feedback loop.",
#[allow(deprecated)]
fn show_example_app_fixed_overlay(ui: &Ui, opened: &mut bool) {
ui.window(im_str!("Example: Fixed Overlay"))
const DISTANCE: f32 = 10.0;
let window_pos = (DISTANCE, DISTANCE);
ui.with_color_var(ImGuiCol::WindowBg, (0.0, 0.0, 0.0, 0.3), || {
ui.window(im_str!("Example: Fixed Overlay"))
.opened(opened)
.position((10.0, 10.0), ImGuiCond::Always)
.bg_alpha(0.3)
.position(window_pos, ImGuiCond::Always)
.title_bar(false)
.resizable(false)
.always_auto_resize(true)
.movable(false)
.save_settings(false)
.build(|| {
ui.text("Simple overlay\non the top-left side of the screen.");
ui.separator();
let mouse_pos = ui.imgui().mouse_pos();
ui.text(format!(
"Mouse Position: ({:.1},{:.1})",
mouse_pos.0,
mouse_pos.1
));
ui.text("Simple overlay\nin the corner of the screen.\n(right-click to change position)");
ui.separator();
let mouse_pos = ui.imgui().mouse_pos();
ui.text(format!(
"Mouse Position: ({:.1},{:.1})",
mouse_pos.0,
mouse_pos.1
));
})
})
}
fn show_example_app_manipulating_window_title(ui: &Ui) {

View File

@ -51,8 +51,8 @@ pub enum ImGuiCol {
FrameBgHovered,
FrameBgActive,
TitleBg,
TitleBgCollapsed,
TitleBgActive,
TitleBgCollapsed,
MenuBarBg,
ScrollbarBg,
ScrollbarGrab,
@ -99,8 +99,8 @@ impl ImGuiCol {
FrameBgHovered,
FrameBgActive,
TitleBg,
TitleBgCollapsed,
TitleBgActive,
TitleBgCollapsed,
MenuBarBg,
ScrollbarBg,
ScrollbarGrab,
@ -244,13 +244,6 @@ bitflags!(
const AlwaysVerticalScrollbar = 1 << 14;
const AlwaysHorizontalScrollbar = 1 << 15;
const AlwaysUseWindowPadding = 1 << 16;
const ChildWindow = 1 << 22;
const ComboBox = 1 << 23;
const Tooltip = 1 << 24;
const Popup = 1 << 25;
const Modal = 1 << 26;
const ChildMenu = 1 << 27;
}
);
@ -265,21 +258,6 @@ bitflags!(
}
);
bitflags!(
/// Flags for column functions
#[repr(C)]
pub struct ImGuiColumnsFlags: c_int {
/// Disable column dividers
const NoBorder = 1;
/// Disable resizing columns when clicking on the dividers
const NoResize = 1 << 1;
/// Disable column width preservation when adjusting columns
const NoPreserveWidths = 1 << 2;
/// Disable forcing columns to fit within window
const NoForceWithinWindow = 1 << 3;
}
);
bitflags!(
/// Flags for text inputs
#[repr(C)]
@ -300,8 +278,6 @@ bitflags!(
const AlwaysInsertMode = 1 << 13;
const ReadOnly = 1 << 14;
const Password = 1 << 15;
const Multiline = 1 << 20;
}
);
@ -329,11 +305,25 @@ bitflags!(
const OpenOnArrow = 1 << 7;
const Leaf = 1 << 8;
const Bullet = 1 << 9;
const FramePadding = 1 << 10;
const CollapsingHeader =
ImGuiTreeNodeFlags::Framed.bits | ImGuiTreeNodeFlags::NoAutoOpenOnLog.bits;
}
);
bitflags!(
/// Flags for hover checks
#[repr(C)]
pub struct ImGuiHoveredFlags: c_int {
const AllowWhenBlockedByPopup = 1;
const AllowWhenBlockedByActiveItem = 1 << 2;
const AllowWhenOverlapped = 1 << 3;
const RectOnly = ImGuiHoveredFlags::AllowWhenBlockedByPopup.bits
| ImGuiHoveredFlags::AllowWhenBlockedByActiveItem.bits
| ImGuiHoveredFlags::AllowWhenOverlapped.bits;
}
);
pub type ImGuiTextEditCallback = Option<
extern "C" fn(data: *mut ImGuiTextEditCallbackData) -> c_int,
>;
@ -514,13 +504,15 @@ pub struct ImGuiIO {
pub osx_behaviors: bool,
pub render_draw_lists_fn: Option<extern "C" fn(data: *mut ImDrawData)>,
pub get_clipboard_text_fn: Option<extern "C" fn(user_data: *mut c_void) -> *const c_char>,
pub set_clipboard_text_fn: Option<extern "C" fn(user_data: *mut c_void, text: *const c_char)>,
pub clipboard_user_data: *mut c_void,
pub mem_alloc_fn: Option<extern "C" fn(sz: usize) -> *mut c_void>,
pub mem_free_fn: Option<extern "C" fn(ptr: *mut c_void)>,
pub ime_set_input_screen_pos_fn: Option<extern "C" fn(x: c_int, y: c_int)>,
pub ime_set_input_screen_pos_fn: Option<extern "C" fn(x: c_int, y: c_int)>,
pub ime_window_handle: *mut c_void,
pub mouse_pos: ImVec2,
@ -537,25 +529,26 @@ pub struct ImGuiIO {
pub want_capture_mouse: bool,
pub want_capture_keyboard: bool,
pub want_text_input: bool,
pub want_move_mouse: bool,
pub framerate: c_float,
pub metrics_allocs: c_int,
pub metrics_render_vertices: c_int,
pub metrics_render_indices: c_int,
pub metrics_active_windows: c_int,
pub mouse_delta: ImVec2,
pub mouse_pos_prev: ImVec2,
pub mouse_clicked: [bool; 5],
pub mouse_clicked_pos: [ImVec2; 5],
pub mouse_clicked_time: [c_float; 5],
pub mouse_double_clicked: [bool; 5],
pub mouse_released: [bool; 5],
pub mouse_down_owned: [bool; 5],
pub mouse_down_duration: [c_float; 5],
pub mouse_down_duration_prev: [c_float; 5],
pub mouse_drag_max_distance_sqr: [c_float; 5],
pub keys_down_duration: [c_float; 512],
pub keys_down_duration_prev: [c_float; 512],
mouse_pos_prev: ImVec2,
mouse_clicked_pos: [ImVec2; 5],
mouse_clicked_time: [c_float; 5],
mouse_clicked: [bool; 5],
mouse_double_clicked: [bool; 5],
mouse_released: [bool; 5],
mouse_down_owned: [bool; 5],
mouse_down_duration: [c_float; 5],
mouse_down_duration_prev: [c_float; 5],
mouse_drag_max_distance_sqr: [c_float; 5],
keys_down_duration: [c_float; 512],
keys_down_duration_prev: [c_float; 512],
}
/// Lightweight vector struct
@ -591,7 +584,14 @@ pub struct ImGuiTextBuffer {
#[repr(C)]
pub struct Pair {
pub key: ImGuiID,
pub data: *mut c_void,
pub value: PairValue,
}
#[repr(C)]
pub union PairValue {
val_i: c_int,
val_f: c_float,
val_p: *mut c_void,
}
#[repr(C)]
@ -607,6 +607,7 @@ pub struct ImGuiTextEditCallbackData {
pub read_only: bool,
pub event_char: ImWchar,
pub event_key: ImGuiKey,
pub buf: *mut c_char,
pub buf_text_len: c_int,
@ -643,19 +644,6 @@ pub struct ImGuiListClipper {
pub display_end: c_int,
}
impl Default for ImGuiListClipper {
fn default() -> ImGuiListClipper {
ImGuiListClipper {
start_pos_y: 0.0,
items_height: -1.0,
items_count: -1,
step_no: 0,
display_start: 0,
display_end: 0,
}
}
}
pub type ImDrawCallback = Option<
extern "C" fn(parent_list: *const ImDrawList,
cmd: *const ImDrawCmd),
@ -741,32 +729,18 @@ pub struct ImFontConfig {
pub glyph_offset: ImVec2,
pub glyph_ranges: *const ImWchar,
pub merge_mode: bool,
pub rasterizer_flags: c_uint,
pub rasterizer_multiply: c_float,
name: [c_char; 32],
dst_font: *mut ImFont,
}
/// Runtime data for multiple fonts, bake multiple fonts into a single texture, TTF/OTF font loader
#[repr(C)]
pub struct ImFontAtlas {
pub tex_id: *mut c_void,
pub tex_pixels_alpha8: *mut c_uchar,
pub tex_pixels_rgba32: *mut c_uint,
pub tex_width: c_int,
pub tex_height: c_int,
pub tex_desired_width: c_int,
pub tex_glyph_padding: c_int,
pub tex_uv_white_pixel: ImVec2,
pub fonts: ImVector<*mut ImFont>,
config_data: ImVector<ImFontConfig>,
}
#[repr(C)]
#[derive(Copy, Clone, Debug, Default)]
pub struct Glyph {
pub struct ImFontGlyph {
codepoint: ImWchar,
x_advance: c_float,
advance_x: c_float,
x0: c_float,
y0: c_float,
x1: c_float,
@ -777,17 +751,47 @@ pub struct Glyph {
v1: c_float,
}
#[repr(C)]
pub struct CustomRect {
pub id: c_uint,
pub width: c_ushort,
pub height: c_ushort,
pub x: c_ushort,
pub y: c_ushort,
pub glyph_advance_x: c_float,
pub glyph_offset: ImVec2,
pub font: *mut ImFont,
}
/// Runtime data for multiple fonts, bake multiple fonts into a single texture, TTF/OTF font loader
#[repr(C)]
pub struct ImFontAtlas {
pub tex_id: *mut c_void,
pub tex_desired_width: c_int,
pub tex_glyph_padding: c_int,
tex_pixels_alpha8: *mut c_uchar,
tex_pixels_rgba32: *mut c_uint,
tex_width: c_int,
tex_height: c_int,
tex_uv_white_pixel: ImVec2,
fonts: ImVector<*mut ImFont>,
custom_rects: ImVector<CustomRect>,
config_data: ImVector<ImFontConfig>,
custom_rect_ids: [c_int; 1],
}
/// Runtime data for a single font within a parent ImFontAtlas
#[repr(C)]
pub struct ImFont {
font_size: c_float,
scale: c_float,
display_offset: ImVec2,
glyphs: ImVector<Glyph>,
index_x_advance: ImVector<c_float>,
index_lookup: ImVector<c_short>,
fallback_glyph: *const Glyph,
fallback_x_advance: c_float,
glyphs: ImVector<ImFontGlyph>,
index_advance_x: ImVector<c_float>,
index_lookup: ImVector<c_ushort>,
fallback_glyph: *const ImFontGlyph,
fallback_advance_x: c_float,
fallback_char: ImWchar,
config_data_count: c_short,
@ -795,8 +799,10 @@ pub struct ImFont {
container_atlas: *mut ImFontAtlas,
ascent: c_float,
descent: c_float,
metrics_total_surface: c_int,
}
// Main
extern "C" {
pub fn igGetIO() -> *mut ImGuiIO;
pub fn igGetStyle() -> *mut ImGuiStyle;
@ -804,22 +810,19 @@ extern "C" {
pub fn igNewFrame();
pub fn igRender();
pub fn igShutdown();
pub fn igShowUserGuide();
pub fn igShowStyleEditor(style: *mut ImGuiStyle);
}
// Demo/Debug/Info
extern "C" {
pub fn igShowTestWindow(opened: *mut bool);
pub fn igShowMetricsWindow(opened: *mut bool);
pub fn igShowStyleEditor(style: *mut ImGuiStyle);
pub fn igShowUserGuide();
}
// Window
extern "C" {
pub fn igBegin(name: *const c_char, open: *mut bool, flags: ImGuiWindowFlags) -> bool;
pub fn igBegin2(
name: *const c_char,
open: *mut bool,
size_on_first_use: ImVec2,
bg_alpha: c_float,
flags: ImGuiWindowFlags,
) -> bool;
pub fn igEnd();
pub fn igBeginChild(
str_id: *const c_char,
@ -846,10 +849,10 @@ extern "C" {
pub fn igGetWindowWidth() -> c_float;
pub fn igGetWindowHeight() -> c_float;
pub fn igIsWindowCollapsed() -> bool;
pub fn igIsWindowAppearing() -> bool;
pub fn igSetWindowFontScale(scale: c_float);
pub fn igSetNextWindowPos(pos: ImVec2, cond: ImGuiCond);
pub fn igSetNextWindowPosCenter(cond: ImGuiCond);
pub fn igSetNextWindowPos(pos: ImVec2, cond: ImGuiCond, pivot: ImVec2);
pub fn igSetNextWindowSize(size: ImVec2, cond: ImGuiCond);
pub fn igSetNextWindowConstraints(
size_min: ImVec2,
@ -883,6 +886,15 @@ extern "C" {
pub fn igGetStateStorage() -> *mut ImGuiStorage;
}
#[allow(non_snake_case)]
#[deprecated(since = "0.0.18", note = "please use igSetNextWindowPos instead")]
pub unsafe fn igSetNextWindowPosCenter(cond: ImGuiCond) {
let io = igGetIO();
let pos = ImVec2::new((*io).display_size.x * 0.5, (*io).display_size.y * 0.5);
let pivot = ImVec2::new(0.5, 0.5);
igSetNextWindowPos(pos, cond, pivot);
}
// Parameter stack (shared)
extern "C" {
pub fn igPushFont(font: *mut ImFont);
@ -909,13 +921,13 @@ extern "C" {
pub fn igCalcItemWidth() -> c_float;
pub fn igPushTextWrapPos(wrap_pos_x: c_float);
pub fn igPopTextWrapPos();
pub fn igPushAllowKeyboardFocus(v: bool);
pub fn igPushAllowKeyboardFocus(allow_keyboard_focus: bool);
pub fn igPopAllowKeyboardFocus();
pub fn igPushButtonRepeat(repeat: bool);
pub fn igPopButtonRepeat();
}
// Layout
// Cursor / Layout
extern "C" {
pub fn igSeparator();
pub fn igSameLine(pos_x: c_float, spacing_w: c_float);
@ -935,12 +947,16 @@ extern "C" {
pub fn igGetCursorStartPos(out: *mut ImVec2);
pub fn igGetCursorScreenPos(out: *mut ImVec2);
pub fn igSetCursorScreenPos(pos: ImVec2);
pub fn igAlignFirstTextHeightToWidgets();
pub fn igAlignTextToFramePadding();
pub fn igGetTextLineHeight() -> c_float;
pub fn igGetTextLineHeightWithSpacing() -> c_float;
pub fn igGetItemsLineHeightWithSpacing() -> c_float;
}
#[allow(non_snake_case)]
#[deprecated(since = "0.0.18", note = "please use igAlignTextToFramePadding instead")]
pub unsafe fn igAlignFirstTextHeightToWidgets() { igAlignTextToFramePadding(); }
// Columns
extern "C" {
pub fn igColumns(count: c_int, id: *const c_char, border: bool);
@ -967,6 +983,7 @@ extern "C" {
// Widgets
extern "C" {
pub fn igTextUnformatted(text: *const c_char, text_end: *const c_char);
pub fn igText(fmt: *const c_char, ...);
// pub fn igTextV(fmt: *const c_char, args: va_list);
pub fn igTextColored(col: ImVec4, fmt: *const c_char, ...);
@ -975,12 +992,11 @@ extern "C" {
// pub fn igTextDisabledV(fmt: *const c_char, args: va_list);
pub fn igTextWrapped(fmt: *const c_char, ...);
// pub fn igTextWrappedV(fmt: *const c_char, args: va_list);
pub fn igTextUnformatted(text: *const c_char, text_end: *const c_char);
pub fn igLabelText(label: *const c_char, fmt: *const c_char, ...);
// pub fn igLabelTextV(label: *const c_char, fmt: *const c_char, args: va_list);
pub fn igBullet();
pub fn igBulletText(fmt: *const c_char, ...);
// pub fn igBulletTextV(fmt: *const c_char, args: va_list);
pub fn igBullet();
pub fn igButton(label: *const c_char, size: ImVec2) -> bool;
pub fn igSmallButton(label: *const c_char) -> bool;
pub fn igInvisibleButton(str_id: *const c_char, size: ImVec2) -> bool;
@ -1074,93 +1090,6 @@ extern "C" {
pub fn igProgressBar(fraction: c_float, size_arg: *const ImVec2, overlay: *const c_char);
}
// Widgets: Sliders
extern "C" {
pub fn igSliderFloat(
label: *const c_char,
v: *mut c_float,
v_min: c_float,
v_max: c_float,
display_format: *const c_char,
power: c_float,
) -> bool;
pub fn igSliderFloat2(
label: *const c_char,
v: *mut c_float,
v_min: c_float,
v_max: c_float,
display_format: *const c_char,
power: c_float,
) -> bool;
pub fn igSliderFloat3(
label: *const c_char,
v: *mut c_float,
v_min: c_float,
v_max: c_float,
display_format: *const c_char,
power: c_float,
) -> bool;
pub fn igSliderFloat4(
label: *const c_char,
v: *mut c_float,
v_min: c_float,
v_max: c_float,
display_format: *const c_char,
power: c_float,
) -> bool;
pub fn igSliderAngle(
label: *const c_char,
v_rad: *mut c_float,
v_degrees_min: c_float,
v_degrees_max: c_float,
) -> bool;
pub fn igSliderInt(
label: *const c_char,
v: *mut c_int,
v_min: c_int,
v_max: c_int,
display_format: *const c_char,
) -> bool;
pub fn igSliderInt2(
label: *const c_char,
v: *mut c_int,
v_min: c_int,
v_max: c_int,
display_format: *const c_char,
) -> bool;
pub fn igSliderInt3(
label: *const c_char,
v: *mut c_int,
v_min: c_int,
v_max: c_int,
display_format: *const c_char,
) -> bool;
pub fn igSliderInt4(
label: *const c_char,
v: *mut c_int,
v_min: c_int,
v_max: c_int,
display_format: *const c_char,
) -> bool;
pub fn igVSliderFloat(
label: *const c_char,
size: ImVec2,
v: *mut c_float,
v_min: c_float,
v_max: c_float,
display_format: *const c_char,
power: c_float,
) -> bool;
pub fn igVSliderInt(
label: *const c_char,
size: ImVec2,
v: *mut c_int,
v_min: c_int,
v_max: c_int,
display_format: *const c_char,
) -> bool;
}
// Widgets: Color Editor/Picker
extern "C" {
pub fn igColorEdit3(
@ -1286,7 +1215,7 @@ extern "C" {
) -> bool;
}
// Widgets: Input
// Widgets: Input with Keyboard
extern "C" {
pub fn igInputText(
label: *const c_char,
@ -1355,6 +1284,93 @@ extern "C" {
) -> bool;
}
// Widgets: Sliders
extern "C" {
pub fn igSliderFloat(
label: *const c_char,
v: *mut c_float,
v_min: c_float,
v_max: c_float,
display_format: *const c_char,
power: c_float,
) -> bool;
pub fn igSliderFloat2(
label: *const c_char,
v: *mut c_float,
v_min: c_float,
v_max: c_float,
display_format: *const c_char,
power: c_float,
) -> bool;
pub fn igSliderFloat3(
label: *const c_char,
v: *mut c_float,
v_min: c_float,
v_max: c_float,
display_format: *const c_char,
power: c_float,
) -> bool;
pub fn igSliderFloat4(
label: *const c_char,
v: *mut c_float,
v_min: c_float,
v_max: c_float,
display_format: *const c_char,
power: c_float,
) -> bool;
pub fn igSliderAngle(
label: *const c_char,
v_rad: *mut c_float,
v_degrees_min: c_float,
v_degrees_max: c_float,
) -> bool;
pub fn igSliderInt(
label: *const c_char,
v: *mut c_int,
v_min: c_int,
v_max: c_int,
display_format: *const c_char,
) -> bool;
pub fn igSliderInt2(
label: *const c_char,
v: *mut c_int,
v_min: c_int,
v_max: c_int,
display_format: *const c_char,
) -> bool;
pub fn igSliderInt3(
label: *const c_char,
v: *mut c_int,
v_min: c_int,
v_max: c_int,
display_format: *const c_char,
) -> bool;
pub fn igSliderInt4(
label: *const c_char,
v: *mut c_int,
v_min: c_int,
v_max: c_int,
display_format: *const c_char,
) -> bool;
pub fn igVSliderFloat(
label: *const c_char,
size: ImVec2,
v: *mut c_float,
v_min: c_float,
v_max: c_float,
display_format: *const c_char,
power: c_float,
) -> bool;
pub fn igVSliderInt(
label: *const c_char,
size: ImVec2,
v: *mut c_int,
v_min: c_int,
v_max: c_int,
display_format: *const c_char,
) -> bool;
}
// Widgets: Trees
extern "C" {
pub fn igTreeNode(label: *const c_char) -> bool;
@ -1473,6 +1489,7 @@ extern "C" {
// Popup
extern "C" {
pub fn igOpenPopup(str_id: *const c_char);
pub fn igOpenPopupOnItemClick(str_id: *const c_char, mouse_button: c_int) -> bool;
pub fn igBeginPopup(str_id: *const c_char) -> bool;
pub fn igBeginPopupModal(
name: *const c_char,
@ -1511,10 +1528,14 @@ extern "C" {
pub fn igPopClipRect();
}
// Styles
extern "C" {
pub fn igStyleColorsClassic(dst: *mut ImGuiStyle);
}
// Utilities
extern "C" {
pub fn igIsItemHovered() -> bool;
pub fn igIsItemRectHovered() -> bool;
pub fn igIsItemHovered(flags: ImGuiHoveredFlags) -> bool;
pub fn igIsItemActive() -> bool;
pub fn igIsItemClicked(mouse_button: c_int) -> bool;
pub fn igIsItemVisible() -> bool;
@ -1525,15 +1546,13 @@ extern "C" {
pub fn igGetItemRectSize(out: *mut ImVec2);
pub fn igSetItemAllowOverlap();
pub fn igIsWindowFocused() -> bool;
pub fn igIsWindowHovered() -> bool;
pub fn igIsWindowRectHovered() -> bool;
pub fn igIsWindowHovered(flags: ImGuiHoveredFlags) -> bool;
pub fn igIsRootWindowFocused() -> bool;
pub fn igIsRootWindowOrAnyChildFocused() -> bool;
pub fn igIsRootWindowOrAnyChildHovered() -> bool;
pub fn igIsRootWindowOrAnyChildHovered(flags: ImGuiHoveredFlags) -> bool;
pub fn igIsAnyWindowHovered() -> bool;
pub fn igIsRectVisible(item_size: ImVec2) -> bool;
pub fn igIsRectVisible2(rect_min: *const ImVec2, rect_max: *const ImVec2) -> bool;
pub fn igIsPosHoveringAnyWindow(pos: ImVec2) -> bool;
pub fn igGetTime() -> c_float;
pub fn igGetFrameCount() -> c_int;
pub fn igGetStyleColorName(idx: ImGuiCol) -> *const c_char;
@ -1578,17 +1597,22 @@ extern "C" {
out_g: *mut c_float,
out_b: *mut c_float,
);
}
// Inputs
extern "C" {
pub fn igGetKeyIndex(imgui_key: ImGuiKey) -> c_int;
pub fn igIsKeyDown(user_key_index: c_int) -> bool;
pub fn igIsKeyPressed(user_key_index: c_int, repeat: bool) -> bool;
pub fn igIsKeyReleased(user_key_index: c_int) -> bool;
pub fn igGetKeyPressedAmount(key_index: c_int, repeat_delay: c_float, rate: c_float) -> c_int;
pub fn igIsMouseDown(button: c_int) -> bool;
pub fn igIsMouseClicked(button: c_int, repeat: bool) -> bool;
pub fn igIsMouseDoubleClicked(button: c_int) -> bool;
pub fn igIsMouseReleased(button: c_int) -> bool;
pub fn igIsMouseDragging(button: c_int, lock_threshold: c_float) -> bool;
pub fn igIsMouseHoveringRect(r_min: ImVec2, r_max: ImVec2, clip: bool) -> bool;
pub fn igIsMousePosValid(mouse_pos: *const ImVec2) -> bool;
pub fn igGetMousePos(out: *mut ImVec2);
pub fn igGetMousePosOnOpeningCurrentPopup(out: *mut ImVec2);
pub fn igGetMouseDragDelta(out: *mut ImVec2, button: c_int, lock_threshold: c_float);
@ -1599,6 +1623,18 @@ extern "C" {
pub fn igCaptureMouseFromApp(capture: bool);
}
#[allow(non_snake_case)]
#[deprecated(since = "0.0.18", note = "please use igIsItemHovered instead")]
pub unsafe fn igIsItemRectHovered() -> bool { igIsItemHovered(ImGuiHoveredFlags::RectOnly) }
#[allow(non_snake_case)]
#[deprecated(since = "0.0.18", note = "please use igIsWindowHovered instead")]
pub unsafe fn igIsWindowRectHovered() -> bool {
igIsWindowHovered(
ImGuiHoveredFlags::AllowWhenBlockedByPopup | ImGuiHoveredFlags::AllowWhenBlockedByActiveItem,
)
}
// Helpers functions to access functions pointers in ImGui::GetIO()
extern "C" {
pub fn igMemAlloc(sz: usize) -> *mut c_void;
@ -1730,13 +1766,13 @@ extern "C" {
// ImGuiListClipper
extern "C" {
pub fn ImGuiListClipper_Step(clipper: *mut ImGuiListClipper) -> bool;
pub fn ImGuiListClipper_Begin(
clipper: *mut ImGuiListClipper,
count: c_int,
items_height: c_float,
);
pub fn ImGuiListClipper_End(clipper: *mut ImGuiListClipper);
pub fn ImGuiListClipper_Step(clipper: *mut ImGuiListClipper) -> bool;
pub fn ImGuiListClipper_GetDisplayStart(clipper: *mut ImGuiListClipper) -> c_int;
pub fn ImGuiListClipper_GetDisplayEnd(clipper: *mut ImGuiListClipper) -> c_int;
}
@ -2084,9 +2120,9 @@ extern "C" {
pub fn ImFont_GetScale(font: *const ImFont) -> c_float;
pub fn ImFont_SetScale(font: *mut ImFont, Scale_: c_float);
pub fn ImFont_GetDisplayOffset(font: *const ImFont, out: *mut ImVec2);
pub fn ImFont_GetFallbackGlyph(font: *const ImFont) -> *const Glyph;
pub fn ImFont_SetFallbackGlyph(font: *mut ImFont, FallbackGlyph: *const Glyph);
pub fn ImFont_GetFallbackXAdvance(font: *const ImFont) -> c_float;
pub fn ImFont_GetFallbackGlyph(font: *const ImFont) -> *const ImFontGlyph;
pub fn ImFont_SetFallbackGlyph(font: *mut ImFont, FallbackGlyph: *const ImFontGlyph);
pub fn ImFont_GetFallbackAdvanceX(font: *const ImFont) -> c_float;
pub fn ImFont_GetFallbackChar(font: *const ImFont) -> ImWchar;
pub fn ImFont_GetConfigDataCount(font: *const ImFont) -> c_short;
pub fn ImFont_GetConfigData(font: *mut ImFont) -> *mut ImFontConfig;
@ -2094,9 +2130,9 @@ extern "C" {
pub fn ImFont_GetAscent(font: *const ImFont) -> c_float;
pub fn ImFont_GetDescent(font: *const ImFont) -> c_float;
pub fn ImFont_GetMetricsTotalSurface(font: *const ImFont) -> c_int;
pub fn ImFont_Clear(font: *mut ImFont);
pub fn ImFont_ClearOutputData(font: *mut ImFont);
pub fn ImFont_BuildLookupTable(font: *mut ImFont);
pub fn ImFont_FindGlyph(font: *const ImFont, c: ImWchar) -> *const Glyph;
pub fn ImFont_FindGlyph(font: *const ImFont, c: ImWchar) -> *const ImFontGlyph;
pub fn ImFont_SetFallbackChar(font: *mut ImFont, c: ImWchar);
pub fn ImFont_GetCharAdvance(font: *const ImFont, c: ImWchar) -> c_float;
pub fn ImFont_IsLoaded(font: *const ImFont) -> bool;
@ -2139,10 +2175,19 @@ extern "C" {
);
}
#[allow(non_snake_case)]
#[deprecated(since = "0.0.18", note = "please use ImFont_ClearOutputData instead")]
pub unsafe fn ImFont_Clear(font: *mut ImFont) { ImFont_ClearOutputData(font); }
#[allow(non_snake_case)]
#[deprecated(since = "0.0.18", note = "please use ImFont_GetFallbackChar instead")]
pub unsafe fn ImFont_GetFallbackXAdvance(font: *const ImFont) -> c_float {
ImFont_GetFallbackAdvanceX(font)
}
// ImFont::Glyph
extern "C" {
pub fn ImFont_Glyphs_size(font: *const ImFont) -> c_int;
pub fn ImFont_Glyphs_index(font: *mut ImFont, index: c_int) -> *mut Glyph;
pub fn ImFont_Glyphs_index(font: *mut ImFont, index: c_int) -> *mut ImFontGlyph;
}
// ImFont::IndexXAdvance

@ -1 +1 @@
Subproject commit 6a31578c1ecb28b9ca705d357cee1baea3adbadc
Subproject commit 511218914b6dde6d5e52c0d98454ead3369eb38d

View File

@ -8,8 +8,8 @@ use std::slice;
use std::str;
use sys::ImGuiStyleVar;
pub use sys::{ImDrawIdx, ImDrawVert, ImGuiColorEditFlags, ImGuiInputTextFlags, ImGuiKey,
ImGuiSelectableFlags, ImGuiCond, ImGuiCol, ImGuiStyle, ImGuiTreeNodeFlags,
pub use sys::{ImDrawIdx, ImDrawVert, ImGuiColorEditFlags, ImGuiHoveredFlags, ImGuiInputTextFlags,
ImGuiKey, ImGuiSelectableFlags, ImGuiCond, ImGuiCol, ImGuiStyle, ImGuiTreeNodeFlags,
ImGuiWindowFlags, ImVec2, ImVec4};
pub use child_frame::ChildFrame;
pub use color_editors::{ColorButton, ColorEdit, ColorEditMode, ColorFormat, ColorPicker,
@ -1079,5 +1079,7 @@ impl<'ui> Ui<'ui> {
/// # fn main() {
/// # }
/// ```
pub fn is_item_hovered(&self) -> bool { unsafe { sys::igIsItemHovered() } }
pub fn is_item_hovered(&self) -> bool {
unsafe { sys::igIsItemHovered(ImGuiHoveredFlags::empty()) }
}
}

View File

@ -12,7 +12,6 @@ pub struct Window<'ui, 'p> {
size_cond: ImGuiCond,
name: &'p ImStr,
opened: Option<&'p mut bool>,
bg_alpha: f32,
flags: ImGuiWindowFlags,
_phantom: PhantomData<&'ui Ui<'ui>>,
}
@ -26,7 +25,6 @@ impl<'ui, 'p> Window<'ui, 'p> {
size_cond: ImGuiCond::empty(),
name: name,
opened: None,
bg_alpha: -1.0,
flags: ImGuiWindowFlags::empty(),
_phantom: PhantomData,
}
@ -48,13 +46,6 @@ impl<'ui, 'p> Window<'ui, 'p> {
self.opened = Some(opened);
self
}
#[deprecated(since = "0.0.17",
note = "please use with_color_var and ImGuiCol::WindowBg instead")]
#[inline]
pub fn bg_alpha(mut self, bg_alpha: f32) -> Self {
self.bg_alpha = bg_alpha;
self
}
#[inline]
pub fn flags(mut self, flags: ImGuiWindowFlags) -> Self {
self.flags = flags;
@ -160,18 +151,16 @@ impl<'ui, 'p> Window<'ui, 'p> {
pub fn build<F: FnOnce()>(self, f: F) {
let render = unsafe {
if !self.pos_cond.is_empty() {
sys::igSetNextWindowPos(self.pos.into(), self.pos_cond);
sys::igSetNextWindowPos(self.pos.into(), self.pos_cond, ImVec2::zero());
}
if !self.size_cond.is_empty() {
sys::igSetNextWindowSize(self.size.into(), self.size_cond);
}
sys::igBegin2(
sys::igBegin(
self.name.as_ptr(),
self.opened.map(|x| x as *mut bool).unwrap_or(
ptr::null_mut(),
),
ImVec2::new(0.0, 0.0),
self.bg_alpha,
self.flags,
)
};