mirror of
https://github.com/rustdesk/rustdesk.git
synced 2026-04-02 22:41:29 +03:00
move rust-sciter in
This commit is contained in:
388
libs/rust-sciter/src/capi/scdef.rs
Normal file
388
libs/rust-sciter/src/capi/scdef.rs
Normal file
@@ -0,0 +1,388 @@
|
||||
//! Common Sciter declarations.
|
||||
|
||||
#![allow(non_camel_case_types, non_snake_case)]
|
||||
#![allow(dead_code)]
|
||||
|
||||
use capi::sctypes::*;
|
||||
use capi::scvalue::{VALUE};
|
||||
use capi::screquest::{HREQUEST};
|
||||
use capi::scdom::{HELEMENT};
|
||||
use capi::scapi::ISciterAPI;
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////////////
|
||||
pub enum ID2D1RenderTarget {}
|
||||
pub enum ID2D1Factory {}
|
||||
pub enum IDWriteFactory {}
|
||||
pub enum IDXGISwapChain {}
|
||||
pub enum IDXGISurface {}
|
||||
|
||||
|
||||
#[repr(C)]
|
||||
#[derive(Debug, PartialOrd, PartialEq)]
|
||||
/// `HostHandler::on_data_load()` result code.
|
||||
///
|
||||
/// This notification gives application a chance to override built-in loader and
|
||||
/// implement loading of resources in its own way (for example, images can be loaded from
|
||||
/// a database or other resource).
|
||||
pub enum LOAD_RESULT {
|
||||
/// Do the default loading if data is not set.
|
||||
LOAD_DEFAULT,
|
||||
/// Discard the request completely (data will not be loaded at the document).
|
||||
LOAD_DISCARD,
|
||||
/// Data will be delivered later by the host application.
|
||||
LOAD_DELAYED,
|
||||
/// You return this result to indicate that your (the host) application took or
|
||||
/// will take care about `HREQUEST` in your code completely.
|
||||
LOAD_MYSELF,
|
||||
}
|
||||
|
||||
/// Script runtime options.
|
||||
#[repr(C)]
|
||||
#[derive(Debug)]
|
||||
#[allow(missing_docs)]
|
||||
pub enum SCRIPT_RUNTIME_FEATURES
|
||||
{
|
||||
ALLOW_FILE_IO = 0x1,
|
||||
ALLOW_SOCKET_IO = 0x2,
|
||||
ALLOW_EVAL = 0x4,
|
||||
ALLOW_SYSINFO = 0x8,
|
||||
}
|
||||
|
||||
/// Sciter graphics rendering backend.
|
||||
#[repr(C)]
|
||||
#[derive(Debug)]
|
||||
#[derive(Copy, Clone)]
|
||||
#[allow(missing_docs)]
|
||||
pub enum GFX_LAYER
|
||||
{
|
||||
/// An auto-selected backend.
|
||||
AUTO = 0xFFFF,
|
||||
|
||||
/// Depends on OS: GDI, Cairo or CoreGraphics.
|
||||
CPU = 1,
|
||||
|
||||
/// A software rasterizer for Direct2D (Windows only).
|
||||
#[cfg(windows)]
|
||||
WARP = 2,
|
||||
|
||||
/// A hardware Direct2D mode (Windows only).
|
||||
#[cfg(windows)]
|
||||
D2D = 3,
|
||||
|
||||
/// Skia backend with CPU rasterization mode.
|
||||
SKIA_CPU = 4,
|
||||
|
||||
/// Skia backend with OpenGL rendering.
|
||||
SKIA_OPENGL = 5,
|
||||
}
|
||||
|
||||
#[repr(C)]
|
||||
#[derive(Debug, PartialOrd, PartialEq)]
|
||||
/// Various Sciter engine options (global or per-window).
|
||||
pub enum SCITER_RT_OPTIONS
|
||||
{
|
||||
/// value:TRUE - enable, value:FALSE - disable, enabled by default.
|
||||
SCITER_SMOOTH_SCROLL = 1,
|
||||
/// global; value: milliseconds, connection timeout of http client.
|
||||
SCITER_CONNECTION_TIMEOUT = 2,
|
||||
/// global; value: 0 - drop connection, 1 - use builtin dialog, 2 - accept connection silently.
|
||||
SCITER_HTTPS_ERROR = 3,
|
||||
/// value: 0 - system default, 1 - no smoothing, 2 - std smoothing, 3 - clear type.
|
||||
SCITER_FONT_SMOOTHING = 4,
|
||||
/// Windows Aero support, value:
|
||||
/// 0 - normal drawing,
|
||||
/// 1 - window has transparent background after calls `DwmExtendFrameIntoClientArea()` or `DwmEnableBlurBehindWindow()`.
|
||||
SCITER_TRANSPARENT_WINDOW = 6,
|
||||
/// global; value = LPCBYTE, json - GPU black list, see: gpu-blacklist.json resource.
|
||||
/// Note: is not used since Sciter 4.
|
||||
#[deprecated(since="4.0.1", note="This option isn't working since Sciter 4.0.1.1.")]
|
||||
SCITER_SET_GPU_BLACKLIST = 7,
|
||||
/// global or per-window; value - combination of [SCRIPT_RUNTIME_FEATURES](enum.SCRIPT_RUNTIME_FEATURES.html) flags.
|
||||
SCITER_SET_SCRIPT_RUNTIME_FEATURES = 8,
|
||||
/// global (must be called before any window creation); value - [GFX_LAYER](enum.GFX_LAYER.html).
|
||||
SCITER_SET_GFX_LAYER = 9,
|
||||
/// global or per-window; value - TRUE/FALSE
|
||||
SCITER_SET_DEBUG_MODE = 10,
|
||||
/// global; value - BOOL, TRUE - the engine will use "unisex" theme that is common for all platforms.
|
||||
/// That UX theme is not using OS primitives for rendering input elements.
|
||||
/// Use it if you want exactly the same (modulo fonts) look-n-feel on all platforms.
|
||||
SCITER_SET_UX_THEMING = 11,
|
||||
/// value - TRUE/FALSE - window uses per pixel alpha (e.g. `WS_EX_LAYERED`/`UpdateLayeredWindow()` window).
|
||||
SCITER_ALPHA_WINDOW = 12,
|
||||
/// global; value: UTF-8 encoded script source to be loaded into each view before any other script execution.
|
||||
SCITER_SET_INIT_SCRIPT = 13,
|
||||
/// per-window; value - TRUE/FALSE - window is main, will destroy all other dependent windows on close.
|
||||
SCITER_SET_MAIN_WINDOW = 14,
|
||||
/// global; value - max request length in megabytes (1024*1024 bytes).
|
||||
SCITER_SET_MAX_HTTP_DATA_LENGTH = 15,
|
||||
}
|
||||
|
||||
/// Window flags
|
||||
#[repr(C)]
|
||||
pub enum SCITER_CREATE_WINDOW_FLAGS {
|
||||
/// child window only, if this flag is set all other flags ignored.
|
||||
SW_CHILD = 1,
|
||||
/// toplevel window, has titlebar.
|
||||
SW_TITLEBAR = 1 << 1,
|
||||
/// has resizeable frame.
|
||||
SW_RESIZEABLE = 1 << 2,
|
||||
/// is tool window.
|
||||
SW_TOOL = 1 << 3,
|
||||
/// has minimize / maximize buttons.
|
||||
SW_CONTROLS = 1 << 4,
|
||||
/// glassy window - "Acrylic" on Windows and "Vibrant" on macOS.
|
||||
SW_GLASSY = 1 << 5,
|
||||
/// transparent window (e.g. `WS_EX_LAYERED` on Windows, macOS is supported too).
|
||||
SW_ALPHA = 1 << 6,
|
||||
/// main window of the app, will terminate the app on close.
|
||||
SW_MAIN = 1 << 7,
|
||||
/// the window is created as topmost window.
|
||||
SW_POPUP = 1 << 8,
|
||||
/// make this window inspector ready.
|
||||
SW_ENABLE_DEBUG = 1 << 9,
|
||||
/// it has its own script VM.
|
||||
SW_OWNS_VM = 1 << 10,
|
||||
}
|
||||
|
||||
impl Default for SCITER_CREATE_WINDOW_FLAGS {
|
||||
fn default() -> Self {
|
||||
SCITER_CREATE_WINDOW_FLAGS::SW_CHILD
|
||||
}
|
||||
}
|
||||
|
||||
/// Flags can be OR'ed as `SW_MAIN|SW_ALPHA`.
|
||||
impl ::std::ops::BitOr for SCITER_CREATE_WINDOW_FLAGS {
|
||||
type Output = SCITER_CREATE_WINDOW_FLAGS;
|
||||
fn bitor(self, rhs: Self::Output) -> Self::Output {
|
||||
let rn = (self as UINT) | (rhs as UINT);
|
||||
unsafe { ::std::mem::transmute(rn) }
|
||||
}
|
||||
}
|
||||
|
||||
#[repr(C)]
|
||||
#[derive(Debug, PartialOrd, PartialEq)]
|
||||
pub enum SCITER_NOTIFICATION {
|
||||
SC_LOAD_DATA = 1,
|
||||
SC_DATA_LOADED = 2,
|
||||
SC_ATTACH_BEHAVIOR = 4,
|
||||
SC_ENGINE_DESTROYED = 5,
|
||||
SC_POSTED_NOTIFICATION = 6,
|
||||
SC_GRAPHICS_CRITICAL_FAILURE = 7,
|
||||
SC_KEYBOARD_REQUEST = 8,
|
||||
SC_INVALIDATE_RECT = 9,
|
||||
}
|
||||
|
||||
#[repr(C)]
|
||||
#[derive(Debug, PartialEq)]
|
||||
/// The type of a loaded resource.
|
||||
pub enum RESOURCE_TYPE {
|
||||
/// HTML document.
|
||||
HTML = 0,
|
||||
/// Image.
|
||||
IMAGE = 1,
|
||||
/// CSS.
|
||||
STYLE = 2,
|
||||
/// Mouse cursor image.
|
||||
CURSOR = 3,
|
||||
/// TIScript document.
|
||||
SCRIPT = 4,
|
||||
/// Any data.
|
||||
RAW = 5,
|
||||
/// Font.
|
||||
FONT,
|
||||
/// Sound (wav bytes).
|
||||
SOUND,
|
||||
}
|
||||
|
||||
/// The type of a loaded resource.
|
||||
pub type SCITER_RESOURCE_TYPE = RESOURCE_TYPE;
|
||||
|
||||
|
||||
#[repr(C)]
|
||||
#[derive(Debug)]
|
||||
/// Notifies that Sciter is about to download a referred resource.
|
||||
pub struct SCN_LOAD_DATA
|
||||
{
|
||||
/// `SC_LOAD_DATA` here.
|
||||
pub code: UINT,
|
||||
/// `HWINDOW` of the window this callback was attached to.
|
||||
pub hwnd: HWINDOW,
|
||||
|
||||
/// [in] Zero terminated string, fully qualified uri, for example, "http://server/folder/file.ext".
|
||||
pub uri: LPCWSTR,
|
||||
|
||||
/// [in,out] pointer to loaded data to return. If data exists in the cache then this field contain pointer to it.
|
||||
pub outData: LPCBYTE,
|
||||
/// [in,out] loaded data size to return.
|
||||
pub outDataSize: UINT,
|
||||
|
||||
/// [in] resource type category
|
||||
pub dataType: RESOURCE_TYPE,
|
||||
|
||||
/// [in] request handle that can be used with Sciter request API.
|
||||
pub request_id: HREQUEST,
|
||||
|
||||
/// [in] destination element for request.
|
||||
pub principal: HELEMENT,
|
||||
/// [in] source element for request.
|
||||
pub initiator: HELEMENT,
|
||||
}
|
||||
|
||||
#[repr(C)]
|
||||
#[derive(Debug)]
|
||||
/// This notification indicates that external data (for example, image) download process has been completed.
|
||||
pub struct SCN_DATA_LOADED
|
||||
{
|
||||
/// `SC_DATA_LOADED` here.
|
||||
pub code: UINT,
|
||||
/// `HWINDOW` of the window this callback was attached to.
|
||||
pub hwnd: HWINDOW,
|
||||
/// [in] zero terminated string, fully qualified uri, for example, "http://server/folder/file.ext".
|
||||
pub uri: LPCWSTR,
|
||||
/// [in] pointer to loaded data.
|
||||
pub data: LPCBYTE,
|
||||
/// [in] loaded data size (in bytes).
|
||||
pub dataSize: UINT,
|
||||
/// [in] resource type category
|
||||
pub dataType: RESOURCE_TYPE,
|
||||
/// Download status code:
|
||||
///
|
||||
/// * status = 0 and `dataSize == 0` - unknown error.
|
||||
/// * status = 100..505 - http response status, note: 200 - OK!
|
||||
/// * status > 12000 - wininet error code, see `ERROR_INTERNET_***` in wininet.h
|
||||
pub status: UINT,
|
||||
}
|
||||
|
||||
#[repr(C)]
|
||||
/// This notification is sent on parsing the document and while processing elements
|
||||
/// having non empty `behavior: ` style attribute value.
|
||||
pub struct SCN_ATTACH_BEHAVIOR
|
||||
{
|
||||
/// `SC_ATTACH_BEHAVIOR` here.
|
||||
pub code: UINT,
|
||||
/// `HWINDOW` of the window this callback was attached to.
|
||||
pub hwnd: HWINDOW,
|
||||
|
||||
/// [in] target DOM element handle
|
||||
pub element: HELEMENT,
|
||||
/// [in] zero terminated string, string appears as value of CSS `behavior: ` attribute.
|
||||
pub name: LPCSTR,
|
||||
/// [out] pointer to ElementEventProc function.
|
||||
pub elementProc: ElementEventProc,
|
||||
/// [out] tag value, passed as is into pointer ElementEventProc function.
|
||||
pub elementTag: LPVOID,
|
||||
}
|
||||
|
||||
#[repr(C)]
|
||||
/// This notification is issued when keyboard needs to be shown –
|
||||
/// mobiles can show soft keyboard by handling it.
|
||||
pub struct SCN_KEYBOARD_REQUEST
|
||||
{
|
||||
/// `SC_KEYBOARD_REQUEST` here.
|
||||
pub code: UINT,
|
||||
/// `HWINDOW` of the window this callback was attached to.
|
||||
pub hwnd: HWINDOW,
|
||||
|
||||
pub keyboard_mode: UINT,
|
||||
}
|
||||
|
||||
#[repr(C)]
|
||||
/// This notification is sent when a specific window area
|
||||
/// needs to be redrawn.
|
||||
pub struct SCN_INVALIDATE_RECT
|
||||
{
|
||||
/// `SC_INVALIDATE_RECT` here.
|
||||
pub code: UINT,
|
||||
/// `HWINDOW` of the window this callback was attached to.
|
||||
pub hwnd: HWINDOW,
|
||||
|
||||
/// Coordinates of the invalidated area.
|
||||
pub invalid_rect: RECT,
|
||||
}
|
||||
|
||||
#[repr(C)]
|
||||
pub struct SCITER_CALLBACK_NOTIFICATION
|
||||
{
|
||||
pub code: UINT,
|
||||
pub hwnd: HWINDOW,
|
||||
}
|
||||
pub type LPSCITER_CALLBACK_NOTIFICATION = *mut SCITER_CALLBACK_NOTIFICATION;
|
||||
|
||||
pub type SciterHostCallback = extern "system" fn (pns: LPSCITER_CALLBACK_NOTIFICATION, callbackParam: LPVOID) -> UINT;
|
||||
|
||||
pub type SciterWindowDelegate = extern "system" fn (hwnd: HWINDOW, msg: UINT, wParam: WPARAM, lParam: LPARAM, pParam: LPVOID, handled: * mut BOOL) -> LRESULT;
|
||||
|
||||
pub type ElementEventProc = extern "system" fn (tag: LPVOID, he: HELEMENT, evtg: UINT, prms: LPVOID) -> BOOL;
|
||||
|
||||
#[repr(C)]
|
||||
#[derive(Debug, PartialOrd, PartialEq)]
|
||||
/// Debug output categories.
|
||||
pub enum OUTPUT_SUBSYTEMS
|
||||
{
|
||||
/// html parser & runtime
|
||||
DOM = 0,
|
||||
/// csss! parser & runtime
|
||||
CSSS,
|
||||
/// css parser
|
||||
CSS,
|
||||
/// TIS parser & runtime
|
||||
TIS,
|
||||
}
|
||||
|
||||
#[repr(C)]
|
||||
#[derive(Debug, PartialOrd, PartialEq)]
|
||||
#[allow(missing_docs)]
|
||||
/// Debug output severity.
|
||||
pub enum OUTPUT_SEVERITY
|
||||
{
|
||||
INFO,
|
||||
WARNING,
|
||||
ERROR,
|
||||
}
|
||||
|
||||
pub type DEBUG_OUTPUT_PROC = extern "system" fn (param: LPVOID, subsystem: OUTPUT_SUBSYTEMS, severity: OUTPUT_SEVERITY, text: LPCWSTR, text_length: UINT);
|
||||
|
||||
pub type LPCWSTR_RECEIVER = extern "system" fn (szstr: LPCWSTR, str_length: UINT, param: LPVOID);
|
||||
pub type LPCSTR_RECEIVER = extern "system" fn (szstr: LPCSTR, str_length: UINT, param: LPVOID);
|
||||
pub type LPCBYTE_RECEIVER = extern "system" fn (szstr: LPCBYTE, str_length: UINT, param: LPVOID);
|
||||
|
||||
pub type ELEMENT_BITMAP_RECEIVER = extern "system" fn (rgba: LPCBYTE, x: INT, y: INT, width: UINT, height: UINT, param: LPVOID);
|
||||
|
||||
pub type KeyValueCallback = extern "system" fn (param: LPVOID, pkey: *const VALUE, pval: *const VALUE) -> BOOL;
|
||||
|
||||
/// Signature of Sciter extension library.
|
||||
///
|
||||
/// * `api` - Sciter API to be used inside the extension.
|
||||
/// * `exported` - extension object, it can be [asset](https://sciter.com/developers/for-native-gui-programmers/sciter-object-model/),
|
||||
/// function, or other `sciter::Value` supported type.
|
||||
///
|
||||
/// Return `true` if the `exported` object was initialized.
|
||||
///
|
||||
/// The extension should be placed in the same folder as "sciter.dll"
|
||||
/// and export a `SciterLibraryInit` function:
|
||||
///
|
||||
/// ```rust,no_run
|
||||
/// use sciter::types::{BOOL, VALUE};
|
||||
/// use sciter::Value;
|
||||
///
|
||||
/// #[no_mangle]
|
||||
/// pub extern "system"
|
||||
/// fn SciterLibraryInit(api: &'static sciter::ISciterAPI, exported: &mut VALUE) -> BOOL
|
||||
/// {
|
||||
/// sciter::set_host_api(api);
|
||||
///
|
||||
/// unimplemented!("export some extension functions");
|
||||
///
|
||||
/// true as BOOL
|
||||
/// }
|
||||
/// ```
|
||||
///
|
||||
/// In script such extension library can be imported as:
|
||||
///
|
||||
/// ```javascript
|
||||
/// const exported = include library "library-name";
|
||||
/// ```
|
||||
///
|
||||
/// See the [blog post](https://sciter.com/include-library-name-native-extensions/) for more details.
|
||||
///
|
||||
pub type SciterLibraryInit = extern "system" fn (api: &'static ISciterAPI, exported: &mut VALUE) -> BOOL;
|
||||
Reference in New Issue
Block a user