godoru 0.1.0

UI Framework for Rust using Godot
use super::*;

use std::ptr;

pub(crate) const VARIANT_BOOL: i32 = 1;
pub(crate) const VARIANT_INT: i32 = 2;
pub(crate) const VARIANT_FLOAT: i32 = 3;
pub(crate) const VARIANT_STRING: i32 = 4;
pub(crate) const VARIANT_VECTOR2: i32 = 5;
pub(crate) const VARIANT_COLOR: i32 = 20;
pub(crate) const VARIANT_STRING_NAME: i32 = 21;
pub(crate) const VARIANT_OBJECT: i32 = 24;
pub(crate) const METHOD_OBJECT_SET: i64 = 3776071444;
pub(crate) const METHOD_OBJECT_NOTIFICATION: i64 = 4023243586;
pub(crate) const METHOD_ENGINE_GET_MAIN_LOOP: i64 = 1016888095;
pub(crate) const METHOD_SCENE_TREE_GET_ROOT: i64 = 1757182445;
pub(crate) const METHOD_NODE_ADD_CHILD: i64 = 3863233950;
pub(crate) const METHOD_NODE_SET_NAME: i64 = 3304788590;
pub(crate) const METHOD_NODE_QUEUE_FREE: i64 = 3218959716;
pub(crate) const METHOD_CONTROL_SET_ANCHORS_PRESET: i64 = 509135270;
pub(crate) const METHOD_CONTROL_SET_OFFSET: i64 = 4290182280;
pub(crate) const METHOD_CONTROL_SET_CUSTOM_MINIMUM_SIZE: i64 = 743155724;
pub(crate) const METHOD_CONTROL_SET_H_SIZE_FLAGS: i64 = 394851643;
pub(crate) const METHOD_CONTROL_SET_V_SIZE_FLAGS: i64 = 394851643;
pub(crate) const METHOD_CONTROL_ADD_THEME_FONT_SIZE_OVERRIDE: i64 = 2415702435;
pub(crate) const METHOD_CONTROL_ADD_THEME_COLOR_OVERRIDE: i64 = 4260178595;
pub(crate) const METHOD_CONTROL_ADD_THEME_CONSTANT_OVERRIDE: i64 = 2415702435;
pub(crate) const METHOD_CONTROL_ADD_THEME_STYLEBOX_OVERRIDE: i64 = 4188838905;
pub(crate) const METHOD_CONTROL_SET_FOCUS_MODE: i64 = 3232914922;
pub(crate) const METHOD_CONTROL_HAS_FOCUS: i64 = 3302206351;
pub(crate) const METHOD_CONTROL_SET_MOUSE_FILTER: i64 = 3891156122;
pub(crate) const METHOD_CONTROL_SET_DEFAULT_CURSOR_SHAPE: i64 = 217062046;
pub(crate) const METHOD_CONTROL_RELEASE_FOCUS: i64 = 3218959716;
pub(crate) const METHOD_BASE_BUTTON_IS_PRESSED: i64 = 36873697;
pub(crate) const METHOD_BASE_BUTTON_IS_HOVERED: i64 = 36873697;
pub(crate) const METHOD_COLOR_RECT_SET_COLOR: i64 = 2920490490;
pub(crate) const METHOD_LABEL_SET_TEXT: i64 = 83702148;
pub(crate) const METHOD_TEXTURE_RECT_SET_EXPAND_MODE: i64 = 1870766882;
pub(crate) const METHOD_TEXTURE_RECT_SET_STRETCH_MODE: i64 = 58788729;
pub(crate) const METHOD_BUTTON_SET_TEXT: i64 = 83702148;
pub(crate) const METHOD_LINE_EDIT_SET_TEXT: i64 = 83702148;
pub(crate) const METHOD_LINE_EDIT_GET_TEXT: i64 = 201670096;
pub(crate) const METHOD_LINE_EDIT_SET_PLACEHOLDER: i64 = 83702148;
pub(crate) const METHOD_SCROLL_CONTAINER_SET_HORIZONTAL_SCROLL_MODE: i64 = 2750506364;
pub(crate) const METHOD_SCROLL_CONTAINER_SET_VERTICAL_SCROLL_MODE: i64 = 2750506364;
pub(crate) const METHOD_RESOURCE_LOADER_LOAD: i64 = 3358495409;
pub(crate) const METHOD_IMAGE_LOAD: i64 = 166001499;
pub(crate) const METHOD_IMAGE_TEXTURE_SET_IMAGE: i64 = 532598488;
pub(crate) const METHOD_SHADER_SET_CODE: i64 = 83702148;
pub(crate) const METHOD_STYLE_BOX_FLAT_SET_BG_COLOR: i64 = 2920490490;
pub(crate) const METHOD_STYLE_BOX_FLAT_SET_BORDER_COLOR: i64 = 2920490490;
pub(crate) const METHOD_STYLE_BOX_FLAT_SET_BORDER_WIDTH_ALL: i64 = 1286410249;
pub(crate) const METHOD_STYLE_BOX_FLAT_SET_CORNER_RADIUS_ALL: i64 = 1286410249;
pub(crate) const METHOD_STYLE_BOX_FLAT_SET_SHADOW_COLOR: i64 = 2920490490;
pub(crate) const METHOD_STYLE_BOX_FLAT_SET_SHADOW_SIZE: i64 = 1286410249;
pub(crate) const METHOD_STYLE_BOX_FLAT_SET_SHADOW_OFFSET: i64 = 743155724;

pub(crate) const NOTIFICATION_POSTINITIALIZE: i64 = 0;
pub(crate) const LAYOUT_PRESET_FULL_RECT: i64 = 15;
pub(crate) const SIDE_LEFT: i64 = 0;
pub(crate) const SIDE_TOP: i64 = 1;
pub(crate) const SIDE_RIGHT: i64 = 2;
pub(crate) const SIDE_BOTTOM: i64 = 3;
pub(crate) const SIZE_FILL_EXPAND: i64 = 3;
pub(crate) const INTERNAL_MODE_DISABLED: i64 = 0;
pub(crate) const FOCUS_ALL: i64 = 2;
pub(crate) const MOUSE_FILTER_STOP: i64 = 0;
pub(crate) const RESOURCE_LOADER_CACHE_MODE_REUSE: i64 = 1;
pub(crate) const SCROLL_MODE_AUTO: i64 = 1;
pub(crate) const TEXTURE_RECT_EXPAND_IGNORE_SIZE: i64 = 1;
pub(crate) const TEXTURE_RECT_STRETCH_SCALE: i64 = 0;
pub(crate) const TEXTURE_RECT_STRETCH_KEEP_ASPECT_CENTERED: i64 = 5;
pub(crate) const TEXTURE_RECT_STRETCH_KEEP_ASPECT_COVERED: i64 = 6;

#[derive(Clone)]
pub(crate) struct GodotMethods {
    pub(crate) objectSet: GDExtensionMethodBindPtr,
    pub(crate) objectNotification: GDExtensionMethodBindPtr,
    pub(crate) engineGetMainLoop: GDExtensionMethodBindPtr,
    pub(crate) sceneTreeGetRoot: GDExtensionMethodBindPtr,
    pub(crate) nodeAddChild: GDExtensionMethodBindPtr,
    pub(crate) nodeSetName: GDExtensionMethodBindPtr,
    pub(crate) nodeQueueFree: GDExtensionMethodBindPtr,
    pub(crate) controlSetAnchorsPreset: GDExtensionMethodBindPtr,
    pub(crate) controlSetOffset: GDExtensionMethodBindPtr,
    pub(crate) controlSetCustomMinimumSize: GDExtensionMethodBindPtr,
    pub(crate) controlSetHSizeFlags: GDExtensionMethodBindPtr,
    pub(crate) controlSetVSizeFlags: GDExtensionMethodBindPtr,
    pub(crate) controlAddThemeFontSizeOverride: GDExtensionMethodBindPtr,
    pub(crate) controlAddThemeColorOverride: GDExtensionMethodBindPtr,
    pub(crate) controlAddThemeConstantOverride: GDExtensionMethodBindPtr,
    pub(crate) controlAddThemeStyleboxOverride: GDExtensionMethodBindPtr,
    pub(crate) controlSetFocusMode: GDExtensionMethodBindPtr,
    pub(crate) controlHasFocus: GDExtensionMethodBindPtr,
    pub(crate) controlSetMouseFilter: GDExtensionMethodBindPtr,
    pub(crate) controlSetDefaultCursorShape: GDExtensionMethodBindPtr,
    pub(crate) controlReleaseFocus: GDExtensionMethodBindPtr,
    pub(crate) baseButtonIsPressed: GDExtensionMethodBindPtr,
    pub(crate) baseButtonIsHovered: GDExtensionMethodBindPtr,
    pub(crate) colorRectSetColor: GDExtensionMethodBindPtr,
    pub(crate) labelSetText: GDExtensionMethodBindPtr,
    pub(crate) textureRectSetExpandMode: GDExtensionMethodBindPtr,
    pub(crate) textureRectSetStretchMode: GDExtensionMethodBindPtr,
    pub(crate) buttonSetText: GDExtensionMethodBindPtr,
    pub(crate) lineEditSetText: GDExtensionMethodBindPtr,
    pub(crate) lineEditGetText: GDExtensionMethodBindPtr,
    pub(crate) lineEditSetPlaceholder: GDExtensionMethodBindPtr,
    pub(crate) scrollContainerSetHorizontalScrollMode: GDExtensionMethodBindPtr,
    pub(crate) scrollContainerSetVerticalScrollMode: GDExtensionMethodBindPtr,
    pub(crate) resourceLoaderLoad: GDExtensionMethodBindPtr,
    pub(crate) imageLoad: GDExtensionMethodBindPtr,
    pub(crate) imageTextureSetImage: GDExtensionMethodBindPtr,
    pub(crate) shaderSetCode: GDExtensionMethodBindPtr,
    pub(crate) styleBoxFlatSetBgColor: GDExtensionMethodBindPtr,
    pub(crate) styleBoxFlatSetBorderColor: GDExtensionMethodBindPtr,
    pub(crate) styleBoxFlatSetBorderWidthAll: GDExtensionMethodBindPtr,
    pub(crate) styleBoxFlatSetCornerRadiusAll: GDExtensionMethodBindPtr,
    pub(crate) styleBoxFlatSetShadowColor: GDExtensionMethodBindPtr,
    pub(crate) styleBoxFlatSetShadowSize: GDExtensionMethodBindPtr,
    pub(crate) styleBoxFlatSetShadowOffset: GDExtensionMethodBindPtr,
}

impl GodotMethods {
    pub(crate) fn empty() -> Self {
        Self {
            objectSet: ptr::null(),
            objectNotification: ptr::null(),
            engineGetMainLoop: ptr::null(),
            sceneTreeGetRoot: ptr::null(),
            nodeAddChild: ptr::null(),
            nodeSetName: ptr::null(),
            nodeQueueFree: ptr::null(),
            controlSetAnchorsPreset: ptr::null(),
            controlSetOffset: ptr::null(),
            controlSetCustomMinimumSize: ptr::null(),
            controlSetHSizeFlags: ptr::null(),
            controlSetVSizeFlags: ptr::null(),
            controlAddThemeFontSizeOverride: ptr::null(),
            controlAddThemeColorOverride: ptr::null(),
            controlAddThemeConstantOverride: ptr::null(),
            controlAddThemeStyleboxOverride: ptr::null(),
            controlSetFocusMode: ptr::null(),
            controlHasFocus: ptr::null(),
            controlSetMouseFilter: ptr::null(),
            controlSetDefaultCursorShape: ptr::null(),
            controlReleaseFocus: ptr::null(),
            baseButtonIsPressed: ptr::null(),
            baseButtonIsHovered: ptr::null(),
            colorRectSetColor: ptr::null(),
            labelSetText: ptr::null(),
            textureRectSetExpandMode: ptr::null(),
            textureRectSetStretchMode: ptr::null(),
            buttonSetText: ptr::null(),
            lineEditSetText: ptr::null(),
            lineEditGetText: ptr::null(),
            lineEditSetPlaceholder: ptr::null(),
            scrollContainerSetHorizontalScrollMode: ptr::null(),
            scrollContainerSetVerticalScrollMode: ptr::null(),
            resourceLoaderLoad: ptr::null(),
            imageLoad: ptr::null(),
            imageTextureSetImage: ptr::null(),
            shaderSetCode: ptr::null(),
            styleBoxFlatSetBgColor: ptr::null(),
            styleBoxFlatSetBorderColor: ptr::null(),
            styleBoxFlatSetBorderWidthAll: ptr::null(),
            styleBoxFlatSetCornerRadiusAll: ptr::null(),
            styleBoxFlatSetShadowColor: ptr::null(),
            styleBoxFlatSetShadowSize: ptr::null(),
            styleBoxFlatSetShadowOffset: ptr::null(),
        }
    }

    pub(crate) fn load(bridge: &GodotBridge) -> GodoruResult<Self> {
        Ok(Self {
            objectSet: bridge.methodBind("Object", "set", METHOD_OBJECT_SET)?,
            objectNotification: bridge.methodBind(
                "Object",
                "notification",
                METHOD_OBJECT_NOTIFICATION,
            )?,
            engineGetMainLoop: bridge.methodBind(
                "Engine",
                "get_main_loop",
                METHOD_ENGINE_GET_MAIN_LOOP,
            )?,
            sceneTreeGetRoot: bridge.methodBind(
                "SceneTree",
                "get_root",
                METHOD_SCENE_TREE_GET_ROOT,
            )?,
            nodeAddChild: bridge.methodBind("Node", "add_child", METHOD_NODE_ADD_CHILD)?,
            nodeSetName: bridge.methodBind("Node", "set_name", METHOD_NODE_SET_NAME)?,
            nodeQueueFree: bridge.methodBind("Node", "queue_free", METHOD_NODE_QUEUE_FREE)?,
            controlSetAnchorsPreset: bridge.methodBind(
                "Control",
                "set_anchors_preset",
                METHOD_CONTROL_SET_ANCHORS_PRESET,
            )?,
            controlSetOffset: bridge.methodBind(
                "Control",
                "set_offset",
                METHOD_CONTROL_SET_OFFSET,
            )?,
            controlSetCustomMinimumSize: bridge.methodBind(
                "Control",
                "set_custom_minimum_size",
                METHOD_CONTROL_SET_CUSTOM_MINIMUM_SIZE,
            )?,
            controlSetHSizeFlags: bridge.methodBind(
                "Control",
                "set_h_size_flags",
                METHOD_CONTROL_SET_H_SIZE_FLAGS,
            )?,
            controlSetVSizeFlags: bridge.methodBind(
                "Control",
                "set_v_size_flags",
                METHOD_CONTROL_SET_V_SIZE_FLAGS,
            )?,
            controlAddThemeFontSizeOverride: bridge.methodBind(
                "Control",
                "add_theme_font_size_override",
                METHOD_CONTROL_ADD_THEME_FONT_SIZE_OVERRIDE,
            )?,
            controlAddThemeColorOverride: bridge.methodBind(
                "Control",
                "add_theme_color_override",
                METHOD_CONTROL_ADD_THEME_COLOR_OVERRIDE,
            )?,
            controlAddThemeConstantOverride: bridge.methodBind(
                "Control",
                "add_theme_constant_override",
                METHOD_CONTROL_ADD_THEME_CONSTANT_OVERRIDE,
            )?,
            controlAddThemeStyleboxOverride: bridge.methodBind(
                "Control",
                "add_theme_stylebox_override",
                METHOD_CONTROL_ADD_THEME_STYLEBOX_OVERRIDE,
            )?,
            controlSetFocusMode: bridge.methodBind(
                "Control",
                "set_focus_mode",
                METHOD_CONTROL_SET_FOCUS_MODE,
            )?,
            controlHasFocus: bridge.methodBind("Control", "has_focus", METHOD_CONTROL_HAS_FOCUS)?,
            controlSetMouseFilter: bridge.methodBind(
                "Control",
                "set_mouse_filter",
                METHOD_CONTROL_SET_MOUSE_FILTER,
            )?,
            controlSetDefaultCursorShape: bridge.methodBind(
                "Control",
                "set_default_cursor_shape",
                METHOD_CONTROL_SET_DEFAULT_CURSOR_SHAPE,
            )?,
            controlReleaseFocus: bridge.methodBind(
                "Control",
                "release_focus",
                METHOD_CONTROL_RELEASE_FOCUS,
            )?,
            baseButtonIsPressed: bridge.methodBind(
                "BaseButton",
                "is_pressed",
                METHOD_BASE_BUTTON_IS_PRESSED,
            )?,
            baseButtonIsHovered: bridge.methodBind(
                "BaseButton",
                "is_hovered",
                METHOD_BASE_BUTTON_IS_HOVERED,
            )?,
            colorRectSetColor: bridge.methodBind(
                "ColorRect",
                "set_color",
                METHOD_COLOR_RECT_SET_COLOR,
            )?,
            labelSetText: bridge.methodBind("Label", "set_text", METHOD_LABEL_SET_TEXT)?,
            textureRectSetExpandMode: bridge.methodBind(
                "TextureRect",
                "set_expand_mode",
                METHOD_TEXTURE_RECT_SET_EXPAND_MODE,
            )?,
            textureRectSetStretchMode: bridge.methodBind(
                "TextureRect",
                "set_stretch_mode",
                METHOD_TEXTURE_RECT_SET_STRETCH_MODE,
            )?,
            buttonSetText: bridge.methodBind("Button", "set_text", METHOD_BUTTON_SET_TEXT)?,
            lineEditSetText: bridge.methodBind(
                "LineEdit",
                "set_text",
                METHOD_LINE_EDIT_SET_TEXT,
            )?,
            lineEditGetText: bridge.methodBind(
                "LineEdit",
                "get_text",
                METHOD_LINE_EDIT_GET_TEXT,
            )?,
            lineEditSetPlaceholder: bridge.methodBind(
                "LineEdit",
                "set_placeholder",
                METHOD_LINE_EDIT_SET_PLACEHOLDER,
            )?,
            scrollContainerSetHorizontalScrollMode: bridge.methodBind(
                "ScrollContainer",
                "set_horizontal_scroll_mode",
                METHOD_SCROLL_CONTAINER_SET_HORIZONTAL_SCROLL_MODE,
            )?,
            scrollContainerSetVerticalScrollMode: bridge.methodBind(
                "ScrollContainer",
                "set_vertical_scroll_mode",
                METHOD_SCROLL_CONTAINER_SET_VERTICAL_SCROLL_MODE,
            )?,
            resourceLoaderLoad: bridge.methodBind(
                "ResourceLoader",
                "load",
                METHOD_RESOURCE_LOADER_LOAD,
            )?,
            imageLoad: bridge.methodBind("Image", "load", METHOD_IMAGE_LOAD)?,
            imageTextureSetImage: bridge.methodBind(
                "ImageTexture",
                "set_image",
                METHOD_IMAGE_TEXTURE_SET_IMAGE,
            )?,
            shaderSetCode: bridge.methodBind("Shader", "set_code", METHOD_SHADER_SET_CODE)?,
            styleBoxFlatSetBgColor: bridge.methodBind(
                "StyleBoxFlat",
                "set_bg_color",
                METHOD_STYLE_BOX_FLAT_SET_BG_COLOR,
            )?,
            styleBoxFlatSetBorderColor: bridge.methodBind(
                "StyleBoxFlat",
                "set_border_color",
                METHOD_STYLE_BOX_FLAT_SET_BORDER_COLOR,
            )?,
            styleBoxFlatSetBorderWidthAll: bridge.methodBind(
                "StyleBoxFlat",
                "set_border_width_all",
                METHOD_STYLE_BOX_FLAT_SET_BORDER_WIDTH_ALL,
            )?,
            styleBoxFlatSetCornerRadiusAll: bridge.methodBind(
                "StyleBoxFlat",
                "set_corner_radius_all",
                METHOD_STYLE_BOX_FLAT_SET_CORNER_RADIUS_ALL,
            )?,
            styleBoxFlatSetShadowColor: bridge.methodBind(
                "StyleBoxFlat",
                "set_shadow_color",
                METHOD_STYLE_BOX_FLAT_SET_SHADOW_COLOR,
            )?,
            styleBoxFlatSetShadowSize: bridge.methodBind(
                "StyleBoxFlat",
                "set_shadow_size",
                METHOD_STYLE_BOX_FLAT_SET_SHADOW_SIZE,
            )?,
            styleBoxFlatSetShadowOffset: bridge.methodBind(
                "StyleBoxFlat",
                "set_shadow_offset",
                METHOD_STYLE_BOX_FLAT_SET_SHADOW_OFFSET,
            )?,
        })
    }
}