use std::os::raw::{c_char, c_float, c_int, c_short, c_uchar, c_uint, c_ushort, c_void};
use std::slice;
use crate::enums::{ImGuiCol, ImGuiKey, ImGuiMouseCursor, ImGuiNavInput};
use crate::flags::{
ImDrawCornerFlags, ImDrawListFlags, ImFontAtlasFlags, ImGuiBackendFlags, ImGuiConfigFlags,
ImGuiInputTextFlags,
};
use crate::{ImDrawCallback, ImDrawIdx, ImGuiID, ImTextureID, ImU32, ImVec2, ImVec4, ImWchar};
#[repr(C)]
pub struct GlyphRangesBuilder {
pub used_chars: ImVector<c_uchar>,
}
#[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,
}
#[repr(C)]
pub struct ImDrawChannel {
pub cmd_buffer: ImVector<ImDrawCmd>,
pub idx_buffer: ImVector<ImDrawIdx>,
}
#[repr(C)]
pub struct ImDrawCmd {
pub elem_count: c_uint,
pub clip_rect: ImVec4,
pub texture_id: ImTextureID,
pub user_callback: ImDrawCallback,
pub user_callback_data: *mut c_void,
}
#[repr(C)]
pub struct ImDrawData {
pub valid: bool,
pub cmd_lists: *mut *mut ImDrawList,
pub cmd_lists_count: c_int,
pub total_idx_count: c_int,
pub total_vtx_count: c_int,
pub display_pos: ImVec2,
pub display_size: ImVec2,
}
impl ImDrawData {
pub unsafe fn cmd_lists(&self) -> &[*const ImDrawList] {
let cmd_lists = self.cmd_lists as *const *const ImDrawList;
slice::from_raw_parts(cmd_lists, self.cmd_lists_count as usize)
}
}
#[repr(C)]
pub struct ImDrawList {
pub cmd_buffer: ImVector<ImDrawCmd>,
pub idx_buffer: ImVector<ImDrawIdx>,
pub vtx_buffer: ImVector<ImDrawVert>,
pub flags: ImDrawListFlags,
data: *const ImDrawListSharedData,
owner_name: *const c_char,
vtx_current_idx: c_uint,
vtx_write_ptr: *mut ImDrawVert,
idx_write_ptr: *mut ImDrawIdx,
clip_rect_stack: ImVector<ImVec4>,
texture_id_stack: ImVector<ImTextureID>,
path: ImVector<ImVec2>,
channels_current: c_int,
channels_count: c_int,
channels: ImVector<ImDrawChannel>,
}
#[repr(C)]
pub struct ImDrawListSharedData {
tex_uv_white_pixel: ImVec2,
font: *mut ImFont,
font_size: c_float,
curve_tessellation_tol: c_float,
clip_rect_fullscreen: ImVec4,
circle_vtx12: [ImVec2; 12],
}
#[repr(C)]
#[derive(Copy, Clone, Debug, Default)]
pub struct ImDrawVert {
pub pos: ImVec2,
pub uv: ImVec2,
pub col: ImU32,
}
#[repr(C)]
pub struct ImFont {
pub font_size: c_float,
pub scale: c_float,
pub display_offset: ImVec2,
pub glyphs: ImVector<ImFontGlyph>,
pub index_advance_x: ImVector<c_float>,
pub index_lookup: ImVector<ImWchar>,
pub fallback_glyph: *const ImFontGlyph,
pub fallback_advance_x: c_float,
pub fallback_char: ImWchar,
pub config_data_count: c_short,
pub config_data: *mut ImFontConfig,
pub container_font_atlas: *mut ImFontAtlas,
pub ascent: c_float,
pub descent: c_float,
pub dirty_lookup_tables: bool,
pub metrics_total_surface: c_int,
}
#[repr(C)]
pub struct ImFontAtlas {
pub locked: bool,
pub flags: ImFontAtlasFlags,
pub tex_id: ImTextureID,
pub tex_desired_width: c_int,
pub tex_glyph_padding: c_int,
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_uv_scale: ImVec2,
pub tex_uv_white_pixel: ImVec2,
pub fonts: ImVector<*mut ImFont>,
pub custom_rects: ImVector<CustomRect>,
pub config_data: ImVector<ImFontConfig>,
pub custom_rect_ids: [c_int; 1],
}
#[repr(C)]
pub struct ImFontConfig {
pub font_data: *mut c_void,
pub font_data_size: c_int,
pub font_data_owned_by_atlas: bool,
pub font_no: c_int,
pub size_pixels: c_float,
pub oversample_h: c_int,
pub oversample_v: c_int,
pub pixel_snap_h: bool,
pub glyph_extra_spacing: ImVec2,
pub glyph_offset: ImVec2,
pub glyph_ranges: *const ImWchar,
pub glyph_min_advance_x: c_float,
pub glyph_max_advance_x: c_float,
pub merge_mode: bool,
pub rasterizer_flags: c_uint,
pub rasterizer_multiply: c_float,
name: [c_char; 40],
dst_font: *mut ImFont,
}
#[repr(C)]
#[derive(Copy, Clone, Debug, Default)]
pub struct ImFontGlyph {
pub codepoint: ImWchar,
pub advance_x: c_float,
pub x0: c_float,
pub y0: c_float,
pub x1: c_float,
pub y1: c_float,
pub u0: c_float,
pub v0: c_float,
pub u1: c_float,
pub v1: c_float,
}
#[repr(C)]
pub struct ImGuiInputTextCallbackData {
pub event_flag: ImGuiInputTextFlags,
pub flags: ImGuiInputTextFlags,
pub user_data: *mut c_void,
pub event_char: ImWchar,
pub event_key: ImGuiKey,
pub buf: *mut c_char,
pub buf_text_len: c_int,
pub buf_size: c_int,
pub buf_dirty: bool,
pub cursor_pos: c_int,
pub selection_start: c_int,
pub selection_end: c_int,
}
#[repr(C)]
pub struct ImGuiIO {
pub config_flags: ImGuiConfigFlags,
pub backend_flags: ImGuiBackendFlags,
pub display_size: ImVec2,
pub delta_time: c_float,
pub ini_saving_rate: c_float,
pub ini_filename: *const c_char,
pub log_filename: *const c_char,
pub mouse_double_click_time: c_float,
pub mouse_double_click_max_dist: c_float,
pub mouse_drag_threshold: c_float,
pub key_map: [c_int; ImGuiKey::COUNT],
pub key_repeat_delay: c_float,
pub key_repeat_rate: c_float,
pub user_data: *mut c_void,
pub fonts: *mut ImFontAtlas,
pub font_global_scale: c_float,
pub font_allow_user_scaling: bool,
pub font_default: *mut ImFont,
pub display_framebuffer_scale: ImVec2,
pub display_visible_min: ImVec2,
pub display_visible_max: ImVec2,
pub mouse_draw_cursor: bool,
pub config_mac_osx_behaviors: bool,
pub config_input_text_cursor_blink: bool,
pub config_resize_windows_from_edges: bool,
pub backend_platform_name: *const c_char,
pub backend_renderer_name: *const c_char,
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 ime_set_input_screen_pos_fn: Option<extern "C" fn(x: c_int, y: c_int)>,
pub ime_window_handle: *mut c_void,
pub render_draw_lists_fn_unused: *mut c_void,
pub mouse_pos: ImVec2,
pub mouse_down: [bool; 5],
pub mouse_wheel: c_float,
pub mouse_wheel_h: c_float,
pub key_ctrl: bool,
pub key_shift: bool,
pub key_alt: bool,
pub key_super: bool,
pub keys_down: [bool; 512],
pub input_characters: [ImWchar; 16 + 1],
pub nav_inputs: [c_float; ImGuiNavInput::COUNT_INTERNAL],
pub want_capture_mouse: bool,
pub want_capture_keyboard: bool,
pub want_text_input: bool,
pub want_set_mouse_pos: bool,
pub want_save_ini_settings: bool,
pub nav_active: bool,
pub nav_visible: bool,
pub framerate: c_float,
pub metrics_render_vertices: c_int,
pub metrics_render_indices: c_int,
pub metrics_render_windows: c_int,
pub metrics_active_windows: c_int,
pub metrics_active_allocations: c_int,
pub mouse_delta: ImVec2,
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_abs: [ImVec2; 5],
mouse_drag_max_distance_sqr: [c_float; 5],
keys_down_duration: [c_float; 512],
keys_down_duration_prev: [c_float; 512],
nav_inputs_down_duration: [c_float; ImGuiNavInput::COUNT_INTERNAL],
nav_inputs_down_duration_prev: [c_float; ImGuiNavInput::COUNT_INTERNAL],
}
#[repr(C)]
#[derive(Copy, Clone, Debug)]
pub struct ImGuiListClipper {
pub start_pos_y: c_float,
pub items_height: c_float,
pub items_count: c_int,
pub step_no: c_int,
pub display_start: c_int,
pub display_end: c_int,
}
#[repr(C)]
pub struct ImGuiPayload {
pub data: *const c_void,
pub data_size: c_int,
source_id: ImGuiID,
source_parent_id: ImGuiID,
data_frame_count: c_int,
data_type: [c_char; 32 + 1],
preview: bool,
delivery: bool,
}
#[repr(C)]
pub struct ImGuiSizeCallbackData {
pub user_data: *mut c_void,
pub pos: ImVec2,
pub current_size: ImVec2,
pub desired_size: ImVec2,
}
#[repr(C)]
pub struct ImGuiStorage {
pub data: ImVector<Pair>,
}
#[repr(C)]
#[derive(Clone)]
pub struct ImGuiStyle {
pub alpha: c_float,
pub window_padding: ImVec2,
pub window_rounding: c_float,
pub window_border_size: c_float,
pub window_min_size: ImVec2,
pub window_title_align: ImVec2,
pub child_rounding: c_float,
pub child_border_size: c_float,
pub popup_rounding: c_float,
pub popup_border_size: c_float,
pub frame_padding: ImVec2,
pub frame_rounding: c_float,
pub frame_border_size: c_float,
pub item_spacing: ImVec2,
pub item_inner_spacing: ImVec2,
pub touch_extra_padding: ImVec2,
pub indent_spacing: c_float,
pub columns_min_spacing: c_float,
pub scrollbar_size: c_float,
pub scrollbar_rounding: c_float,
pub grab_min_size: c_float,
pub grab_rounding: c_float,
pub button_text_align: ImVec2,
pub display_window_padding: ImVec2,
pub display_safe_area_padding: ImVec2,
pub mouse_cursor_scale: c_float,
pub anti_aliased_lines: bool,
pub anti_aliased_fill: bool,
pub curve_tessellation_tol: c_float,
pub colors: [ImVec4; ImGuiCol::COUNT],
}
#[repr(C)]
pub struct ImGuiTextBuffer {
pub buf: ImVector<c_char>,
}
#[repr(C)]
pub struct ImGuiTextFilter {
pub input_buf: [c_char; 256],
pub filters: ImVector<TextRange>,
pub count_grep: c_int,
}
#[repr(C)]
pub struct ImVector<T> {
pub size: c_int,
pub capacity: c_int,
pub data: *mut T,
}
impl<T> ImVector<T> {
pub unsafe fn as_slice(&self) -> &[T] {
slice::from_raw_parts(self.data, self.size as usize)
}
}
#[repr(C)]
pub struct Pair {
pub key: ImGuiID,
pub value: PairValue,
}
#[repr(C)]
pub union PairValue {
pub val_i: c_int,
pub val_f: c_float,
pub val_p: *mut c_void,
}
#[repr(C)]
pub struct TextRange {
pub begin: *const c_char,
pub end: *const c_char,
}
extern "C" {
pub fn ImGuiStyle_ScaleAllSizes(this: *mut ImGuiStyle, scale_factor: c_float);
}
extern "C" {
pub fn ImGuiIO_AddInputCharacter(this: *mut ImGuiIO, c: c_ushort);
pub fn ImGuiIO_AddInputCharactersUTF8(this: *mut ImGuiIO, utf8_chars: *const c_char);
pub fn ImGuiIO_ClearInputCharacters(this: *mut ImGuiIO);
}
extern "C" {
pub fn ImGuiTextFilter_Draw(
this: *mut ImGuiTextFilter,
label: *const c_char,
width: c_float,
) -> bool;
pub fn ImGuiTextFilter_PassFilter(
this: *mut ImGuiTextFilter,
text: *const c_char,
text_end: *const c_char,
) -> bool;
pub fn ImGuiTextFilter_Build(this: *mut ImGuiTextFilter);
pub fn ImGuiTextFilter_Clear(this: *mut ImGuiTextFilter);
pub fn ImGuiTextFilter_IsActive(this: *mut ImGuiTextFilter) -> bool;
}
extern "C" {
pub fn TextRange_begin(this: *mut TextRange) -> *const c_char;
pub fn TextRange_end(this: *mut TextRange) -> *const c_char;
pub fn TextRange_empty(this: *mut TextRange) -> bool;
pub fn TextRange_split(this: *mut TextRange, separator: c_char, out: *mut ImVector<TextRange>);
}
extern "C" {
pub fn ImGuiTextBuffer_begin(this: *mut ImGuiTextBuffer) -> *const c_char;
pub fn ImGuiTextBuffer_end(this: *mut ImGuiTextBuffer) -> *const c_char;
pub fn ImGuiTextBuffer_size(this: *mut ImGuiTextBuffer) -> c_int;
pub fn ImGuiTextBuffer_empty(this: *mut ImGuiTextBuffer) -> bool;
pub fn ImGuiTextBuffer_clear(this: *mut ImGuiTextBuffer);
pub fn ImGuiTextBuffer_reserve(this: *mut ImGuiTextBuffer, capacity: c_int);
pub fn ImGuiTextBuffer_c_str(this: *mut ImGuiTextBuffer) -> *const c_char;
pub fn ImGuiTextBuffer_appendf(this: *mut ImGuiTextBuffer, fmt: *const c_char, ...);
}
extern "C" {
pub fn ImGuiStorage_Clear(this: *mut ImGuiStorage);
pub fn ImGuiStorage_GetInt(this: *mut ImGuiStorage, key: ImGuiID, default_val: c_int) -> c_int;
pub fn ImGuiStorage_SetInt(this: *mut ImGuiStorage, key: ImGuiID, val: c_int);
pub fn ImGuiStorage_GetBool(this: *mut ImGuiStorage, key: ImGuiID, default_val: bool) -> bool;
pub fn ImGuiStorage_SetBool(this: *mut ImGuiStorage, key: ImGuiID, val: bool);
pub fn ImGuiStorage_GetFloat(
this: *mut ImGuiStorage,
key: ImGuiID,
default_val: c_float,
) -> c_float;
pub fn ImGuiStorage_SetFloat(this: *mut ImGuiStorage, key: ImGuiID, val: c_float);
pub fn ImGuiStorage_GetVoidPtr(this: *mut ImGuiStorage, key: ImGuiID);
pub fn ImGuiStorage_SetVoidPtr(this: *mut ImGuiStorage, key: ImGuiID, val: *mut c_void);
pub fn ImGuiStorage_GetIntRef(
this: *mut ImGuiStorage,
key: ImGuiID,
default_val: c_int,
) -> *mut c_int;
pub fn ImGuiStorage_GetBoolRef(
this: *mut ImGuiStorage,
key: ImGuiID,
default_val: bool,
) -> *mut bool;
pub fn ImGuiStorage_GetFloatRef(
this: *mut ImGuiStorage,
key: ImGuiID,
default_val: c_float,
) -> *mut c_float;
pub fn ImGuiStorage_GetVoidPtrRef(
this: *mut ImGuiStorage,
key: ImGuiID,
default_val: *mut c_void,
) -> *mut *mut c_void;
pub fn ImGuiStorage_SetAllInt(this: *mut ImGuiStorage, val: c_int);
pub fn ImGuiStorage_BuildSortByKey(this: *mut ImGuiStorage);
}
extern "C" {
pub fn ImGuiInputTextCallbackData_DeleteChars(
this: *mut ImGuiInputTextCallbackData,
pos: c_int,
bytes_count: c_int,
);
pub fn ImGuiInputTextCallbackData_InsertChars(
this: *mut ImGuiInputTextCallbackData,
pos: c_int,
text: *const c_char,
text_end: *const c_char,
);
pub fn ImGuiInputTextCallbackData_HasSelection(this: *mut ImGuiInputTextCallbackData) -> bool;
}
extern "C" {
pub fn ImGuiPayload_Clear(this: *mut ImGuiPayload);
pub fn ImGuiPayload_IsDataType(this: *mut ImGuiPayload, type_: *const c_char) -> bool;
pub fn ImGuiPayload_IsPreview(this: *mut ImGuiPayload) -> bool;
pub fn ImGuiPayload_IsDelivery(this: *mut ImGuiPayload) -> bool;
}
extern "C" {
pub fn ImGuiListClipper_Step(this: *mut ImGuiListClipper) -> bool;
pub fn ImGuiListClipper_Begin(
this: *mut ImGuiListClipper,
items_count: c_int,
items_height: c_float,
);
pub fn ImGuiListClipper_End(this: *mut ImGuiListClipper);
}
extern "C" {
pub fn ImDrawList_PushClipRect(
this: *mut ImDrawList,
clip_rect_min: ImVec2,
clip_rect_max: ImVec2,
intersect_with_current_clip_rect: bool,
);
pub fn ImDrawList_PushClipRectFullScreen(this: *mut ImDrawList);
pub fn ImDrawList_PopClipRect(this: *mut ImDrawList);
pub fn ImDrawList_PushTextureID(this: *mut ImDrawList, texture_id: ImTextureID);
pub fn ImDrawList_PopTextureID(this: *mut ImDrawList);
pub fn ImDrawList_GetClipRectMin_nonUDT2(this: *mut ImDrawList) -> ImVec2;
pub fn ImDrawList_GetClipRectMax_nonUDT2(this: *mut ImDrawList) -> ImVec2;
pub fn ImDrawList_AddLine(
this: *mut ImDrawList,
a: ImVec2,
b: ImVec2,
col: ImU32,
thickness: c_float,
);
pub fn ImDrawList_AddRect(
this: *mut ImDrawList,
a: ImVec2,
b: ImVec2,
col: ImU32,
rounding: c_float,
rounding_corners_flags: ImDrawCornerFlags,
thickness: c_float,
);
pub fn ImDrawList_AddRectFilled(
this: *mut ImDrawList,
a: ImVec2,
b: ImVec2,
col: ImU32,
rounding: c_float,
rounding_corners_flags: ImDrawCornerFlags,
);
pub fn ImDrawList_AddRectFilledMultiColor(
this: *mut ImDrawList,
a: ImVec2,
b: ImVec2,
col_upr_left: ImU32,
col_upr_right: ImU32,
col_bot_right: ImU32,
col_bot_left: ImU32,
);
pub fn ImDrawList_AddQuad(
this: *mut ImDrawList,
a: ImVec2,
b: ImVec2,
c: ImVec2,
d: ImVec2,
col: ImU32,
thickness: c_float,
);
pub fn ImDrawList_AddQuadFilled(
this: *mut ImDrawList,
a: ImVec2,
b: ImVec2,
c: ImVec2,
d: ImVec2,
col: ImU32,
);
pub fn ImDrawList_AddTriangle(
this: *mut ImDrawList,
a: ImVec2,
b: ImVec2,
c: ImVec2,
col: ImU32,
thickness: c_float,
);
pub fn ImDrawList_AddTriangleFilled(
this: *mut ImDrawList,
a: ImVec2,
b: ImVec2,
c: ImVec2,
col: ImU32,
);
pub fn ImDrawList_AddCircle(
this: *mut ImDrawList,
centre: ImVec2,
radius: c_float,
col: ImU32,
num_segments: c_int,
thickness: c_float,
);
pub fn ImDrawList_AddCircleFilled(
this: *mut ImDrawList,
centre: ImVec2,
radius: c_float,
col: ImU32,
num_segments: c_int,
);
pub fn ImDrawList_AddText(
this: *mut ImDrawList,
pos: ImVec2,
col: ImU32,
text_begin: *const c_char,
text_end: *const c_char,
);
pub fn ImDrawList_AddTextFontPtr(
this: *mut ImDrawList,
font: *const ImFont,
font_size: c_float,
pos: ImVec2,
col: ImU32,
text_begin: *const c_char,
text_end: *const c_char,
wrap_width: c_float,
cpu_fine_clip_rect: *const ImVec4,
);
pub fn ImDrawList_AddImage(
this: *mut ImDrawList,
user_texture_id: ImTextureID,
a: ImVec2,
b: ImVec2,
uv_a: ImVec2,
uv_b: ImVec2,
col: ImU32,
);
pub fn ImDrawList_AddImageQuad(
this: *mut ImDrawList,
user_texture_id: ImTextureID,
a: ImVec2,
b: ImVec2,
c: ImVec2,
d: ImVec2,
uv_a: ImVec2,
uv_b: ImVec2,
uv_c: ImVec2,
uv_d: ImVec2,
col: ImU32,
);
pub fn ImDrawList_AddImageRounded(
this: *mut ImDrawList,
user_texture_id: ImTextureID,
a: ImVec2,
b: ImVec2,
uv_a: ImVec2,
uv_b: ImVec2,
col: ImU32,
rounding: c_float,
rounding_corners: ImDrawCornerFlags,
);
pub fn ImDrawList_AddPolyLine(
this: *mut ImDrawList,
points: *const ImVec2,
num_points: c_int,
col: ImU32,
closed: bool,
thickness: c_float,
);
pub fn ImDrawList_AddConvexPolyFilled(
this: *mut ImDrawList,
points: *const ImVec2,
num_points: c_int,
col: ImU32,
);
pub fn ImDrawList_AddBezierCurve(
this: *mut ImDrawList,
pos0: ImVec2,
cp0: ImVec2,
cp1: ImVec2,
pos1: ImVec2,
col: ImU32,
thickness: c_float,
num_segments: c_int,
);
pub fn ImDrawList_PathClear(this: *mut ImDrawList);
pub fn ImDrawList_PathLineTo(this: *mut ImDrawList, pos: ImVec2);
pub fn ImDrawList_PathLineToMergeDuplicate(this: *mut ImDrawList, pos: ImVec2);
pub fn ImDrawList_PathFillConvex(this: *mut ImDrawList, col: ImU32);
pub fn ImDrawList_PathStroke(
this: *mut ImDrawList,
col: ImU32,
closed: bool,
thickness: c_float,
);
pub fn ImDrawList_PathArcTo(
this: *mut ImDrawList,
centre: ImVec2,
radius: c_float,
a_min: c_float,
a_max: c_float,
num_segments: c_int,
);
pub fn ImDrawList_PathArcToFast(
this: *mut ImDrawList,
centre: ImVec2,
radius: c_float,
a_min_of_12: c_int,
a_max_of_12: c_int,
);
pub fn ImDrawList_PathBezierCurveTo(
this: *mut ImDrawList,
p1: ImVec2,
p2: ImVec2,
p3: ImVec2,
num_segments: c_int,
);
pub fn ImDrawList_PathRect(
this: *mut ImDrawList,
rect_min: ImVec2,
rect_max: ImVec2,
rounding: c_float,
rounding_corners_flags: c_int,
);
pub fn ImDrawList_ChannelsSplit(this: *mut ImDrawList, channels_count: c_int);
pub fn ImDrawList_ChannelsMerge(this: *mut ImDrawList);
pub fn ImDrawList_ChannelsSetCurrent(this: *mut ImDrawList, channel_index: c_int);
pub fn ImDrawList_AddCallback(
this: *mut ImDrawList,
callback: ImDrawCallback,
callback_data: *mut c_void,
);
pub fn ImDrawList_AddDrawCmd(this: *mut ImDrawList);
pub fn ImDrawList_CloneOutput(this: *mut ImDrawList) -> *mut ImDrawList;
pub fn ImDrawList_Clear(this: *mut ImDrawList);
pub fn ImDrawList_ClearFreeMemory(this: *mut ImDrawList);
pub fn ImDrawList_PrimReserve(this: *mut ImDrawList, idx_count: c_int, vtx_count: c_int);
pub fn ImDrawList_PrimRect(this: *mut ImDrawList, a: ImVec2, b: ImVec2, col: ImU32);
pub fn ImDrawList_PrimRectUV(
this: *mut ImDrawList,
a: ImVec2,
b: ImVec2,
uv_a: ImVec2,
uv_b: ImVec2,
col: ImU32,
);
pub fn ImDrawList_PrimQuadUV(
this: *mut ImDrawList,
a: ImVec2,
b: ImVec2,
c: ImVec2,
d: ImVec2,
uv_a: ImVec2,
uv_b: ImVec2,
uv_c: ImVec2,
uv_d: ImVec2,
col: ImU32,
);
pub fn ImDrawList_PrimWriteVtx(this: *mut ImDrawList, pos: ImVec2, uv: ImVec2, col: ImU32);
pub fn ImDrawList_PrimWriteIdx(this: *mut ImDrawList, idx: ImDrawIdx);
pub fn ImDrawList_PrimVtx(this: *mut ImDrawList, pos: ImVec2, uv: ImVec2, col: ImU32);
pub fn ImDrawList_UpdateClipRect(this: *mut ImDrawList);
pub fn ImDrawList_UpdateTextureID(this: *mut ImDrawList);
}
extern "C" {
pub fn ImDrawData_Clear(this: *mut ImDrawData);
pub fn ImDrawData_DeIndexAllBuffers(this: *mut ImDrawData);
pub fn ImDrawData_ScaleClipRects(this: *mut ImDrawData, sc: ImVec2);
}
extern "C" {
pub fn ImFontAtlas_AddFont(
this: *mut ImFontAtlas,
font_cfg: *const ImFontConfig,
) -> *mut ImFont;
pub fn ImFontAtlas_AddFontDefault(
this: *mut ImFontAtlas,
font_cfg: *const ImFontConfig,
) -> *mut ImFont;
pub fn ImFontAtlas_AddFontFromFileTTF(
this: *mut ImFontAtlas,
filename: *const c_char,
size_pixels: c_float,
font_cfg: *const ImFontConfig,
glyph_ranges: *const ImWchar,
) -> *mut ImFont;
pub fn ImFontAtlas_AddFontFromMemoryTTF(
this: *mut ImFontAtlas,
font_data: *mut c_void,
font_size: c_int,
size_pixels: c_float,
font_cfg: *const ImFontConfig,
glyph_ranges: *const ImWchar,
) -> *mut ImFont;
pub fn ImFontAtlas_AddFontFromMemoryCompressedTTF(
this: *mut ImFontAtlas,
compressed_font_data: *const c_void,
compressed_font_size: c_int,
size_pixels: c_float,
font_cfg: *const ImFontConfig,
glyph_ranges: *const ImWchar,
) -> *mut ImFont;
pub fn ImFontAtlas_AddFontFromMemoryCompressedBase85TTF(
this: *mut ImFontAtlas,
compressed_font_data_base85: *const c_char,
size_pixels: c_float,
font_cfg: *const ImFontConfig,
glyph_ranges: *const ImWchar,
) -> *mut ImFont;
pub fn ImFontAtlas_ClearInputData(this: *mut ImFontAtlas);
pub fn ImFontAtlas_ClearTexData(this: *mut ImFontAtlas);
pub fn ImFontAtlas_ClearFonts(this: *mut ImFontAtlas);
pub fn ImFontAtlas_Clear(this: *mut ImFontAtlas);
pub fn ImFontAtlas_Build(this: *mut ImFontAtlas) -> bool;
pub fn ImFontAtlas_IsBuilt(this: *mut ImFontAtlas) -> bool;
pub fn ImFontAtlas_GetTexDataAsAlpha8(
this: *mut ImFontAtlas,
out_pixels: *mut *mut c_uchar,
out_width: *mut c_int,
out_height: *mut c_int,
out_bytes_per_pixel: *mut c_int,
);
pub fn ImFontAtlas_GetTexDataAsRGBA32(
this: *mut ImFontAtlas,
out_pixels: *mut *mut c_uchar,
out_width: *mut c_int,
out_height: *mut c_int,
out_bytes_per_pixel: *mut c_int,
);
pub fn ImFontAtlas_SetTexID(this: *mut ImFontAtlas, id: ImTextureID);
pub fn ImFontAtlas_GetGlyphRangesDefault(this: *mut ImFontAtlas) -> *const ImWchar;
pub fn ImFontAtlas_GetGlyphRangesKorean(this: *mut ImFontAtlas) -> *const ImWchar;
pub fn ImFontAtlas_GetGlyphRangesJapanese(this: *mut ImFontAtlas) -> *const ImWchar;
pub fn ImFontAtlas_GetGlyphRangesChineseFull(this: *mut ImFontAtlas) -> *const ImWchar;
pub fn ImFontAtlas_GetGlyphRangesChineseSimplifiedCommon(
this: *mut ImFontAtlas,
) -> *const ImWchar;
pub fn ImFontAtlas_GetGlyphRangesCyrillic(this: *mut ImFontAtlas) -> *const ImWchar;
pub fn ImFontAtlas_GetGlyphRangesThai(this: *mut ImFontAtlas) -> *const ImWchar;
pub fn ImFontAtlas_AddCustomRectRegular(
this: *mut ImFontAtlas,
id: c_uint,
width: c_int,
height: c_int,
) -> c_int;
pub fn ImFontAtlas_AddCustomRectFontGlyph(
this: *mut ImFontAtlas,
font: *mut ImFont,
id: ImWchar,
width: c_int,
height: c_int,
advance_x: c_float,
offset: ImVec2,
) -> c_int;
pub fn ImFontAtlas_GetCustomRectByIndex(
this: *mut ImFontAtlas,
index: c_int,
) -> *const CustomRect;
pub fn ImFontAtlas_CalcCustomRectUV(
this: *mut ImFontAtlas,
rect: *const CustomRect,
out_uv_min: *mut ImVec2,
out_uv_max: *mut ImVec2,
);
pub fn ImFontAtlas_GetMouseCursorTexData(
this: *mut ImFontAtlas,
cursor: ImGuiMouseCursor,
out_offset: *mut ImVec2,
out_size: *mut ImVec2,
out_uv_border: *mut ImVec2,
out_uv_fill: *mut ImVec2,
) -> bool;
}
extern "C" {
pub fn GlyphRangesBuilder_GetBit(this: *mut GlyphRangesBuilder, n: c_int) -> bool;
pub fn GlyphRangesBuilder_SetBit(this: *mut GlyphRangesBuilder, n: c_int);
pub fn GlyphRangesBuilder_AddChar(this: *mut GlyphRangesBuilder, c: ImWchar);
pub fn GlyphRangesBuilder_AddText(
this: *mut GlyphRangesBuilder,
text: *const c_char,
text_end: *const c_char,
);
pub fn GlyphRangesBuilder_AddRanges(this: *mut GlyphRangesBuilder, ranges: *const ImWchar);
pub fn GlyphRangesBuilder_BuildRanges(
this: *mut GlyphRangesBuilder,
out_ranges: *mut ImVector<ImWchar>,
);
}
extern "C" {
pub fn CustomRect_IsPacked(this: *mut CustomRect) -> bool;
}
extern "C" {
pub fn ImFont_ClearOutputData(this: *mut ImFont);
pub fn ImFont_BuildLookupTable(this: *mut ImFont);
pub fn ImFont_FindGlyph(this: *mut ImFont, c: ImWchar) -> *const ImFontGlyph;
pub fn ImFont_FindGlyphNoFallback(this: *mut ImFont, c: ImWchar) -> *const ImFontGlyph;
pub fn ImFont_SetFallbackChar(this: *mut ImFont, c: ImWchar);
pub fn ImFont_GetCharAdvance(this: *mut ImFont, c: ImWchar) -> c_float;
pub fn ImFont_IsLoaded(this: *mut ImFont) -> bool;
pub fn ImFont_GetDebugName(this: *mut ImFont) -> *const c_char;
pub fn ImFont_CalcTextSizeA_nonUDT2(
this: *mut ImFont,
size: c_float,
max_width: c_float,
wrap_width: c_float,
text_begin: *const c_char,
text_end: *const c_char,
remaining: *mut *const c_char,
) -> ImVec2;
pub fn ImFont_CalcWordWrapPositionA(
this: *mut ImFont,
scale: c_float,
text: *const c_char,
text_end: *const c_char,
wrap_width: c_float,
) -> *const c_char;
pub fn ImFont_RenderChar(
this: *mut ImFont,
draw_list: *mut ImDrawList,
size: c_float,
pos: ImVec2,
col: ImU32,
c: ImWchar,
);
pub fn ImFont_RenderText(
this: *mut ImFont,
draw_list: *mut ImDrawList,
size: c_float,
pos: ImVec2,
col: ImU32,
clip_rect: ImVec4,
text_begin: *const c_char,
text_end: *const c_char,
wrap_width: c_float,
cpu_fine_clip: bool,
);
pub fn ImFont_GrowIndex(this: *mut ImFont, new_size: c_int);
pub fn ImFont_AddGlyph(
this: *mut ImFont,
c: ImWchar,
x0: c_float,
y0: c_float,
x1: c_float,
y1: c_float,
u0: c_float,
v0: c_float,
u1: c_float,
v1: c_float,
advance_x: c_float,
);
pub fn ImFont_AddRemapChar(this: *mut ImFont, dst: ImWchar, src: ImWchar, overwrite_dst: bool);
}