#![allow(non_camel_case_types)]
use std::ffi::{CStr, c_char, c_void};
use crate::{Point, Rect, Size};
pub(crate) type wef_browser_t = c_void;
pub(crate) type wef_frame_t = c_void;
pub(crate) type wef_cursor_info_t = c_void;
pub(crate) type wef_file_dialog_callback_t = c_void;
pub(crate) type wef_js_dialog_callback_t = c_void;
pub(crate) type wef_query_callback_t = c_void;
type DestroyFn = extern "C" fn(*mut c_void);
#[repr(C)]
pub(crate) struct CSettings {
pub(crate) locale: *const c_char,
pub(crate) cache_path: *const c_char,
pub(crate) root_cache_path: *const c_char,
pub(crate) browser_subprocess_path: *const c_char,
}
#[repr(C)]
pub(crate) struct CBrowserSettings {
pub(crate) parent: *const c_void,
pub(crate) device_scale_factor: f32,
pub(crate) width: i32,
pub(crate) height: i32,
pub(crate) frame_rate: i32,
pub(crate) url: *const c_char,
pub(crate) inject_javascript: *const c_char,
pub(crate) callbacks: CBrowserCallbacks,
pub(crate) userdata: *mut c_void,
pub(crate) destroy_userdata: DestroyFn,
}
#[repr(C)]
pub(crate) struct CContextMenuParams {
pub(crate) x_crood: i32,
pub(crate) y_crood: i32,
pub(crate) type_flags: i32,
pub(crate) link_url: *const c_char,
pub(crate) unfiltered_link_url: *const c_char,
pub(crate) source_url: *const c_char,
pub(crate) has_image_contents: bool,
pub(crate) title_text: *const c_char,
pub(crate) page_url: *const c_char,
pub(crate) frame_url: *const c_char,
pub(crate) media_type: i32,
pub(crate) media_state_flags: i32,
pub(crate) selection_text: *const c_char,
pub(crate) is_editable: bool,
pub(crate) edit_state_flags: i32,
}
#[repr(C)]
pub(crate) struct CBrowserCallbacks {
pub(crate) on_created: DestroyFn,
pub(crate) on_popup_show: extern "C" fn(*mut c_void, bool),
pub(crate) on_popup_position: extern "C" fn(*mut c_void, *const Rect<i32>),
pub(crate) on_paint: extern "C" fn(*mut c_void, i32, *const c_void, *const c_void, u32, u32),
pub(crate) on_address_changed: extern "C" fn(*mut c_void, *mut wef_frame_t, *const c_char),
pub(crate) on_title_changed: extern "C" fn(*mut c_void, *const c_char),
pub(crate) on_favicon_url_changed: extern "C" fn(*mut c_void, *const *const c_char, i32),
pub(crate) on_tooltip: extern "C" fn(*mut c_void, *const c_char),
pub(crate) on_status_message: extern "C" fn(*mut c_void, *const c_char),
pub(crate) on_console_message:
extern "C" fn(*mut c_void, *const c_char, i32, *const c_char, i32),
pub(crate) on_cursor_changed: extern "C" fn(
*mut c_void,
cursor_type: i32,
custom_cursor_info: *const wef_cursor_info_t,
) -> bool,
pub(crate) on_before_popup: extern "C" fn(*mut c_void, *const c_char),
pub(crate) on_loading_progress_changed: extern "C" fn(*mut c_void, f32),
pub(crate) on_loading_state_changed: extern "C" fn(*mut c_void, bool, bool, bool),
pub(crate) on_load_start: extern "C" fn(*mut c_void, *mut wef_frame_t),
pub(crate) on_load_end: extern "C" fn(*mut c_void, *mut wef_frame_t),
pub(crate) on_load_error:
extern "C" fn(*mut c_void, *mut wef_frame_t, *const c_char, *const c_char),
pub(crate) on_ime_composition_range_changed: extern "C" fn(*mut c_void, *const Rect<i32>),
pub(crate) on_file_dialog: extern "C" fn(
*mut c_void,
i32,
*const c_char,
*const c_char,
*const c_char,
*const c_char,
*const c_char,
*mut wef_file_dialog_callback_t,
) -> bool,
pub(crate) on_context_menu:
extern "C" fn(*mut c_void, *mut wef_frame_t, *const CContextMenuParams),
pub(crate) on_find_result: extern "C" fn(*mut c_void, i32, i32, *const Rect<i32>, i32, bool),
pub(crate) on_js_dialog: extern "C" fn(
*mut c_void,
i32,
*const c_char,
*const c_char,
*mut wef_js_dialog_callback_t,
) -> bool,
pub(crate) on_query:
extern "C" fn(*mut c_void, *mut wef_frame_t, *const c_char, *mut wef_query_callback_t),
}
#[inline]
pub(crate) fn to_cstr_ptr_opt(s: Option<&CStr>) -> *const c_char {
s.map(|s| s.as_ptr()).unwrap_or(std::ptr::null())
}
unsafe extern "C" {
#[cfg(target_os = "macos")]
pub(crate) unsafe fn wef_load_library(helper: bool) -> *mut c_void;
#[cfg(target_os = "macos")]
pub(crate) unsafe fn wef_unload_library(loader: *mut c_void);
#[cfg(target_os = "macos")]
pub(crate) unsafe fn wef_sandbox_context_create(
args: *const *const c_char,
count: i32,
) -> *mut c_void;
#[cfg(target_os = "macos")]
pub(crate) unsafe fn wef_sandbox_context_destroy(loader: *mut c_void);
pub(crate) unsafe fn wef_init(settings: *const CSettings) -> bool;
pub(crate) unsafe fn wef_exec_process(args: *const *const c_char, count: i32) -> bool;
pub(crate) unsafe fn wef_shutdown();
pub(crate) unsafe fn wef_browser_create(
settings: *const CBrowserSettings,
) -> *mut wef_browser_t;
pub(crate) unsafe fn wef_browser_destroy(browser: *mut wef_browser_t);
pub(crate) unsafe fn wef_browser_is_created(browser: *mut wef_browser_t) -> bool;
pub(crate) unsafe fn wef_browser_set_size(browser: *mut wef_browser_t, width: i32, height: i32);
pub(crate) unsafe fn wef_browser_load_url(cebrowserf: *mut wef_browser_t, url: *const c_char);
pub(crate) unsafe fn wef_browser_can_go_forward(browser: *const wef_browser_t) -> bool;
pub(crate) unsafe fn wef_browser_can_go_back(browser: *const wef_browser_t) -> bool;
pub(crate) unsafe fn wef_browser_go_forward(browser: *mut wef_browser_t);
pub(crate) unsafe fn wef_browser_go_back(browser: *mut wef_browser_t);
pub(crate) unsafe fn wef_browser_reload(browser: *mut wef_browser_t);
pub(crate) unsafe fn wef_browser_reload_ignore_cache(browser: *mut wef_browser_t);
pub(crate) unsafe fn wef_browser_send_mouse_click_event(
browser: *mut wef_browser_t,
mouse_button_type: i32,
mouse_up: bool,
click_count: i32,
modifiers: i32,
);
pub(crate) unsafe fn wef_browser_send_mouse_move_event(
browser: *mut wef_browser_t,
x: i32,
y: i32,
modifiers: i32,
);
pub(crate) unsafe fn wef_browser_send_mouse_wheel_event(
browser: *mut wef_browser_t,
delta_x: i32,
delta_y: i32,
);
pub(crate) unsafe fn wef_browser_send_key_event(
browser: *mut wef_browser_t,
is_press: bool,
key_code: i32,
modifiers: i32,
);
pub(crate) unsafe fn wef_browser_send_char_event(browser: *mut wef_browser_t, ch: u16);
pub(crate) unsafe fn wef_browser_ime_set_composition(
browser: *mut wef_browser_t,
text: *const c_char,
cursor_begin: u32,
cursor_end: u32,
);
pub(crate) unsafe fn wef_browser_ime_commit(browser: *mut wef_browser_t, text: *const c_char);
pub(crate) unsafe fn wef_browser_get_main_frame(
browser: *mut wef_browser_t,
) -> *mut wef_frame_t;
pub(crate) unsafe fn wef_browser_get_focused_frame(
browser: *mut wef_browser_t,
) -> *mut wef_frame_t;
pub(crate) unsafe fn wef_browser_get_frame_by_name(
browser: *mut wef_browser_t,
name: *const c_char,
) -> *mut wef_frame_t;
pub(crate) unsafe fn wef_browser_get_frame_by_identifier(
browser: *mut wef_browser_t,
id: *const c_char,
) -> *mut wef_frame_t;
pub(crate) unsafe fn wef_browser_is_audio_muted(browser: *mut wef_browser_t) -> bool;
pub(crate) unsafe fn wef_browser_set_audio_mute(browser: *mut wef_browser_t, mute: bool);
pub(crate) unsafe fn wef_browser_find(
browser: *mut wef_browser_t,
search_text: *const c_char,
forward: bool,
match_case: bool,
find_next: bool,
);
pub(crate) unsafe fn wef_browser_set_focus(browser: *mut wef_browser_t, focus: bool);
pub(crate) unsafe fn wef_dirty_rects_len(dirty_rects: *const c_void) -> i32;
pub(crate) unsafe fn wef_dirty_rects_get(
dirty_rects: *const c_void,
i: i32,
rect: *mut Rect<i32>,
);
pub(crate) unsafe fn wef_frame_destroy(frame: *mut wef_frame_t);
pub(crate) unsafe fn wef_frame_is_valid(frame: *mut wef_frame_t) -> bool;
pub(crate) unsafe fn wef_frame_is_main(frame: *mut wef_frame_t) -> bool;
pub(crate) unsafe fn wef_frame_name(
frame: *mut wef_frame_t,
userdata: *mut c_void,
callback: extern "C" fn(*mut c_void, *const c_char),
) -> i32;
pub(crate) unsafe fn wef_frame_identifier(
frame: *mut wef_frame_t,
userdata: *mut c_void,
callback: extern "C" fn(*mut c_void, *const c_char),
) -> i32;
pub(crate) unsafe fn wef_frame_get_url(
frame: *mut wef_frame_t,
userdata: *mut c_void,
callback: extern "C" fn(*mut c_void, *const c_char),
) -> i32;
pub(crate) unsafe fn wef_frame_load_url(frame: *mut wef_frame_t, url: *const c_char);
pub(crate) unsafe fn wef_frame_parent(frame: *mut wef_frame_t) -> *mut c_void;
pub(crate) unsafe fn wef_frame_undo(frame: *mut wef_frame_t);
pub(crate) unsafe fn wef_frame_redo(frame: *mut wef_frame_t);
pub(crate) unsafe fn wef_frame_cut(frame: *mut wef_frame_t);
pub(crate) unsafe fn wef_frame_copy(frame: *mut wef_frame_t);
pub(crate) unsafe fn wef_frame_paste(frame: *mut wef_frame_t);
pub(crate) unsafe fn wef_frame_paste_and_match_style(frame: *mut wef_frame_t);
pub(crate) unsafe fn wef_frame_delete(frame: *mut wef_frame_t);
pub(crate) unsafe fn wef_frame_select_all(frame: *mut wef_frame_t);
pub(crate) unsafe fn wef_frame_execute_javascript(frame: *mut wef_frame_t, code: *const c_char);
pub(crate) unsafe fn wef_file_dialog_callback_continue(
callback: *mut wef_file_dialog_callback_t,
file_paths: *const c_char,
);
pub(crate) unsafe fn wef_file_dialog_callback_cancel(callback: *mut wef_file_dialog_callback_t);
pub(crate) unsafe fn wef_file_dialog_callback_destroy(
callback: *mut wef_file_dialog_callback_t,
);
pub(crate) unsafe fn wef_cursor_info_hotspot(
info: *const wef_cursor_info_t,
point: *mut Point<i32>,
);
pub(crate) unsafe fn wef_cursor_info_image_scale_factor(info: *const wef_cursor_info_t) -> f32;
pub(crate) unsafe fn wef_cursor_info_buffer(info: *const wef_cursor_info_t) -> *const c_void;
pub(crate) unsafe fn wef_cursor_info_size(info: *const wef_cursor_info_t, size: *mut Size<i32>);
pub(crate) unsafe fn wef_js_dialog_callback_continue(
callback: *mut wef_js_dialog_callback_t,
success: bool,
user_input: *const c_char,
);
pub(crate) unsafe fn wef_js_dialog_callback_destroy(callback: *mut wef_js_dialog_callback_t);
pub(crate) unsafe fn wef_query_callback_success(
callback: *mut wef_query_callback_t,
response: *const c_char,
);
pub(crate) unsafe fn wef_query_callback_failure(
callback: *mut wef_query_callback_t,
error: *const c_char,
);
pub(crate) unsafe fn wef_query_callback_destroy(callback: *mut wef_query_callback_t);
}