2
0
mirror of https://github.com/dpethes/rerogue.git synced 2025-06-07 18:58:32 +02:00

update imgui and SDL2 bindings

This commit is contained in:
dpethes 2017-06-04 12:22:39 +02:00
parent 14c05bec13
commit 2cd5eef69d
6 changed files with 1049 additions and 605 deletions

View File

@ -1,6 +1,6 @@
{
Bindings for dear imgui (AKA ImGui) - a bloat-free graphical user interface library for C++
Based on cimgui+ImGui 1.49/1.50
Based on ImGui 1.50 + cimgui wrapper
Not all functions were tested.
}
unit fpimgui;
@ -30,14 +30,7 @@ type
TLongInt3 = array[0..2] of longint;
TLongInt4 = array[0..3] of longint;
PImDrawData = ^ImDrawData;
PImFont = ^ImFont;
PImFontAtlas = ^ImFontAtlas;
PImFontConfig = ^ImFontConfig;
PImGuiContext = Pointer;
PImGuiSizeConstraintCallbackData = ^ImGuiSizeConstraintCallbackData;
PImGuiStorage = ^ImGuiStorage;
PImGuiTextEditCallbackData = ^ImGuiTextEditCallbackData;
ImVec2 = record
x, y: single;
@ -50,32 +43,53 @@ type
ImU32 = dword;
ImWchar = word;
PImWchar = PWord;
ImTextureID = pointer;
ImGuiID = ImU32;
ImGuiCol = longint;
ImGuiStyleVar = longint;
ImGuiKey = longint;
ImGuiAlign = longint;
ImGuiColorEditMode = longint;
ImGuiMouseCursor = longint;
ImGuiWindowFlags = longint;
ImGuiSetCond = longint;
ImGuiInputTextFlags = longint;
ImGuiSelectableFlags = longint;
{ Enums }
ImGuiTreeNodeFlags = (
Selected = 1 shl 0,
Framed = 1 shl 1,
AllowOverlapMode = 1 shl 2,
NoTreePushOnOpen = 1 shl 3,
NoAutoOpenOnLog = 1 shl 4,
DefaultOpen = 1 shl 5,
OpenOnDoubleClick = 1 shl 6,
OpenOnArrow = 1 shl 7,
Leaf = 1 shl 8,
Bullet = 1 shl 9
ImGuiWindowFlags = longint;
ImGuiWindowFlagsEnum = (
ImGuiWindowFlags_Default = 0, // Default: 0
ImGuiWindowFlags_NoTitleBar = 1 shl 0, // Disable title-bar
ImGuiWindowFlags_NoResize = 1 shl 1, // Disable user resizing with the lower-right grip
ImGuiWindowFlags_NoMove = 1 shl 2, // Disable user moving the window
ImGuiWindowFlags_NoScrollbar = 1 shl 3, // Disable scrollbars (window can still scroll with mouse or programatically)
ImGuiWindowFlags_NoScrollWithMouse = 1 shl 4, // Disable user vertically scrolling with mouse wheel
ImGuiWindowFlags_NoCollapse = 1 shl 5, // Disable user collapsing window by double-clicking on it
ImGuiWindowFlags_AlwaysAutoResize = 1 shl 6, // Resize every window to its content every frame
ImGuiWindowFlags_ShowBorders = 1 shl 7, // Show borders around windows and items
ImGuiWindowFlags_NoSavedSettings = 1 shl 8, // Never load/save settings in .ini file
ImGuiWindowFlags_NoInputs = 1 shl 9, // Disable catching mouse or keyboard inputs
ImGuiWindowFlags_MenuBar = 1 shl 10, // Has a menu-bar
ImGuiWindowFlags_HorizontalScrollbar = 1 shl 11, // Allow horizontal scrollbar to appear (off by default). You may use SetNextWindowContentSize(ImVec2(width,0.0f)); prior to calling Begin() to specify width. Read code in imgui_demo in the "Horizontal Scrolling" section.
ImGuiWindowFlags_NoFocusOnAppearing = 1 shl 12, // Disable taking focus when transitioning from hidden to visible state
ImGuiWindowFlags_NoBringToFrontOnFocus = 1 shl 13, // Disable bringing window to front when taking focus (e.g. clicking on it or programatically giving it focus)
ImGuiWindowFlags_AlwaysVerticalScrollbar= 1 shl 14, // Always show vertical scrollbar (even if ContentSize.y < Size.y)
ImGuiWindowFlags_AlwaysHorizontalScrollbar=1shl 15, // Always show horizontal scrollbar (even if ContentSize.x < Size.x)
ImGuiWindowFlags_AlwaysUseWindowPadding = 1 shl 16 // Ensure child windows without border uses style.WindowPadding (ignored by default for non-bordered child windows, because more convenient)
);
// Flags for ImGui::TreeNodeEx(), ImGui::CollapsingHeader*()
ImGuiTreeNodeFlags = longint;
ImGuiTreeNodeFlagsEnum = (
ImGuiTreeNodeFlags_Selected = 1 shl 0,
ImGuiTreeNodeFlags_Framed = 1 shl 1,
ImGuiTreeNodeFlags_AllowOverlapMode = 1 shl 2,
ImGuiTreeNodeFlags_NoTreePushOnOpen = 1 shl 3,
ImGuiTreeNodeFlags_NoAutoOpenOnLog = 1 shl 4,
ImGuiTreeNodeFlags_CollapsingHeader = (1 shl 1) or (1 shl 4), //Framed or NoAutoOpenOnLog
ImGuiTreeNodeFlags_DefaultOpen = 1 shl 5,
ImGuiTreeNodeFlags_OpenOnDoubleClick = 1 shl 6,
ImGuiTreeNodeFlags_OpenOnArrow = 1 shl 7,
ImGuiTreeNodeFlags_Leaf = 1 shl 8,
ImGuiTreeNodeFlags_Bullet = 1 shl 9
);
ImGuiKey_ = (
@ -148,7 +162,55 @@ type
//ImGuiCol_COUNT - unnecessary
);
// Enumeration for PushStyleVar() / PopStyleVar()
// NB: the enum only refers to fields of ImGuiStyle() which makes sense to be pushed/poped in UI code. Feel free to add others.
ImGuiStyleVar_ = (
ImGuiStyleVar_Alpha, // float
ImGuiStyleVar_WindowPadding, // ImVec2
ImGuiStyleVar_WindowRounding, // float
ImGuiStyleVar_WindowMinSize, // ImVec2
ImGuiStyleVar_ChildWindowRounding, // float
ImGuiStyleVar_FramePadding, // ImVec2
ImGuiStyleVar_FrameRounding, // float
ImGuiStyleVar_ItemSpacing, // ImVec2
ImGuiStyleVar_ItemInnerSpacing, // ImVec2
ImGuiStyleVar_IndentSpacing, // float
ImGuiStyleVar_GrabMinSize, // float
ImGuiStyleVar_ButtonTextAlign // flags ImGuiAlign_*
//ImGuiStyleVar_Count_ - unnecessary
);
// Enumeration for ColorEditMode()
// FIXME-OBSOLETE: Will be replaced by future color/picker api
ImGuiColorEditMode = longint;
// Enumeration for GetMouseCursor()
ImGuiMouseCursor = longint;
ImGuiMouseCursorEnum = (
ImGuiMouseCursor_None = -1,
ImGuiMouseCursor_Arrow = 0,
ImGuiMouseCursor_TextInput,
ImGuiMouseCursor_Move,
ImGuiMouseCursor_ResizeNS,
ImGuiMouseCursor_ResizeEW,
ImGuiMouseCursor_ResizeNESW,
ImGuiMouseCursor_ResizeNWSE
//ImGuiMouseCursor_Count_ - unnecessary
);
// Condition flags for ImGui::SetWindow***(), SetNextWindow***(), SetNextTreeNode***() functions
// All those functions treat 0 as a shortcut to ImGuiSetCond_Always
ImGuiSetCond = longint;
ImGuiSetCondEnum = (
ImGuiSetCond_Always = 1 shl 0, // Set the variable
ImGuiSetCond_Once = 1 shl 1, // Set the variable once per runtime session (only the first call with succeed)
ImGuiSetCond_FirstUseEver = 1 shl 2, // Set the variable if the window has no saved data (if doesn't exist in the .ini file)
ImGuiSetCond_Appearing = 1 shl 3 // Set the variable if the window is appearing after being hidden/inactive (or the first time)
);
{ Structs }
ImGuiStyle = record
Alpha : single;
WindowPadding : ImVec2;
@ -177,6 +239,14 @@ type
end;
PImGuiStyle = ^ImGuiStyle;
//forward decls for ImGuiIO
PImDrawData = ^ImDrawData;
PImFont = ^ImFont;
PImFontAtlas = ^ImFontAtlas;
PImFontConfig = ^ImFontConfig;
PImGuiSizeConstraintCallbackData = ^ImGuiSizeConstraintCallbackData;
PImGuiStorage = ^ImGuiStorage;
PImGuiTextEditCallbackData = ^ImGuiTextEditCallbackData;
ImGuiIO = record
DisplaySize : ImVec2;
DeltaTime : single;
@ -190,6 +260,7 @@ type
KeyRepeatDelay : single;
KeyRepeatRate : single;
UserData : pointer;
Fonts : PImFontAtlas;
FontGlobalScale : single;
FontAllowUserScaling : bool;
@ -197,15 +268,24 @@ type
DisplayFramebufferScale : ImVec2;
DisplayVisibleMin : ImVec2;
DisplayVisibleMax : ImVec2;
// Advanced/subtle behaviors
OSXBehaviors : bool;
// User Functions
RenderDrawListsFn : procedure (data:PImDrawData);cdecl;
GetClipboardTextFn : function (user_data:pointer):Pchar;cdecl;
SetClipboardTextFn : procedure (user_data:pointer; text:Pchar);cdecl;
ClipboardUserData : pointer;
MemAllocFn : function (sz:size_t):pointer;cdecl;
MemFreeFn : procedure (ptr:pointer);cdecl;
ImeSetInputScreenPosFn : procedure (x:longint; y:longint);cdecl;
ImeWindowHandle : pointer;
// Input - Fill before calling NewFrame()
MousePos : ImVec2;
MouseDown : array[0..4] of bool;
MouseWheel : single;
@ -215,7 +295,9 @@ type
KeyAlt : bool;
KeySuper : bool;
KeysDown : array[0..511] of bool;
InputCharacters : array[0..(16+1)-1] of ImWchar;
InputCharacters : array[0..16] of ImWchar;
// Output - Retrieve after calling NewFrame()
WantCaptureMouse : bool;
WantCaptureKeyboard : bool;
WantTextInput : bool;
@ -224,7 +306,11 @@ type
MetricsRenderVertices : longint;
MetricsRenderIndices : longint;
MetricsActiveWindows : longint;
MouseDelta : ImVec2;
// [Private] ImGui will maintain those fields. Forward compatibility not guaranteed!
// this part is not included, so be careful when doing sizeof(ImGuiIO) for example
end;
PImGuiIO = ^ImGuiIO;
@ -273,27 +359,34 @@ type
end;
ImGuiTextEditCallbackData = record
//not translated
end;
ImGuiSizeConstraintCallbackData = record
//not translated
end;
ImGuiStorage = record
//not translated
end;
ImFont = record
//not translated
end;
ImFontConfig = record
//not translated
end;
ImFontAtlas = record
//not translated
end;
ImGuiTextEditCallback = function(Data: PImGuiTextEditCallbackData): longint; cdecl;
ImGuiSizeConstraintCallback = procedure(Data: PImGuiSizeConstraintCallbackData); cdecl;
//binding helpers
type
TCol3 = array[0..2] of single; //todo : does this work?
TCol4 = array[0..3] of single;
//binding helpers
function ImVec2Init(const x, y: single): Imvec2; inline;
function ImIDPtr(const i: integer): pointer; inline;
{ Static ImGui class, wraps external cimgui dll calls
Used for:
@ -370,13 +463,13 @@ public
class procedure PushFont(font: PImFont); inline;
class procedure PopFont; inline;
class procedure PushStyleColor(idx: ImGuiCol; col: ImVec4); inline;
class procedure PopStyleColor(Count: longint); inline;
class procedure PopStyleColor(count: longint); inline;
class procedure PushStyleVar(idx: ImGuiStyleVar; val: single); inline;
class procedure PushStyleVarVec(idx: ImGuiStyleVar; val: ImVec2); inline;
class procedure PopStyleVar(Count: longint); inline;
class procedure PopStyleVar(count: longint = 1); inline;
class function GetFont(): PImFont; inline;
class function GetFontSize: single; inline;
class procedure GetFontTexUvWhitePixel(pOut: PImVec2); inline;
class function GetFontTexUvWhitePixel(): ImVec2;
class function GetColorU32(idx: ImGuiCol; alpha_mul: single): ImU32; inline;
class function GetColorU32Vec(col: PImVec4): ImU32; inline;
@ -437,7 +530,6 @@ public
class function GetIdPtr(ptr_id: pointer): ImGuiID; inline;
{ Widgets }
{ Text() wraps TextUnformatted(), not Text() - formatting is done by pascal's Format }
class procedure Text(const text_: string);
class procedure Text(const Fmt: string; const Args: array of Const);
//procedure igTextV(fmt:Pchar; args:va_list);cdecl;external ImguiLibName;
@ -534,20 +626,17 @@ public
class function InputInt4(_label: PChar; v: TLongInt4; extra_flags: ImGuiInputTextFlags): bool; inline;
{ Widgets: Trees }
class function TreeNode(_label: PChar): bool; inline;
class function TreeNodeStr(str_id: PChar; fmt: string; args: array of const): bool; {inline;}
class function TreeNodeStr(str_id: PChar; fmt: string): bool; inline;
class function TreeNodePtr(ptr_id: pointer; fmt: string; args: array of const): bool; {inline;}
class function TreeNodePtr(ptr_id: pointer; fmt: string): bool; inline;
//todo : vargs
// function igTreeNodeStrV(str_id:Pchar; fmt:Pchar; args:va_list):bool;cdecl;external ImguiLibName;
//todo : vargs
// function igTreeNodePtrV(ptr_id:pointer; fmt:Pchar; args:va_list):bool;cdecl;external ImguiLibName;
class function TreeNode(_label: string): bool; inline;
class function TreeNode(str_id: string; fmt: string; args: array of const): bool; {inline;}
class function TreeNode(str_id: string; fmt: string): bool; inline;
class function TreeNode(ptr_id: pointer; fmt: string; args: array of const): bool; {inline;}
class function TreeNode(ptr_id: pointer; fmt: string): bool; inline;
class function TreeNodeEx(_label: PChar; flags: ImGuiTreeNodeFlags): bool; inline;
class function TreeNodeExStr(str_id: PChar; flags: ImGuiTreeNodeFlags; fmt: string; args: array of const): bool; {inline;}
class function TreeNodeExStr(str_id: PChar; flags: ImGuiTreeNodeFlags; fmt: string): bool; inline;
class function TreeNodeExPtr(ptr_id: pointer; flags: ImGuiTreeNodeFlags; fmt: string; args: array of const): bool; {inline;}
class function TreeNodeExPtr(ptr_id: pointer; flags: ImGuiTreeNodeFlags; fmt: string): bool; inline;
class function TreeNodeEx(str_id: PChar; flags: ImGuiTreeNodeFlags; fmt: string; args: array of const): bool; {inline;}
class function TreeNodeEx(str_id: PChar; flags: ImGuiTreeNodeFlags; fmt: string): bool; inline;
class function TreeNodeEx(ptr_id: pointer; flags: ImGuiTreeNodeFlags; fmt: string; args: array of const): bool; {inline;}
class function TreeNodeEx(ptr_id: pointer; flags: ImGuiTreeNodeFlags; fmt: string): bool; inline;
//todo : vargs
// function igTreeNodeExV(str_id:Pchar; flags:ImGuiTreeNodeFlags; fmt:Pchar; args:va_list):bool;cdecl;external ImguiLibName;
//todo : vargs
@ -558,8 +647,8 @@ public
class procedure TreeAdvanceToLabelPos; inline;
class function GetTreeNodeToLabelSpacing: single; inline;
class procedure SetNextTreeNodeOpen(opened: bool; cond: ImGuiSetCond = 0); inline;
class function CollapsingHeader(_label: PChar; flags: ImGuiTreeNodeFlags): bool; inline;
class function CollapsingHeaderEx(_label: PChar; p_open: Pbool; flags: ImGuiTreeNodeFlags): bool; inline;
class function CollapsingHeader(_label: PChar; flags: ImGuiTreeNodeFlags = 0): bool; inline;
class function CollapsingHeader(_label: PChar; p_open: Pbool; flags: ImGuiTreeNodeFlags = 0): bool; inline;
{ Widgets: Selectable / Lists }
class function Selectable(_label: string; selected: bool; flags: ImGuiSelectableFlags; size: ImVec2): bool;
@ -579,7 +668,7 @@ public
class procedure ValueUInt(prefix: PChar; v: dword); inline;
class procedure ValueFloat(prefix: PChar; v: single; float_format: PChar); inline;
class procedure ValueColor(prefix: PChar; v: ImVec4); inline;
class procedure ValueColor2(prefix: PChar; v: dword); inline;
class procedure ValueColor(prefix: PChar; v: ImU32); inline;
{ Tooltip }
class procedure SetTooltip(fmt: string; args: array of const); {inline}
@ -594,10 +683,10 @@ public
class procedure EndMainMenuBar; inline;
class function BeginMenuBar: bool; inline;
class procedure EndMenuBar; inline;
class function BeginMenu(_label: PChar; Enabled: bool): bool; inline;
class function BeginMenu(_label: PChar; Enabled: bool = true): bool; inline;
class procedure EndMenu; inline;
class function MenuItem(_label: PChar; shortcut: PChar; selected: bool; Enabled: bool): bool; inline;
class function MenuItemPtr(_label: PChar; shortcut: PChar; p_selected: Pbool; Enabled: bool): bool; inline;
class function MenuItem(_label: PChar; shortcut: PChar; selected: bool; Enabled: bool = true): bool; inline;
class function MenuItem(_label: PChar; shortcut: PChar; p_selected: Pbool; Enabled: bool = true): bool; inline;
{ Popup }
class procedure OpenPopup(str_id: PChar); inline;
@ -626,7 +715,7 @@ public
class function IsItemHovered: bool; inline;
class function IsItemHoveredRect: bool; inline;
class function IsItemActive: bool; inline;
class function IsItemClicked(mouse_button: longint): bool; inline;
class function IsItemClicked(mouse_button: longint = 0): bool; inline;
class function IsItemVisible: bool; inline;
class function IsAnyItemHovered: bool; inline;
class function IsAnyItemActive: bool; inline;
@ -639,7 +728,9 @@ public
class function IsRootWindowFocused: bool; inline;
class function IsRootWindowOrAnyChildFocused: bool; inline;
class function IsRootWindowOrAnyChildHovered: bool; inline;
class function IsRectVisible(item_size: ImVec2): bool; inline;
class function IsRectVisible(const item_size: ImVec2): bool; inline;
class function IsRectVisible(const rect_min, rect_max: PImVec2): bool; inline;
class function IsPosHoveringAnyWindow(pos: ImVec2): bool; inline;
class function GetTime: single; inline;
class function GetFrameCount: longint; inline;
@ -657,9 +748,9 @@ public
class procedure ColorConvertHSVtoRGB(h: single; s: single; v: single; out_r: Psingle; out_g: Psingle; out_b: Psingle); inline;
class function GetKeyIndex(key: ImGuiKey): longint; inline;
class function IsKeyDown(key_index: longint): bool; inline;
class function IsKeyPressed(key_index: longint; _repeat: bool): bool; inline;
class function IsKeyReleased(key_index: longint): bool; inline;
class function IsKeyDown(user_key_index: longint): bool; inline;
class function IsKeyPressed(user_key_index: longint; _repeat: bool): bool; inline;
class function IsKeyReleased(user_key_index: longint): bool; inline;
class function IsMouseDown(_button: longint): bool; inline;
class function IsMouseClicked(_button: longint; _repeat: bool): bool; inline;
class function IsMouseDoubleClicked(_button: longint): bool; inline;
@ -969,7 +1060,7 @@ procedure igValueInt(prefix: PChar; v: longint); cdecl; external ImguiLibName;
procedure igValueUInt(prefix: PChar; v: dword); cdecl; external ImguiLibName;
procedure igValueFloat(prefix: PChar; v: single; float_format: PChar); cdecl; external ImguiLibName;
procedure igValueColor(prefix: PChar; v: ImVec4); cdecl; external ImguiLibName;
procedure igValueColor2(prefix: PChar; v: dword); cdecl; external ImguiLibName;
procedure igValueColor2(prefix: PChar; v: ImU32); cdecl; external ImguiLibName;
{ Tooltip }
procedure igSetTooltip(fmt: PChar; args: array of const); cdecl; external ImguiLibName;
@ -1029,7 +1120,9 @@ function igIsWindowFocused: bool; cdecl; external ImguiLibName;
function igIsRootWindowFocused: bool; cdecl; external ImguiLibName;
function igIsRootWindowOrAnyChildFocused: bool; cdecl; external ImguiLibName;
function igIsRootWindowOrAnyChildHovered: bool; cdecl; external ImguiLibName;
function igIsRectVisible(item_size: ImVec2): bool; cdecl; external ImguiLibName;
function igIsRectVisible(const item_size: ImVec2): bool; cdecl; external ImguiLibName;
function igIsRectVisible2(const rect_min, rect_max: PImVec2): bool; cdecl; external ImguiLibName;
function igIsPosHoveringAnyWindow(pos: ImVec2): bool; cdecl; external ImguiLibName;
function igGetTime: single; cdecl; external ImguiLibName;
function igGetFrameCount: longint; cdecl; external ImguiLibName;
@ -1047,9 +1140,9 @@ procedure igColorConvertRGBtoHSV(r: single; g: single; b: single; out_h: Psingle
procedure igColorConvertHSVtoRGB(h: single; s: single; v: single; out_r: Psingle; out_g: Psingle; out_b: Psingle); cdecl; external ImguiLibName;
function igGetKeyIndex(key: ImGuiKey): longint; cdecl; external ImguiLibName;
function igIsKeyDown(key_index: longint): bool; cdecl; external ImguiLibName;
function igIsKeyPressed(key_index: longint; _repeat: bool): bool; cdecl; external ImguiLibName;
function igIsKeyReleased(key_index: longint): bool; cdecl; external ImguiLibName;
function igIsKeyDown(user_key_index: longint): bool; cdecl; external ImguiLibName;
function igIsKeyPressed(user_key_index: longint; _repeat: bool): bool; cdecl; external ImguiLibName;
function igIsKeyReleased(user_key_index: longint): bool; cdecl; external ImguiLibName;
function igIsMouseDown(button: longint): bool; cdecl; external ImguiLibName;
function igIsMouseClicked(button: longint; _repeat: bool): bool; cdecl; external ImguiLibName;
function igIsMouseDoubleClicked(button: longint): bool; cdecl; external ImguiLibName;
@ -1075,23 +1168,34 @@ procedure igSetClipboardText(Text: PChar); cdecl; external ImguiLibName;
{ Internal state access - if you want to share ImGui state between modules (e.g. DLL) or allocate it yourself }
function igGetVersion(): PChar; cdecl; external ImguiLibName;
function igGetCurrentContext(): PImGuiContext; cdecl; external ImguiLibName;
procedure igSetCurrentContext(ctx: PImGuiContext); cdecl; external ImguiLibName;
procedure ImFontConfig_DefaultConstructor(config: PImFontConfig); cdecl; external ImguiLibName;
procedure ImFontAtlas_GetTexDataAsRGBA32(atlas: PImFontAtlas; out_pixels: PPByte; out_width, out_height: PInteger; out_bytes_per_pixel: PInteger = nil); cdecl; external ImguiLibName;
procedure ImFontAtlas_GetTexDataAsAlpha8(atlas: PImFontAtlas; out_pixels: PPByte; out_width, out_height: PInteger; out_bytes_per_pixel: PInteger = nil); cdecl; external ImguiLibName;
procedure ImFontAtlas_SetTexID(atlas: PImFontAtlas; tex: Pointer); cdecl; external ImguiLibName;
procedure ImFontAtlas_SetTexID(atlas: PImFontAtlas; id: ImTextureID); cdecl; external ImguiLibName;
function ImFontAtlas_AddFontDefault(atlas: PImFontAtlas; config: PImFontConfig = nil): PImFont; cdecl; external ImguiLibName;
function ImFontAtlas_AddFont(atlas: PImFontAtlas; const font_cfg: PImFontConfig): PImFont; cdecl; external ImguiLibName;
function ImFontAtlas_AddFontFromFileTTF(atlas: PImFontAtlas; const filename: PChar; size_pixels: single; const font_cfg: PImFontConfig; const glyph_ranges: PImWchar): PImFont; cdecl; external ImguiLibName;
{todo
function ImFontAtlas_AddFont(struct ImFontAtlas* atlas, CONST struct ImFontConfig* font_cfg): PImFont;
function ImFontAtlas_AddFontFromFileTTF(struct ImFontAtlas* atlas, CONST char* filename, float size_pixels, CONST struct ImFontConfig* font_cfg, CONST ImWchar* glyph_ranges): PImFont;
function ImFontAtlas_AddFontFromMemoryTTF(struct ImFontAtlas* atlas, void* ttf_data, int ttf_size, float size_pixels, CONST struct ImFontConfig* font_cfg, CONST ImWchar* glyph_ranges): PImFont;
function ImFontAtlas_AddFontFromMemoryCompressedTTF(struct ImFontAtlas* atlas, CONST void* compressed_ttf_data, int compressed_ttf_size, float size_pixels, CONST struct ImFontConfig* font_cfg, CONST ImWchar* glyph_ranges): PImFont;
function ImFontAtlas_AddFontFromMemoryCompressedBase85TTF(struct ImFontAtlas* atlas, CONST char* compressed_ttf_data_base85, float size_pixels, CONST struct ImFontConfig* font_cfg, CONST ImWchar* glyph_ranges): PImFont;
}
procedure ImFontAtlas_ClearTexData(atlas: PImFontAtlas); cdecl; external ImguiLibName;
procedure ImFontAtlas_Clear(atlas: PImFontAtlas); cdecl; external ImguiLibName;
function ImFontAtlas_GetGlyphRangesDefault(atlas: PImFontAtlas): PImWchar; cdecl; external ImguiLibName;
function ImFontAtlas_GetGlyphRangesKorean(atlas: PImFontAtlas): PImWchar; cdecl; external ImguiLibName;
function ImFontAtlas_GetGlyphRangesJapanese(atlas: PImFontAtlas): PImWchar; cdecl; external ImguiLibName;
function ImFontAtlas_GetGlyphRangesChinese(atlas: PImFontAtlas): PImWchar; cdecl; external ImguiLibName;
function ImFontAtlas_GetGlyphRangesCyrillic(atlas: PImFontAtlas): PImWchar; cdecl; external ImguiLibName;
function ImFontAtlas_GetGlyphRangesThai(atlas: PImFontAtlas): PImWchar; cdecl; external ImguiLibName;
procedure ImGuiIO_AddInputCharacter(c: word); cdecl; external ImguiLibName;
procedure ImGuiIO_AddInputCharactersUTF8(utf8_chars: pchar); cdecl; external ImguiLibName;
procedure ImGuiIO_ClearInputCharacters(); cdecl; external ImguiLibName;
@ -1117,8 +1221,8 @@ procedure ImDrawList_PopTextureID(list: PImDrawList); cdecl; external ImguiLibNa
{ Primitives }
procedure ImDrawList_AddLine(list: PImDrawList; a: ImVec2; b: ImVec2; col: ImU32; thickness: single); cdecl; external ImguiLibName;
procedure ImDrawList_AddRect(list: PImDrawList; a: ImVec2; b: ImVec2; col: ImU32; rounding: single; rounding_corners: longint; thickness: single); cdecl; external ImguiLibName;
procedure ImDrawList_AddRectFilled(list: PImDrawList; a: ImVec2; b: ImVec2; col: ImU32; rounding: single; rounding_corners: longint); cdecl; external ImguiLibName;
procedure ImDrawList_AddRect(list: PImDrawList; a: ImVec2; b: ImVec2; col: ImU32; rounding: single; rounding_corners_flags: longint; thickness: single); cdecl; external ImguiLibName;
procedure ImDrawList_AddRectFilled(list: PImDrawList; a: ImVec2; b: ImVec2; col: ImU32; rounding: single; rounding_corners_flags: longint); cdecl; external ImguiLibName;
procedure ImDrawList_AddRectFilledMultiColor(list: PImDrawList; a: ImVec2; b: ImVec2; col_upr_left: ImU32; col_upr_right: ImU32;
col_bot_right: ImU32; col_bot_left: ImU32); cdecl; external ImguiLibName;
procedure ImDrawList_AddQuad(list: PImDrawList; a: ImVec2; b: ImVec2; c: ImVec2; d: ImVec2; col: ImU32; thickness: single); cdecl; external ImguiLibName;
@ -1130,7 +1234,7 @@ procedure ImDrawList_AddCircleFilled(list: PImDrawList; centre: ImVec2; radius:
procedure ImDrawList_AddText(list: PImDrawList; pos: ImVec2; col: ImU32; text_begin: PChar; text_end: PChar); cdecl; external ImguiLibName;
procedure ImDrawList_AddTextExt(list: PImDrawList; font: PImFont; font_size: single; pos: ImVec2; col: ImU32; text_begin: PChar;
text_end: PChar; wrap_width: single; cpu_fine_clip_rect: PImVec4); cdecl; external ImguiLibName;
procedure ImDrawList_AddImage(list: PImDrawList; user_texture_id: ImTextureID; a: ImVec2; b: ImVec2; uv0: ImVec2; uv1: ImVec2; col: ImU32); cdecl; external ImguiLibName;
procedure ImDrawList_AddImage(list: PImDrawList; user_texture_id: ImTextureID; a: ImVec2; b: ImVec2; uva: ImVec2; uvb: ImVec2; col: ImU32); cdecl; external ImguiLibName;
procedure ImDrawList_AddPolyline(list: PImDrawList; points: PImVec2; num_points: longint; col: ImU32; closed: bool; thickness: single;
anti_aliased: bool); cdecl; external ImguiLibName;
procedure ImDrawList_AddConvexPolyFilled(list: PImDrawList; points: PImVec2; num_points: longint; col: ImU32; anti_aliased: bool); cdecl; external ImguiLibName;
@ -1141,13 +1245,13 @@ procedure ImDrawList_AddBezierCurve(list: PImDrawList; pos0: ImVec2; cp0: ImVec2
procedure ImDrawList_PathClear(list: PImDrawList); cdecl; external ImguiLibName;
procedure ImDrawList_PathLineTo(list: PImDrawList; pos: ImVec2); cdecl; external ImguiLibName;
procedure ImDrawList_PathLineToMergeDuplicate(list: PImDrawList; pos: ImVec2); cdecl; external ImguiLibName;
procedure ImDrawList_PathFill(list: PImDrawList; col: ImU32); cdecl; external ImguiLibName;
procedure ImDrawList_PathFillConvex(list: PImDrawList; col: ImU32); cdecl; external ImguiLibName;
procedure ImDrawList_PathStroke(list: PImDrawList; col: ImU32; closed: bool; thickness: single); cdecl; external ImguiLibName;
procedure ImDrawList_PathArcTo(list: PImDrawList; centre: ImVec2; radius: single; a_min: single; a_max: single; num_segments: longint); cdecl; external ImguiLibName;
{ Use precomputed angles for a 12 steps circle }
procedure ImDrawList_PathArcToFast(list: PImDrawList; centre: ImVec2; radius: single; a_min_of_12: longint; a_max_of_12: longint); cdecl; external ImguiLibName;
procedure ImDrawList_PathBezierCurveTo(list: PImDrawList; p1: ImVec2; p2: ImVec2; p3: ImVec2; num_segments: longint); cdecl; external ImguiLibName;
procedure ImDrawList_PathRect(list: PImDrawList; rect_min: ImVec2; rect_max: ImVec2; rounding: single; rounding_corners: longint); cdecl; external ImguiLibName;
procedure ImDrawList_PathRect(list: PImDrawList; rect_min: ImVec2; rect_max: ImVec2; rounding: single; rounding_corners_flags: longint); cdecl; external ImguiLibName;
{ Channels }
procedure ImDrawList_ChannelsSplit(list: PImDrawList; channels_count: longint); cdecl; external ImguiLibName;
@ -1181,6 +1285,12 @@ begin
result.y := y;
end;
//Replacement for (void*)(intptr_t) int cast, used for IDs. Generates warnings
function ImIDPtr(const i: integer): pointer;
begin
result := pointer( IntPtr(i) )
end;
{ ImGui
Keep functions short, they're mostly just wrappers. Inlining begin/end with trivial function body is ok
}
@ -1296,20 +1406,20 @@ class procedure ImGui.PopFont;
begin igPopFont end;
class procedure ImGui.PushStyleColor(idx: ImGuiCol; col: ImVec4);
begin igPushStyleColor(idx, col) end;
class procedure ImGui.PopStyleColor(Count: longint);
class procedure ImGui.PopStyleColor(count: longint);
begin igPopStyleColor(Count) end;
class procedure ImGui.PushStyleVar(idx: ImGuiStyleVar; val: single);
begin igPushStyleVar(idx, val) end;
class procedure ImGui.PushStyleVarVec(idx: ImGuiStyleVar; val: ImVec2);
begin igPushStyleVarVec(idx, val) end;
class procedure ImGui.PopStyleVar(Count: longint);
begin igPopStyleVar(Count) end;
class procedure ImGui.PopStyleVar(count: longint);
begin igPopStyleVar(count) end;
class function ImGui.GetFont(): PImFont;
begin result := igGetFont end;
class function ImGui.GetFontSize: single;
begin result := igGetFontSize end;
class procedure ImGui.GetFontTexUvWhitePixel(pOut: PImVec2);
begin igGetFontTexUvWhitePixel(pOut) end;
class function ImGui.GetFontTexUvWhitePixel():ImVec2;
begin igGetFontTexUvWhitePixel(@result); end;
class function ImGui.GetColorU32(idx: ImGuiCol; alpha_mul: single): ImU32;
begin result := igGetColorU32(idx, alpha_mul) end;
class function ImGui.GetColorU32Vec(col: PImVec4): ImU32;
@ -1419,9 +1529,9 @@ class function ImGui.GetIdPtr(ptr_id: pointer): ImGuiID;
{ Widgets }
class procedure ImGui.Text(const text_: string);
begin TextUnformatted(text_) end;
begin igText(Pchar(text_)) end;
class procedure ImGui.Text(const Fmt: string; const Args: array of const);
begin TextUnformatted(Format(fmt, args)) end;
begin Text(Format(fmt, args)) end;
class procedure ImGui.TextColored(col: ImVec4; fmt: PChar; args: array of const);
begin TextColored(col, Format(fmt, args)) end;
class procedure ImGui.TextColored(col: ImVec4; const fmt: string);
@ -1564,25 +1674,26 @@ class function ImGui.InputInt4(_label: PChar; v: TLongInt4; extra_flags: ImGuiIn
begin result := igInputInt4(_label, v, extra_flags) end;
{ Widgets: Trees }
class function ImGui.TreeNode(_label: PChar): bool;
begin result := igTreeNode(_label) end;
class function ImGui.TreeNodeStr(str_id: PChar; fmt: string; args: array of const): bool;
begin result := TreeNodeStr(str_id, Format(fmt, args)) end;
class function ImGui.TreeNodeStr(str_id: PChar; fmt: string): bool;
begin result := igTreeNodeStr(str_id, pchar(fmt)) end;
class function ImGui.TreeNodePtr(ptr_id: pointer; fmt: string; args: array of const): bool;
begin result := TreeNodePtr(ptr_id, Format(fmt, args)) end;
class function ImGui.TreeNodePtr(ptr_id: pointer; fmt: string): bool;
class function ImGui.TreeNode(_label: string): bool;
begin result := igTreeNode(pchar(_label)) end;
class function ImGui.TreeNode(str_id: string; fmt: string; args: array of const): bool;
begin result := TreeNode(str_id, Format(fmt, args)) end;
class function ImGui.TreeNode(str_id: string; fmt: string): bool;
begin result := igTreeNodeStr(pchar(str_id), pchar(fmt)) end;
class function ImGui.TreeNode(ptr_id: pointer; fmt: string; args: array of const): bool;
begin result := TreeNode(ptr_id, Format(fmt, args)) end;
class function ImGui.TreeNode(ptr_id: pointer; fmt: string): bool;
begin result := igTreeNodePtr(ptr_id, pchar(fmt)) end;
class function ImGui.TreeNodeEx(_label: PChar; flags: ImGuiTreeNodeFlags): bool;
begin result := igTreeNodeEx(_label, flags) end;
class function ImGui.TreeNodeExStr(str_id: PChar; flags: ImGuiTreeNodeFlags; fmt: string; args: array of const): bool;
begin result := TreeNodeExStr(str_id, flags, Format(fmt, args)) end;
class function ImGui.TreeNodeExStr(str_id: PChar; flags: ImGuiTreeNodeFlags; fmt: string): bool;
class function ImGui.TreeNodeEx(str_id: PChar; flags: ImGuiTreeNodeFlags; fmt: string; args: array of const): bool;
begin result := TreeNodeEx(str_id, flags, Format(fmt, args)) end;
class function ImGui.TreeNodeEx(str_id: PChar; flags: ImGuiTreeNodeFlags; fmt: string): bool;
begin result := igTreeNodeExStr(str_id, flags, pchar(fmt)) end;
class function ImGui.TreeNodeExPtr(ptr_id: pointer; flags: ImGuiTreeNodeFlags; fmt: string; args: array of const): bool;
begin result := TreeNodeExPtr(ptr_id, flags, Format(fmt, args)) end;
class function ImGui.TreeNodeExPtr(ptr_id: pointer; flags: ImGuiTreeNodeFlags; fmt: string): bool;
class function ImGui.TreeNodeEx(ptr_id: pointer; flags: ImGuiTreeNodeFlags; fmt: string; args: array of const): bool;
begin result := TreeNodeEx(ptr_id, flags, Format(fmt, args)) end;
class function ImGui.TreeNodeEx(ptr_id: pointer; flags: ImGuiTreeNodeFlags; fmt: string): bool;
begin result := igTreeNodeExPtr(ptr_id, flags, pchar(fmt)) end;
class procedure ImGui.TreePushStr(str_id: PChar);
begin igTreePushStr(str_id) end;
@ -1598,7 +1709,7 @@ class procedure ImGui.SetNextTreeNodeOpen(opened: bool; cond: ImGuiSetCond = 0);
begin igSetNextTreeNodeOpen(opened, cond) end;
class function ImGui.CollapsingHeader(_label: PChar; flags: ImGuiTreeNodeFlags): bool;
begin result := igCollapsingHeader(_label, flags) end;
class function ImGui.CollapsingHeaderEx(_label: PChar; p_open: Pbool; flags: ImGuiTreeNodeFlags): bool;
class function ImGui.CollapsingHeader(_label: PChar; p_open: Pbool; flags: ImGuiTreeNodeFlags): bool;
begin result := igCollapsingHeaderEx(_label, p_open, flags) end;
{ Widgets: Selectable / Lists }
@ -1628,7 +1739,7 @@ class procedure ImGui.ValueFloat(prefix: PChar; v: single; float_format: PChar);
begin igValueFloat(prefix, v, float_format) end;
class procedure ImGui.ValueColor(prefix: PChar; v: ImVec4);
begin igValueColor(prefix, v) end;
class procedure ImGui.ValueColor2(prefix: PChar; v: dword);
class procedure ImGui.ValueColor(prefix: PChar; v: ImU32);
begin igValueColor2(prefix, v) end;
{ Tooltip }
@ -1656,7 +1767,7 @@ class procedure ImGui.EndMenu;
begin igEndMenu end;
class function ImGui.MenuItem(_label: PChar; shortcut: PChar; selected: bool; Enabled: bool): bool;
begin result := igMenuItem(_label, shortcut, selected, Enabled) end;
class function ImGui.MenuItemPtr(_label: PChar; shortcut: PChar; p_selected: Pbool; Enabled: bool): bool;
class function ImGui.MenuItem(_label: PChar; shortcut: PChar; p_selected: Pbool; Enabled: bool): bool;
begin result := igMenuItemPtr(_label, shortcut, p_selected, Enabled) end;
{ Popup }
@ -1732,8 +1843,10 @@ class function ImGui.IsRootWindowOrAnyChildFocused: bool;
begin result := igIsRootWindowOrAnyChildFocused end;
class function ImGui.IsRootWindowOrAnyChildHovered: bool;
begin result := igIsRootWindowOrAnyChildHovered end;
class function ImGui.IsRectVisible(item_size: ImVec2): bool;
class function ImGui.IsRectVisible(const item_size: ImVec2): bool;
begin result := igIsRectVisible(item_size) end;
class function ImGui.IsRectVisible(const rect_min, rect_max: PImVec2): bool;
begin result := igIsRectVisible2(rect_min, rect_max) end;
class function ImGui.IsPosHoveringAnyWindow(pos: ImVec2): bool;
begin result := igIsPosHoveringAnyWindow(pos) end;
class function ImGui.GetTime: single;
@ -1766,12 +1879,12 @@ class procedure ImGui.ColorConvertHSVtoRGB(h: single; s: single; v: single; out_
class function ImGui.GetKeyIndex(key: ImGuiKey): longint;
begin result := igGetKeyIndex(key) end;
class function ImGui.IsKeyDown(key_index: longint): bool;
begin result := igIsKeyDown(key_index) end;
class function ImGui.IsKeyPressed(key_index: longint; _repeat: bool): bool;
begin result := igIsKeyPressed(key_index, _repeat) end;
class function ImGui.IsKeyReleased(key_index: longint): bool;
begin result := igIsKeyReleased(key_index) end;
class function ImGui.IsKeyDown(user_key_index: longint): bool;
begin result := igIsKeyDown(user_key_index) end;
class function ImGui.IsKeyPressed(user_key_index: longint; _repeat: bool): bool;
begin result := igIsKeyPressed(user_key_index, _repeat) end;
class function ImGui.IsKeyReleased(user_key_index: longint): bool;
begin result := igIsKeyReleased(user_key_index) end;
class function ImGui.IsMouseDown(_button: longint): bool;
begin result := igIsMouseDown(_button) end;
class function ImGui.IsMouseClicked(_button: longint; _repeat: bool): bool;

View File

@ -58,6 +58,7 @@
<Unit5>
<Filename Value="sdl2\sdl2.pas"/>
<IsPartOfProject Value="True"/>
<UnitName Value="SDL2"/>
</Unit5>
<Unit6>
<Filename Value="imgui\fpimgui.pas"/>

View File

@ -418,7 +418,7 @@ begin
Imgui.Checkbox('textures', @view.opts.textures);
Imgui.Checkbox('vertex colors', @view.opts.vcolors);
if g_model <> nil then
if Imgui.Button('Export to obj', ImVec2Init(0,0)) then
if Imgui.Button('Export to obj') then
g_model.ExportObj('rs_exported.obj');
Imgui.End_;

View File

@ -1,165 +0,0 @@
GNU LESSER GENERAL PUBLIC LICENSE
Version 3, 29 June 2007
Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
Everyone is permitted to copy and distribute verbatim copies
of this license document, but changing it is not allowed.
This version of the GNU Lesser General Public License incorporates
the terms and conditions of version 3 of the GNU General Public
License, supplemented by the additional permissions listed below.
0. Additional Definitions.
As used herein, "this License" refers to version 3 of the GNU Lesser
General Public License, and the "GNU GPL" refers to version 3 of the GNU
General Public License.
"The Library" refers to a covered work governed by this License,
other than an Application or a Combined Work as defined below.
An "Application" is any work that makes use of an interface provided
by the Library, but which is not otherwise based on the Library.
Defining a subclass of a class defined by the Library is deemed a mode
of using an interface provided by the Library.
A "Combined Work" is a work produced by combining or linking an
Application with the Library. The particular version of the Library
with which the Combined Work was made is also called the "Linked
Version".
The "Minimal Corresponding Source" for a Combined Work means the
Corresponding Source for the Combined Work, excluding any source code
for portions of the Combined Work that, considered in isolation, are
based on the Application, and not on the Linked Version.
The "Corresponding Application Code" for a Combined Work means the
object code and/or source code for the Application, including any data
and utility programs needed for reproducing the Combined Work from the
Application, but excluding the System Libraries of the Combined Work.
1. Exception to Section 3 of the GNU GPL.
You may convey a covered work under sections 3 and 4 of this License
without being bound by section 3 of the GNU GPL.
2. Conveying Modified Versions.
If you modify a copy of the Library, and, in your modifications, a
facility refers to a function or data to be supplied by an Application
that uses the facility (other than as an argument passed when the
facility is invoked), then you may convey a copy of the modified
version:
a) under this License, provided that you make a good faith effort to
ensure that, in the event an Application does not supply the
function or data, the facility still operates, and performs
whatever part of its purpose remains meaningful, or
b) under the GNU GPL, with none of the additional permissions of
this License applicable to that copy.
3. Object Code Incorporating Material from Library Header Files.
The object code form of an Application may incorporate material from
a header file that is part of the Library. You may convey such object
code under terms of your choice, provided that, if the incorporated
material is not limited to numerical parameters, data structure
layouts and accessors, or small macros, inline functions and templates
(ten or fewer lines in length), you do both of the following:
a) Give prominent notice with each copy of the object code that the
Library is used in it and that the Library and its use are
covered by this License.
b) Accompany the object code with a copy of the GNU GPL and this license
document.
4. Combined Works.
You may convey a Combined Work under terms of your choice that,
taken together, effectively do not restrict modification of the
portions of the Library contained in the Combined Work and reverse
engineering for debugging such modifications, if you also do each of
the following:
a) Give prominent notice with each copy of the Combined Work that
the Library is used in it and that the Library and its use are
covered by this License.
b) Accompany the Combined Work with a copy of the GNU GPL and this license
document.
c) For a Combined Work that displays copyright notices during
execution, include the copyright notice for the Library among
these notices, as well as a reference directing the user to the
copies of the GNU GPL and this license document.
d) Do one of the following:
0) Convey the Minimal Corresponding Source under the terms of this
License, and the Corresponding Application Code in a form
suitable for, and under terms that permit, the user to
recombine or relink the Application with a modified version of
the Linked Version to produce a modified Combined Work, in the
manner specified by section 6 of the GNU GPL for conveying
Corresponding Source.
1) Use a suitable shared library mechanism for linking with the
Library. A suitable mechanism is one that (a) uses at run time
a copy of the Library already present on the user's computer
system, and (b) will operate properly with a modified version
of the Library that is interface-compatible with the Linked
Version.
e) Provide Installation Information, but only if you would otherwise
be required to provide such information under section 6 of the
GNU GPL, and only to the extent that such information is
necessary to install and execute a modified version of the
Combined Work produced by recombining or relinking the
Application with a modified version of the Linked Version. (If
you use option 4d0, the Installation Information must accompany
the Minimal Corresponding Source and Corresponding Application
Code. If you use option 4d1, you must provide the Installation
Information in the manner specified by section 6 of the GNU GPL
for conveying Corresponding Source.)
5. Combined Libraries.
You may place library facilities that are a work based on the
Library side by side in a single library together with other library
facilities that are not Applications and are not covered by this
License, and convey such a combined library under terms of your
choice, if you do both of the following:
a) Accompany the combined library with a copy of the same work based
on the Library, uncombined with any other library facilities,
conveyed under the terms of this License.
b) Give prominent notice with the combined library that part of it
is a work based on the Library, and explaining where to find the
accompanying uncombined form of the same work.
6. Revised Versions of the GNU Lesser General Public License.
The Free Software Foundation may publish revised and/or new versions
of the GNU Lesser General Public License from time to time. Such new
versions will be similar in spirit to the present version, but may
differ in detail to address new problems or concerns.
Each version is given a distinguishing version number. If the
Library as you received it specifies that a certain numbered version
of the GNU Lesser General Public License "or any later version"
applies to it, you have the option of following the terms and
conditions either of that published version or of any later version
published by the Free Software Foundation. If the Library as you
received it does not specify a version number of the GNU Lesser
General Public License, you may choose any version of the GNU Lesser
General Public License ever published by the Free Software Foundation.
If the Library as you received it specifies that a proxy can decide
whether future versions of the GNU Lesser General Public License shall
apply, that proxy's public statement of acceptance of any version is
permanent authorization for you to choose that version for the
Library.

View File

@ -0,0 +1,373 @@
Mozilla Public License Version 2.0
==================================
1. Definitions
--------------
1.1. "Contributor"
means each individual or legal entity that creates, contributes to
the creation of, or owns Covered Software.
1.2. "Contributor Version"
means the combination of the Contributions of others (if any) used
by a Contributor and that particular Contributor's Contribution.
1.3. "Contribution"
means Covered Software of a particular Contributor.
1.4. "Covered Software"
means Source Code Form to which the initial Contributor has attached
the notice in Exhibit A, the Executable Form of such Source Code
Form, and Modifications of such Source Code Form, in each case
including portions thereof.
1.5. "Incompatible With Secondary Licenses"
means
(a) that the initial Contributor has attached the notice described
in Exhibit B to the Covered Software; or
(b) that the Covered Software was made available under the terms of
version 1.1 or earlier of the License, but not also under the
terms of a Secondary License.
1.6. "Executable Form"
means any form of the work other than Source Code Form.
1.7. "Larger Work"
means a work that combines Covered Software with other material, in
a separate file or files, that is not Covered Software.
1.8. "License"
means this document.
1.9. "Licensable"
means having the right to grant, to the maximum extent possible,
whether at the time of the initial grant or subsequently, any and
all of the rights conveyed by this License.
1.10. "Modifications"
means any of the following:
(a) any file in Source Code Form that results from an addition to,
deletion from, or modification of the contents of Covered
Software; or
(b) any new file in Source Code Form that contains any Covered
Software.
1.11. "Patent Claims" of a Contributor
means any patent claim(s), including without limitation, method,
process, and apparatus claims, in any patent Licensable by such
Contributor that would be infringed, but for the grant of the
License, by the making, using, selling, offering for sale, having
made, import, or transfer of either its Contributions or its
Contributor Version.
1.12. "Secondary License"
means either the GNU General Public License, Version 2.0, the GNU
Lesser General Public License, Version 2.1, the GNU Affero General
Public License, Version 3.0, or any later versions of those
licenses.
1.13. "Source Code Form"
means the form of the work preferred for making modifications.
1.14. "You" (or "Your")
means an individual or a legal entity exercising rights under this
License. For legal entities, "You" includes any entity that
controls, is controlled by, or is under common control with You. For
purposes of this definition, "control" means (a) the power, direct
or indirect, to cause the direction or management of such entity,
whether by contract or otherwise, or (b) ownership of more than
fifty percent (50%) of the outstanding shares or beneficial
ownership of such entity.
2. License Grants and Conditions
--------------------------------
2.1. Grants
Each Contributor hereby grants You a world-wide, royalty-free,
non-exclusive license:
(a) under intellectual property rights (other than patent or trademark)
Licensable by such Contributor to use, reproduce, make available,
modify, display, perform, distribute, and otherwise exploit its
Contributions, either on an unmodified basis, with Modifications, or
as part of a Larger Work; and
(b) under Patent Claims of such Contributor to make, use, sell, offer
for sale, have made, import, and otherwise transfer either its
Contributions or its Contributor Version.
2.2. Effective Date
The licenses granted in Section 2.1 with respect to any Contribution
become effective for each Contribution on the date the Contributor first
distributes such Contribution.
2.3. Limitations on Grant Scope
The licenses granted in this Section 2 are the only rights granted under
this License. No additional rights or licenses will be implied from the
distribution or licensing of Covered Software under this License.
Notwithstanding Section 2.1(b) above, no patent license is granted by a
Contributor:
(a) for any code that a Contributor has removed from Covered Software;
or
(b) for infringements caused by: (i) Your and any other third party's
modifications of Covered Software, or (ii) the combination of its
Contributions with other software (except as part of its Contributor
Version); or
(c) under Patent Claims infringed by Covered Software in the absence of
its Contributions.
This License does not grant any rights in the trademarks, service marks,
or logos of any Contributor (except as may be necessary to comply with
the notice requirements in Section 3.4).
2.4. Subsequent Licenses
No Contributor makes additional grants as a result of Your choice to
distribute the Covered Software under a subsequent version of this
License (see Section 10.2) or under the terms of a Secondary License (if
permitted under the terms of Section 3.3).
2.5. Representation
Each Contributor represents that the Contributor believes its
Contributions are its original creation(s) or it has sufficient rights
to grant the rights to its Contributions conveyed by this License.
2.6. Fair Use
This License is not intended to limit any rights You have under
applicable copyright doctrines of fair use, fair dealing, or other
equivalents.
2.7. Conditions
Sections 3.1, 3.2, 3.3, and 3.4 are conditions of the licenses granted
in Section 2.1.
3. Responsibilities
-------------------
3.1. Distribution of Source Form
All distribution of Covered Software in Source Code Form, including any
Modifications that You create or to which You contribute, must be under
the terms of this License. You must inform recipients that the Source
Code Form of the Covered Software is governed by the terms of this
License, and how they can obtain a copy of this License. You may not
attempt to alter or restrict the recipients' rights in the Source Code
Form.
3.2. Distribution of Executable Form
If You distribute Covered Software in Executable Form then:
(a) such Covered Software must also be made available in Source Code
Form, as described in Section 3.1, and You must inform recipients of
the Executable Form how they can obtain a copy of such Source Code
Form by reasonable means in a timely manner, at a charge no more
than the cost of distribution to the recipient; and
(b) You may distribute such Executable Form under the terms of this
License, or sublicense it under different terms, provided that the
license for the Executable Form does not attempt to limit or alter
the recipients' rights in the Source Code Form under this License.
3.3. Distribution of a Larger Work
You may create and distribute a Larger Work under terms of Your choice,
provided that You also comply with the requirements of this License for
the Covered Software. If the Larger Work is a combination of Covered
Software with a work governed by one or more Secondary Licenses, and the
Covered Software is not Incompatible With Secondary Licenses, this
License permits You to additionally distribute such Covered Software
under the terms of such Secondary License(s), so that the recipient of
the Larger Work may, at their option, further distribute the Covered
Software under the terms of either this License or such Secondary
License(s).
3.4. Notices
You may not remove or alter the substance of any license notices
(including copyright notices, patent notices, disclaimers of warranty,
or limitations of liability) contained within the Source Code Form of
the Covered Software, except that You may alter any license notices to
the extent required to remedy known factual inaccuracies.
3.5. Application of Additional Terms
You may choose to offer, and to charge a fee for, warranty, support,
indemnity or liability obligations to one or more recipients of Covered
Software. However, You may do so only on Your own behalf, and not on
behalf of any Contributor. You must make it absolutely clear that any
such warranty, support, indemnity, or liability obligation is offered by
You alone, and You hereby agree to indemnify every Contributor for any
liability incurred by such Contributor as a result of warranty, support,
indemnity or liability terms You offer. You may include additional
disclaimers of warranty and limitations of liability specific to any
jurisdiction.
4. Inability to Comply Due to Statute or Regulation
---------------------------------------------------
If it is impossible for You to comply with any of the terms of this
License with respect to some or all of the Covered Software due to
statute, judicial order, or regulation then You must: (a) comply with
the terms of this License to the maximum extent possible; and (b)
describe the limitations and the code they affect. Such description must
be placed in a text file included with all distributions of the Covered
Software under this License. Except to the extent prohibited by statute
or regulation, such description must be sufficiently detailed for a
recipient of ordinary skill to be able to understand it.
5. Termination
--------------
5.1. The rights granted under this License will terminate automatically
if You fail to comply with any of its terms. However, if You become
compliant, then the rights granted under this License from a particular
Contributor are reinstated (a) provisionally, unless and until such
Contributor explicitly and finally terminates Your grants, and (b) on an
ongoing basis, if such Contributor fails to notify You of the
non-compliance by some reasonable means prior to 60 days after You have
come back into compliance. Moreover, Your grants from a particular
Contributor are reinstated on an ongoing basis if such Contributor
notifies You of the non-compliance by some reasonable means, this is the
first time You have received notice of non-compliance with this License
from such Contributor, and You become compliant prior to 30 days after
Your receipt of the notice.
5.2. If You initiate litigation against any entity by asserting a patent
infringement claim (excluding declaratory judgment actions,
counter-claims, and cross-claims) alleging that a Contributor Version
directly or indirectly infringes any patent, then the rights granted to
You by any and all Contributors for the Covered Software under Section
2.1 of this License shall terminate.
5.3. In the event of termination under Sections 5.1 or 5.2 above, all
end user license agreements (excluding distributors and resellers) which
have been validly granted by You or Your distributors under this License
prior to termination shall survive termination.
************************************************************************
* *
* 6. Disclaimer of Warranty *
* ------------------------- *
* *
* Covered Software is provided under this License on an "as is" *
* basis, without warranty of any kind, either expressed, implied, or *
* statutory, including, without limitation, warranties that the *
* Covered Software is free of defects, merchantable, fit for a *
* particular purpose or non-infringing. The entire risk as to the *
* quality and performance of the Covered Software is with You. *
* Should any Covered Software prove defective in any respect, You *
* (not any Contributor) assume the cost of any necessary servicing, *
* repair, or correction. This disclaimer of warranty constitutes an *
* essential part of this License. No use of any Covered Software is *
* authorized under this License except under this disclaimer. *
* *
************************************************************************
************************************************************************
* *
* 7. Limitation of Liability *
* -------------------------- *
* *
* Under no circumstances and under no legal theory, whether tort *
* (including negligence), contract, or otherwise, shall any *
* Contributor, or anyone who distributes Covered Software as *
* permitted above, be liable to You for any direct, indirect, *
* special, incidental, or consequential damages of any character *
* including, without limitation, damages for lost profits, loss of *
* goodwill, work stoppage, computer failure or malfunction, or any *
* and all other commercial damages or losses, even if such party *
* shall have been informed of the possibility of such damages. This *
* limitation of liability shall not apply to liability for death or *
* personal injury resulting from such party's negligence to the *
* extent applicable law prohibits such limitation. Some *
* jurisdictions do not allow the exclusion or limitation of *
* incidental or consequential damages, so this exclusion and *
* limitation may not apply to You. *
* *
************************************************************************
8. Litigation
-------------
Any litigation relating to this License may be brought only in the
courts of a jurisdiction where the defendant maintains its principal
place of business and such litigation shall be governed by laws of that
jurisdiction, without reference to its conflict-of-law provisions.
Nothing in this Section shall prevent a party's ability to bring
cross-claims or counter-claims.
9. Miscellaneous
----------------
This License represents the complete agreement concerning the subject
matter hereof. If any provision of this License is held to be
unenforceable, such provision shall be reformed only to the extent
necessary to make it enforceable. Any law or regulation which provides
that the language of a contract shall be construed against the drafter
shall not be used to construe this License against a Contributor.
10. Versions of the License
---------------------------
10.1. New Versions
Mozilla Foundation is the license steward. Except as provided in Section
10.3, no one other than the license steward has the right to modify or
publish new versions of this License. Each version will be given a
distinguishing version number.
10.2. Effect of New Versions
You may distribute the Covered Software under the terms of the version
of the License under which You originally received the Covered Software,
or under the terms of any subsequent version published by the license
steward.
10.3. Modified Versions
If you create software not governed by this License, and you want to
create a new license for such software, you may create and use a
modified version of this License if you rename the license and remove
any references to the name of the license steward (except to note that
such modified license differs from this License).
10.4. Distributing Source Code Form that is Incompatible With Secondary
Licenses
If You choose to distribute Source Code Form that is Incompatible With
Secondary Licenses under the terms of this version of the License, the
notice described in Exhibit B of this License must be attached.
Exhibit A - Source Code Form License Notice
-------------------------------------------
This Source Code Form is subject to the terms of the Mozilla Public
License, v. 2.0. If a copy of the MPL was not distributed with this
file, You can obtain one at http://mozilla.org/MPL/2.0/.
If it is not possible or desirable to put the notice in a particular
file, then You may include the notice in a location (such as a LICENSE
file in a relevant directory) where a recipient would be likely to look
for such a notice.
You may add additional accurate notices of copyright ownership.
Exhibit B - "Incompatible With Secondary Licenses" Notice
---------------------------------------------------------
This Source Code Form is "Incompatible With Secondary Licenses", as
defined by the Mozilla Public License, v. 2.0.

View File

@ -1,5 +1,6 @@
unit SDL2;
//sdl2 unit build, 4.6.2017
//source: https://github.com/ev1313/Pascal-SDL-2-Headers, 11.5.2017, #3820ac1c55c563cfc4a2bcb8eadb8addc7806abe
{
Simple DirectMedia Layer
Copyright (C) 1997-2013 Sam Lantinga <slouken@libsdl.org>
@ -585,6 +586,7 @@ unit SDL2;
{$IFDEF FPC}
{$H+}
{$PACKRECORDS C} // Added for record
{$PACKENUM DEFAULT} // Added for c-like enumerators
{$MACRO ON} // Added For OpenGL
{$DEFINE Delphi}
{$DEFINE UseAT}
@ -663,19 +665,15 @@ interface
Windows;
{$ENDIF}
{$IFDEF LINUX}
{$IFDEF UNIX}
uses
{$IFDEF DARWIN}
CocoaAll,
{$ENDIF}
X,
XLib;
{$ENDIF}
{$IFDEF DARWIN}
uses
X,
XLib,
CocoaAll;
{$ENDIF}
const
{$IFDEF WINDOWS}
@ -2030,15 +2028,15 @@ function SDL_PointInRect(const p: PSDL_Point; const r: PSDL_Rect): Boolean; Inli
* Returns true if the rectangle has no area.
*}
//changed from variant(b�����h!) to TSDL_Rect
//changed from variant(b�����h!) to TSDL_Rect
//maybe PSDL_Rect?
function SDL_RectEmpty(X: TSDL_Rect): Boolean;
function SDL_RectEmpty(const r: PSDL_Rect): Boolean; inline;
{**
* Returns true if the two rectangles are equal.
*}
function SDL_RectEquals(A: TSDL_Rect; B: TSDL_Rect): Boolean;
function SDL_RectEquals(const a, b: PSDL_Rect): Boolean; inline;
{**
* Determine whether two rectangles intersect.
@ -2046,7 +2044,7 @@ function SDL_RectEquals(A: TSDL_Rect; B: TSDL_Rect): Boolean;
* SDL_TRUE if there is an intersection, SDL_FALSE otherwise.
*}
function SDL_HasIntersection(const A: PSDL_Rect; const B: PSDL_Rect): TSDL_Bool cdecl; external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_HasIntersection' {$ENDIF} {$ENDIF};
function SDL_HasIntersection(const a, b: PSDL_Rect): TSDL_Bool cdecl; external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_HasIntersection' {$ENDIF} {$ENDIF};
{**
* Calculate the intersection of two rectangles.
@ -2054,13 +2052,13 @@ function SDL_HasIntersection(const A: PSDL_Rect; const B: PSDL_Rect): TSDL_Bool
* SDL_TRUE if there is an intersection, SDL_FALSE otherwise.
*}
function SDL_IntersectRect(const A: PSDL_Rect; const B: PSDL_Rect; result: PSDL_Rect): TSDL_Bool cdecl; external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_IntersectRect' {$ENDIF} {$ENDIF};
function SDL_IntersectRect(const A, B: PSDL_Rect; result: PSDL_Rect): TSDL_Bool cdecl; external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_IntersectRect' {$ENDIF} {$ENDIF};
{**
* Calculate the union of two rectangles.
*}
procedure SDL_UnionRect(const A: PSDL_Rect; const B: PSDL_Rect; result: PSDL_Rect) cdecl; external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_UnionRect' {$ENDIF} {$ENDIF};
procedure SDL_UnionRect(const A, B: PSDL_Rect; result: PSDL_Rect) cdecl; external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_UnionRect' {$ENDIF} {$ENDIF};
{**
* Calculate a minimal rectangle enclosing a set of points
@ -2076,7 +2074,7 @@ function SDL_EnclosePoints(const points: PSDL_Point; count: SInt32; const clip:
* SDL_TRUE if there is an intersection, SDL_FALSE otherwise.
*}
function SDL_IntersectRectAndLine(const rect: PSDL_Rect; X1: PInt; Y1: PInt; X2: PInt; Y2: PInt): TSDL_Bool cdecl; external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_IntersectRectAndLine' {$ENDIF} {$ENDIF};
function SDL_IntersectRectAndLine(const rect: PSDL_Rect; X1, Y1, X2, Y2: PInt): TSDL_Bool cdecl; external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_IntersectRectAndLine' {$ENDIF} {$ENDIF};
{ included sdlrwops.inc}
//from "sdl_rwops"
@ -4585,6 +4583,7 @@ function SDL_GL_GetCurrentContext: TSDL_GLContext cdecl; external SDL_LibName {$
*}
procedure SDL_GL_GetDrawableSize(window: PSDL_Window; w: PInt; h: PInt); cdecl; external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_GL_GetDrawableSize' {$ENDIF} {$ENDIF};
{**
* Set the swap interval for the current OpenGL context.
*
@ -4672,8 +4671,9 @@ procedure SDL_GL_DeleteContext(context: TSDL_GLContext) cdecl; external SDL_LibN
*/
}
const
(**
{/**
* \brief A variable controlling how 3D acceleration is used to accelerate the SDL screen surface.
*
* SDL can try to accelerate the SDL screen surface by using streaming
@ -4687,8 +4687,7 @@ procedure SDL_GL_DeleteContext(context: TSDL_GLContext) cdecl; external SDL_LibN
*
* By default SDL tries to make a best guess for each platform whether
* to use acceleration or not.
*)
const
*/}
SDL_HINT_FRAMEBUFFER_ACCELERATION = 'SDL_FRAMEBUFFER_ACCELERATION';
{/**
@ -4721,7 +4720,7 @@ SDL_HINT_RENDER_DRIVER = 'SDL_RENDER_DRIVER';
*/}
SDL_HINT_RENDER_OPENGL_SHADERS = 'SDL_RENDER_OPENGL_SHADERS';
{**
{/**
* \brief A variable controlling whether the Direct3D device is initialized for thread-safe operations.
*
* This variable can be set to the following values:
@ -4729,10 +4728,10 @@ SDL_HINT_RENDER_OPENGL_SHADERS = 'SDL_RENDER_OPENGL_SHADERS';
* "1" - Thread-safety is enabled
*
* By default the Direct3D device is created with thread-safety disabled.
*}
*/}
SDL_HINT_RENDER_DIRECT3D_THREADSAFE = 'SDL_RENDER_DIRECT3D_THREADSAFE';
{**
{/**
* \brief A variable controlling whether to enable Direct3D 11+'s Debug Layer.
*
* This variable does not have any effect on the Direct3D 9 based renderer.
@ -4742,8 +4741,8 @@ SDL_HINT_RENDER_DIRECT3D_THREADSAFE = 'SDL_RENDER_DIRECT3D_THREADSAFE';
* "1" - Enable Debug Layer use
*
* By default, SDL does not use Direct3D Debug Layer.
*}
SDL_HINT_RENDER_DIRECT3D11_DEBUG = 'SDL_HINT_RENDER_DIRECT3D11_DEBUG';
*/}
SDL_HINT_RENDER_DIRECT3D11_DEBUG = 'SDL_RENDER_DIRECT3D11_DEBUG';
{/**
* \brief A variable controlling the scaling quality
@ -4812,6 +4811,42 @@ SDL_HINT_VIDEO_X11_XINERAMA = 'SDL_VIDEO_X11_XINERAMA';
*/}
SDL_HINT_VIDEO_X11_XRANDR = 'SDL_VIDEO_X11_XRANDR';
{/**
* \brief A variable controlling whether the X11 _NET_WM_PING protocol should be supported.
*
* This variable can be set to the following values:
* "0" - Disable _NET_WM_PING
* "1" - Enable _NET_WM_PING
*
* By default SDL will use _NET_WM_PING, but for applications that know they
* will not always be able to respond to ping requests in a timely manner they can
* turn it off to avoid the window manager thinking the app is hung.
* The hint is checked in CreateWindow.
*/}
SDL_HINT_VIDEO_X11_NET_WM_PING = 'SDL_VIDEO_X11_NET_WM_PING';
{/**
* \brief A variable controlling whether the window frame and title bar are interactive when the cursor is hidden
*
* This variable can be set to the following values:
* "0" - The window frame is not interactive when the cursor is hidden (no move, resize, etc)
* "1" - The window frame is interactive when the cursor is hidden
*
* By default SDL will allow interaction with the window frame when the cursor is hidden
*/}
SDL_HINT_WINDOW_FRAME_USABLE_WHILE_CURSOR_HIDDEN = 'SDL_WINDOW_FRAME_USABLE_WHILE_CURSOR_HIDDEN';
{/**
* \brief A variable controlling whether the windows message loop is processed by SDL
*
* This variable can be set to the following values:
* "0" - The window message loop is not run
* "1" - The window message loop is processed in SDL_PumpEvents()
*
* By default SDL will process the windows message loop
*/}
SDL_HINT_WINDOWS_ENABLE_MESSAGELOOP = 'SDL_WINDOWS_ENABLE_MESSAGELOOP';
{/**
* \brief A variable controlling whether grabbing input grabs the keyboard
*
@ -4834,13 +4869,23 @@ SDL_HINT_GRAB_KEYBOARD = 'SDL_GRAB_KEYBOARD';
*/}
SDL_HINT_MOUSE_RELATIVE_MODE_WARP = 'SDL_MOUSE_RELATIVE_MODE_WARP';
{/**
* \brief Allow mouse click events when clicking to focus an SDL window
*
* This variable can be set to the following values:
* "0" - Ignore mouse clicks that activate a window
* "1" - Generate events for mouse clicks that activate a window
*
* By default SDL will ignore mouse clicks that activate a window
*/}
SDL_HINT_MOUSE_FOCUS_CLICKTHROUGH = 'SDL_MOUSE_FOCUS_CLICKTHROUGH';
{/**
* \brief Minimize your SDL_Window if it loses key focus when in Fullscreen mode. Defaults to true.
*
*/}
SDL_HINT_VIDEO_MINIMIZE_ON_FOCUS_LOSS = 'SDL_VIDEO_MINIMIZE_ON_FOCUS_LOSS';
{/**
* \brief A variable controlling whether the idle timer is disabled on iOS.
*
@ -4849,6 +4894,9 @@ SDL_HINT_VIDEO_MINIMIZE_ON_FOCUS_LOSS = 'SDL_VIDEO_MINIMIZE_ON_FOCUS_LOSS';
* this is problematic. This functionality can be disabled by setting this
* hint.
*
* As of SDL 2.0.4, SDL_EnableScreenSaver() and SDL_DisableScreenSaver()
* accomplish the same thing on iOS. They should be preferred over this hint.
*
* This variable can be set to the following values:
* "0" - Enable idle timer
* "1" - Disable idle timer
@ -4867,8 +4915,37 @@ SDL_HINT_IDLE_TIMER_DISABLED = 'SDL_IOS_IDLE_TIMER_DISABLED';
SDL_HINT_ORIENTATIONS = 'SDL_IOS_ORIENTATIONS';
{/**
* \brief A variable controlling whether an Android built-in accelerometer should be
* listed as a joystick device, rather than listing actual joysticks only.
* \brief A variable controlling whether controllers used with the Apple TV
* generate UI events.
*
* When UI events are generated by controller input, the app will be
* backgrounded when the Apple TV remote's menu button is pressed, and when the
* pause or B buttons on gamepads are pressed.
*
* More information about properly making use of controllers for the Apple TV
* can be found here:
* https://developer.apple.com/tvos/human-interface-guidelines/remote-and-controllers/
*
* This variable can be set to the following values:
* "0" - Controller input does not generate UI events (the default).
* "1" - Controller input generates UI events.
*/}
SDL_HINT_APPLE_TV_CONTROLLER_UI_EVENTS = 'SDL_APPLE_TV_CONTROLLER_UI_EVENTS';
{/**
* \brief A variable controlling whether the Apple TV remote's joystick axes
* will automatically match the rotation of the remote.
*
* This variable can be set to the following values:
* "0" - Remote orientation does not affect joystick axes (the default).
* "1" - Joystick axes are based on the orientation of the remote.
*/}
SDL_HINT_APPLE_TV_REMOTE_ALLOW_ROTATION = 'SDL_APPLE_TV_REMOTE_ALLOW_ROTATION';
{/**
* \brief A variable controlling whether the Android / iOS built-in
* accelerometer should be listed as a joystick device, rather than listing
* actual joysticks only.
*
* This variable can be set to the following values:
* "0" - List only real joysticks and accept input from them
@ -4886,15 +4963,13 @@ SDL_HINT_ACCELEROMETER_AS_JOYSTICK = 'SDL_ACCELEROMETER_AS_JOYSTICK';
SDL_HINT_XINPUT_ENABLED = 'SDL_XINPUT_ENABLED';
{**
* \brief A hint that specifies that SDL should use the old axis and button mapping for XInput devices.
* \brief A variable that causes SDL to use the old axis and button mapping for XInput devices.
*
* The variable can be set to the following values:
* 0 use the old axis and button mapping for XInput devices
* 1 do not use old axis and button mapping for XInput devices
* This hint is for backwards compatibility only and will be removed in SDL 2.1
*
* By default SDL does not use the old axis and button mapping for XInput devices.
* The default value is "0". This hint must be set before SDL_Init()
*}
SDL_HINT_XINPUT_USE_OLD_JOYSTICK_MAPPING = 'SDL_HINT_XINPUT_USE_OLD_JOYSTICK_MAPPING';
SDL_HINT_XINPUT_USE_OLD_JOYSTICK_MAPPING = 'SDL_XINPUT_USE_OLD_JOYSTICK_MAPPING';
{/**
* \brief A variable that lets you manually hint extra gamecontroller db entries
@ -4906,7 +4981,6 @@ SDL_HINT_XINPUT_USE_OLD_JOYSTICK_MAPPING = 'SDL_HINT_XINPUT_USE_OLD_JOYSTICK_MAP
*/}
SDL_HINT_GAMECONTROLLERCONFIG = 'SDL_GAMECONTROLLERCONFIG';
{/**
* \brief A variable that lets you enable joystick (and gamecontroller) events even when your app is in the background.
*
@ -4920,7 +4994,6 @@ SDL_HINT_GAMECONTROLLERCONFIG = 'SDL_GAMECONTROLLERCONFIG';
*/}
SDL_HINT_JOYSTICK_ALLOW_BACKGROUND_EVENTS = 'SDL_JOYSTICK_ALLOW_BACKGROUND_EVENTS';
{/**
* \brief If set to 0 then never set the top most bit on a SDL Window, even if the video mode expects it.
* This is a debugging aid for developers and not expected to be used by end users. The default is "1"
@ -4931,7 +5004,6 @@ SDL_HINT_JOYSTICK_ALLOW_BACKGROUND_EVENTS = 'SDL_JOYSTICK_ALLOW_BACKGROUND_EVENT
*/}
SDL_HINT_ALLOW_TOPMOST = 'SDL_ALLOW_TOPMOST';
{/**
* \brief A variable that controls the timer resolution, in milliseconds.
*
@ -4948,29 +5020,30 @@ SDL_HINT_ALLOW_TOPMOST = 'SDL_ALLOW_TOPMOST';
*/}
SDL_HINT_TIMER_RESOLUTION = 'SDL_TIMER_RESOLUTION';
{**
* \brief If set to 1, then do not allow high-DPI windows. ("Retina" on Mac)
*}
{/**
* \brief A string specifying SDL's threads stack size in bytes or "0" for the backend's default size
*
* Use this hint in case you need to set SDL's threads stack size to other than the default.
* This is specially useful if you build SDL against a non glibc libc library (such as musl) which
* provides a relatively small default thread stack size (a few kilobytes versus the default 8MB glibc uses).
* Support for this hint is currently available only in the pthread, Windows, and PSP backend.
*/}
SDL_HINT_THREAD_STACK_SIZE = 'SDL_THREAD_STACK_SIZE';
{/**
* \brief If set to 1, then do not allow high-DPI windows. ("Retina" on Mac and iOS)
*/}
SDL_HINT_VIDEO_HIGHDPI_DISABLED = 'SDL_VIDEO_HIGHDPI_DISABLED';
{**
* \brief A hint that specifies if the SDL app should not be forced to become a foreground process on Mac OS X.
*
* Possible values:
* 0 force the SDL app to become a foreground process (default)
* 1 do not force the SDL app to become a foreground process
*}
SDL_HINT_MAC_BACKGROUND_APP = 'SDL_HINT_MAC_BACKGROUND_APP';
{**
{/**
* \brief A variable that determines whether ctrl+click should generate a right-click event on Mac
*
* If present, holding ctrl while left clicking will generate a right click
* event when on Mac.
*}
*/}
SDL_HINT_MAC_CTRL_CLICK_EMULATE_RIGHT_CLICK = 'SDL_MAC_CTRL_CLICK_EMULATE_RIGHT_CLICK';
{**
{/**
* \brief A variable specifying which shader compiler to preload when using the Chrome ANGLE binaries
*
* SDL has EGL and OpenGL ES2 support on Windows via the ANGLE project. It
@ -4983,7 +5056,7 @@ SDL_HINT_MAC_CTRL_CLICK_EMULATE_RIGHT_CLICK = 'SDL_MAC_CTRL_CLICK_EMULATE_RIGHT_
* "d3dcompiler_43.dll" - for XP support.
* "none" - do not load any library, useful if you compiled ANGLE from source and included the compiler in your binaries.
*
*}
*/}
SDL_HINT_VIDEO_WIN_D3DCOMPILER = 'SDL_VIDEO_WIN_D3DCOMPILER';
{/**
@ -5005,7 +5078,7 @@ SDL_HINT_VIDEO_WIN_D3DCOMPILER = 'SDL_VIDEO_WIN_D3DCOMPILER';
*/}
SDL_HINT_VIDEO_WINDOW_SHARE_PIXEL_FORMAT = 'SDL_VIDEO_WINDOW_SHARE_PIXEL_FORMAT';
{**
{/**
* \brief A URL to a WinRT app's privacy policy
*
* All network-enabled WinRT apps must make a privacy policy available to its
@ -5015,7 +5088,7 @@ SDL_HINT_VIDEO_WINDOW_SHARE_PIXEL_FORMAT = 'SDL_VIDEO_WINDOW_SHARE_PIXEL_FORMAT'
* privacy policy.
*
* To setup a URL to an app's privacy policy, set SDL_HINT_WINRT_PRIVACY_POLICY_URL
* before calling any SDL_Init functions. The contents of the hint should
* before calling any SDL_Init() functions. The contents of the hint should
* be a valid URL. For example, "http://www.example.com".
*
* The default value is "", which will prevent SDL from adding a privacy policy
@ -5028,15 +5101,15 @@ SDL_HINT_VIDEO_WINDOW_SHARE_PIXEL_FORMAT = 'SDL_VIDEO_WINDOW_SHARE_PIXEL_FORMAT'
* for displaying a privacy policy link, and as such, SDL_HINT_WINRT_PRIVACY_POLICY_URL
* will not get used on that platform. Network-enabled phone apps should display
* their privacy policy through some other, in-app means.
*}
SDL_HINT_WINRT_PRIVACY_POLICY_URL = 'SDL_HINT_WINRT_PRIVACY_POLICY_URL';
*/}
SDL_HINT_WINRT_PRIVACY_POLICY_URL = 'SDL_WINRT_PRIVACY_POLICY_URL';
{**
{/**
* \brief Label text for a WinRT app's privacy policy link
*
* Network-enabled WinRT apps must include a privacy policy. On Windows 8, 8.1, and RT,
* Microsoft mandates that this policy be available via the Windows Settings charm.
* SDL provides code to add a link there, with it's label text being set via the
* SDL provides code to add a link there, with its label text being set via the
* optional hint, SDL_HINT_WINRT_PRIVACY_POLICY_LABEL.
*
* Please note that a privacy policy's contents are not set via this hint. A separate
@ -5046,24 +5119,67 @@ SDL_HINT_WINRT_PRIVACY_POLICY_URL = 'SDL_HINT_WINRT_PRIVACY_POLICY_URL';
* The contents of this hint should be encoded as a UTF8 string.
*
* The default value is "Privacy Policy". This hint should only be set during app
* initialization, preferably before any calls to SDL_Init.
* initialization, preferably before any calls to SDL_Init().
*
* For additional information on linking to a privacy policy, see the documentation for
* SDL_HINT_WINRT_PRIVACY_POLICY_URL.
*}
SDL_HINT_WINRT_PRIVACY_POLICY_LABEL = 'SDL_HINT_WINRT_PRIVACY_POLICY_LABEL';
*/}
SDL_HINT_WINRT_PRIVACY_POLICY_LABEL = 'SDL_WINRT_PRIVACY_POLICY_LABEL';
{**
* \brief If set to 1, back button press events on Windows Phone 8+ will be marked as handled.
{/**
* \brief Allows back-button-press events on Windows Phone to be marked as handled
*
* TODO, WinRT: document SDL_HINT_WINRT_HANDLE_BACK_BUTTON need and use
* For now, more details on why this is needed can be found at the
* beginning of the following web page:
* Windows Phone devices typically feature a Back button. When pressed,
* the OS will emit back-button-press events, which apps are expected to
* handle in an appropriate manner. If apps do not explicitly mark these
* events as 'Handled', then the OS will invoke its default behavior for
* unhandled back-button-press events, which on Windows Phone 8 and 8.1 is to
* terminate the app (and attempt to switch to the previous app, or to the
* device's home screen).
*
* Setting the SDL_HINT_WINRT_HANDLE_BACK_BUTTON hint to "1" will cause SDL
* to mark back-button-press events as Handled, if and when one is sent to
* the app.
*
* Internally, Windows Phone sends back button events as parameters to
* special back-button-press callback functions. Apps that need to respond
* to back-button-press events are expected to register one or more
* callback functions for such, shortly after being launched (during the
* app's initialization phase). After the back button is pressed, the OS
* will invoke these callbacks. If the app's callback(s) do not explicitly
* mark the event as handled by the time they return, or if the app never
* registers one of these callback, the OS will consider the event
* un-handled, and it will apply its default back button behavior (terminate
* the app).
*
* SDL registers its own back-button-press callback with the Windows Phone
* OS. This callback will emit a pair of SDL key-press events (SDL_KEYDOWN
* and SDL_KEYUP), each with a scancode of SDL_SCANCODE_AC_BACK, after which
* it will check the contents of the hint, SDL_HINT_WINRT_HANDLE_BACK_BUTTON.
* If the hint's value is set to "1", the back button event's Handled
* property will get set to 'true'. If the hint's value is set to something
* else, or if it is unset, SDL will leave the event's Handled property
* alone. (By default, the OS sets this property to 'false', to note.)
*
* SDL apps can either set SDL_HINT_WINRT_HANDLE_BACK_BUTTON well before a
* back button is pressed, or can set it in direct-response to a back button
* being pressed.
*
* In order to get notified when a back button is pressed, SDL apps should
* register a callback function with SDL_AddEventWatch(), and have it listen
* for SDL_KEYDOWN events that have a scancode of SDL_SCANCODE_AC_BACK.
* (Alternatively, SDL_KEYUP events can be listened-for. Listening for
* either event type is suitable.) Any value of SDL_HINT_WINRT_HANDLE_BACK_BUTTON
* set by such a callback, will be applied to the OS' current
* back-button-press event.
*
* More details on back button behavior in Windows Phone apps can be found
* at the following page, on Microsoft's developer site:
* http://msdn.microsoft.com/en-us/library/windowsphone/develop/jj247550(v=vs.105).aspx
*}
SDL_HINT_WINRT_HANDLE_BACK_BUTTON = 'SDL_HINT_WINRT_HANDLE_BACK_BUTTON';
*/}
SDL_HINT_WINRT_HANDLE_BACK_BUTTON = 'SDL_WINRT_HANDLE_BACK_BUTTON';
{**
{/**
* \brief A variable that dictates policy for fullscreen Spaces on Mac OS X.
*
* This hint only applies to Mac OS X.
@ -5074,121 +5190,106 @@ SDL_HINT_WINRT_HANDLE_BACK_BUTTON = 'SDL_HINT_WINRT_HANDLE_BACK_BUTTON';
* button on their titlebars).
* "1" - Enable Spaces support (FULLSCREEN_DESKTOP will use them and
* SDL_WINDOW_RESIZABLE windows will offer the "fullscreen"
* button on their titlebars.
* button on their titlebars).
*
* The default value is "1". Spaces are disabled regardless of this hint if
* the OS isn't at least Mac OS X Lion (10.7). This hint must be set before
* any windows are created.
*}
*/}
SDL_HINT_VIDEO_MAC_FULLSCREEN_SPACES = 'SDL_VIDEO_MAC_FULLSCREEN_SPACES';
{**
* \brief A hint that specifies the Android APK expansion main file version.
{/**
* \brief When set don't force the SDL app to become a foreground process
*
* The variable should specify the Android APK expansion main file version (a string number like "1", "2" etc.).
* This hint must be set together with the hint SDL_HINT_ANDROID_APK_EXPANSION_PATCH_FILE_VERSION.
* This hint only applies to Mac OS X.
*
*/}
SDL_HINT_MAC_BACKGROUND_APP = 'SDL_MAC_BACKGROUND_APP';
{/**
* \brief Android APK expansion main file version. Should be a string number like "1", "2" etc.
*
* Must be set together with SDL_HINT_ANDROID_APK_EXPANSION_PATCH_FILE_VERSION.
*
* If both hints were set then SDL_RWFromFile() will look into expansion files
* after a given relative path was not found in the internal storage and assets.
* By default this hint is not set and the APK expansion files are not searched.
*}
SDL_HINT_ANDROID_APK_EXPANSION_MAIN_FILE_VERSION = 'SDL_HINT_ANDROID_APK_EXPANSION_MAIN_FILE_VERSION';
{**
* \brief A hint that specifies the Android APK expansion patch file version.
*
* The variable should specify the Android APK expansion patch file version (a string number like "1", "2" etc.).
* This hint must be set together with the hint SDL_HINT_ANDROID_APK_EXPANSION_MAIN_FILE_VERSION.
* By default this hint is not set and the APK expansion files are not searched.
*/}
SDL_HINT_ANDROID_APK_EXPANSION_MAIN_FILE_VERSION = 'SDL_ANDROID_APK_EXPANSION_MAIN_FILE_VERSION';
{/**
* \brief Android APK expansion patch file version. Should be a string number like "1", "2" etc.
*
* Must be set together with SDL_HINT_ANDROID_APK_EXPANSION_MAIN_FILE_VERSION.
*
* If both hints were set then SDL_RWFromFile() will look into expansion files
* after a given relative path was not found in the internal storage and assets.
*
* By default this hint is not set and the APK expansion files are not searched.
*}
SDL_HINT_ANDROID_APK_EXPANSION_PATCH_FILE_VERSION = 'SDL_HINT_ANDROID_APK_EXPANSION_PATCH_FILE_VERSION';
*/}
SDL_HINT_ANDROID_APK_EXPANSION_PATCH_FILE_VERSION = 'SDL_ANDROID_APK_EXPANSION_PATCH_FILE_VERSION';
{**
* \brief A hint that specifies a variable to control whether mouse and touch events are to be treated together or separately.
{/**
* \brief A variable to control whether certain IMEs should handle text editing internally instead of sending SDL_TEXTEDITING events.
*
* Possible values:
* 0 mouse events will be handled as touch events and touch will raise fake mouse events
* 1 mouse events will be handled separately from pure touch events
*
* By default mouse events will be handled as touch events and touch will raise fake mouse events.
* The value of this hint is used at runtime, so it can be changed at any time.
*}
SDL_HINT_ANDROID_SEPARATE_MOUSE_AND_TOUCH = 'SDL_HINT_ANDROID_SEPARATE_MOUSE_AND_TOUCH';
{**
* \brief A hint that specifies a value to override the binding element for keyboard inputs for Emscripten builds.
*
* Possible values:
* #window the JavaScript window object (this is the default)
* #document the JavaScript document object
* #screen the JavaScript window.screen object
* #canvas the default WebGL canvas element
*
* Any other string without a leading # sign applies to the element on the page with that ID.
* This hint only applies to the Emscripten platform.
*}
SDL_HINT_EMSCRIPTEN_KEYBOARD_ELEMENT = 'SDL_HINT_EMSCRIPTEN_KEYBOARD_ELEMENT';
{**
* \brief A hint that specifies whether certain IMEs should handle text editing internally instead of sending SDL_TEXTEDITING events.
*
* Possible values:
* 0 SDL_TEXTEDITING events are sent, and it is the application's responsibility
* to render the text from these events and differentiate it somehow from committed text. (default)
*
* 1 If supported by the IME then SDL_TEXTEDITING events are not sent,
* The variable can be set to the following values:
* "0" - SDL_TEXTEDITING events are sent, and it is the application's
* responsibility to render the text from these events and
* differentiate it somehow from committed text. (default)
* "1" - If supported by the IME then SDL_TEXTEDITING events are not sent,
* and text that is being composed will be rendered in its own UI.
*}
SDL_HINT_IME_INTERNAL_EDITING = 'SDL_HINT_IME_INTERNAL_EDITING';
*/}
SDL_HINT_IME_INTERNAL_EDITING = 'SDL_IME_INTERNAL_EDITING';
{**
* \brief A hint that specifies not to catch the SIGINT or SIGTERM signals.
{/**
* \brief A variable to control whether mouse and touch events are to be treated together or separately
*
* Possible values:
* 0 SDL will install a SIGINT and SIGTERM handler, and when it catches a signal, convert it into an SDL_QUIT event (default)
* 1 SDL will not install a signal handler at all
* The variable can be set to the following values:
* "0" - Mouse events will be handled as touch events, and touch will raise fake mouse
* events. This is the behaviour of SDL <= 2.0.3. (default)
* "1" - Mouse events will be handled separately from pure touch events.
*
* The value of this hint is used at runtime, so it can be changed at any time.
*/}
SDL_HINT_ANDROID_SEPARATE_MOUSE_AND_TOUCH = 'SDL_ANDROID_SEPARATE_MOUSE_AND_TOUCH';
{/**
* \brief override the binding element for keyboard inputs for Emscripten builds
*
* This hint only applies to the emscripten platform
*
* The variable can be one of
* "#window" - The javascript window object (this is the default)
* "#document" - The javascript document object
* "#screen" - the javascript window.screen object
* "#canvas" - the WebGL canvas element
* any other string without a leading # sign applies to the element on the page with that ID.
*/}
SDL_HINT_EMSCRIPTEN_KEYBOARD_ELEMENT = 'SDL_EMSCRIPTEN_KEYBOARD_ELEMENT';
{/**
* \brief Tell SDL not to catch the SIGINT or SIGTERM signals.
*
* This hint only applies to Unix-like platforms.
*}
SDL_HINT_NO_SIGNAL_HANDLERS = 'SDL_HINT_NO_SIGNAL_HANDLERS';
*
* The variable can be set to the following values:
* "0" - SDL will install a SIGINT and SIGTERM handler, and when it
* catches a signal, convert it into an SDL_QUIT event.
* "1" - SDL will not install a signal handler at all.
*/}
SDL_HINT_NO_SIGNAL_HANDLERS = 'SDL_NO_SIGNAL_HANDLERS';
{**
* \brief A hint that specifies a variable specifying SDL's threads stack size in bytes or "0" for the backend's default size.
{/**
* \brief Tell SDL not to generate window-close events for Alt+F4 on Windows.
*
* Possible values for this hint are:
* 0 use the backend's default threads stack size (default)
* X use the provided positive threads stack size
*
* Use this hint in case you need to set SDL's threads stack size to other than the default.
* This is specially useful if you build SDL against a non glibc libc library (such as musl)
* which provides a relatively small default thread stack size (a few kilobytes versus the default 8 MB glibc uses).
*
* Support for this hint is currently available only in the pthread backend.
*}
SDL_HINT_THREAD_STACK_SIZE = 'SDL_HINT_THREAD_STACK_SIZE';
* The variable can be set to the following values:
* "0" - SDL will generate a window-close event when it sees Alt+F4.
* "1" - SDL will only do normal key handling for Alt+F4.
*/}
SDL_HINT_WINDOWS_NO_CLOSE_ON_ALT_F4 = 'SDL_WINDOWS_NO_CLOSE_ON_ALT_F4';
{**
* \brief A hint that specifies whether the windows message loop is processed by SDL.
*
* Possible values for this hint:
* 0 the window message loop is not run
* 1 the window message loop is processed in SDL_PumpEvents() [default]
*}
SDL_HINT_WINDOWS_ENABLE_MESSAGELOOP = 'SDL_HINT_WINDOWS_ENABLE_MESSAGELOOP';
{**
* \brief A hint that specifies that SDL should not to generate SDL_WINDOWEVENT_CLOSE events for Alt+F4 on Microsoft Windows.
*
* Possible values for this hint:
* 0 generate an SDL_WINDOWEVENT_CLOSE event for Alt+F4 (default)
* 1 do not generate event and only do normal key handling for Alt+F4
*}
SDL_HINT_WINDOWS_NO_CLOSE_ON_ALT_F4 = 'SDL_HINT_WINDOWS_NO_CLOSE_ON_ALT_F4';
{**
{/**
* \brief Prevent SDL from using version 4 of the bitmap header when saving BMPs.
*
* The bitmap header version 4 is required for proper alpha channel support and
@ -5204,10 +5305,10 @@ SDL_HINT_WINDOWS_NO_CLOSE_ON_ALT_F4 = 'SDL_HINT_WINDOWS_NO_CLOSE_ON_ALT_F4';
* will be in the file, but applications are going to ignore it.
*
* The default value is "0".
*}
*/}
SDL_HINT_BMP_SAVE_LEGACY_FORMAT = 'SDL_BMP_SAVE_LEGACY_FORMAT';
{**
{/**
* \brief Tell SDL not to name threads on Windows.
*
* The variable can be set to the following values:
@ -5215,26 +5316,24 @@ SDL_HINT_BMP_SAVE_LEGACY_FORMAT = 'SDL_BMP_SAVE_LEGACY_FORMAT';
* This is the default behavior of SDL <= 2.0.4. (default)
* "1" - SDL will not raise this exception, and threads will be unnamed.
* For .NET languages this is required when running under a debugger.
*}
*/}
SDL_HINT_WINDOWS_DISABLE_THREAD_NAMING = 'SDL_WINDOWS_DISABLE_THREAD_NAMING';
{**
* \brief A hint that specifies whether the window frame and title bar are interactive when the cursor is hidden.
{/**
* \brief Tell SDL which Dispmanx layer to use on a Raspberry PI
*
* Possible values for this hint:
* 0 the window frame is not interactive when the cursor is hidden (no move, resize, etc)
* 1 the window frame is interactive when the cursor is hidden
*
* By default SDL will allow interaction with the window frame when the cursor is hidden.
*}
SDL_HINT_WINDOW_FRAME_USABLE_WHILE_CURSOR_HIDDEN = 'SDL_HINT_WINDOW_FRAME_USABLE_WHILE_CURSOR_HIDDEN';
* Also known as Z-order. The variable can take a negative or positive value.
* The default is 10000.
*/}
SDL_HINT_RPI_VIDEO_LAYER = 'SDL_RPI_VIDEO_LAYER';
type
{/**
* \brief An enumeration of hint priorities
*/}
type
SDL_HintPriority = (SDL_HINT_DEFAULT, SDL_HINT_NORMAL, SDL_HINT_OVERRIDE);
{/**
* \brief Set a hint with a specific priority
*
@ -5246,9 +5345,6 @@ type
*/}
function SDL_SetHintWithPriority(const name: PChar; const value: PChar; priority: SDL_HintPriority) : boolean; cdecl; external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_SetHintWithPriority' {$ENDIF} {$ENDIF};
// extern DECLSPEC SDL_bool SDLCALL SDL_SetHintWithPriority(const char *name,
// const char *value,
// SDL_HintPriority priority);
{/**
* \brief Set a hint with normal priority
*
@ -5256,17 +5352,21 @@ function SDL_SetHintWithPriority( const name: PChar; const value: PChar; priorit
*/}
function SDL_SetHint(const name: PChar; const value: PChar): boolean; cdecl; external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_SetHint' {$ENDIF} {$ENDIF};
//extern DECLSPEC SDL_bool SDLCALL SDL_SetHint(const char *name,
// const char *value);
{/**
* \brief Get a hint
*
* \return The string value of a hint variable.
*/}
function SDL_GetHint(const name: PChar): PChar; cdecl; external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_GetHint' {$ENDIF} {$ENDIF};
//extern DECLSPEC const char * SDLCALL SDL_GetHint(const char *name);
{/**
* \brief Get a hint
*
* \return The boolean value of a hint variable.
*/}
function SDL_GetHintBoolean(const name: PChar; default_value: boolean): boolean; cdecl; external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_GetHintBoolean' {$ENDIF} {$ENDIF};
type
{/**
* \brief Add a function to watch a particular hint
@ -5275,13 +5375,9 @@ function SDL_GetHint( const name: PChar): PChar; cdecl; external SDL_LibName {$I
* \param callback The function to call when the hint value changes
* \param userdata A pointer to pass to the callback function
*/}
type
TSDL_HintCallback = procedure(userdata: Pointer; const name: PChar; const oldValue: PChar; const newValue: PChar);
procedure SDL_AddHintCallback(const name: PChar; callback: TSDL_HintCallback; userdata: Pointer); cdecl; external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_AddHintCallback' {$ENDIF} {$ENDIF};
//typedef void (*SDL_HintCallback)(void *userdata, const char *name, const char *oldValue, const char *newValue);
//extern DECLSPEC void SDLCALL SDL_AddHintCallback(const char *name,
// SDL_HintCallback callback,
// void *userdata);
{/**
* \brief Remove a function watching a particular hint
@ -5291,19 +5387,14 @@ procedure SDL_AddHintCallback(const name: PChar; callback: TSDL_HintCallback; us
* \param userdata A pointer being passed to the callback function
*/}
procedure SDL_DelHintCallback(const name: PChar; callback: TSDL_HintCallback; userdata: Pointer); cdecl; external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_DelHintCallback' {$ENDIF} {$ENDIF};
//extern DECLSPEC void SDLCALL SDL_DelHintCallback(const char *name,
// SDL_HintCallback callback,
// void *userdata);
{/**
* \brief Clear all hints
*
* This function is called during SDL_Quit() to free stored hints.
*/}
//extern DECLSPEC void SDLCALL SDL_ClearHints(void);
procedure SDL_ClearHints(); cdecl; external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_ClearHints' {$ENDIF} {$ENDIF};
{ included sdlloadso.inc}
//from sdl_loadso.h
@ -6420,11 +6511,11 @@ const
SDL_SCANCODE_INTERNATIONAL7 = 141;
SDL_SCANCODE_INTERNATIONAL8 = 142;
SDL_SCANCODE_INTERNATIONAL9 = 143;
SDL_SCANCODE_LANG1 = 144; {**< Hangul/English toggle *}
SDL_SCANCODE_LANG1 = 144; {**< Hangul{English toggle *}
SDL_SCANCODE_LANG2 = 145; {**< Hanja conversion *}
SDL_SCANCODE_LANG3 = 146; {**< Katakana *}
SDL_SCANCODE_LANG4 = 147; {**< Hiragana *}
SDL_SCANCODE_LANG5 = 148; {**< Zenkaku/Hankaku *}
SDL_SCANCODE_LANG5 = 148; {**< Zenkaku{Hankaku *}
SDL_SCANCODE_LANG6 = 149; {**< reserved *}
SDL_SCANCODE_LANG7 = 150; {**< reserved *}
SDL_SCANCODE_LANG8 = 151; {**< reserved *}
@ -6540,7 +6631,7 @@ const
SDL_SCANCODE_BRIGHTNESSDOWN = 275;
SDL_SCANCODE_BRIGHTNESSUP = 276;
SDL_SCANCODE_DISPLAYSWITCH = 277; {**< display mirroring/dual display
SDL_SCANCODE_DISPLAYSWITCH = 277; {**< display mirroring{dual display
switch; video mode switch *}
SDL_SCANCODE_KBDILLUMTOGGLE = 278;
SDL_SCANCODE_KBDILLUMDOWN = 279;
@ -7257,6 +7348,12 @@ type
function SDL_GetCursor: PSDL_Cursor cdecl; external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_GetCursor' {$ENDIF}{$ENDIF};
{**
* Return the default cursor.
*}
function SDL_GetDefaultCursor: PSDL_Cursor cdecl; external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_GetDefaultCursor' {$ENDIF}{$ENDIF};
{**
* Frees a cursor created with SDL_CreateCursor().
*
@ -9018,6 +9115,15 @@ function SDL_LoadDollarTemplates(touchId: TSDL_TouchID; src: PSDL_RWops): SInt32
{$DEFINE SDL_VIDEO_DRIVER_COCOA}
{$ENDIF}
{$IFDEF ANDROID}
{$DEFINE SDL_VIDEO_DRIVER_ANDROID}
{$ENDIF}
{$IFDEF VIVANTE}
{$DEFINE SDL_VIDEO_DRIVER_VIVANTE}
{$ENDIF}
{**
* These are the various supported windowing subsystems
*}
@ -9060,11 +9166,19 @@ Type
{$IFDEF SDL_VIDEO_DRIVER_COCOA}
__SYSWM_COCOA = record
(* No Cocoa window events yet *)
dummy: integer;
end;
{$ENDIF}
{$IFDEF SDL_VIDEO_DRIVER_UIKIT}
__SYSWM_UIKIT = record
(* No UIKit window events yet *)
dummy: integer;
end;
{$ENDIF}
{$IFDEF SDL_VIDEO_DRIVER_VIVANTE}
__SYSWM_VIVANTE = record
(* No Vivante window events yet *)
dummy: integer;
end;
{$ENDIF}
@ -9074,24 +9188,23 @@ Type
PSDL_SysWMmsg = ^TSDL_SysWMmsg;
TSDL_SysWMmsg = record
version: TSDL_version;
Case subsystem: TSDL_SYSWM_TYPE of
(* Cannot have empty record case *)
SDL_SYSWM_UNKNOWN: (dummy: sInt32);
subsystem: TSDL_SYSWM_TYPE;
{$IFDEF SDL_VIDEO_DRIVER_WINDOWS}
SDL_SYSWM_WINDOWS: (win: __SYSWM_WINDOWS);
{$ENDIF}
{$IFDEF SDL_VIDEO_DRIVER_X11}
SDL_SYSWM_X11: (x11: __SYSWM_X11);
{$ENDIF}
{$IFDEF SDL_VIDEO_DRIVER_DIRECTFB}
SDL_SYSWM_DIRECTFB: (dfb: __SYSWM_DIRECTFB);
{$ENDIF}
{$IFDEF SDL_VIDEO_DRIVER_COCOA}
SDL_SYSWM_COCOA: (cocoa: __SYSWM_COCOA);
{$ENDIF}
{$IFDEF SDL_VIDEO_DRIVER_UIKIT}
SDL_SYSWM_UIKIT: (uikit: __SYSWM_UIKIT);
{$ENDIF}
win: __SYSWM_WINDOWS;
{$ELSE} {$IFDEF SDL_VIDEO_DRIVER_X11}
x11: __SYSWM_X11;
{$ELSE} {$IFDEF SDL_VIDEO_DRIVER_DIRECTFB}
dfb: __SYSWM_DIRECTFB;
{$ELSE} {$IFDEF SDL_VIDEO_DRIVER_COCOA}
cocoa: __SYSWM_COCOA;
{$ELSE} {$IFDEF SDL_VIDEO_DRIVER_UIKIT}
uikit: __SYSWM_UIKIT;
{$ELSE} {$IFDEF SDL_VIDEO_DRIVER_VIVANTE}
vivante: __SYSWM_VIVANTE;
{$ELSE}
(* Cannot have empty record case *)
dummy: integer;
{$ENDIF} {$ENDIF} {$ENDIF} {$ENDIF} {$ENDIF} {$ENDIF}
end;
/// Once again, sdl_syswm.h uses anonymous structs, declared right in SDL_SysWMinfo.
@ -9099,6 +9212,7 @@ Type
{$IFDEF SDL_VIDEO_DRIVER_WINDOWS}
__WMINFO_WINDOWS = record
window: HWND; {**< The window handle *}
hdc: HDC; {**< The window device context *}
end;
{$ENDIF}
{$IFDEF SDL_VIDEO_DRIVER_WINRT} // Since SDL 2.0.3
@ -9127,6 +9241,9 @@ Type
{$IFDEF SDL_VIDEO_DRIVER_UIKIT}
__WMINFO_UIKIT = record
window: UIWindow; {* The UIKit window *}
framebuffer: GLuint; {* The GL view's Framebuffer Object. It must be bound when rendering to the screen using GL. *}
colorbuffer: GLuint; {* The GL view's color Renderbuffer Object. It must be bound when SDL_GL_SwapWindow is called. *}
resolveFramebuffer: GLuint; {* The Framebuffer Object which holds the resolve color Renderbuffer, when MSAA is used. *}
end;
{$ENDIF}
{$IFDEF SDL_VIDEO_DRIVER_WAYLAND} // Since SDL 2.0.2
@ -9142,12 +9259,18 @@ Type
surface: PMirSurface; {**< Mir surface *}
end;
{$ENDIF}
{$IFDEF SDL_VIDEO_DRIVER_ANDROID} // Planned for SDL 2.0.4
{$IFDEF SDL_VIDEO_DRIVER_ANDROID}
__WMINFO_ANDROID = record
window: PANativeWindow;
surface: PEGLSurface;
end;
{$ENDIF}
{$IFDEF SDL_VIDEO_DRIVER_VIVANTE}
__WMINFO_VIVANTE = record
display: EGLNativeDisplayType;
window: EGLNativeWindowType;
end;
{$ENDIF}
{**
* The custom window manager information structure.
@ -9158,33 +9281,31 @@ Type
PSDL_SysWMinfo = ^TSDL_SysWMinfo;
TSDL_SysWMinfo = record
version: TSDL_version;
Case subsystem: TSDL_SYSWM_TYPE of
(* Cannot have empty record case *)
SDL_SYSWM_UNKNOWN: (dummy: sInt32);
subsystem: TSDL_SYSWM_TYPE;
{$IFDEF SDL_VIDEO_DRIVER_WINDOWS}
SDL_SYSWM_WINDOWS: (win : __WMINFO_WINDOWS);
{$ENDIF}
{$IFDEF SDL_VIDEO_DRIVER_WINRT}
SDL_SYSWM_WINRT: (winrt : __WMINFO_WINRT);
{$ENDIF}
{$IFDEF SDL_VIDEO_DRIVER_X11}
SDL_SYSWM_X11: (x11 : __WMINFO_X11);
{$ENDIF}
{$IFDEF SDL_VIDEO_DRIVER_DIRECTFB}
SDL_SYSWM_DIRECTFB: (dfb : __WMINFO_DFB);
{$ENDIF}
{$IFDEF SDL_VIDEO_DRIVER_COCOA}
SDL_SYSWM_COCOA: (cocoa : __WMINFO_COCOA);
{$ENDIF}
{$IFDEF SDL_VIDEO_DRIVER_UIKIT}
SDL_SYSWM_UIKIT: (uikit : __WMINFO_UIKIT);
{$ENDIF}
{$IFDEF SDL_VIDEO_DRIVER_WAYLAND}
SDL_SYSWM_WAYLAND: (wl : __WMINFO_WAYLAND);
{$ENDIF}
{$IFDEF SDL_VIDEO_DRIVER_MIR}
SDL_SYSWM_MIR: (mir : __WMINFO_MIR);
{$ENDIF}
win : __WMINFO_WINDOWS;
{$ELSE} {$IFDEF SDL_VIDEO_DRIVER_WINRT}
winrt : __WMINFO_WINRT;
{$ELSE} {$IFDEF SDL_VIDEO_DRIVER_X11}
x11 : __WMINFO_X11;
{$ELSE} {$IFDEF SDL_VIDEO_DRIVER_DIRECTFB}
dfb : __WMINFO_DFB;
{$ELSE} {$IFDEF SDL_VIDEO_DRIVER_COCOA}
cocoa : __WMINFO_COCOA;
{$ELSE} {$IFDEF SDL_VIDEO_DRIVER_UIKIT}
uikit : __WMINFO_UIKIT;
{$ELSE} {$IFDEF SDL_VIDEO_DRIVER_WAYLAND}
wl : __WMINFO_WAYLAND;
{$ELSE} {$IFDEF SDL_VIDEO_DRIVER_MIR}
mir : __WMINFO_MIR;
{$ELSE} {$IFDEF SDL_VIDEO_DRIVER_ANDROID}
android: __WMINFO_ANDROID;
{$ELSE} {$IFDEF SDL_VIDEO_DRIVER_VIVANTE}
vivante: __WMINFO_VIVANTE;
{$ELSE}
(* Cannot have empty record case *)
dummy: integer;
{$ENDIF} {$ENDIF} {$ENDIF} {$ENDIF} {$ENDIF} {$ENDIF} {$ENDIF} {$ENDIF} {$ENDIF} {$ENDIF}
end;
{* Function prototypes *}
@ -10480,17 +10601,17 @@ end;
{$ENDIF}
//from "sdl_rect.h"
function SDL_RectEmpty(X: TSDL_Rect): Boolean;
function SDL_RectEmpty(const r: PSDL_Rect): Boolean;
begin
Result := (X.w <= 0) or (X.h <= 0);
Result := (r^.w <= 0) or (r^.h <= 0);
end;
function SDL_RectEquals(A: TSDL_Rect; B: TSDL_Rect): Boolean;
function SDL_RectEquals(const a, b: PSDL_Rect): Boolean;
begin
Result := (A.x = B.x) and (A.y = B.y) and (A.w = B.w) and (A.h = B.h);
Result := (a^.x = b^.x) and (a^.y = b^.y) and (a^.w = b^.w) and (a^.h = b^.h);
end;
function SDL_PointInRect(const p: PSDL_Point; const r: PSDL_Rect): Boolean; Inline;
function SDL_PointInRect(const p: PSDL_Point; const r: PSDL_Rect): Boolean;
begin
Result :=
(p^.x >= r^.x) and (p^.x < (r^.x + r^.w))
@ -10658,3 +10779,4 @@ begin
end;
end.