diff --git a/model_viewer/imgui/fpimgui.pas b/model_viewer/imgui/fpimgui.pas index 21ba8b8..8020505 100644 --- a/model_viewer/imgui/fpimgui.pas +++ b/model_viewer/imgui/fpimgui.pas @@ -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; diff --git a/model_viewer/model_viewer.lpi b/model_viewer/model_viewer.lpi index a315cc1..ebe7996 100644 --- a/model_viewer/model_viewer.lpi +++ b/model_viewer/model_viewer.lpi @@ -58,6 +58,7 @@ + diff --git a/model_viewer/model_viewer.pas b/model_viewer/model_viewer.pas index b80beef..f8e91b1 100644 --- a/model_viewer/model_viewer.pas +++ b/model_viewer/model_viewer.pas @@ -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_; diff --git a/model_viewer/sdl2/LICENSE b/model_viewer/sdl2/LICENSE deleted file mode 100644 index 65c5ca8..0000000 --- a/model_viewer/sdl2/LICENSE +++ /dev/null @@ -1,165 +0,0 @@ - GNU LESSER GENERAL PUBLIC LICENSE - Version 3, 29 June 2007 - - Copyright (C) 2007 Free Software Foundation, Inc. - 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. diff --git a/model_viewer/sdl2/sdl2-LICENSE b/model_viewer/sdl2/sdl2-LICENSE new file mode 100644 index 0000000..14e2f77 --- /dev/null +++ b/model_viewer/sdl2/sdl2-LICENSE @@ -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. diff --git a/model_viewer/sdl2/sdl2.pas b/model_viewer/sdl2/sdl2.pas index b404f75..818730c 100644 --- a/model_viewer/sdl2/sdl2.pas +++ b/model_viewer/sdl2/sdl2.pas @@ -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 @@ -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,18 +665,14 @@ interface Windows; {$ENDIF} - {$IFDEF LINUX} + {$IFDEF UNIX} uses + {$IFDEF DARWIN} + CocoaAll, + {$ENDIF} X, XLib; {$ENDIF} - - {$IFDEF DARWIN} - uses - X, - XLib, - CocoaAll; - {$ENDIF} const @@ -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" @@ -4583,8 +4581,9 @@ function SDL_GL_GetCurrentContext: TSDL_GLContext cdecl; external SDL_LibName {$ * SDL_GetWindowSize() * SDL_CreateWindow() *} - + 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,29 +4720,29 @@ 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: - * "0" - Thread-safety is not enabled (faster) - * "1" - Thread-safety is enabled - * - * By default the Direct3D device is created with thread-safety disabled. - *} +{/** + * \brief A variable controlling whether the Direct3D device is initialized for thread-safe operations. + * + * This variable can be set to the following values: + * "0" - Thread-safety is not enabled (faster) + * "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. - * - * This variable can be set to the following values: - * "0" - Disable Debug Layer use - * "1" - Enable Debug Layer use - * - * By default, SDL does not use Direct3D Debug Layer. - *} -SDL_HINT_RENDER_DIRECT3D11_DEBUG = 'SDL_HINT_RENDER_DIRECT3D11_DEBUG'; +{/** + * \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. + * + * This variable can be set to the following values: + * "0" - Disable Debug Layer use + * "1" - Enable Debug Layer use + * + * By default, SDL does not use Direct3D Debug Layer. + */} +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. - * - * 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 - * - * By default SDL does not 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. + * + * This hint is for backwards compatibility only and will be removed in SDL 2.1 + * + * 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'; {/** @@ -4993,7 +5066,7 @@ SDL_HINT_VIDEO_WIN_D3DCOMPILER = 'SDL_VIDEO_WIN_D3DCOMPILER'; * SDL_WINDOW_OPENGL set (and running on WGL only, currently), then two things will occur on the newly * created SDL_Window: * - * 1. Its pixel format will be set to the same pixel format as this SDL_Window. This is + * 1. Its pixel format will be set to the same pixel format as this SDL_Window. This is * needed for example when sharing an OpenGL context across multiple windows. * * 2. The flag SDL_WINDOW_OPENGL will be set on the new window so it can be used for @@ -5005,190 +5078,218 @@ 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 - * users. On Windows 8, 8.1, and RT, Microsoft mandates that this policy be - * be available in the Windows Settings charm, as accessed from within the app. - * SDL provides code to add a URL-based link there, which can point to the app's - * 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 - * be a valid URL. For example, "http://www.example.com". - * - * The default value is "", which will prevent SDL from adding a privacy policy - * link to the Settings charm. This hint should only be set during app init. - * - * The label text of an app's "Privacy Policy" link may be customized via another - * hint, SDL_HINT_WINRT_PRIVACY_POLICY_LABEL. - * - * Please note that on Windows Phone, Microsoft does not provide standard UI - * 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'; +{/** + * \brief A URL to a WinRT app's privacy policy + * + * All network-enabled WinRT apps must make a privacy policy available to its + * users. On Windows 8, 8.1, and RT, Microsoft mandates that this policy be + * be available in the Windows Settings charm, as accessed from within the app. + * SDL provides code to add a URL-based link there, which can point to the app's + * 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 + * be a valid URL. For example, "http://www.example.com". + * + * The default value is "", which will prevent SDL from adding a privacy policy + * link to the Settings charm. This hint should only be set during app init. + * + * The label text of an app's "Privacy Policy" link may be customized via another + * hint, SDL_HINT_WINRT_PRIVACY_POLICY_LABEL. + * + * Please note that on Windows Phone, Microsoft does not provide standard UI + * 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_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 - * optional hint, SDL_HINT_WINRT_PRIVACY_POLICY_LABEL. - * - * Please note that a privacy policy's contents are not set via this hint. A separate - * hint, SDL_HINT_WINRT_PRIVACY_POLICY_URL, is used to link to the actual text of the - * policy. - * - * 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. - * - * 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'; +{/** + * \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 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 + * hint, SDL_HINT_WINRT_PRIVACY_POLICY_URL, is used to link to the actual text of the + * policy. + * + * 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(). + * + * 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_WINRT_PRIVACY_POLICY_LABEL'; - {** - * \brief If set to 1, back button press events on Windows Phone 8+ will 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: - * 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'; +{/** + * \brief Allows back-button-press events on Windows Phone to be marked as handled + * + * 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_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. - * - * The variable can be set to the following values: - * "0" - Disable Spaces support (FULLSCREEN_DESKTOP won't use them and - * SDL_WINDOW_RESIZABLE windows won't offer the "fullscreen" - * 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. - * - * 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. - *} +{/** + * \brief A variable that dictates policy for fullscreen Spaces on Mac OS X. + * + * This hint only applies to Mac OS X. + * + * The variable can be set to the following values: + * "0" - Disable Spaces support (FULLSCREEN_DESKTOP won't use them and + * SDL_WINDOW_RESIZABLE windows won't offer the "fullscreen" + * 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). + * + * 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. - * - * 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. - * - * 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. - * - * 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'; - -{** - * \brief A hint that specifies a variable to control whether mouse and touch events are to be treated together or separately. - * - * 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) +{/** + * \brief When set don't force the SDL app to become a foreground process * - * 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'; - -{** - * \brief A hint that specifies not to catch the SIGINT or SIGTERM signals. + * This hint only applies to Mac OS X. * - * 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 - * - * This hint only applies to Unix-like platforms. - *} -SDL_HINT_NO_SIGNAL_HANDLERS = 'SDL_HINT_NO_SIGNAL_HANDLERS'; + */} +SDL_HINT_MAC_BACKGROUND_APP = 'SDL_MAC_BACKGROUND_APP'; -{** - * \brief A hint that specifies a variable specifying SDL's threads stack size in bytes or "0" for the backend's default size. - * - * 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). +{/** + * \brief Android APK expansion main file version. Should be a string number like "1", "2" etc. * - * Support for this hint is currently available only in the pthread backend. - *} -SDL_HINT_THREAD_STACK_SIZE = 'SDL_HINT_THREAD_STACK_SIZE'; + * 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_ANDROID_APK_EXPANSION_MAIN_FILE_VERSION'; -{** - * \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 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_ANDROID_APK_EXPANSION_PATCH_FILE_VERSION'; -{** - * \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 A variable to control whether certain IMEs should handle text editing internally instead of sending SDL_TEXTEDITING events. + * + * 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_IME_INTERNAL_EDITING'; -{** +{/** + * \brief A variable to control whether mouse and touch events are to be treated together or separately + * + * 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. + * + * 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 Tell SDL not to generate window-close events for Alt+F4 on Windows. + * + * 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 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,25 +5316,23 @@ 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. - * - * 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'; + +{/** + * \brief Tell SDL which Dispmanx layer to use on a Raspberry PI + * + * 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); - +SDL_HintPriority = (SDL_HINT_DEFAULT, SDL_HINT_NORMAL, SDL_HINT_OVERRIDE); {/** * \brief Set a hint with a specific priority @@ -5244,29 +5343,30 @@ type * * \return SDL_TRUE if the hint was set, SDL_FALSE otherwise */} -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}; +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 * * \return SDL_TRUE if the hint was set, SDL_FALSE otherwise */} - 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); +function SDL_SetHint(const name: PChar; const value: PChar): boolean; cdecl; external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_SetHint' {$ENDIF} {$ENDIF}; {/** * \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); +function SDL_GetHint(const name: PChar): PChar; cdecl; external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_GetHint' {$ENDIF} {$ENDIF}; +{/** + * \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; @@ -7256,6 +7347,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 *} @@ -9042,7 +9148,7 @@ Type {$IFDEF SDL_VIDEO_DRIVER_WINDOWS} __SYSWM_WINDOWS = record hwnd: HWND; {**< The window for the message } - msg: uInt; {**< The type of message *} + msg: uInt; {**< The type of message *} wParam: WPARAM; {**< WORD message parameter *} lParam: LPARAM; {**< WORD message parameter *} end; @@ -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); - {$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} + subsystem: TSDL_SYSWM_TYPE; + {$IFDEF SDL_VIDEO_DRIVER_WINDOWS} + 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 @@ -9109,7 +9223,7 @@ Type {$IFDEF SDL_VIDEO_DRIVER_X11} __WMINFO_X11 = record display: PDisplay; {**< The X11 display *} - window: TWindow; {**< The X11 window *} + window: TWindow; {**< The X11 window *} end; {$ENDIF} {$IFDEF SDL_VIDEO_DRIVER_DIRECTFB} @@ -9126,7 +9240,10 @@ Type {$ENDIF} {$IFDEF SDL_VIDEO_DRIVER_UIKIT} __WMINFO_UIKIT = record - window: UIWindow; {* The UIKit window *} + 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; + 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); - {$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} + subsystem: TSDL_SYSWM_TYPE; + {$IFDEF SDL_VIDEO_DRIVER_WINDOWS} + 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. +