mirror of
https://github.com/ocornut/imgui.git
synced 2026-11-06 06:25:54 +01:00
Compare commits
49 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
dbb30112c6 | ||
|
|
253aa51aba | ||
|
|
a1af3c1a59 | ||
|
|
8c8b8fc266 | ||
|
|
b2298afa71 | ||
|
|
9d0b72573a | ||
|
|
67f442d5de | ||
|
|
c5131aff7e | ||
|
|
852269e25f | ||
|
|
c6affd1145 | ||
|
|
7ee4dbac89 | ||
|
|
391f714c37 | ||
|
|
1023d3ddaa | ||
|
|
a13badd73e | ||
|
|
f88ec043af | ||
|
|
89845f9db6 | ||
|
|
c1581882a4 | ||
|
|
0d0cd87dd2 | ||
|
|
c39a91bfbe | ||
|
|
d2ba763635 | ||
|
|
b87728bd2b | ||
|
|
2fb554b1c8 | ||
|
|
80d572ce35 | ||
|
|
1069a952e0 | ||
|
|
50ae760fce | ||
|
|
86b853ae8a | ||
|
|
2f1552d4d5 | ||
|
|
048d7e10b5 | ||
|
|
726399ff76 | ||
|
|
4326411672 | ||
|
|
717f68fefe | ||
|
|
4e99c0ab1a | ||
|
|
09fe7b19d7 | ||
|
|
20ba6c4a28 | ||
|
|
6dd654f27a | ||
|
|
2b7a9dcca4 | ||
|
|
7bd38119c7 | ||
|
|
4be0b47ecc | ||
|
|
9d9a621f33 | ||
|
|
49a1450360 | ||
|
|
c7d17f01cd | ||
|
|
f5d2b7dd01 | ||
|
|
145a2fbab6 | ||
|
|
4c9c888fc5 | ||
|
|
1ff218165d | ||
|
|
93a14c8fda | ||
|
|
cbe3d5fb88 | ||
|
|
f996126249 | ||
|
|
6d32174508 |
37
.github/workflows/build.yml
vendored
37
.github/workflows/build.yml
vendored
@ -77,7 +77,7 @@ jobs:
|
|||||||
run: |
|
run: |
|
||||||
cd examples\example_null
|
cd examples\example_null
|
||||||
call "%VS_PATH%\VC\Auxiliary\Build\vcvars64.bat"
|
call "%VS_PATH%\VC\Auxiliary\Build\vcvars64.bat"
|
||||||
.\build_win32.bat /W4
|
.\build_win.bat /W4
|
||||||
|
|
||||||
- name: Build example_null (single file build)
|
- name: Build example_null (single file build)
|
||||||
shell: bash
|
shell: bash
|
||||||
@ -268,6 +268,39 @@ jobs:
|
|||||||
shell: cmd
|
shell: cmd
|
||||||
run: '"%MSBUILD_PATH%\MSBuild.exe" examples/example_win32_directx12/example_win32_directx12.vcxproj /p:Platform=x64 /p:Configuration=Release'
|
run: '"%MSBUILD_PATH%\MSBuild.exe" examples/example_win32_directx12/example_win32_directx12.vcxproj /p:Platform=x64 /p:Configuration=Release'
|
||||||
|
|
||||||
|
Build-Windows-ARM64:
|
||||||
|
runs-on: windows-11-arm
|
||||||
|
name: Build - Windows ARM64
|
||||||
|
|
||||||
|
defaults:
|
||||||
|
run:
|
||||||
|
working-directory: ${{ github.workspace }}/imgui
|
||||||
|
|
||||||
|
env:
|
||||||
|
VS_PATH: C:\Program Files\Microsoft Visual Studio\18\Enterprise
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v6
|
||||||
|
with:
|
||||||
|
path: ${{ github.workspace }}/imgui
|
||||||
|
|
||||||
|
- name: Build example_null (extra warnings, msvc arm64)
|
||||||
|
shell: cmd
|
||||||
|
run: |
|
||||||
|
cd examples\example_null
|
||||||
|
call "%VS_PATH%\VC\Auxiliary\Build\vcvarsarm64.bat"
|
||||||
|
.\build_win.bat /W4
|
||||||
|
|
||||||
|
- name: Run example_null (msvc arm64)
|
||||||
|
shell: cmd
|
||||||
|
run: examples\example_null\Debug\example_null.exe
|
||||||
|
|
||||||
|
- name: Build example_win32_directx11 (msvc arm64)
|
||||||
|
shell: cmd
|
||||||
|
run: |
|
||||||
|
cd examples\example_win32_directx11
|
||||||
|
call "%VS_PATH%\VC\Auxiliary\Build\vcvarsarm64.bat"
|
||||||
|
.\build_win.bat
|
||||||
|
|
||||||
Build-Linux:
|
Build-Linux:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
name: Build - Linux
|
name: Build - Linux
|
||||||
@ -523,7 +556,7 @@ jobs:
|
|||||||
|
|
||||||
- name: Install Dependencies
|
- name: Install Dependencies
|
||||||
run: |
|
run: |
|
||||||
brew install glfw3 sdl2 sdl3
|
brew install glfw sdl2 sdl3
|
||||||
|
|
||||||
- name: Build example_null (extra warnings, clang 64-bit)
|
- name: Build example_null (extra warnings, clang 64-bit)
|
||||||
run: make -C examples/example_null WITH_EXTRA_WARNINGS=1
|
run: make -C examples/example_null WITH_EXTRA_WARNINGS=1
|
||||||
|
|||||||
1
.gitignore
vendored
1
.gitignore
vendored
@ -66,6 +66,7 @@ cmake-build-*
|
|||||||
|
|
||||||
## Unix executables from our example Makefiles
|
## Unix executables from our example Makefiles
|
||||||
examples/example_apple_metal/example_apple_metal
|
examples/example_apple_metal/example_apple_metal
|
||||||
|
examples/example_apple_metal4/example_apple_metal4
|
||||||
examples/example_apple_opengl2/example_apple_opengl2
|
examples/example_apple_opengl2/example_apple_opengl2
|
||||||
examples/example_apple_opengl3/example_apple_opengl3
|
examples/example_apple_opengl3/example_apple_opengl3
|
||||||
examples/example_glfw_metal/example_glfw_metal
|
examples/example_glfw_metal/example_glfw_metal
|
||||||
|
|||||||
@ -139,7 +139,7 @@ void ImGui_ImplMetal4_NewFrame(MTL4RenderPassDescriptor* renderPassDescriptor, i
|
|||||||
{
|
{
|
||||||
ImGui_ImplMetal4_Data* bd = ImGui_ImplMetal4_GetBackendData();
|
ImGui_ImplMetal4_Data* bd = ImGui_ImplMetal4_GetBackendData();
|
||||||
IM_ASSERT(bd != nil && "Context or backend not initialized! Did you call ImGui_ImplMetal4_Init()?");
|
IM_ASSERT(bd != nil && "Context or backend not initialized! Did you call ImGui_ImplMetal4_Init()?");
|
||||||
IM_ASSERT(frameInFlightIndex < bd->SharedMetalContext.framesInFlight && "frameInFlightIndex out of range! See framesInFlight passed to ImGui_ImplMetal4_Init().");
|
IM_ASSERT(frameInFlightIndex < (int)bd->SharedMetalContext.framesInFlight && "frameInFlightIndex out of range! See framesInFlight passed to ImGui_ImplMetal4_Init().");
|
||||||
#ifdef IMGUI_IMPL_METAL_CPP
|
#ifdef IMGUI_IMPL_METAL_CPP
|
||||||
bd->SharedMetalContext.framebufferDescriptor = [[[FramebufferDescriptor alloc] initWithRenderPassDescriptor:renderPassDescriptor]autorelease];
|
bd->SharedMetalContext.framebufferDescriptor = [[[FramebufferDescriptor alloc] initWithRenderPassDescriptor:renderPassDescriptor]autorelease];
|
||||||
#else
|
#else
|
||||||
@ -479,7 +479,7 @@ bool ImGui_ImplMetal4_Init(id<MTLDevice> device, id<MTL4CommandQueue> commandQue
|
|||||||
bd->SharedMetalContext.commandQueue = commandQueue;
|
bd->SharedMetalContext.commandQueue = commandQueue;
|
||||||
bd->SharedMetalContext.framesInFlight = (NSUInteger)framesInFlight;
|
bd->SharedMetalContext.framesInFlight = (NSUInteger)framesInFlight;
|
||||||
NSMutableArray<NSMutableArray<MetalBuffer*>*>* bufferCaches = [NSMutableArray array];
|
NSMutableArray<NSMutableArray<MetalBuffer*>*>* bufferCaches = [NSMutableArray array];
|
||||||
for (NSUInteger i = 0; i < framesInFlight; i++)
|
for (NSUInteger i = 0; i < (NSUInteger)framesInFlight; i++)
|
||||||
[bufferCaches addObject:[NSMutableArray array]];
|
[bufferCaches addObject:[NSMutableArray array]];
|
||||||
bd->SharedMetalContext.bufferCaches = bufferCaches;
|
bd->SharedMetalContext.bufferCaches = bufferCaches;
|
||||||
return true;
|
return true;
|
||||||
|
|||||||
@ -35,6 +35,83 @@ HOW TO UPDATE?
|
|||||||
and API updates have been a little more frequent lately. They are documented below and in imgui.cpp and should not affect all users.
|
and API updates have been a little more frequent lately. They are documented below and in imgui.cpp and should not affect all users.
|
||||||
- Please report any issue!
|
- Please report any issue!
|
||||||
|
|
||||||
|
-----------------------------------------------------------------------
|
||||||
|
VERSION 1.93.1 WIP (In Progress)
|
||||||
|
-----------------------------------------------------------------------
|
||||||
|
|
||||||
|
Breaking Changes:
|
||||||
|
|
||||||
|
Autumn cleanup of stuff marked obsolete more than two years ago:
|
||||||
|
|
||||||
|
- Commented out legacy names/functions which were obsoleted in 1.90.7 (May 2024);
|
||||||
|
- `ImGuiMod_Shortcut` --> `ImGuiMod_Ctrl` (since 1.90.7 it maps to Cmd on macOS)
|
||||||
|
- Commented out legacy names/functions which were obsoleted in 1.90.9 (July 2024);
|
||||||
|
- `ImGuiCol_TabActive` --> `ImGuiCol_TabSelected`
|
||||||
|
- `ImGuiCol_TabUnfocused` --> `ImGuiCol_TabDimmed`
|
||||||
|
- `ImGuiCol_TabUnfocusedActive` --> `ImGuiCol_TabDimmedSelected`
|
||||||
|
- Commented out legacy names/functions which were obsoleted in 1.91.0 (July 2024);
|
||||||
|
- `ImGuiSelectableFlags_DontClosePopups` --> `ImGuiSelectableFlags_NoAutoClosePopups`
|
||||||
|
- `PushButtonRepeat(bool repeat)` --> `PushItemFlag(ImGuiItemFlags_ButtonRepeat, repeat)`
|
||||||
|
- `PopButtonRepeat()` --> `PopItemFlag()`
|
||||||
|
- `PushTabStop(bool tab_stop)` --> `PushItemFlag(ImGuiItemFlags_NoTabStop, !tab_stop);`
|
||||||
|
- `PopTabStop()` --> `PopItemFlag()`
|
||||||
|
- Commented out legacy names/functions which were obsoleted in 1.91.1 (Sept 2024);
|
||||||
|
- `io.GetClipboardTextFn` --> `platform_io.Platform_GetClipboardTextFn`
|
||||||
|
- `io.SetClipboardTextFn` --> `platform_io.Platform_SetClipboardTextFn`
|
||||||
|
- `io.ClipboardUserData` --> `platform_io.Platform_ClipboardUserData`
|
||||||
|
- Please also try to get rid of calls to `GetContentRegionMax()`, `GetWindowContentRegionMin()`
|
||||||
|
and `GetWindowContentRegionMax()` will may be removed soon-ish: you should not
|
||||||
|
ever need those functions. See #7838.
|
||||||
|
|
||||||
|
|
||||||
|
Other Changes:
|
||||||
|
|
||||||
|
- Style:
|
||||||
|
- `StyleColorsDark()`: tweaked WindowBg to be darker than in 1.93.0.
|
||||||
|
- Added `style.SymbolArrowSizeFactor`, `style.SymbolArrowThicknessFactor` to tweak the
|
||||||
|
shape and look of arrows. Made default arrow stroked. (#5233, #2431, #2235, #6730, #8243)
|
||||||
|
Legacy arrow: size: (0.60f,0.70f), thickness: 0.0f
|
||||||
|
New arrow: size: (0.72f,0.40f), thickness: 0.30f
|
||||||
|
- Windows:
|
||||||
|
- Using `SetNextWindowPos()` with a pivot while a window is hidden and measuring
|
||||||
|
size will still apply temporary position until size is figured out. (#9568)
|
||||||
|
- TreeNode:
|
||||||
|
- TreeNodeGetOpen(): added flags parameter to allow passing `ImGuiTreeNodeFlags_DefaultOpen`
|
||||||
|
or `ImGuiTreeNodeFlags_Leaf`. (#9569, #9592, #3823, #9251) [@adalisk-emikhaylov, @Yaki-Blake]
|
||||||
|
- Popups:
|
||||||
|
- Modals: fixed an assert displaying a modal in an environment where
|
||||||
|
`io.DisplayFramebufferScale` is not an integer (regression in 1.93.0). (#9598)
|
||||||
|
- Tables:
|
||||||
|
- Fixed various border overshooting issues, some mostly visible with transparent
|
||||||
|
borders and under specific conditions: (#4678)
|
||||||
|
- On non-scrolling tables, inner horizontal borders slightly overlapped
|
||||||
|
outer vertical ones with certain settings.
|
||||||
|
- On non-scrolling tables, clamping lower border coordinates to stay within
|
||||||
|
visible range (no visible change, but it makes ImDrawCmd AABB more sensible).
|
||||||
|
- Fixed vertical inner borders slightly overlapping bottom outer border.
|
||||||
|
- Fixed various issues using `ImGuiTableFlags_NoHostExtendX`/`_NoHostExtendY`:
|
||||||
|
- Fixed selectable highlight straying off the X2/Y2 clipping limit.
|
||||||
|
- Fixed parent window work rectangle affecting the Y2 clipping limit.
|
||||||
|
- Fixed the Y2 clipping limit overlapping bottom outer border.
|
||||||
|
- Multi-Select:
|
||||||
|
- Fixed `ImGuiSelectionBasicStorage::GetNextSelectedItem()` reading one past the
|
||||||
|
end of storage when trailing items are unselected (#9604) [@MilosLord]
|
||||||
|
- Drags: fixed handling of `ImGuiSliderFlags_WrapAround`: value could temporarily
|
||||||
|
escape the range when dragging fast. (#9612, #9611, #7749) [@swayie, @ocornut]
|
||||||
|
- ColorEdit:
|
||||||
|
- ColorButton, ColorEdit, ColorPicker: fixed an issue rendering colors when
|
||||||
|
inside a `BeginDisabled(false)` block, caused by the alpha cancelling-out
|
||||||
|
code in 1.93.0. (#9511, #9613, #9614) [@tksuoran]
|
||||||
|
- ImVec2: added a check for cases where a custom `IM_VEC2_CLASS_EXTRA` macro
|
||||||
|
adds an extra `operator=` to ImVec2. This isn't supported but should not
|
||||||
|
be needed as you should have a constructor to convert from your type to ImVec2.
|
||||||
|
- CI: added some ARM64 builds. (#9593) [@Harishmcw]
|
||||||
|
- Examples: renamed various helper batch files from build_win32.bat to build_win.bat
|
||||||
|
to reflect that they can also build X64 or ARM64, given the right environment.
|
||||||
|
Made the script detect the environment when needed (e.g. to specify library path).
|
||||||
|
- Examples: added support for ARM64 in selected build_win.bat helpers. (#9593) [@Harishmcw]
|
||||||
|
|
||||||
|
|
||||||
-----------------------------------------------------------------------
|
-----------------------------------------------------------------------
|
||||||
VERSION 1.93.0 (Released 2026-10-14)
|
VERSION 1.93.0 (Released 2026-10-14)
|
||||||
-----------------------------------------------------------------------
|
-----------------------------------------------------------------------
|
||||||
@ -169,6 +246,7 @@ Breaking Changes:
|
|||||||
- `ImDrawFlags_RoundCornersBottom` -> `ImDrawFlags_RoundBottom`
|
- `ImDrawFlags_RoundCornersBottom` -> `ImDrawFlags_RoundBottom`
|
||||||
- `ImDrawFlags_RoundCornersLeft` -> `ImDrawFlags_RoundLeft`
|
- `ImDrawFlags_RoundCornersLeft` -> `ImDrawFlags_RoundLeft`
|
||||||
- `ImDrawFlags_RoundCornersRight` -> `ImDrawFlags_RoundRight`
|
- `ImDrawFlags_RoundCornersRight` -> `ImDrawFlags_RoundRight`
|
||||||
|
- `ImDrawFlags_RoundCornersMask_` -> `ImDrawFlags_RoundMask_`
|
||||||
Kept redirection enums (will obsolete).
|
Kept redirection enums (will obsolete).
|
||||||
- Marked `ImDrawListFlags_AntiAliasedLinesUseTex` and `style.AntiAliasedLinesUseTex` as
|
- Marked `ImDrawListFlags_AntiAliasedLinesUseTex` and `style.AntiAliasedLinesUseTex` as
|
||||||
obsolete, as the new line rendering code always uses textures.
|
obsolete, as the new line rendering code always uses textures.
|
||||||
|
|||||||
@ -113,7 +113,7 @@ Calling the `ImGui::ShowDemoWindow()` function will create a demo window showcas
|
|||||||
- [imgui_explorer](https://pthom.github.io/imgui_explorer): Web version of the demo w/ source code browser, courtesy of [@pthom](https://github.com/pthom).
|
- [imgui_explorer](https://pthom.github.io/imgui_explorer): Web version of the demo w/ source code browser, courtesy of [@pthom](https://github.com/pthom).
|
||||||
|
|
||||||
You should be able to build the examples from sources. If you don't, let us know! If you want to have a quick look at some Dear ImGui features, you can download Windows binaries of the demo app here:
|
You should be able to build the examples from sources. If you don't, let us know! If you want to have a quick look at some Dear ImGui features, you can download Windows binaries of the demo app here:
|
||||||
- [imgui-demo-binaries-20260225.zip](https://www.dearimgui.com/binaries/imgui-demo-binaries-20260225.zip) (Windows, 1.92.6, built 2026/02/25, master) or [older binaries](https://www.dearimgui.com/binaries).
|
- [imgui-demo-binaries-20261015-win32.zip](https://www.dearimgui.com/binaries/imgui-demo-binaries-20261015-win32.zip) (Win32, 1.93.0, built 2026/10/15, master) or [older binaries](https://www.dearimgui.com/binaries).
|
||||||
|
|
||||||
### Gallery
|
### Gallery
|
||||||
|
|
||||||
|
|||||||
@ -111,7 +111,6 @@
|
|||||||
|
|
||||||
#if TARGET_OS_OSX
|
#if TARGET_OS_OSX
|
||||||
ImGui_ImplOSX_Init(self.view);
|
ImGui_ImplOSX_Init(self.view);
|
||||||
[NSApp activateIgnoringOtherApps:YES];
|
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -273,6 +272,22 @@
|
|||||||
|
|
||||||
@implementation AppDelegate
|
@implementation AppDelegate
|
||||||
|
|
||||||
|
-(void)applicationDidFinishLaunching:(NSNotification *)notification
|
||||||
|
{
|
||||||
|
NSMenu* mainMenuBar = [[NSMenu alloc] init];
|
||||||
|
NSMenu* appMenu = [[NSMenu alloc] initWithTitle:@"Dear ImGui OSX+Metal Example"];
|
||||||
|
NSMenuItem* quitMenuItem = [appMenu addItemWithTitle:@"Quit" action:@selector(terminate:) keyEquivalent:@"q"];
|
||||||
|
[quitMenuItem setTarget:NSApp];
|
||||||
|
[quitMenuItem setKeyEquivalentModifierMask:NSEventModifierFlagCommand];
|
||||||
|
|
||||||
|
NSMenuItem* appMenuItem = [[NSMenuItem alloc] init];
|
||||||
|
[appMenuItem setSubmenu:appMenu];
|
||||||
|
[mainMenuBar addItem:appMenuItem];
|
||||||
|
[NSApp setMainMenu:mainMenuBar];
|
||||||
|
|
||||||
|
[NSApp activateIgnoringOtherApps:YES];
|
||||||
|
}
|
||||||
|
|
||||||
-(BOOL)applicationShouldTerminateAfterLastWindowClosed:(NSApplication *)sender
|
-(BOOL)applicationShouldTerminateAfterLastWindowClosed:(NSApplication *)sender
|
||||||
{
|
{
|
||||||
return YES;
|
return YES;
|
||||||
@ -287,6 +302,7 @@
|
|||||||
styleMask:NSWindowStyleMaskTitled | NSWindowStyleMaskClosable | NSWindowStyleMaskResizable | NSWindowStyleMaskMiniaturizable
|
styleMask:NSWindowStyleMaskTitled | NSWindowStyleMaskClosable | NSWindowStyleMaskResizable | NSWindowStyleMaskMiniaturizable
|
||||||
backing:NSBackingStoreBuffered
|
backing:NSBackingStoreBuffered
|
||||||
defer:NO];
|
defer:NO];
|
||||||
|
self.window.title = @"Dear ImGui OSX+Metal Example";
|
||||||
self.window.contentViewController = rootViewController;
|
self.window.contentViewController = rootViewController;
|
||||||
[self.window center];
|
[self.window center];
|
||||||
[self.window makeKeyAndOrderFront:self];
|
[self.window makeKeyAndOrderFront:self];
|
||||||
@ -334,7 +350,6 @@ int main(int, const char**)
|
|||||||
AppDelegate *appDelegate = [[AppDelegate alloc] init]; // creates window
|
AppDelegate *appDelegate = [[AppDelegate alloc] init]; // creates window
|
||||||
[NSApp setDelegate:appDelegate];
|
[NSApp setDelegate:appDelegate];
|
||||||
|
|
||||||
[NSApp activateIgnoringOtherApps:YES];
|
|
||||||
[NSApp run];
|
[NSApp run];
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
|
|||||||
@ -117,7 +117,6 @@
|
|||||||
|
|
||||||
#if TARGET_OS_OSX
|
#if TARGET_OS_OSX
|
||||||
ImGui_ImplOSX_Init(self.view);
|
ImGui_ImplOSX_Init(self.view);
|
||||||
[NSApp activateIgnoringOtherApps:YES];
|
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -289,6 +288,22 @@
|
|||||||
|
|
||||||
@implementation AppDelegate
|
@implementation AppDelegate
|
||||||
|
|
||||||
|
-(void)applicationDidFinishLaunching:(NSNotification *)notification
|
||||||
|
{
|
||||||
|
NSMenu* mainMenuBar = [[NSMenu alloc] init];
|
||||||
|
NSMenu* appMenu = [[NSMenu alloc] initWithTitle:@"Dear ImGui OSX+Metal4 Example"];
|
||||||
|
NSMenuItem* quitMenuItem = [appMenu addItemWithTitle:@"Quit" action:@selector(terminate:) keyEquivalent:@"q"];
|
||||||
|
[quitMenuItem setTarget:NSApp];
|
||||||
|
[quitMenuItem setKeyEquivalentModifierMask:NSEventModifierFlagCommand];
|
||||||
|
|
||||||
|
NSMenuItem* appMenuItem = [[NSMenuItem alloc] init];
|
||||||
|
[appMenuItem setSubmenu:appMenu];
|
||||||
|
[mainMenuBar addItem:appMenuItem];
|
||||||
|
[NSApp setMainMenu:mainMenuBar];
|
||||||
|
|
||||||
|
[NSApp activateIgnoringOtherApps:YES];
|
||||||
|
}
|
||||||
|
|
||||||
-(BOOL)applicationShouldTerminateAfterLastWindowClosed:(NSApplication *)sender
|
-(BOOL)applicationShouldTerminateAfterLastWindowClosed:(NSApplication *)sender
|
||||||
{
|
{
|
||||||
return YES;
|
return YES;
|
||||||
@ -303,6 +318,7 @@
|
|||||||
styleMask:NSWindowStyleMaskTitled | NSWindowStyleMaskClosable | NSWindowStyleMaskResizable | NSWindowStyleMaskMiniaturizable
|
styleMask:NSWindowStyleMaskTitled | NSWindowStyleMaskClosable | NSWindowStyleMaskResizable | NSWindowStyleMaskMiniaturizable
|
||||||
backing:NSBackingStoreBuffered
|
backing:NSBackingStoreBuffered
|
||||||
defer:NO];
|
defer:NO];
|
||||||
|
self.window.title = @"Dear ImGui OSX+Metal4 Example";
|
||||||
self.window.contentViewController = rootViewController;
|
self.window.contentViewController = rootViewController;
|
||||||
[self.window center];
|
[self.window center];
|
||||||
[self.window makeKeyAndOrderFront:self];
|
[self.window makeKeyAndOrderFront:self];
|
||||||
@ -350,7 +366,6 @@ int main(int, const char**)
|
|||||||
AppDelegate *appDelegate = [[AppDelegate alloc] init]; // creates window
|
AppDelegate *appDelegate = [[AppDelegate alloc] init]; // creates window
|
||||||
[NSApp setDelegate:appDelegate];
|
[NSApp setDelegate:appDelegate];
|
||||||
|
|
||||||
[NSApp activateIgnoringOtherApps:YES];
|
|
||||||
[NSApp run];
|
[NSApp run];
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
|
|||||||
@ -191,19 +191,14 @@
|
|||||||
-(void)setupMenu
|
-(void)setupMenu
|
||||||
{
|
{
|
||||||
NSMenu* mainMenuBar = [[NSMenu alloc] init];
|
NSMenu* mainMenuBar = [[NSMenu alloc] init];
|
||||||
NSMenu* appMenu;
|
NSMenu* appMenu = [[NSMenu alloc] initWithTitle:@"Dear ImGui OSX+OpenGL2 Example"];
|
||||||
NSMenuItem* menuItem;
|
NSMenuItem* quitMenuItem = [appMenu addItemWithTitle:@"Quit" action:@selector(terminate:) keyEquivalent:@"q"];
|
||||||
|
[quitMenuItem setTarget:NSApp];
|
||||||
|
[quitMenuItem setKeyEquivalentModifierMask:NSEventModifierFlagCommand];
|
||||||
|
|
||||||
appMenu = [[NSMenu alloc] initWithTitle:@"Dear ImGui OSX+OpenGL2 Example"];
|
NSMenuItem* appMenuItem = [[NSMenuItem alloc] init];
|
||||||
menuItem = [appMenu addItemWithTitle:@"Quit Dear ImGui OSX+OpenGL2 Example" action:@selector(terminate:) keyEquivalent:@"q"];
|
[appMenuItem setSubmenu:appMenu];
|
||||||
[menuItem setKeyEquivalentModifierMask:NSEventModifierFlagCommand];
|
[mainMenuBar addItem:appMenuItem];
|
||||||
|
|
||||||
menuItem = [[NSMenuItem alloc] init];
|
|
||||||
[menuItem setSubmenu:appMenu];
|
|
||||||
|
|
||||||
[mainMenuBar addItem:menuItem];
|
|
||||||
|
|
||||||
appMenu = nil;
|
|
||||||
[NSApp setMainMenu:mainMenuBar];
|
[NSApp setMainMenu:mainMenuBar];
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -214,10 +209,6 @@
|
|||||||
|
|
||||||
-(void)applicationDidFinishLaunching:(NSNotification *)aNotification
|
-(void)applicationDidFinishLaunching:(NSNotification *)aNotification
|
||||||
{
|
{
|
||||||
// Make the application a foreground application (else it won't receive keyboard events)
|
|
||||||
ProcessSerialNumber psn = {0, kCurrentProcess};
|
|
||||||
TransformProcessType(&psn, kProcessTransformToForegroundApplication);
|
|
||||||
|
|
||||||
// Menu
|
// Menu
|
||||||
[self setupMenu];
|
[self setupMenu];
|
||||||
|
|
||||||
@ -241,6 +232,8 @@
|
|||||||
NSLog(@"No OpenGL Context!");
|
NSLog(@"No OpenGL Context!");
|
||||||
|
|
||||||
[view initialize];
|
[view initialize];
|
||||||
|
|
||||||
|
[NSApp activateIgnoringOtherApps:YES];
|
||||||
}
|
}
|
||||||
|
|
||||||
@end
|
@end
|
||||||
@ -249,14 +242,17 @@
|
|||||||
// Application main() function
|
// Application main() function
|
||||||
//-----------------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------------
|
||||||
|
|
||||||
int main(int argc, const char* argv[])
|
int main(int, const char**)
|
||||||
{
|
{
|
||||||
@autoreleasepool
|
@autoreleasepool
|
||||||
{
|
{
|
||||||
NSApp = [NSApplication sharedApplication];
|
[NSApplication sharedApplication];
|
||||||
AppDelegate* delegate = [[AppDelegate alloc] init];
|
[NSApp setActivationPolicy:NSApplicationActivationPolicyRegular];
|
||||||
[[NSApplication sharedApplication] setDelegate:delegate];
|
|
||||||
|
AppDelegate* appDelegate = [[AppDelegate alloc] init];
|
||||||
|
[NSApp setDelegate:appDelegate];
|
||||||
|
|
||||||
[NSApp run];
|
[NSApp run];
|
||||||
}
|
}
|
||||||
return NSApplicationMain(argc, argv);
|
return 0;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -191,19 +191,14 @@
|
|||||||
-(void)setupMenu
|
-(void)setupMenu
|
||||||
{
|
{
|
||||||
NSMenu* mainMenuBar = [[NSMenu alloc] init];
|
NSMenu* mainMenuBar = [[NSMenu alloc] init];
|
||||||
NSMenu* appMenu;
|
NSMenu* appMenu = [[NSMenu alloc] initWithTitle:@"Dear ImGui OSX+OpenGL3 Example"];
|
||||||
NSMenuItem* menuItem;
|
NSMenuItem* quitMenuItem = [appMenu addItemWithTitle:@"Quit" action:@selector(terminate:) keyEquivalent:@"q"];
|
||||||
|
[quitMenuItem setTarget:NSApp];
|
||||||
|
[quitMenuItem setKeyEquivalentModifierMask:NSEventModifierFlagCommand];
|
||||||
|
|
||||||
appMenu = [[NSMenu alloc] initWithTitle:@"Dear ImGui OSX+OpenGL3 Example"];
|
NSMenuItem* appMenuItem = [[NSMenuItem alloc] init];
|
||||||
menuItem = [appMenu addItemWithTitle:@"Quit Dear ImGui OSX+OpenGL3 Example" action:@selector(terminate:) keyEquivalent:@"q"];
|
[appMenuItem setSubmenu:appMenu];
|
||||||
[menuItem setKeyEquivalentModifierMask:NSEventModifierFlagCommand];
|
[mainMenuBar addItem:appMenuItem];
|
||||||
|
|
||||||
menuItem = [[NSMenuItem alloc] init];
|
|
||||||
[menuItem setSubmenu:appMenu];
|
|
||||||
|
|
||||||
[mainMenuBar addItem:menuItem];
|
|
||||||
|
|
||||||
appMenu = nil;
|
|
||||||
[NSApp setMainMenu:mainMenuBar];
|
[NSApp setMainMenu:mainMenuBar];
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -214,10 +209,6 @@
|
|||||||
|
|
||||||
-(void)applicationDidFinishLaunching:(NSNotification *)aNotification
|
-(void)applicationDidFinishLaunching:(NSNotification *)aNotification
|
||||||
{
|
{
|
||||||
// Make the application a foreground application (else it won't receive keyboard events)
|
|
||||||
ProcessSerialNumber psn = {0, kCurrentProcess};
|
|
||||||
TransformProcessType(&psn, kProcessTransformToForegroundApplication);
|
|
||||||
|
|
||||||
// Menu
|
// Menu
|
||||||
[self setupMenu];
|
[self setupMenu];
|
||||||
|
|
||||||
@ -242,6 +233,8 @@
|
|||||||
NSLog(@"No OpenGL Context!");
|
NSLog(@"No OpenGL Context!");
|
||||||
|
|
||||||
[view initialize];
|
[view initialize];
|
||||||
|
|
||||||
|
[NSApp activateIgnoringOtherApps:YES];
|
||||||
}
|
}
|
||||||
|
|
||||||
@end
|
@end
|
||||||
@ -250,14 +243,17 @@
|
|||||||
// Application main() function
|
// Application main() function
|
||||||
//-----------------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------------
|
||||||
|
|
||||||
int main(int argc, const char* argv[])
|
int main(int, const char**)
|
||||||
{
|
{
|
||||||
@autoreleasepool
|
@autoreleasepool
|
||||||
{
|
{
|
||||||
NSApp = [NSApplication sharedApplication];
|
[NSApplication sharedApplication];
|
||||||
AppDelegate* delegate = [[AppDelegate alloc] init];
|
[NSApp setActivationPolicy:NSApplicationActivationPolicyRegular];
|
||||||
[[NSApplication sharedApplication] setDelegate:delegate];
|
|
||||||
|
AppDelegate* appDelegate = [[AppDelegate alloc] init];
|
||||||
|
[NSApp setDelegate:appDelegate];
|
||||||
|
|
||||||
[NSApp run];
|
[NSApp run];
|
||||||
}
|
}
|
||||||
return NSApplicationMain(argc, argv);
|
return 0;
|
||||||
}
|
}
|
||||||
|
|||||||
21
examples/example_glfw_opengl2/build_win.bat
Normal file
21
examples/example_glfw_opengl2/build_win.bat
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
@REM Build for Visual Studio compiler. First run vcvars32.bat (x86) or vcvars64.bat (x64).
|
||||||
|
|
||||||
|
@REM Detect target architecture (VS 2015 uses Platform, unset for native x86; VS 2017+ uses VSCMD_ARG_TGT_ARCH).
|
||||||
|
@set TARGET_ARCH=%VSCMD_ARG_TGT_ARCH%
|
||||||
|
@if not defined TARGET_ARCH if "%VisualStudioVersion%"=="14.0" (set TARGET_ARCH=x86& if defined Platform set TARGET_ARCH=%Platform%)
|
||||||
|
@if /I "%TARGET_ARCH%"=="x86" goto arch_ok
|
||||||
|
@if /I "%TARGET_ARCH%"=="x64" goto arch_ok
|
||||||
|
@echo Unsupported or uninitialized compiler environment. First run vcvars32.bat (x86) or vcvars64.bat (x64).
|
||||||
|
@exit /b 1
|
||||||
|
|
||||||
|
:arch_ok
|
||||||
|
@set OUT_EXE=example_glfw_opengl2
|
||||||
|
@set INCLUDES=/I..\.. /I..\..\backends /I..\libs\glfw\include
|
||||||
|
@set SOURCES=main.cpp ..\..\backends\imgui_impl_opengl2.cpp ..\..\backends\imgui_impl_glfw.cpp ..\..\imgui*.cpp
|
||||||
|
@set LIBS=glfw3.lib opengl32.lib gdi32.lib shell32.lib
|
||||||
|
@if /I "%TARGET_ARCH%"=="x86" set LIBS=%LIBS% /LIBPATH:..\libs\glfw\lib-vc2010-32
|
||||||
|
@if /I "%TARGET_ARCH%"=="x64" set LIBS=%LIBS% /LIBPATH:..\libs\glfw\lib-vc2010-64
|
||||||
|
|
||||||
|
@set OUT_DIR=Debug
|
||||||
|
mkdir %OUT_DIR%
|
||||||
|
cl /nologo /Zi /MD /utf-8 %INCLUDES% %SOURCES% /Fe%OUT_DIR%/%OUT_EXE%.exe /Fo%OUT_DIR%/ /link %LIBS%
|
||||||
@ -1,8 +0,0 @@
|
|||||||
@REM Build for Visual Studio compiler. Run your copy of vcvars32.bat or vcvarsall.bat to setup command-line compiler.
|
|
||||||
@set OUT_DIR=Debug
|
|
||||||
@set OUT_EXE=example_glfw_opengl2
|
|
||||||
@set INCLUDES=/I..\.. /I..\..\backends /I..\libs\glfw\include
|
|
||||||
@set SOURCES=main.cpp ..\..\backends\imgui_impl_opengl2.cpp ..\..\backends\imgui_impl_glfw.cpp ..\..\imgui*.cpp
|
|
||||||
@set LIBS=/LIBPATH:..\libs\glfw\lib-vc2010-32 glfw3.lib opengl32.lib gdi32.lib shell32.lib
|
|
||||||
mkdir %OUT_DIR%
|
|
||||||
cl /nologo /Zi /MD /utf-8 %INCLUDES% %SOURCES% /Fe%OUT_DIR%/%OUT_EXE%.exe /Fo%OUT_DIR%/ /link %LIBS%
|
|
||||||
21
examples/example_glfw_opengl3/build_win.bat
Normal file
21
examples/example_glfw_opengl3/build_win.bat
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
@REM Build for Visual Studio compiler. First run vcvars32.bat (x86) or vcvars64.bat (x64).
|
||||||
|
|
||||||
|
@REM Detect target architecture (VS 2015 uses Platform, unset for native x86; VS 2017+ uses VSCMD_ARG_TGT_ARCH).
|
||||||
|
@set TARGET_ARCH=%VSCMD_ARG_TGT_ARCH%
|
||||||
|
@if not defined TARGET_ARCH if "%VisualStudioVersion%"=="14.0" (set TARGET_ARCH=x86& if defined Platform set TARGET_ARCH=%Platform%)
|
||||||
|
@if /I "%TARGET_ARCH%"=="x86" goto arch_ok
|
||||||
|
@if /I "%TARGET_ARCH%"=="x64" goto arch_ok
|
||||||
|
@echo Unsupported or uninitialized compiler environment. First run vcvars32.bat (x86) or vcvars64.bat (x64).
|
||||||
|
@exit /b 1
|
||||||
|
|
||||||
|
:arch_ok
|
||||||
|
@set OUT_EXE=example_glfw_opengl3
|
||||||
|
@set INCLUDES=/I..\.. /I..\..\backends /I..\libs\glfw\include
|
||||||
|
@set SOURCES=main.cpp ..\..\backends\imgui_impl_glfw.cpp ..\..\backends\imgui_impl_opengl3.cpp ..\..\imgui*.cpp
|
||||||
|
@set LIBS=glfw3.lib opengl32.lib gdi32.lib shell32.lib
|
||||||
|
@if /I "%TARGET_ARCH%"=="x86" set LIBS=%LIBS% /LIBPATH:..\libs\glfw\lib-vc2010-32
|
||||||
|
@if /I "%TARGET_ARCH%"=="x64" set LIBS=%LIBS% /LIBPATH:..\libs\glfw\lib-vc2010-64
|
||||||
|
|
||||||
|
@set OUT_DIR=Debug
|
||||||
|
mkdir %OUT_DIR%
|
||||||
|
cl /nologo /Zi /MD /utf-8 %INCLUDES% %SOURCES% /Fe%OUT_DIR%/%OUT_EXE%.exe /Fo%OUT_DIR%/ /link %LIBS%
|
||||||
@ -1,8 +0,0 @@
|
|||||||
@REM Build for Visual Studio compiler. Run your copy of vcvars32.bat or vcvarsall.bat to setup command-line compiler.
|
|
||||||
@set OUT_DIR=Debug
|
|
||||||
@set OUT_EXE=example_glfw_opengl3
|
|
||||||
@set INCLUDES=/I..\.. /I..\..\backends /I..\libs\glfw\include
|
|
||||||
@set SOURCES=main.cpp ..\..\backends\imgui_impl_glfw.cpp ..\..\backends\imgui_impl_opengl3.cpp ..\..\imgui*.cpp
|
|
||||||
@set LIBS=/LIBPATH:..\libs\glfw\lib-vc2010-32 glfw3.lib opengl32.lib gdi32.lib shell32.lib
|
|
||||||
mkdir %OUT_DIR%
|
|
||||||
cl /nologo /Zi /MD /utf-8 %INCLUDES% %SOURCES% /Fe%OUT_DIR%/%OUT_EXE%.exe /Fo%OUT_DIR%/ /link %LIBS%
|
|
||||||
25
examples/example_glfw_vulkan/build_win.bat
Normal file
25
examples/example_glfw_vulkan/build_win.bat
Normal file
@ -0,0 +1,25 @@
|
|||||||
|
@REM Build for Visual Studio compiler. First run vcvars32.bat (x86) or vcvars64.bat (x64).
|
||||||
|
|
||||||
|
@REM Detect target architecture (VS 2015 uses Platform, unset for native x86; VS 2017+ uses VSCMD_ARG_TGT_ARCH).
|
||||||
|
@set TARGET_ARCH=%VSCMD_ARG_TGT_ARCH%
|
||||||
|
@if not defined TARGET_ARCH if "%VisualStudioVersion%"=="14.0" (set TARGET_ARCH=x86& if defined Platform set TARGET_ARCH=%Platform%)
|
||||||
|
@if /I "%TARGET_ARCH%"=="x86" goto arch_ok
|
||||||
|
@if /I "%TARGET_ARCH%"=="x64" goto arch_ok
|
||||||
|
@echo Unsupported or uninitialized compiler environment. First run vcvars32.bat (x86) or vcvars64.bat (x64).
|
||||||
|
@exit /b 1
|
||||||
|
|
||||||
|
:arch_ok
|
||||||
|
@set OUT_EXE=example_glfw_vulkan
|
||||||
|
@set INCLUDES=/I..\.. /I..\..\backends /I..\libs\glfw\include /I %VULKAN_SDK%\include
|
||||||
|
@set SOURCES=main.cpp ..\..\backends\imgui_impl_vulkan.cpp ..\..\backends\imgui_impl_glfw.cpp ..\..\imgui*.cpp
|
||||||
|
@set LIBS=glfw3.lib opengl32.lib gdi32.lib shell32.lib vulkan-1.lib
|
||||||
|
@if /I "%TARGET_ARCH%"=="x86" set LIBS=%LIBS% /LIBPATH:..\libs\glfw\lib-vc2010-32 /libpath:%VULKAN_SDK%\lib32
|
||||||
|
@if /I "%TARGET_ARCH%"=="x64" set LIBS=%LIBS% /LIBPATH:..\libs\glfw\lib-vc2010-64 /libpath:%VULKAN_SDK%\lib
|
||||||
|
|
||||||
|
@set OUT_DIR=Debug
|
||||||
|
mkdir %OUT_DIR%
|
||||||
|
cl /nologo /Zi /MD /utf-8 %INCLUDES% %SOURCES% /Fe%OUT_DIR%/%OUT_EXE%.exe /Fo%OUT_DIR%/ /link %LIBS%
|
||||||
|
|
||||||
|
@set OUT_DIR=Release
|
||||||
|
mkdir %OUT_DIR%
|
||||||
|
cl /nologo /Zi /MD /utf-8 /Ox /Oi %INCLUDES% %SOURCES% /Fe%OUT_DIR%/%OUT_EXE%.exe /Fo%OUT_DIR%/ /link %LIBS%
|
||||||
@ -1,14 +0,0 @@
|
|||||||
@REM Build for Visual Studio compiler. Run your copy of vcvars32.bat or vcvarsall.bat to setup command-line compiler.
|
|
||||||
|
|
||||||
@set OUT_EXE=example_glfw_vulkan
|
|
||||||
@set INCLUDES=/I..\.. /I..\..\backends /I..\libs\glfw\include /I %VULKAN_SDK%\include
|
|
||||||
@set SOURCES=main.cpp ..\..\backends\imgui_impl_vulkan.cpp ..\..\backends\imgui_impl_glfw.cpp ..\..\imgui*.cpp
|
|
||||||
@set LIBS=/LIBPATH:..\libs\glfw\lib-vc2010-32 /libpath:%VULKAN_SDK%\lib32 glfw3.lib opengl32.lib gdi32.lib shell32.lib vulkan-1.lib
|
|
||||||
|
|
||||||
@set OUT_DIR=Debug
|
|
||||||
mkdir %OUT_DIR%
|
|
||||||
cl /nologo /Zi /MD /utf-8 %INCLUDES% %SOURCES% /Fe%OUT_DIR%/%OUT_EXE%.exe /Fo%OUT_DIR%/ /link %LIBS%
|
|
||||||
|
|
||||||
@set OUT_DIR=Release
|
|
||||||
mkdir %OUT_DIR%
|
|
||||||
cl /nologo /Zi /MD /utf-8 /Ox /Oi %INCLUDES% %SOURCES% /Fe%OUT_DIR%/%OUT_EXE%.exe /Fo%OUT_DIR%/ /link %LIBS%
|
|
||||||
@ -1,14 +0,0 @@
|
|||||||
@REM Build for Visual Studio compiler. Run your copy of vcvars64.bat or vcvarsall.bat to setup 64-bit command-line compiler.
|
|
||||||
|
|
||||||
@set OUT_EXE=example_glfw_vulkan
|
|
||||||
@set INCLUDES=/I..\.. /I..\..\backends /I..\libs\glfw\include /I %VULKAN_SDK%\include
|
|
||||||
@set SOURCES=main.cpp ..\..\backends\imgui_impl_vulkan.cpp ..\..\backends\imgui_impl_glfw.cpp ..\..\imgui*.cpp
|
|
||||||
@set LIBS=/LIBPATH:..\libs\glfw\lib-vc2010-64 /libpath:%VULKAN_SDK%\lib glfw3.lib opengl32.lib gdi32.lib shell32.lib vulkan-1.lib
|
|
||||||
|
|
||||||
@set OUT_DIR=Debug
|
|
||||||
mkdir %OUT_DIR%
|
|
||||||
cl /nologo /Zi /MD /utf-8 %INCLUDES% %SOURCES% /Fe%OUT_DIR%/%OUT_EXE%.exe /Fo%OUT_DIR%/ /link %LIBS%
|
|
||||||
|
|
||||||
@set OUT_DIR=Release
|
|
||||||
mkdir %OUT_DIR%
|
|
||||||
cl /nologo /Zi /MD /utf-8 /Ox /Oi %INCLUDES% %SOURCES% /Fe%OUT_DIR%/%OUT_EXE%.exe /Fo%OUT_DIR%/ /link %LIBS%
|
|
||||||
@ -1,3 +1,3 @@
|
|||||||
@REM Build for Visual Studio compiler. Run your copy of vcvars32.bat or vcvarsall.bat to setup command-line compiler.
|
@REM Build for Visual Studio compiler. Run your copy of vcvars32.bat, vcvars64.bat, or vcvarsall.bat to setup command-line compiler.
|
||||||
mkdir Debug
|
mkdir Debug
|
||||||
cl /nologo /Zi /MD /utf-8 /I ..\.. %* *.cpp ..\..\*.cpp /FeDebug/example_null.exe /FoDebug/ /link gdi32.lib shell32.lib imm32.lib
|
cl /nologo /Zi /MD /utf-8 /I ..\.. %* *.cpp ..\..\*.cpp /FeDebug/example_null.exe /FoDebug/ /link gdi32.lib shell32.lib imm32.lib
|
||||||
@ -92,8 +92,9 @@
|
|||||||
</ClCompile>
|
</ClCompile>
|
||||||
<Link>
|
<Link>
|
||||||
<GenerateDebugInformation>true</GenerateDebugInformation>
|
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||||
<AdditionalDependencies>d3d11.lib;d3dcompiler.lib;dxgi.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
<AdditionalDependencies>
|
||||||
<AdditionalLibraryDirectories>$(DXSDK_DIR)/Lib/x86;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
|
</AdditionalDependencies>
|
||||||
|
<AdditionalLibraryDirectories>%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
|
||||||
<SubSystem>Console</SubSystem>
|
<SubSystem>Console</SubSystem>
|
||||||
</Link>
|
</Link>
|
||||||
</ItemDefinitionGroup>
|
</ItemDefinitionGroup>
|
||||||
@ -107,8 +108,9 @@
|
|||||||
</ClCompile>
|
</ClCompile>
|
||||||
<Link>
|
<Link>
|
||||||
<GenerateDebugInformation>true</GenerateDebugInformation>
|
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||||
<AdditionalDependencies>d3d11.lib;d3dcompiler.lib;dxgi.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
<AdditionalDependencies>
|
||||||
<AdditionalLibraryDirectories>$(DXSDK_DIR)/Lib/x64;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
|
</AdditionalDependencies>
|
||||||
|
<AdditionalLibraryDirectories>%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
|
||||||
<SubSystem>Console</SubSystem>
|
<SubSystem>Console</SubSystem>
|
||||||
</Link>
|
</Link>
|
||||||
</ItemDefinitionGroup>
|
</ItemDefinitionGroup>
|
||||||
@ -126,8 +128,9 @@
|
|||||||
<GenerateDebugInformation>true</GenerateDebugInformation>
|
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||||
<EnableCOMDATFolding>true</EnableCOMDATFolding>
|
<EnableCOMDATFolding>true</EnableCOMDATFolding>
|
||||||
<OptimizeReferences>true</OptimizeReferences>
|
<OptimizeReferences>true</OptimizeReferences>
|
||||||
<AdditionalDependencies>d3d11.lib;d3dcompiler.lib;dxgi.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
<AdditionalDependencies>
|
||||||
<AdditionalLibraryDirectories>$(DXSDK_DIR)/Lib/x86;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
|
</AdditionalDependencies>
|
||||||
|
<AdditionalLibraryDirectories>%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
|
||||||
<SubSystem>Console</SubSystem>
|
<SubSystem>Console</SubSystem>
|
||||||
</Link>
|
</Link>
|
||||||
</ItemDefinitionGroup>
|
</ItemDefinitionGroup>
|
||||||
@ -145,8 +148,9 @@
|
|||||||
<GenerateDebugInformation>true</GenerateDebugInformation>
|
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||||
<EnableCOMDATFolding>true</EnableCOMDATFolding>
|
<EnableCOMDATFolding>true</EnableCOMDATFolding>
|
||||||
<OptimizeReferences>true</OptimizeReferences>
|
<OptimizeReferences>true</OptimizeReferences>
|
||||||
<AdditionalDependencies>d3d11.lib;d3dcompiler.lib;dxgi.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
<AdditionalDependencies>
|
||||||
<AdditionalLibraryDirectories>$(DXSDK_DIR)/Lib/x64;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
|
</AdditionalDependencies>
|
||||||
|
<AdditionalLibraryDirectories>%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
|
||||||
<SubSystem>Console</SubSystem>
|
<SubSystem>Console</SubSystem>
|
||||||
</Link>
|
</Link>
|
||||||
</ItemDefinitionGroup>
|
</ItemDefinitionGroup>
|
||||||
|
|||||||
21
examples/example_sdl2_directx11/build_win.bat
Normal file
21
examples/example_sdl2_directx11/build_win.bat
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
@REM Build for Visual Studio compiler. First run vcvars32.bat (x86) or vcvars64.bat (x64).
|
||||||
|
|
||||||
|
@REM Detect target architecture (VS 2015 uses Platform, unset for native x86; VS 2017+ uses VSCMD_ARG_TGT_ARCH).
|
||||||
|
@set TARGET_ARCH=%VSCMD_ARG_TGT_ARCH%
|
||||||
|
@if not defined TARGET_ARCH if "%VisualStudioVersion%"=="14.0" (set TARGET_ARCH=x86& if defined Platform set TARGET_ARCH=%Platform%)
|
||||||
|
@if /I "%TARGET_ARCH%"=="x86" goto arch_ok
|
||||||
|
@if /I "%TARGET_ARCH%"=="x64" goto arch_ok
|
||||||
|
@echo Unsupported or uninitialized compiler environment. First run vcvars32.bat (x86) or vcvars64.bat (x64).
|
||||||
|
@exit /b 1
|
||||||
|
|
||||||
|
:arch_ok
|
||||||
|
@set OUT_EXE=example_sdl2_directx11
|
||||||
|
@set INCLUDES=/I..\.. /I..\..\backends /I%SDL2_DIR%\include /I "%WindowsSdkDir%Include\um" /I "%WindowsSdkDir%Include\shared"
|
||||||
|
@set SOURCES=main.cpp ..\..\backends\imgui_impl_sdl2.cpp ..\..\backends\imgui_impl_dx11.cpp ..\..\imgui*.cpp
|
||||||
|
@set LIBS=SDL2.lib SDL2main.lib d3d11.lib d3dcompiler.lib shell32.lib
|
||||||
|
@if /I "%TARGET_ARCH%"=="x86" set LIBS=%LIBS% /LIBPATH:%SDL2_DIR%\lib\x86
|
||||||
|
@if /I "%TARGET_ARCH%"=="x64" set LIBS=%LIBS% /LIBPATH:%SDL2_DIR%\lib\x64
|
||||||
|
|
||||||
|
@set OUT_DIR=Debug
|
||||||
|
mkdir %OUT_DIR%
|
||||||
|
cl /nologo /Zi /MD /utf-8 %INCLUDES% %SOURCES% /Fe%OUT_DIR%/%OUT_EXE%.exe /Fo%OUT_DIR%/ /link %LIBS% /subsystem:console
|
||||||
@ -1,8 +0,0 @@
|
|||||||
@REM Build for Visual Studio compiler. Run your copy of vcvars32.bat or vcvarsall.bat to setup command-line compiler.
|
|
||||||
@set OUT_DIR=Debug
|
|
||||||
@set OUT_EXE=example_sdl2_directx11
|
|
||||||
@set INCLUDES=/I..\.. /I..\..\backends /I%SDL2_DIR%\include /I "%WindowsSdkDir%Include\um" /I "%WindowsSdkDir%Include\shared" /I "%DXSDK_DIR%Include"
|
|
||||||
@set SOURCES=main.cpp ..\..\backends\imgui_impl_sdl2.cpp ..\..\backends\imgui_impl_dx11.cpp ..\..\imgui*.cpp
|
|
||||||
@set LIBS=/LIBPATH:%SDL2_DIR%\lib\x86 SDL2.lib SDL2main.lib /LIBPATH:"%DXSDK_DIR%/Lib/x86" d3d11.lib d3dcompiler.lib shell32.lib
|
|
||||||
mkdir %OUT_DIR%
|
|
||||||
cl /nologo /Zi /MD /utf-8 %INCLUDES% %SOURCES% /Fe%OUT_DIR%/%OUT_EXE%.exe /Fo%OUT_DIR%/ /link %LIBS% /subsystem:console
|
|
||||||
@ -97,7 +97,7 @@
|
|||||||
</ClCompile>
|
</ClCompile>
|
||||||
<Link>
|
<Link>
|
||||||
<GenerateDebugInformation>true</GenerateDebugInformation>
|
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||||
<AdditionalLibraryDirectories>%SDL2_DIR%\lib\x86;$(DXSDK_DIR)/Lib/x86;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
|
<AdditionalLibraryDirectories>%SDL2_DIR%\lib\x86;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
|
||||||
<AdditionalDependencies>SDL2.lib;SDL2main.lib;d3d11.lib;d3dcompiler.lib;dxgi.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
<AdditionalDependencies>SDL2.lib;SDL2main.lib;d3d11.lib;d3dcompiler.lib;dxgi.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
||||||
<SubSystem>Console</SubSystem>
|
<SubSystem>Console</SubSystem>
|
||||||
<IgnoreSpecificDefaultLibraries>msvcrt.lib</IgnoreSpecificDefaultLibraries>
|
<IgnoreSpecificDefaultLibraries>msvcrt.lib</IgnoreSpecificDefaultLibraries>
|
||||||
@ -113,7 +113,7 @@
|
|||||||
</ClCompile>
|
</ClCompile>
|
||||||
<Link>
|
<Link>
|
||||||
<GenerateDebugInformation>true</GenerateDebugInformation>
|
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||||
<AdditionalLibraryDirectories>%SDL2_DIR%\lib\x64;$(DXSDK_DIR)/Lib/x64;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
|
<AdditionalLibraryDirectories>%SDL2_DIR%\lib\x64;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
|
||||||
<AdditionalDependencies>SDL2.lib;SDL2main.lib;d3d11.lib;d3dcompiler.lib;dxgi.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
<AdditionalDependencies>SDL2.lib;SDL2main.lib;d3d11.lib;d3dcompiler.lib;dxgi.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
||||||
<SubSystem>Console</SubSystem>
|
<SubSystem>Console</SubSystem>
|
||||||
<IgnoreSpecificDefaultLibraries>msvcrt.lib</IgnoreSpecificDefaultLibraries>
|
<IgnoreSpecificDefaultLibraries>msvcrt.lib</IgnoreSpecificDefaultLibraries>
|
||||||
@ -133,7 +133,7 @@
|
|||||||
<GenerateDebugInformation>true</GenerateDebugInformation>
|
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||||
<EnableCOMDATFolding>true</EnableCOMDATFolding>
|
<EnableCOMDATFolding>true</EnableCOMDATFolding>
|
||||||
<OptimizeReferences>true</OptimizeReferences>
|
<OptimizeReferences>true</OptimizeReferences>
|
||||||
<AdditionalLibraryDirectories>%SDL2_DIR%\lib\x86;$(DXSDK_DIR)/Lib/x86;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
|
<AdditionalLibraryDirectories>%SDL2_DIR%\lib\x86;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
|
||||||
<AdditionalDependencies>SDL2.lib;SDL2main.lib;d3d11.lib;d3dcompiler.lib;dxgi.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
<AdditionalDependencies>SDL2.lib;SDL2main.lib;d3d11.lib;d3dcompiler.lib;dxgi.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
||||||
<SubSystem>Console</SubSystem>
|
<SubSystem>Console</SubSystem>
|
||||||
<IgnoreSpecificDefaultLibraries>
|
<IgnoreSpecificDefaultLibraries>
|
||||||
@ -154,7 +154,7 @@
|
|||||||
<GenerateDebugInformation>true</GenerateDebugInformation>
|
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||||
<EnableCOMDATFolding>true</EnableCOMDATFolding>
|
<EnableCOMDATFolding>true</EnableCOMDATFolding>
|
||||||
<OptimizeReferences>true</OptimizeReferences>
|
<OptimizeReferences>true</OptimizeReferences>
|
||||||
<AdditionalLibraryDirectories>%SDL2_DIR%\lib\x64;$(DXSDK_DIR)/Lib/x64;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
|
<AdditionalLibraryDirectories>%SDL2_DIR%\lib\x64;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
|
||||||
<AdditionalDependencies>SDL2.lib;SDL2main.lib;d3d11.lib;d3dcompiler.lib;dxgi.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
<AdditionalDependencies>SDL2.lib;SDL2main.lib;d3d11.lib;d3dcompiler.lib;dxgi.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
||||||
<SubSystem>Console</SubSystem>
|
<SubSystem>Console</SubSystem>
|
||||||
<IgnoreSpecificDefaultLibraries>
|
<IgnoreSpecificDefaultLibraries>
|
||||||
|
|||||||
21
examples/example_sdl2_opengl2/build_win.bat
Normal file
21
examples/example_sdl2_opengl2/build_win.bat
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
@REM Build for Visual Studio compiler. First run vcvars32.bat (x86) or vcvars64.bat (x64).
|
||||||
|
|
||||||
|
@REM Detect target architecture (VS 2015 uses Platform, unset for native x86; VS 2017+ uses VSCMD_ARG_TGT_ARCH).
|
||||||
|
@set TARGET_ARCH=%VSCMD_ARG_TGT_ARCH%
|
||||||
|
@if not defined TARGET_ARCH if "%VisualStudioVersion%"=="14.0" (set TARGET_ARCH=x86& if defined Platform set TARGET_ARCH=%Platform%)
|
||||||
|
@if /I "%TARGET_ARCH%"=="x86" goto arch_ok
|
||||||
|
@if /I "%TARGET_ARCH%"=="x64" goto arch_ok
|
||||||
|
@echo Unsupported or uninitialized compiler environment. First run vcvars32.bat (x86) or vcvars64.bat (x64).
|
||||||
|
@exit /b 1
|
||||||
|
|
||||||
|
:arch_ok
|
||||||
|
@set OUT_EXE=example_sdl2_opengl2
|
||||||
|
@set INCLUDES=/I..\.. /I..\..\backends /I%SDL2_DIR%\include
|
||||||
|
@set SOURCES=main.cpp ..\..\backends\imgui_impl_sdl2.cpp ..\..\backends\imgui_impl_opengl2.cpp ..\..\imgui*.cpp
|
||||||
|
@set LIBS=SDL2.lib SDL2main.lib opengl32.lib shell32.lib
|
||||||
|
@if /I "%TARGET_ARCH%"=="x86" set LIBS=%LIBS% /LIBPATH:%SDL2_DIR%\lib\x86
|
||||||
|
@if /I "%TARGET_ARCH%"=="x64" set LIBS=%LIBS% /LIBPATH:%SDL2_DIR%\lib\x64
|
||||||
|
|
||||||
|
@set OUT_DIR=Debug
|
||||||
|
mkdir %OUT_DIR%
|
||||||
|
cl /nologo /Zi /MD /utf-8 %INCLUDES% %SOURCES% /Fe%OUT_DIR%/%OUT_EXE%.exe /Fo%OUT_DIR%/ /link %LIBS% /subsystem:console
|
||||||
@ -1,8 +0,0 @@
|
|||||||
@REM Build for Visual Studio compiler. Run your copy of vcvars32.bat or vcvarsall.bat to setup command-line compiler.
|
|
||||||
@set OUT_DIR=Debug
|
|
||||||
@set OUT_EXE=example_sdl2_opengl2
|
|
||||||
@set INCLUDES=/I..\.. /I..\..\backends /I%SDL2_DIR%\include
|
|
||||||
@set SOURCES=main.cpp ..\..\backends\imgui_impl_sdl2.cpp ..\..\backends\imgui_impl_opengl2.cpp ..\..\imgui*.cpp
|
|
||||||
@set LIBS=/LIBPATH:%SDL2_DIR%\lib\x86 SDL2.lib SDL2main.lib opengl32.lib shell32.lib
|
|
||||||
mkdir %OUT_DIR%
|
|
||||||
cl /nologo /Zi /MD /utf-8 %INCLUDES% %SOURCES% /Fe%OUT_DIR%/%OUT_EXE%.exe /Fo%OUT_DIR%/ /link %LIBS% /subsystem:console
|
|
||||||
@ -7,7 +7,7 @@ Use the provided project file (.vcxproj). Add to solution (imgui_examples.sln) i
|
|||||||
|
|
||||||
## Windows with Visual Studio's CLI
|
## Windows with Visual Studio's CLI
|
||||||
|
|
||||||
Use build_win32.bat or directly:
|
Use build_win.bat or directly:
|
||||||
```
|
```
|
||||||
set SDL2_DIR=path_to_your_sdl2_folder
|
set SDL2_DIR=path_to_your_sdl2_folder
|
||||||
cl /Zi /MD /utf-8 /I.. /I..\.. /I%SDL2_DIR%\include main.cpp ..\..\backends\imgui_impl_sdl2.cpp ..\..\backends\imgui_impl_opengl3.cpp ..\..\imgui*.cpp /FeDebug/example_sdl2_opengl3.exe /FoDebug/ /link /libpath:%SDL2_DIR%\lib\x86 SDL2.lib SDL2main.lib opengl32.lib /subsystem:console
|
cl /Zi /MD /utf-8 /I.. /I..\.. /I%SDL2_DIR%\include main.cpp ..\..\backends\imgui_impl_sdl2.cpp ..\..\backends\imgui_impl_opengl3.cpp ..\..\imgui*.cpp /FeDebug/example_sdl2_opengl3.exe /FoDebug/ /link /libpath:%SDL2_DIR%\lib\x86 SDL2.lib SDL2main.lib opengl32.lib /subsystem:console
|
||||||
|
|||||||
21
examples/example_sdl2_opengl3/build_win.bat
Normal file
21
examples/example_sdl2_opengl3/build_win.bat
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
@REM Build for Visual Studio compiler. First run vcvars32.bat (x86) or vcvars64.bat (x64).
|
||||||
|
|
||||||
|
@REM Detect target architecture (VS 2015 uses Platform, unset for native x86; VS 2017+ uses VSCMD_ARG_TGT_ARCH).
|
||||||
|
@set TARGET_ARCH=%VSCMD_ARG_TGT_ARCH%
|
||||||
|
@if not defined TARGET_ARCH if "%VisualStudioVersion%"=="14.0" (set TARGET_ARCH=x86& if defined Platform set TARGET_ARCH=%Platform%)
|
||||||
|
@if /I "%TARGET_ARCH%"=="x86" goto arch_ok
|
||||||
|
@if /I "%TARGET_ARCH%"=="x64" goto arch_ok
|
||||||
|
@echo Unsupported or uninitialized compiler environment. First run vcvars32.bat (x86) or vcvars64.bat (x64).
|
||||||
|
@exit /b 1
|
||||||
|
|
||||||
|
:arch_ok
|
||||||
|
@set OUT_EXE=example_sdl2_opengl3
|
||||||
|
@set INCLUDES=/I..\.. /I..\..\backends /I%SDL2_DIR%\include
|
||||||
|
@set SOURCES=main.cpp ..\..\backends\imgui_impl_sdl2.cpp ..\..\backends\imgui_impl_opengl3.cpp ..\..\imgui*.cpp
|
||||||
|
@set LIBS=SDL2.lib SDL2main.lib opengl32.lib shell32.lib
|
||||||
|
@if /I "%TARGET_ARCH%"=="x86" set LIBS=%LIBS% /LIBPATH:%SDL2_DIR%\lib\x86
|
||||||
|
@if /I "%TARGET_ARCH%"=="x64" set LIBS=%LIBS% /LIBPATH:%SDL2_DIR%\lib\x64
|
||||||
|
|
||||||
|
@set OUT_DIR=Debug
|
||||||
|
mkdir %OUT_DIR%
|
||||||
|
cl /nologo /Zi /MD /utf-8 %INCLUDES% %SOURCES% /Fe%OUT_DIR%/%OUT_EXE%.exe /Fo%OUT_DIR%/ /link %LIBS% /subsystem:console
|
||||||
@ -1,8 +0,0 @@
|
|||||||
@REM Build for Visual Studio compiler. Run your copy of vcvars32.bat or vcvarsall.bat to setup command-line compiler.
|
|
||||||
@set OUT_DIR=Debug
|
|
||||||
@set OUT_EXE=example_sdl2_opengl3
|
|
||||||
@set INCLUDES=/I..\.. /I..\..\backends /I%SDL2_DIR%\include
|
|
||||||
@set SOURCES=main.cpp ..\..\backends\imgui_impl_sdl2.cpp ..\..\backends\imgui_impl_opengl3.cpp ..\..\imgui*.cpp
|
|
||||||
@set LIBS=/LIBPATH:%SDL2_DIR%\lib\x86 SDL2.lib SDL2main.lib opengl32.lib shell32.lib
|
|
||||||
mkdir %OUT_DIR%
|
|
||||||
cl /nologo /Zi /MD /utf-8 %INCLUDES% %SOURCES% /Fe%OUT_DIR%/%OUT_EXE%.exe /Fo%OUT_DIR%/ /link %LIBS% /subsystem:console
|
|
||||||
21
examples/example_sdl2_sdlrenderer2/build_win.bat
Normal file
21
examples/example_sdl2_sdlrenderer2/build_win.bat
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
@REM Build for Visual Studio compiler. First run vcvars32.bat (x86) or vcvars64.bat (x64).
|
||||||
|
|
||||||
|
@REM Detect target architecture (VS 2015 uses Platform, unset for native x86; VS 2017+ uses VSCMD_ARG_TGT_ARCH).
|
||||||
|
@set TARGET_ARCH=%VSCMD_ARG_TGT_ARCH%
|
||||||
|
@if not defined TARGET_ARCH if "%VisualStudioVersion%"=="14.0" (set TARGET_ARCH=x86& if defined Platform set TARGET_ARCH=%Platform%)
|
||||||
|
@if /I "%TARGET_ARCH%"=="x86" goto arch_ok
|
||||||
|
@if /I "%TARGET_ARCH%"=="x64" goto arch_ok
|
||||||
|
@echo Unsupported or uninitialized compiler environment. First run vcvars32.bat (x86) or vcvars64.bat (x64).
|
||||||
|
@exit /b 1
|
||||||
|
|
||||||
|
:arch_ok
|
||||||
|
@set OUT_EXE=example_sdl2_sdlrenderer_
|
||||||
|
@set INCLUDES=/I..\.. /I..\..\backends /I%SDL2_DIR%\include
|
||||||
|
@set SOURCES=main.cpp ..\..\backends\imgui_impl_sdl2.cpp ..\..\backends\imgui_impl_sdlrenderer2.cpp ..\..\imgui*.cpp
|
||||||
|
@set LIBS=SDL2.lib SDL2main.lib
|
||||||
|
@if /I "%TARGET_ARCH%"=="x86" set LIBS=%LIBS% /LIBPATH:%SDL2_DIR%\lib\x86
|
||||||
|
@if /I "%TARGET_ARCH%"=="x64" set LIBS=%LIBS% /LIBPATH:%SDL2_DIR%\lib\x64
|
||||||
|
|
||||||
|
@set OUT_DIR=Debug
|
||||||
|
mkdir %OUT_DIR%
|
||||||
|
cl /nologo /Zi /MD /utf-8 %INCLUDES% %SOURCES% /Fe%OUT_DIR%/%OUT_EXE%.exe /Fo%OUT_DIR%/ /link %LIBS% /subsystem:console
|
||||||
@ -1,8 +0,0 @@
|
|||||||
@REM Build for Visual Studio compiler. Run your copy of vcvars32.bat or vcvarsall.bat to setup command-line compiler.
|
|
||||||
@set OUT_DIR=Debug
|
|
||||||
@set OUT_EXE=example_sdl2_sdlrenderer_
|
|
||||||
@set INCLUDES=/I..\.. /I..\..\backends /I%SDL2_DIR%\include
|
|
||||||
@set SOURCES=main.cpp ..\..\backends\imgui_impl_sdl2.cpp ..\..\backends\imgui_impl_sdlrenderer2.cpp ..\..\imgui*.cpp
|
|
||||||
@set LIBS=/LIBPATH:%SDL2_DIR%\lib\x86 SDL2.lib SDL2main.lib
|
|
||||||
mkdir %OUT_DIR%
|
|
||||||
cl /nologo /Zi /MD /utf-8 %INCLUDES% %SOURCES% /Fe%OUT_DIR%/%OUT_EXE%.exe /Fo%OUT_DIR%/ /link %LIBS% /subsystem:console
|
|
||||||
25
examples/example_sdl2_vulkan/build_win.bat
Normal file
25
examples/example_sdl2_vulkan/build_win.bat
Normal file
@ -0,0 +1,25 @@
|
|||||||
|
@REM Build for Visual Studio compiler. First run vcvars32.bat (x86) or vcvars64.bat (x64).
|
||||||
|
|
||||||
|
@REM Detect target architecture (VS 2015 uses Platform, unset for native x86; VS 2017+ uses VSCMD_ARG_TGT_ARCH).
|
||||||
|
@set TARGET_ARCH=%VSCMD_ARG_TGT_ARCH%
|
||||||
|
@if not defined TARGET_ARCH if "%VisualStudioVersion%"=="14.0" (set TARGET_ARCH=x86& if defined Platform set TARGET_ARCH=%Platform%)
|
||||||
|
@if /I "%TARGET_ARCH%"=="x86" goto arch_ok
|
||||||
|
@if /I "%TARGET_ARCH%"=="x64" goto arch_ok
|
||||||
|
@echo Unsupported or uninitialized compiler environment. First run vcvars32.bat (x86) or vcvars64.bat (x64).
|
||||||
|
@exit /b 1
|
||||||
|
|
||||||
|
:arch_ok
|
||||||
|
@set OUT_EXE=example_sdl2_vulkan
|
||||||
|
@set INCLUDES=/I..\.. /I..\..\backends /I%SDL2_DIR%\include /I %VULKAN_SDK%\include
|
||||||
|
@set SOURCES=main.cpp ..\..\backends\imgui_impl_sdl2.cpp ..\..\backends\imgui_impl_vulkan.cpp ..\..\imgui*.cpp
|
||||||
|
@set LIBS=SDL2.lib SDL2main.lib shell32.lib vulkan-1.lib
|
||||||
|
@if /I "%TARGET_ARCH%"=="x86" set LIBS=%LIBS% /LIBPATH:%SDL2_DIR%\lib\x86 /libpath:%VULKAN_SDK%\lib32
|
||||||
|
@if /I "%TARGET_ARCH%"=="x64" set LIBS=%LIBS% /LIBPATH:%SDL2_DIR%\lib\x64 /libpath:%VULKAN_SDK%\lib
|
||||||
|
|
||||||
|
@set OUT_DIR=Debug
|
||||||
|
mkdir %OUT_DIR%
|
||||||
|
cl /nologo /Zi /MD /utf-8 %INCLUDES% %SOURCES% /Fe%OUT_DIR%/%OUT_EXE%.exe /Fo%OUT_DIR%/ /link %LIBS% /subsystem:console
|
||||||
|
|
||||||
|
@set OUT_DIR=Release
|
||||||
|
@REM mkdir %OUT_DIR%
|
||||||
|
@REM cl /nologo /Zi /MD /utf-8 /Ox /Oi %INCLUDES% %SOURCES% /Fe%OUT_DIR%/%OUT_EXE%.exe /Fo%OUT_DIR%/ /link %LIBS% /subsystem:console
|
||||||
@ -1,14 +0,0 @@
|
|||||||
@REM Build for Visual Studio compiler. Run your copy of vcvars32.bat or vcvarsall.bat to setup command-line compiler.
|
|
||||||
|
|
||||||
@set OUT_EXE=example_sdl2_vulkan
|
|
||||||
@set INCLUDES=/I..\.. /I..\..\backends /I%SDL2_DIR%\include /I %VULKAN_SDK%\include
|
|
||||||
@set SOURCES=main.cpp ..\..\backends\imgui_impl_sdl2.cpp ..\..\backends\imgui_impl_vulkan.cpp ..\..\imgui*.cpp
|
|
||||||
@set LIBS=/LIBPATH:%SDL2_DIR%\lib\x86 /libpath:%VULKAN_SDK%\lib32 SDL2.lib SDL2main.lib shell32.lib vulkan-1.lib
|
|
||||||
|
|
||||||
@set OUT_DIR=Debug
|
|
||||||
mkdir %OUT_DIR%
|
|
||||||
cl /nologo /Zi /MD /utf-8 %INCLUDES% %SOURCES% /Fe%OUT_DIR%/%OUT_EXE%.exe /Fo%OUT_DIR%/ /link %LIBS% /subsystem:console
|
|
||||||
|
|
||||||
@set OUT_DIR=Release
|
|
||||||
@REM mkdir %OUT_DIR%
|
|
||||||
@REM cl /nologo /Zi /MD /utf-8 /Ox /Oi %INCLUDES% %SOURCES% /Fe%OUT_DIR%/%OUT_EXE%.exe /Fo%OUT_DIR%/ /link %LIBS% /subsystem:console
|
|
||||||
@ -1,14 +0,0 @@
|
|||||||
@REM Build for Visual Studio compiler. Run your copy of vcvars64.bat or vcvarsall.bat to setup command-line compiler.
|
|
||||||
|
|
||||||
@set OUT_EXE=example_sdl2_vulkan
|
|
||||||
@set INCLUDES=/I..\.. /I..\..\backends /I%SDL2_DIR%\include /I %VULKAN_SDK%\include
|
|
||||||
@set SOURCES=main.cpp ..\..\backends\imgui_impl_sdl2.cpp ..\..\backends\imgui_impl_vulkan.cpp ..\..\imgui*.cpp
|
|
||||||
@set LIBS=/LIBPATH:%SDL2_DIR%\lib\x64 /libpath:%VULKAN_SDK%\lib SDL2.lib SDL2main.lib shell32.lib vulkan-1.lib
|
|
||||||
|
|
||||||
@set OUT_DIR=Debug
|
|
||||||
mkdir %OUT_DIR%
|
|
||||||
cl /nologo /Zi /MD /utf-8 %INCLUDES% %SOURCES% /Fe%OUT_DIR%/%OUT_EXE%.exe /Fo%OUT_DIR%/ /link %LIBS% /subsystem:console
|
|
||||||
|
|
||||||
@set OUT_DIR=Release
|
|
||||||
@REM mkdir %OUT_DIR%
|
|
||||||
@REM cl /nologo /Zi /MD /utf-8 /Ox /Oi %INCLUDES% %SOURCES% /Fe%OUT_DIR%/%OUT_EXE%.exe /Fo%OUT_DIR%/ /link %LIBS% /subsystem:console
|
|
||||||
23
examples/example_sdl3_directx11/build_win.bat
Normal file
23
examples/example_sdl3_directx11/build_win.bat
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
@REM Build for Visual Studio compiler. First run vcvars32.bat (x86) or vcvars64.bat (x64).
|
||||||
|
|
||||||
|
@REM Detect target architecture (VS 2015 uses Platform, unset for native x86; VS 2017+ uses VSCMD_ARG_TGT_ARCH).
|
||||||
|
@set TARGET_ARCH=%VSCMD_ARG_TGT_ARCH%
|
||||||
|
@if not defined TARGET_ARCH if "%VisualStudioVersion%"=="14.0" (set TARGET_ARCH=x86& if defined Platform set TARGET_ARCH=%Platform%)
|
||||||
|
@if /I "%TARGET_ARCH%"=="x86" goto arch_ok
|
||||||
|
@if /I "%TARGET_ARCH%"=="x64" goto arch_ok
|
||||||
|
@if /I "%TARGET_ARCH%"=="arm64" goto arch_ok
|
||||||
|
@echo Unsupported or uninitialized compiler environment. First run vcvars32.bat (x86) or vcvars64.bat (x64).
|
||||||
|
@exit /b 1
|
||||||
|
|
||||||
|
:arch_ok
|
||||||
|
@set OUT_EXE=example_sdl3_directx11
|
||||||
|
@set INCLUDES=/I..\.. /I..\..\backends /I%SDL3_DIR%\include /I "%WindowsSdkDir%Include\um" /I "%WindowsSdkDir%Include\shared"
|
||||||
|
@set SOURCES=main.cpp ..\..\backends\imgui_impl_sdl3.cpp ..\..\backends\imgui_impl_dx11.cpp ..\..\imgui*.cpp
|
||||||
|
@set LIBS=SDL3.lib d3d11.lib d3dcompiler.lib shell32.lib
|
||||||
|
@if /I "%TARGET_ARCH%"=="x86" set LIBS=%LIBS% /LIBPATH:%SDL3_DIR%\lib\x86
|
||||||
|
@if /I "%TARGET_ARCH%"=="x64" set LIBS=%LIBS% /LIBPATH:%SDL3_DIR%\lib\x64
|
||||||
|
@if /I "%TARGET_ARCH%"=="arm64" set LIBS=%LIBS% /LIBPATH:%SDL3_DIR%\lib\arm64
|
||||||
|
|
||||||
|
@set OUT_DIR=Debug
|
||||||
|
mkdir %OUT_DIR%
|
||||||
|
cl /nologo /Zi /MD /utf-8 %INCLUDES% %SOURCES% /Fe%OUT_DIR%/%OUT_EXE%.exe /Fo%OUT_DIR%/ /link %LIBS% /subsystem:console
|
||||||
@ -1,8 +0,0 @@
|
|||||||
@REM Build for Visual Studio compiler. Run your copy of vcvars32.bat or vcvarsall.bat to setup command-line compiler.
|
|
||||||
@set OUT_DIR=Debug
|
|
||||||
@set OUT_EXE=example_sdl3_directx11
|
|
||||||
@set INCLUDES=/I..\.. /I..\..\backends /I%SDL3_DIR%\include /I "%WindowsSdkDir%Include\um" /I "%WindowsSdkDir%Include\shared" /I "%DXSDK_DIR%Include"
|
|
||||||
@set SOURCES=main.cpp ..\..\backends\imgui_impl_sdl3.cpp ..\..\backends\imgui_impl_dx11.cpp ..\..\imgui*.cpp
|
|
||||||
@set LIBS=/LIBPATH:%SDL3_DIR%\lib\x86 SDL3.lib /LIBPATH:"%DXSDK_DIR%/Lib/x86" d3d11.lib d3dcompiler.lib shell32.lib
|
|
||||||
mkdir %OUT_DIR%
|
|
||||||
cl /nologo /Zi /MD /utf-8 %INCLUDES% %SOURCES% /Fe%OUT_DIR%/%OUT_EXE%.exe /Fo%OUT_DIR%/ /link %LIBS% /subsystem:console
|
|
||||||
@ -97,7 +97,7 @@
|
|||||||
</ClCompile>
|
</ClCompile>
|
||||||
<Link>
|
<Link>
|
||||||
<GenerateDebugInformation>true</GenerateDebugInformation>
|
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||||
<AdditionalLibraryDirectories>%SDL3_DIR%\lib\x86;$(DXSDK_DIR)/Lib/x86;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
|
<AdditionalLibraryDirectories>%SDL3_DIR%\lib\x86;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
|
||||||
<AdditionalDependencies>SDL3.lib;d3d11.lib;d3dcompiler.lib;dxgi.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
<AdditionalDependencies>SDL3.lib;d3d11.lib;d3dcompiler.lib;dxgi.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
||||||
<SubSystem>Console</SubSystem>
|
<SubSystem>Console</SubSystem>
|
||||||
<IgnoreSpecificDefaultLibraries>msvcrt.lib</IgnoreSpecificDefaultLibraries>
|
<IgnoreSpecificDefaultLibraries>msvcrt.lib</IgnoreSpecificDefaultLibraries>
|
||||||
@ -113,7 +113,7 @@
|
|||||||
</ClCompile>
|
</ClCompile>
|
||||||
<Link>
|
<Link>
|
||||||
<GenerateDebugInformation>true</GenerateDebugInformation>
|
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||||
<AdditionalLibraryDirectories>%SDL3_DIR%\lib\x64;$(DXSDK_DIR)/Lib/x64;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
|
<AdditionalLibraryDirectories>%SDL3_DIR%\lib\x64;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
|
||||||
<AdditionalDependencies>SDL3.lib;d3d11.lib;d3dcompiler.lib;dxgi.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
<AdditionalDependencies>SDL3.lib;d3d11.lib;d3dcompiler.lib;dxgi.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
||||||
<SubSystem>Console</SubSystem>
|
<SubSystem>Console</SubSystem>
|
||||||
<IgnoreSpecificDefaultLibraries>msvcrt.lib</IgnoreSpecificDefaultLibraries>
|
<IgnoreSpecificDefaultLibraries>msvcrt.lib</IgnoreSpecificDefaultLibraries>
|
||||||
@ -133,7 +133,7 @@
|
|||||||
<GenerateDebugInformation>true</GenerateDebugInformation>
|
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||||
<EnableCOMDATFolding>true</EnableCOMDATFolding>
|
<EnableCOMDATFolding>true</EnableCOMDATFolding>
|
||||||
<OptimizeReferences>true</OptimizeReferences>
|
<OptimizeReferences>true</OptimizeReferences>
|
||||||
<AdditionalLibraryDirectories>%SDL3_DIR%\lib\x86;$(DXSDK_DIR)/Lib/x86;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
|
<AdditionalLibraryDirectories>%SDL3_DIR%\lib\x86;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
|
||||||
<AdditionalDependencies>SDL3.lib;d3d11.lib;d3dcompiler.lib;dxgi.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
<AdditionalDependencies>SDL3.lib;d3d11.lib;d3dcompiler.lib;dxgi.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
||||||
<SubSystem>Console</SubSystem>
|
<SubSystem>Console</SubSystem>
|
||||||
<IgnoreSpecificDefaultLibraries>
|
<IgnoreSpecificDefaultLibraries>
|
||||||
@ -154,7 +154,7 @@
|
|||||||
<GenerateDebugInformation>true</GenerateDebugInformation>
|
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||||
<EnableCOMDATFolding>true</EnableCOMDATFolding>
|
<EnableCOMDATFolding>true</EnableCOMDATFolding>
|
||||||
<OptimizeReferences>true</OptimizeReferences>
|
<OptimizeReferences>true</OptimizeReferences>
|
||||||
<AdditionalLibraryDirectories>%SDL3_DIR%\lib\x64;$(DXSDK_DIR)/Lib/x64;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
|
<AdditionalLibraryDirectories>%SDL3_DIR%\lib\x64;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
|
||||||
<AdditionalDependencies>SDL3.lib;d3d11.lib;d3dcompiler.lib;dxgi.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
<AdditionalDependencies>SDL3.lib;d3d11.lib;d3dcompiler.lib;dxgi.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
||||||
<SubSystem>Console</SubSystem>
|
<SubSystem>Console</SubSystem>
|
||||||
<IgnoreSpecificDefaultLibraries>
|
<IgnoreSpecificDefaultLibraries>
|
||||||
|
|||||||
@ -7,7 +7,7 @@ Use the provided project file (.vcxproj). Add to solution (imgui_examples.sln) i
|
|||||||
|
|
||||||
## Windows with Visual Studio's CLI
|
## Windows with Visual Studio's CLI
|
||||||
|
|
||||||
Use build_win32.bat or directly:
|
Use build_win.bat or directly:
|
||||||
```
|
```
|
||||||
set SDL3_DIR=path_to_your_sdl3_folder
|
set SDL3_DIR=path_to_your_sdl3_folder
|
||||||
cl /Zi /MD /utf-8 /I.. /I..\.. /I%SDL3_DIR%\include main.cpp ..\..\backends\imgui_impl_sdl3.cpp ..\..\backends\imgui_impl_opengl3.cpp ..\..\imgui*.cpp /FeDebug/example_sdl3_opengl3.exe /FoDebug/ /link /libpath:%SDL3_DIR%\lib\x86 SDL3.lib opengl32.lib /subsystem:console
|
cl /Zi /MD /utf-8 /I.. /I..\.. /I%SDL3_DIR%\include main.cpp ..\..\backends\imgui_impl_sdl3.cpp ..\..\backends\imgui_impl_opengl3.cpp ..\..\imgui*.cpp /FeDebug/example_sdl3_opengl3.exe /FoDebug/ /link /libpath:%SDL3_DIR%\lib\x86 SDL3.lib opengl32.lib /subsystem:console
|
||||||
|
|||||||
27
examples/example_sdl3_opengl3/build_win.bat
Normal file
27
examples/example_sdl3_opengl3/build_win.bat
Normal file
@ -0,0 +1,27 @@
|
|||||||
|
@REM Build for Visual Studio compiler. First run vcvars32.bat (x86) or vcvars64.bat (x64).
|
||||||
|
|
||||||
|
@REM Detect target architecture (VS 2015 uses Platform, unset for native x86; VS 2017+ uses VSCMD_ARG_TGT_ARCH).
|
||||||
|
@set TARGET_ARCH=%VSCMD_ARG_TGT_ARCH%
|
||||||
|
@if not defined TARGET_ARCH if "%VisualStudioVersion%"=="14.0" (set TARGET_ARCH=x86& if defined Platform set TARGET_ARCH=%Platform%)
|
||||||
|
@if /I "%TARGET_ARCH%"=="x86" goto arch_ok
|
||||||
|
@if /I "%TARGET_ARCH%"=="x64" goto arch_ok
|
||||||
|
@if /I "%TARGET_ARCH%"=="arm64" goto arch_ok
|
||||||
|
@echo Unsupported or uninitialized compiler environment. First run vcvars32.bat (x86) or vcvars64.bat (x64).
|
||||||
|
@exit /b 1
|
||||||
|
|
||||||
|
:arch_ok
|
||||||
|
@set OUT_EXE=example_sdl3_opengl3
|
||||||
|
@set INCLUDES=/I..\.. /I..\..\backends /I%SDL3_DIR%\include
|
||||||
|
@set SOURCES=main.cpp ..\..\backends\imgui_impl_sdl3.cpp ..\..\backends\imgui_impl_opengl3.cpp ..\..\imgui*.cpp
|
||||||
|
@set LIBS=SDL3.lib opengl32.lib shell32.lib
|
||||||
|
@if /I "%TARGET_ARCH%"=="x86" set LIBS=%LIBS% /LIBPATH:%SDL3_DIR%\lib\x86
|
||||||
|
@if /I "%TARGET_ARCH%"=="x64" set LIBS=%LIBS% /LIBPATH:%SDL3_DIR%\lib\x64
|
||||||
|
@if /I "%TARGET_ARCH%"=="arm64" set LIBS=%LIBS% /LIBPATH:%SDL3_DIR%\lib\arm64
|
||||||
|
|
||||||
|
@set OUT_DIR=Debug
|
||||||
|
mkdir %OUT_DIR%
|
||||||
|
cl /nologo /Zi /MD /utf-8 %INCLUDES% %SOURCES% /Fe%OUT_DIR%/%OUT_EXE%.exe /Fo%OUT_DIR%/ /link %LIBS% /subsystem:console
|
||||||
|
|
||||||
|
@set OUT_DIR=Release
|
||||||
|
@REM mkdir %OUT_DIR%
|
||||||
|
@REM cl /nologo /Zi /MD /utf-8 /Ox /Oi %INCLUDES% %SOURCES% /Fe%OUT_DIR%/%OUT_EXE%.exe /Fo%OUT_DIR%/ /link %LIBS% /subsystem:console
|
||||||
@ -1,14 +0,0 @@
|
|||||||
@REM Build for Visual Studio compiler. Run your copy of vcvars32.bat or vcvarsall.bat to setup command-line compiler.
|
|
||||||
|
|
||||||
@set OUT_EXE=example_sdl3_opengl3
|
|
||||||
@set INCLUDES=/I..\.. /I..\..\backends /I%SDL3_DIR%\include
|
|
||||||
@set SOURCES=main.cpp ..\..\backends\imgui_impl_sdl3.cpp ..\..\backends\imgui_impl_opengl3.cpp ..\..\imgui*.cpp
|
|
||||||
@set LIBS=/LIBPATH:%SDL3_DIR%\lib\x86 SDL3.lib opengl32.lib shell32.lib
|
|
||||||
|
|
||||||
@set OUT_DIR=Debug
|
|
||||||
mkdir %OUT_DIR%
|
|
||||||
cl /nologo /Zi /MD /utf-8 %INCLUDES% %SOURCES% /Fe%OUT_DIR%/%OUT_EXE%.exe /Fo%OUT_DIR%/ /link %LIBS% /subsystem:console
|
|
||||||
|
|
||||||
@set OUT_DIR=Release
|
|
||||||
@REM mkdir %OUT_DIR%
|
|
||||||
@REM cl /nologo /Zi /MD /utf-8 /Ox /Oi %INCLUDES% %SOURCES% /Fe%OUT_DIR%/%OUT_EXE%.exe /Fo%OUT_DIR%/ /link %LIBS% /subsystem:console
|
|
||||||
@ -1,14 +0,0 @@
|
|||||||
@REM Build for Visual Studio compiler. Run your copy of vcvars64.bat or vcvarsall.bat to setup command-line compiler.
|
|
||||||
|
|
||||||
@set OUT_EXE=example_sdl3_opengl3
|
|
||||||
@set INCLUDES=/I..\.. /I..\..\backends /I%SDL3_DIR%\include
|
|
||||||
@set SOURCES=main.cpp ..\..\backends\imgui_impl_sdl3.cpp ..\..\backends\imgui_impl_opengl3.cpp ..\..\imgui*.cpp
|
|
||||||
@set LIBS=/LIBPATH:%SDL3_DIR%\lib\x64 SDL3.lib opengl32.lib shell32.lib
|
|
||||||
|
|
||||||
@set OUT_DIR=Debug
|
|
||||||
mkdir %OUT_DIR%
|
|
||||||
cl /nologo /Zi /MD /utf-8 %INCLUDES% %SOURCES% /Fe%OUT_DIR%/%OUT_EXE%.exe /Fo%OUT_DIR%/ /link %LIBS% /subsystem:console
|
|
||||||
|
|
||||||
@set OUT_DIR=Release
|
|
||||||
@REM mkdir %OUT_DIR%
|
|
||||||
@REM cl /nologo /Zi /MD /utf-8 /Ox /Oi %INCLUDES% %SOURCES% /Fe%OUT_DIR%/%OUT_EXE%.exe /Fo%OUT_DIR%/ /link %LIBS% /subsystem:console
|
|
||||||
27
examples/example_sdl3_sdlgpu3/build_win.bat
Normal file
27
examples/example_sdl3_sdlgpu3/build_win.bat
Normal file
@ -0,0 +1,27 @@
|
|||||||
|
@REM Build for Visual Studio compiler. First run vcvars32.bat (x86) or vcvars64.bat (x64).
|
||||||
|
|
||||||
|
@REM Detect target architecture (VS 2015 uses Platform, unset for native x86; VS 2017+ uses VSCMD_ARG_TGT_ARCH).
|
||||||
|
@set TARGET_ARCH=%VSCMD_ARG_TGT_ARCH%
|
||||||
|
@if not defined TARGET_ARCH if "%VisualStudioVersion%"=="14.0" (set TARGET_ARCH=x86& if defined Platform set TARGET_ARCH=%Platform%)
|
||||||
|
@if /I "%TARGET_ARCH%"=="x86" goto arch_ok
|
||||||
|
@if /I "%TARGET_ARCH%"=="x64" goto arch_ok
|
||||||
|
@if /I "%TARGET_ARCH%"=="arm64" goto arch_ok
|
||||||
|
@echo Unsupported or uninitialized compiler environment. First run vcvars32.bat (x86) or vcvars64.bat (x64).
|
||||||
|
@exit /b 1
|
||||||
|
|
||||||
|
:arch_ok
|
||||||
|
@set OUT_EXE=example_sdl3_sdlgpu3
|
||||||
|
@set INCLUDES=/I..\.. /I..\..\backends /I%SDL3_DIR%\include
|
||||||
|
@set SOURCES=main.cpp ..\..\backends\imgui_impl_sdl3.cpp ..\..\backends\imgui_impl_sdlgpu3.cpp ..\..\imgui*.cpp
|
||||||
|
@set LIBS=SDL3.lib shell32.lib
|
||||||
|
@if /I "%TARGET_ARCH%"=="x86" set LIBS=%LIBS% /LIBPATH:%SDL3_DIR%\lib\x86
|
||||||
|
@if /I "%TARGET_ARCH%"=="x64" set LIBS=%LIBS% /LIBPATH:%SDL3_DIR%\lib\x64
|
||||||
|
@if /I "%TARGET_ARCH%"=="arm64" set LIBS=%LIBS% /LIBPATH:%SDL3_DIR%\lib\arm64
|
||||||
|
|
||||||
|
@set OUT_DIR=Debug
|
||||||
|
mkdir %OUT_DIR%
|
||||||
|
cl /nologo /Zi /MD /utf-8 %INCLUDES% %SOURCES% /Fe%OUT_DIR%/%OUT_EXE%.exe /Fo%OUT_DIR%/ /link %LIBS% /subsystem:console
|
||||||
|
|
||||||
|
@set OUT_DIR=Release
|
||||||
|
@REM mkdir %OUT_DIR%
|
||||||
|
@REM cl /nologo /Zi /MD /utf-8 /Ox /Oi %INCLUDES% %SOURCES% /Fe%OUT_DIR%/%OUT_EXE%.exe /Fo%OUT_DIR%/ /link %LIBS% /subsystem:console
|
||||||
@ -1,14 +0,0 @@
|
|||||||
@REM Build for Visual Studio compiler. Run your copy of vcvars64.bat or vcvarsall.bat to setup command-line compiler.
|
|
||||||
|
|
||||||
@set OUT_EXE=example_sdl3_sdlgpu3
|
|
||||||
@set INCLUDES=/I..\.. /I..\..\backends /I%SDL3_DIR%\include
|
|
||||||
@set SOURCES=main.cpp ..\..\backends\imgui_impl_sdl3.cpp ..\..\backends\imgui_impl_sdlgpu3.cpp ..\..\imgui*.cpp
|
|
||||||
@set LIBS=/LIBPATH:%SDL3_DIR%\lib\x64 SDL3.lib shell32.lib
|
|
||||||
|
|
||||||
@set OUT_DIR=Debug
|
|
||||||
mkdir %OUT_DIR%
|
|
||||||
cl /nologo /Zi /MD /utf-8 %INCLUDES% %SOURCES% /Fe%OUT_DIR%/%OUT_EXE%.exe /Fo%OUT_DIR%/ /link %LIBS% /subsystem:console
|
|
||||||
|
|
||||||
@set OUT_DIR=Release
|
|
||||||
@REM mkdir %OUT_DIR%
|
|
||||||
@REM cl /nologo /Zi /MD /utf-8 /Ox /Oi %INCLUDES% %SOURCES% /Fe%OUT_DIR%/%OUT_EXE%.exe /Fo%OUT_DIR%/ /link %LIBS% /subsystem:console
|
|
||||||
23
examples/example_sdl3_sdlrenderer3/build_win.bat
Normal file
23
examples/example_sdl3_sdlrenderer3/build_win.bat
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
@REM Build for Visual Studio compiler. First run vcvars32.bat (x86) or vcvars64.bat (x64).
|
||||||
|
|
||||||
|
@REM Detect target architecture (VS 2015 uses Platform, unset for native x86; VS 2017+ uses VSCMD_ARG_TGT_ARCH).
|
||||||
|
@set TARGET_ARCH=%VSCMD_ARG_TGT_ARCH%
|
||||||
|
@if not defined TARGET_ARCH if "%VisualStudioVersion%"=="14.0" (set TARGET_ARCH=x86& if defined Platform set TARGET_ARCH=%Platform%)
|
||||||
|
@if /I "%TARGET_ARCH%"=="x86" goto arch_ok
|
||||||
|
@if /I "%TARGET_ARCH%"=="x64" goto arch_ok
|
||||||
|
@if /I "%TARGET_ARCH%"=="arm64" goto arch_ok
|
||||||
|
@echo Unsupported or uninitialized compiler environment. First run vcvars32.bat (x86) or vcvars64.bat (x64).
|
||||||
|
@exit /b 1
|
||||||
|
|
||||||
|
:arch_ok
|
||||||
|
@set OUT_EXE=example_sdl3_sdlrenderer3
|
||||||
|
@set INCLUDES=/I..\.. /I..\..\backends /I%SDL3_DIR%\include
|
||||||
|
@set SOURCES=main.cpp ..\..\backends\imgui_impl_sdl3.cpp ..\..\backends\imgui_impl_sdlrenderer3.cpp ..\..\imgui*.cpp
|
||||||
|
@set LIBS=SDL3.lib
|
||||||
|
@if /I "%TARGET_ARCH%"=="x86" set LIBS=%LIBS% /LIBPATH:%SDL3_DIR%\lib\x86
|
||||||
|
@if /I "%TARGET_ARCH%"=="x64" set LIBS=%LIBS% /LIBPATH:%SDL3_DIR%\lib\x64
|
||||||
|
@if /I "%TARGET_ARCH%"=="arm64" set LIBS=%LIBS% /LIBPATH:%SDL3_DIR%\lib\arm64
|
||||||
|
|
||||||
|
@set OUT_DIR=Debug
|
||||||
|
mkdir %OUT_DIR%
|
||||||
|
cl /nologo /Zi /MD /utf-8 %INCLUDES% %SOURCES% /Fe%OUT_DIR%/%OUT_EXE%.exe /Fo%OUT_DIR%/ /link %LIBS% /subsystem:console
|
||||||
@ -1,8 +0,0 @@
|
|||||||
@REM Build for Visual Studio compiler. Run your copy of vcvars32.bat or vcvarsall.bat to setup command-line compiler.
|
|
||||||
@set OUT_DIR=Debug
|
|
||||||
@set OUT_EXE=example_sdl3_sdlrenderer3
|
|
||||||
@set INCLUDES=/I..\.. /I..\..\backends /I%SDL3_DIR%\include
|
|
||||||
@set SOURCES=main.cpp ..\..\backends\imgui_impl_sdl3.cpp ..\..\backends\imgui_impl_sdlrenderer3.cpp ..\..\imgui*.cpp
|
|
||||||
@set LIBS=/LIBPATH:%SDL3_DIR%\lib\x86 SDL3.lib
|
|
||||||
mkdir %OUT_DIR%
|
|
||||||
cl /nologo /Zi /MD /utf-8 %INCLUDES% %SOURCES% /Fe%OUT_DIR%/%OUT_EXE%.exe /Fo%OUT_DIR%/ /link %LIBS% /subsystem:console
|
|
||||||
25
examples/example_sdl3_vulkan/build_win.bat
Normal file
25
examples/example_sdl3_vulkan/build_win.bat
Normal file
@ -0,0 +1,25 @@
|
|||||||
|
@REM Build for Visual Studio compiler. First run vcvars32.bat (x86) or vcvars64.bat (x64).
|
||||||
|
|
||||||
|
@REM Detect target architecture (VS 2015 uses Platform, unset for native x86; VS 2017+ uses VSCMD_ARG_TGT_ARCH).
|
||||||
|
@set TARGET_ARCH=%VSCMD_ARG_TGT_ARCH%
|
||||||
|
@if not defined TARGET_ARCH if "%VisualStudioVersion%"=="14.0" (set TARGET_ARCH=x86& if defined Platform set TARGET_ARCH=%Platform%)
|
||||||
|
@if /I "%TARGET_ARCH%"=="x86" goto arch_ok
|
||||||
|
@if /I "%TARGET_ARCH%"=="x64" goto arch_ok
|
||||||
|
@echo Unsupported or uninitialized compiler environment. First run vcvars32.bat (x86) or vcvars64.bat (x64).
|
||||||
|
@exit /b 1
|
||||||
|
|
||||||
|
:arch_ok
|
||||||
|
@set OUT_EXE=example_sdl3_vulkan
|
||||||
|
@set INCLUDES=/I..\.. /I..\..\backends /I%SDL3_DIR%\include /I %VULKAN_SDK%\include
|
||||||
|
@set SOURCES=main.cpp ..\..\backends\imgui_impl_sdl3.cpp ..\..\backends\imgui_impl_vulkan.cpp ..\..\imgui*.cpp
|
||||||
|
@set LIBS=SDL3.lib shell32.lib vulkan-1.lib
|
||||||
|
@if /I "%TARGET_ARCH%"=="x86" set LIBS=%LIBS% /LIBPATH:%SDL3_DIR%\lib\x86 /libpath:%VULKAN_SDK%\lib32
|
||||||
|
@if /I "%TARGET_ARCH%"=="x64" set LIBS=%LIBS% /LIBPATH:%SDL3_DIR%\lib\x64 /libpath:%VULKAN_SDK%\lib
|
||||||
|
|
||||||
|
@set OUT_DIR=Debug
|
||||||
|
mkdir %OUT_DIR%
|
||||||
|
cl /nologo /Zi /MD /utf-8 %INCLUDES% %SOURCES% /Fe%OUT_DIR%/%OUT_EXE%.exe /Fo%OUT_DIR%/ /link %LIBS% /subsystem:console
|
||||||
|
|
||||||
|
@set OUT_DIR=Release
|
||||||
|
@REM mkdir %OUT_DIR%
|
||||||
|
@REM cl /nologo /Zi /MD /utf-8 /Ox /Oi %INCLUDES% %SOURCES% /Fe%OUT_DIR%/%OUT_EXE%.exe /Fo%OUT_DIR%/ /link %LIBS% /subsystem:console
|
||||||
@ -1,14 +0,0 @@
|
|||||||
@REM Build for Visual Studio compiler. Run your copy of vcvars32.bat or vcvarsall.bat to setup command-line compiler.
|
|
||||||
|
|
||||||
@set OUT_EXE=example_sdl3_vulkan
|
|
||||||
@set INCLUDES=/I..\.. /I..\..\backends /I%SDL3_DIR%\include /I %VULKAN_SDK%\include
|
|
||||||
@set SOURCES=main.cpp ..\..\backends\imgui_impl_sdl3.cpp ..\..\backends\imgui_impl_vulkan.cpp ..\..\imgui*.cpp
|
|
||||||
@set LIBS=/LIBPATH:%SDL3_DIR%\lib\x86 /libpath:%VULKAN_SDK%\lib32 SDL3.lib shell32.lib vulkan-1.lib
|
|
||||||
|
|
||||||
@set OUT_DIR=Debug
|
|
||||||
mkdir %OUT_DIR%
|
|
||||||
cl /nologo /Zi /MD /utf-8 %INCLUDES% %SOURCES% /Fe%OUT_DIR%/%OUT_EXE%.exe /Fo%OUT_DIR%/ /link %LIBS% /subsystem:console
|
|
||||||
|
|
||||||
@set OUT_DIR=Release
|
|
||||||
@REM mkdir %OUT_DIR%
|
|
||||||
@REM cl /nologo /Zi /MD /utf-8 /Ox /Oi %INCLUDES% %SOURCES% /Fe%OUT_DIR%/%OUT_EXE%.exe /Fo%OUT_DIR%/ /link %LIBS% /subsystem:console
|
|
||||||
@ -1,14 +0,0 @@
|
|||||||
@REM Build for Visual Studio compiler. Run your copy of vcvars64.bat or vcvarsall.bat to setup command-line compiler.
|
|
||||||
|
|
||||||
@set OUT_EXE=example_sdl3_vulkan
|
|
||||||
@set INCLUDES=/I..\.. /I..\..\backends /I%SDL3_DIR%\include /I %VULKAN_SDK%\include
|
|
||||||
@set SOURCES=main.cpp ..\..\backends\imgui_impl_sdl3.cpp ..\..\backends\imgui_impl_vulkan.cpp ..\..\imgui*.cpp
|
|
||||||
@set LIBS=/LIBPATH:%SDL3_DIR%\lib\x64 /libpath:%VULKAN_SDK%\lib SDL3.lib shell32.lib vulkan-1.lib
|
|
||||||
|
|
||||||
@set OUT_DIR=Debug
|
|
||||||
mkdir %OUT_DIR%
|
|
||||||
cl /nologo /Zi /MD /utf-8 %INCLUDES% %SOURCES% /Fe%OUT_DIR%/%OUT_EXE%.exe /Fo%OUT_DIR%/ /link %LIBS% /subsystem:console
|
|
||||||
|
|
||||||
@set OUT_DIR=Release
|
|
||||||
@REM mkdir %OUT_DIR%
|
|
||||||
@REM cl /nologo /Zi /MD /utf-8 /Ox /Oi %INCLUDES% %SOURCES% /Fe%OUT_DIR%/%OUT_EXE%.exe /Fo%OUT_DIR%/ /link %LIBS% /subsystem:console
|
|
||||||
@ -1,8 +1,8 @@
|
|||||||
@REM Build for Visual Studio compiler. Run your copy of vcvars32.bat or vcvarsall.bat to setup command-line compiler.
|
@REM Build for Visual Studio compiler. Run your copy of vcvars32.bat, vcvars64.bat or vcvarsall.bat to setup command-line compiler.
|
||||||
@set OUT_DIR=Debug
|
@set OUT_DIR=Debug
|
||||||
@set OUT_EXE=example_win32_directx10
|
@set OUT_EXE=example_win32_directx10
|
||||||
@set INCLUDES=/I..\.. /I..\..\backends /I "%WindowsSdkDir%Include\um" /I "%WindowsSdkDir%Include\shared" /I "%DXSDK_DIR%Include"
|
@set INCLUDES=/I..\.. /I..\..\backends /I "%WindowsSdkDir%Include\um" /I "%WindowsSdkDir%Include\shared"
|
||||||
@set SOURCES=main.cpp ..\..\backends\imgui_impl_win32.cpp ..\..\backends\imgui_impl_dx10.cpp ..\..\imgui*.cpp
|
@set SOURCES=main.cpp ..\..\backends\imgui_impl_win32.cpp ..\..\backends\imgui_impl_dx10.cpp ..\..\imgui*.cpp
|
||||||
@set LIBS=/LIBPATH:"%DXSDK_DIR%/Lib/x86" d3d10.lib d3dcompiler.lib
|
@set LIBS=d3d10.lib d3dcompiler.lib
|
||||||
mkdir %OUT_DIR%
|
mkdir %OUT_DIR%
|
||||||
cl /nologo /Zi /MD /utf-8 %INCLUDES% /D UNICODE /D _UNICODE %SOURCES% /Fe%OUT_DIR%/%OUT_EXE%.exe /Fo%OUT_DIR%/ /link %LIBS%
|
cl /nologo /Zi /MD /utf-8 %INCLUDES% /D UNICODE /D _UNICODE %SOURCES% /Fe%OUT_DIR%/%OUT_EXE%.exe /Fo%OUT_DIR%/ /link %LIBS%
|
||||||
@ -93,7 +93,7 @@
|
|||||||
<Link>
|
<Link>
|
||||||
<GenerateDebugInformation>true</GenerateDebugInformation>
|
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||||
<AdditionalDependencies>d3d10.lib;d3dcompiler.lib;dxgi.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
<AdditionalDependencies>d3d10.lib;d3dcompiler.lib;dxgi.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
||||||
<AdditionalLibraryDirectories>$(DXSDK_DIR)/Lib/x86;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
|
<AdditionalLibraryDirectories>%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
|
||||||
<SubSystem>Console</SubSystem>
|
<SubSystem>Console</SubSystem>
|
||||||
</Link>
|
</Link>
|
||||||
</ItemDefinitionGroup>
|
</ItemDefinitionGroup>
|
||||||
@ -108,7 +108,7 @@
|
|||||||
<Link>
|
<Link>
|
||||||
<GenerateDebugInformation>true</GenerateDebugInformation>
|
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||||
<AdditionalDependencies>d3d10.lib;d3dcompiler.lib;dxgi.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
<AdditionalDependencies>d3d10.lib;d3dcompiler.lib;dxgi.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
||||||
<AdditionalLibraryDirectories>$(DXSDK_DIR)/Lib/x64;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
|
<AdditionalLibraryDirectories>%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
|
||||||
<SubSystem>Console</SubSystem>
|
<SubSystem>Console</SubSystem>
|
||||||
</Link>
|
</Link>
|
||||||
</ItemDefinitionGroup>
|
</ItemDefinitionGroup>
|
||||||
@ -127,7 +127,7 @@
|
|||||||
<EnableCOMDATFolding>true</EnableCOMDATFolding>
|
<EnableCOMDATFolding>true</EnableCOMDATFolding>
|
||||||
<OptimizeReferences>true</OptimizeReferences>
|
<OptimizeReferences>true</OptimizeReferences>
|
||||||
<AdditionalDependencies>d3d10.lib;d3dcompiler.lib;dxgi.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
<AdditionalDependencies>d3d10.lib;d3dcompiler.lib;dxgi.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
||||||
<AdditionalLibraryDirectories>$(DXSDK_DIR)/Lib/x86;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
|
<AdditionalLibraryDirectories>%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
|
||||||
<SubSystem>Console</SubSystem>
|
<SubSystem>Console</SubSystem>
|
||||||
</Link>
|
</Link>
|
||||||
</ItemDefinitionGroup>
|
</ItemDefinitionGroup>
|
||||||
@ -146,7 +146,7 @@
|
|||||||
<EnableCOMDATFolding>true</EnableCOMDATFolding>
|
<EnableCOMDATFolding>true</EnableCOMDATFolding>
|
||||||
<OptimizeReferences>true</OptimizeReferences>
|
<OptimizeReferences>true</OptimizeReferences>
|
||||||
<AdditionalDependencies>d3d10.lib;d3dcompiler.lib;dxgi.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
<AdditionalDependencies>d3d10.lib;d3dcompiler.lib;dxgi.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
||||||
<AdditionalLibraryDirectories>$(DXSDK_DIR)/Lib/x64;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
|
<AdditionalLibraryDirectories>%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
|
||||||
<SubSystem>Console</SubSystem>
|
<SubSystem>Console</SubSystem>
|
||||||
</Link>
|
</Link>
|
||||||
</ItemDefinitionGroup>
|
</ItemDefinitionGroup>
|
||||||
|
|||||||
@ -1,9 +1,9 @@
|
|||||||
@REM Build for Visual Studio compiler. Run your copy of vcvars32.bat or vcvarsall.bat to setup command-line compiler.
|
@REM Build for Visual Studio compiler. Run your copy of vcvars32.bat, vcvars64.bat, or vcvarsall.bat to setup command-line compiler.
|
||||||
@set OUT_DIR=Debug
|
@set OUT_DIR=Debug
|
||||||
@set OUT_EXE=example_win32_directx11
|
@set OUT_EXE=example_win32_directx11
|
||||||
@set INCLUDES=/I..\.. /I..\..\backends /I "%WindowsSdkDir%Include\um" /I "%WindowsSdkDir%Include\shared" /I "%DXSDK_DIR%Include"
|
@set INCLUDES=/I..\.. /I..\..\backends /I "%WindowsSdkDir%Include\um" /I "%WindowsSdkDir%Include\shared"
|
||||||
@set SOURCES=main.cpp ..\..\backends\imgui_impl_dx11.cpp ..\..\backends\imgui_impl_win32.cpp ..\..\imgui*.cpp
|
@set SOURCES=main.cpp ..\..\backends\imgui_impl_dx11.cpp ..\..\backends\imgui_impl_win32.cpp ..\..\imgui*.cpp
|
||||||
@set LIBS=/LIBPATH:"%DXSDK_DIR%/Lib/x86" d3d11.lib d3dcompiler.lib
|
@set LIBS=d3d11.lib d3dcompiler.lib
|
||||||
mkdir %OUT_DIR%
|
mkdir %OUT_DIR%
|
||||||
cl /nologo /Zi /MD /utf-8 %INCLUDES% /D UNICODE /D _UNICODE %SOURCES% /Fe%OUT_DIR%/%OUT_EXE%.exe /Fo%OUT_DIR%/ /link %LIBS%
|
cl /nologo /Zi /MD /utf-8 %INCLUDES% /D UNICODE /D _UNICODE %SOURCES% /Fe%OUT_DIR%/%OUT_EXE%.exe /Fo%OUT_DIR%/ /link %LIBS%
|
||||||
|
|
||||||
@ -93,7 +93,7 @@
|
|||||||
<Link>
|
<Link>
|
||||||
<GenerateDebugInformation>true</GenerateDebugInformation>
|
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||||
<AdditionalDependencies>d3d11.lib;d3dcompiler.lib;dxgi.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
<AdditionalDependencies>d3d11.lib;d3dcompiler.lib;dxgi.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
||||||
<AdditionalLibraryDirectories>$(DXSDK_DIR)/Lib/x86;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
|
<AdditionalLibraryDirectories>%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
|
||||||
<SubSystem>Console</SubSystem>
|
<SubSystem>Console</SubSystem>
|
||||||
</Link>
|
</Link>
|
||||||
</ItemDefinitionGroup>
|
</ItemDefinitionGroup>
|
||||||
@ -108,7 +108,7 @@
|
|||||||
<Link>
|
<Link>
|
||||||
<GenerateDebugInformation>true</GenerateDebugInformation>
|
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||||
<AdditionalDependencies>d3d11.lib;d3dcompiler.lib;dxgi.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
<AdditionalDependencies>d3d11.lib;d3dcompiler.lib;dxgi.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
||||||
<AdditionalLibraryDirectories>$(DXSDK_DIR)/Lib/x64;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
|
<AdditionalLibraryDirectories>%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
|
||||||
<SubSystem>Console</SubSystem>
|
<SubSystem>Console</SubSystem>
|
||||||
</Link>
|
</Link>
|
||||||
</ItemDefinitionGroup>
|
</ItemDefinitionGroup>
|
||||||
@ -127,7 +127,7 @@
|
|||||||
<EnableCOMDATFolding>true</EnableCOMDATFolding>
|
<EnableCOMDATFolding>true</EnableCOMDATFolding>
|
||||||
<OptimizeReferences>true</OptimizeReferences>
|
<OptimizeReferences>true</OptimizeReferences>
|
||||||
<AdditionalDependencies>d3d11.lib;d3dcompiler.lib;dxgi.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
<AdditionalDependencies>d3d11.lib;d3dcompiler.lib;dxgi.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
||||||
<AdditionalLibraryDirectories>$(DXSDK_DIR)/Lib/x86;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
|
<AdditionalLibraryDirectories>%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
|
||||||
<SubSystem>Console</SubSystem>
|
<SubSystem>Console</SubSystem>
|
||||||
</Link>
|
</Link>
|
||||||
</ItemDefinitionGroup>
|
</ItemDefinitionGroup>
|
||||||
@ -146,7 +146,7 @@
|
|||||||
<EnableCOMDATFolding>true</EnableCOMDATFolding>
|
<EnableCOMDATFolding>true</EnableCOMDATFolding>
|
||||||
<OptimizeReferences>true</OptimizeReferences>
|
<OptimizeReferences>true</OptimizeReferences>
|
||||||
<AdditionalDependencies>d3d11.lib;d3dcompiler.lib;dxgi.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
<AdditionalDependencies>d3d11.lib;d3dcompiler.lib;dxgi.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
||||||
<AdditionalLibraryDirectories>$(DXSDK_DIR)/Lib/x64;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
|
<AdditionalLibraryDirectories>%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
|
||||||
<SubSystem>Console</SubSystem>
|
<SubSystem>Console</SubSystem>
|
||||||
</Link>
|
</Link>
|
||||||
</ItemDefinitionGroup>
|
</ItemDefinitionGroup>
|
||||||
|
|||||||
@ -1,4 +1,4 @@
|
|||||||
@REM Build for Visual Studio compiler. Run your copy of vcvars32.bat or vcvarsall.bat to setup command-line compiler.
|
@REM Build for Visual Studio compiler. Run your copy of vcvars32.bat, vcvars64.bat, or vcvarsall.bat to setup command-line compiler.
|
||||||
@set OUT_DIR=Debug
|
@set OUT_DIR=Debug
|
||||||
@set OUT_EXE=example_win32_directx12
|
@set OUT_EXE=example_win32_directx12
|
||||||
@set INCLUDES=/I..\.. /I..\..\backends /I "%WindowsSdkDir%Include\um" /I "%WindowsSdkDir%Include\shared"
|
@set INCLUDES=/I..\.. /I..\..\backends /I "%WindowsSdkDir%Include\um" /I "%WindowsSdkDir%Include\shared"
|
||||||
21
examples/example_win32_directx9/build_win.bat
Normal file
21
examples/example_win32_directx9/build_win.bat
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
@REM Build for Visual Studio compiler. First run vcvars32.bat (x86) or vcvars64.bat (x64).
|
||||||
|
|
||||||
|
@REM Detect target architecture (VS 2015 uses Platform, unset for native x86; VS 2017+ uses VSCMD_ARG_TGT_ARCH).
|
||||||
|
@set TARGET_ARCH=%VSCMD_ARG_TGT_ARCH%
|
||||||
|
@if not defined TARGET_ARCH if "%VisualStudioVersion%"=="14.0" (set TARGET_ARCH=x86& if defined Platform set TARGET_ARCH=%Platform%)
|
||||||
|
@if /I "%TARGET_ARCH%"=="x86" goto arch_ok
|
||||||
|
@if /I "%TARGET_ARCH%"=="x64" goto arch_ok
|
||||||
|
@echo Unsupported or uninitialized compiler environment. First run vcvars32.bat (x86) or vcvars64.bat (x64).
|
||||||
|
@exit /b 1
|
||||||
|
|
||||||
|
:arch_ok
|
||||||
|
@set OUT_EXE=example_win32_directx9
|
||||||
|
@set INCLUDES=/I..\.. /I..\..\backends /I "%DXSDK_DIR%/Include"
|
||||||
|
@set SOURCES=main.cpp ..\..\backends\imgui_impl_dx9.cpp ..\..\backends\imgui_impl_win32.cpp ..\..\imgui*.cpp
|
||||||
|
@set LIBS=d3d9.lib
|
||||||
|
@if /I "%TARGET_ARCH%"=="x86" set LIBS=%LIBS% /LIBPATH:"%DXSDK_DIR%/Lib/x86"
|
||||||
|
@if /I "%TARGET_ARCH%"=="x64" set LIBS=%LIBS% /LIBPATH:"%DXSDK_DIR%/Lib/x64"
|
||||||
|
|
||||||
|
@set OUT_DIR=Debug
|
||||||
|
mkdir %OUT_DIR%
|
||||||
|
cl /nologo /Zi /MD /utf-8 %INCLUDES% /D UNICODE /D _UNICODE %SOURCES% /Fe%OUT_DIR%/%OUT_EXE%.exe /Fo%OUT_DIR%/ /link %LIBS%
|
||||||
@ -1,8 +0,0 @@
|
|||||||
@REM Build for Visual Studio compiler. Run your copy of vcvars32.bat or vcvarsall.bat to setup command-line compiler.
|
|
||||||
@set OUT_DIR=Debug
|
|
||||||
@set OUT_EXE=example_win32_directx9
|
|
||||||
@set INCLUDES=/I..\.. /I..\..\backends /I "%DXSDK_DIR%/Include"
|
|
||||||
@set SOURCES=main.cpp ..\..\backends\imgui_impl_dx9.cpp ..\..\backends\imgui_impl_win32.cpp ..\..\imgui*.cpp
|
|
||||||
@set LIBS=/LIBPATH:"%DXSDK_DIR%/Lib/x86" d3d9.lib
|
|
||||||
mkdir %OUT_DIR%
|
|
||||||
cl /nologo /Zi /MD /utf-8 %INCLUDES% /D UNICODE /D _UNICODE %SOURCES% /Fe%OUT_DIR%/%OUT_EXE%.exe /Fo%OUT_DIR%/ /link %LIBS%
|
|
||||||
@ -1,4 +1,4 @@
|
|||||||
@REM Build for Visual Studio compiler. Run your copy of vcvars32.bat or vcvarsall.bat to setup command-line compiler.
|
@REM Build for Visual Studio compiler. Run your copy of vcvars32.bat, vcvars64.bat or vcvarsall.bat to setup command-line compiler.
|
||||||
@set OUT_DIR=Debug
|
@set OUT_DIR=Debug
|
||||||
@set OUT_EXE=example_win32_opengl3
|
@set OUT_EXE=example_win32_opengl3
|
||||||
@set INCLUDES=/I..\.. /I..\..\backends
|
@set INCLUDES=/I..\.. /I..\..\backends
|
||||||
21
examples/example_win32_vulkan/build_win.bat
Normal file
21
examples/example_win32_vulkan/build_win.bat
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
@REM Build for Visual Studio compiler. First run vcvars32.bat (x86) or vcvars64.bat (x64).
|
||||||
|
|
||||||
|
@REM Detect target architecture (VS 2015 uses Platform, unset for native x86; VS 2017+ uses VSCMD_ARG_TGT_ARCH).
|
||||||
|
@set TARGET_ARCH=%VSCMD_ARG_TGT_ARCH%
|
||||||
|
@if not defined TARGET_ARCH if "%VisualStudioVersion%"=="14.0" (set TARGET_ARCH=x86& if defined Platform set TARGET_ARCH=%Platform%)
|
||||||
|
@if /I "%TARGET_ARCH%"=="x86" goto arch_ok
|
||||||
|
@if /I "%TARGET_ARCH%"=="x64" goto arch_ok
|
||||||
|
@echo Unsupported or uninitialized compiler environment. First run vcvars32.bat (x86) or vcvars64.bat (x64).
|
||||||
|
@exit /b 1
|
||||||
|
|
||||||
|
:arch_ok
|
||||||
|
@set OUT_EXE=example_win32_vulkan
|
||||||
|
@set INCLUDES=/I..\.. /I..\..\backends /I "%WindowsSdkDir%Include\um" /I "%WindowsSdkDir%Include\shared" /I %VULKAN_SDK%\include
|
||||||
|
@set SOURCES=main.cpp ..\..\backends\imgui_impl_vulkan.cpp ..\..\backends\imgui_impl_win32.cpp ..\..\imgui*.cpp
|
||||||
|
@set LIBS=vulkan-1.lib
|
||||||
|
@if /I "%TARGET_ARCH%"=="x86" set LIBS=%LIBS% /libpath:%VULKAN_SDK%\lib32
|
||||||
|
@if /I "%TARGET_ARCH%"=="x64" set LIBS=%LIBS% /libpath:%VULKAN_SDK%\lib
|
||||||
|
|
||||||
|
@set OUT_DIR=Debug
|
||||||
|
mkdir %OUT_DIR%
|
||||||
|
cl /nologo /Zi /MD /utf-8 %INCLUDES% /D UNICODE /D _UNICODE %SOURCES% /Fe%OUT_DIR%/%OUT_EXE%.exe /Fo%OUT_DIR%/ /link %LIBS%
|
||||||
@ -1,9 +0,0 @@
|
|||||||
@REM Build for Visual Studio compiler. Run your copy of vcvars32.bat or vcvarsall.bat to setup command-line compiler.
|
|
||||||
@set OUT_DIR=Debug
|
|
||||||
@set OUT_EXE=example_win32_vulkan
|
|
||||||
@set INCLUDES=/I..\.. /I..\..\backends /I "%WindowsSdkDir%Include\um" /I "%WindowsSdkDir%Include\shared" /I %VULKAN_SDK%\include
|
|
||||||
@set SOURCES=main.cpp ..\..\backends\imgui_impl_vulkan.cpp ..\..\backends\imgui_impl_win32.cpp ..\..\imgui*.cpp
|
|
||||||
@set LIBS=/libpath:%VULKAN_SDK%\lib32 vulkan-1.lib
|
|
||||||
|
|
||||||
mkdir %OUT_DIR%
|
|
||||||
cl /nologo /Zi /MD /utf-8 %INCLUDES% /D UNICODE /D _UNICODE %SOURCES% /Fe%OUT_DIR%/%OUT_EXE%.exe /Fo%OUT_DIR%/ /link %LIBS%
|
|
||||||
@ -1,9 +0,0 @@
|
|||||||
@REM Build for Visual Studio compiler. Run your copy of vcvars32.bat or vcvarsall.bat to setup command-line compiler.
|
|
||||||
@set OUT_DIR=Debug
|
|
||||||
@set OUT_EXE=example_win32_vulkan
|
|
||||||
@set INCLUDES=/I..\.. /I..\..\backends /I "%WindowsSdkDir%Include\um" /I "%WindowsSdkDir%Include\shared" /I %VULKAN_SDK%\include
|
|
||||||
@set SOURCES=main.cpp ..\..\backends\imgui_impl_vulkan.cpp ..\..\backends\imgui_impl_win32.cpp ..\..\imgui*.cpp
|
|
||||||
@set LIBS=/libpath:%VULKAN_SDK%\lib vulkan-1.lib
|
|
||||||
|
|
||||||
mkdir %OUT_DIR%
|
|
||||||
cl /nologo /Zi /MD /utf-8 %INCLUDES% /D UNICODE /D _UNICODE %SOURCES% /Fe%OUT_DIR%/%OUT_EXE%.exe /Fo%OUT_DIR%/ /link %LIBS%
|
|
||||||
58
imgui.cpp
58
imgui.cpp
@ -1,4 +1,4 @@
|
|||||||
// dear imgui, v1.93.0
|
// dear imgui, v1.93.1 WIP
|
||||||
// (main code and documentation)
|
// (main code and documentation)
|
||||||
|
|
||||||
// Help:
|
// Help:
|
||||||
@ -395,6 +395,19 @@ IMPLEMENTING SUPPORT for ImGuiBackendFlags_RendererHasTextures:
|
|||||||
When you are not sure about an old symbol or function name, try using the Search/Find function of your IDE to look for comments or references in all imgui files.
|
When you are not sure about an old symbol or function name, try using the Search/Find function of your IDE to look for comments or references in all imgui files.
|
||||||
You can read releases logs https://github.com/ocornut/imgui/releases for more details.
|
You can read releases logs https://github.com/ocornut/imgui/releases for more details.
|
||||||
|
|
||||||
|
2026/10/15 (1.93.1) - commented out legacy names/functions which were obsoleted from 1.90.7 (May 2024) to 1.91.1 (Sept 2024):
|
||||||
|
- `ImGuiMod_Shortcut` --> `ImGuiMod_Ctrl` (since 1.90.7 it maps to Cmd on macOS)
|
||||||
|
- `ImGuiCol_TabActive` --> `ImGuiCol_TabSelected`
|
||||||
|
- `ImGuiCol_TabUnfocused` --> `ImGuiCol_TabDimmed`
|
||||||
|
- `ImGuiCol_TabUnfocusedActive` --> `ImGuiCol_TabDimmedSelected`
|
||||||
|
- `ImGuiSelectableFlags_DontClosePopups`-> `ImGuiSelectableFlags_NoAutoClosePopups`
|
||||||
|
- `PushButtonRepeat(bool repeat)` --> `PushItemFlag(ImGuiItemFlags_ButtonRepeat, repeat)`
|
||||||
|
- `PopButtonRepeat()` --> `PopItemFlag()`
|
||||||
|
- `PushTabStop(bool tab_stop)` --> `PushItemFlag(ImGuiItemFlags_NoTabStop, !tab_stop);`
|
||||||
|
- `PopTabStop()` --> `PopItemFlag()`
|
||||||
|
- `io.GetClipboardTextFn` --> `platform_io.Platform_GetClipboardTextFn`
|
||||||
|
- `io.SetClipboardTextFn` --> `platform_io.Platform_SetClipboardTextFn`
|
||||||
|
- `io.ClipboardUserData` --> `platform_io.Platform_ClipboardUserData`
|
||||||
2026/10/07 (1.93.0) - large cleanup/refactor of ImDrawList. many issues and inconsistencies fixed! (#9504)
|
2026/10/07 (1.93.0) - large cleanup/refactor of ImDrawList. many issues and inconsistencies fixed! (#9504)
|
||||||
BELOW IS A SIMPLIFIED/SHORTENED RECAP OF CHANGES. READ CHANGELOG AND LINKS ABOVE FOR MORE DETAILS!
|
BELOW IS A SIMPLIFIED/SHORTENED RECAP OF CHANGES. READ CHANGELOG AND LINKS ABOVE FOR MORE DETAILS!
|
||||||
useful links:
|
useful links:
|
||||||
@ -1615,6 +1628,10 @@ ImGuiStyle::ImGuiStyle()
|
|||||||
DisplaySafeAreaPadding = ImVec2(3,3); // If you cannot see the edge of your screen (e.g. on a TV) increase the safe area padding. Covers popups/tooltips as well regular windows.
|
DisplaySafeAreaPadding = ImVec2(3,3); // If you cannot see the edge of your screen (e.g. on a TV) increase the safe area padding. Covers popups/tooltips as well regular windows.
|
||||||
MouseCursorScale = 1.0f; // Scale software rendered mouse cursor (when io.MouseDrawCursor is enabled). May be removed later.
|
MouseCursorScale = 1.0f; // Scale software rendered mouse cursor (when io.MouseDrawCursor is enabled). May be removed later.
|
||||||
|
|
||||||
|
// Symbols
|
||||||
|
SymbolArrowSizeFactor = ImVec2(0.72f,0.40f); // Width/height factor of arrows (0.0f..1.0f). Legacy arrows use (0.60f,0.70f)
|
||||||
|
SymbolArrowThicknessFactor = 0.30f; // Thickness factor of arrows (0.0f..0.5f). 0.0f=Fill. >0.0f=Stroke. Legacy arrows use 0.0f.
|
||||||
|
|
||||||
// Rendering & Tessellation
|
// Rendering & Tessellation
|
||||||
AntiAliasedLines = true; // Enable anti-aliased lines/borders. Used at the beginning of the frame to set ImDrawFlags_AALines in all draw-lists.
|
AntiAliasedLines = true; // Enable anti-aliased lines/borders. Used at the beginning of the frame to set ImDrawFlags_AALines in all draw-lists.
|
||||||
AntiAliasedLineEnds = false; // Enable anti-aliased lines/borders ends. Nicer for thick lines but more expensive. Used at the beginning of the frame to set ImDrawFlags_AALineEnds in all draw-lists.
|
AntiAliasedLineEnds = false; // Enable anti-aliased lines/borders ends. Nicer for thick lines but more expensive. Used at the beginning of the frame to set ImDrawFlags_AALineEnds in all draw-lists.
|
||||||
@ -2252,14 +2269,14 @@ ImVec2 ImTriangleClosestPoint(const ImVec2& a, const ImVec2& b, const ImVec2& c,
|
|||||||
int ImStricmp(const char* str1, const char* str2)
|
int ImStricmp(const char* str1, const char* str2)
|
||||||
{
|
{
|
||||||
int d;
|
int d;
|
||||||
while ((d = ImToUpper(*str2) - ImToUpper(*str1)) == 0 && *str1) { str1++; str2++; }
|
while ((d = ImToUpper(*str1) - ImToUpper(*str2)) == 0 && *str1) { str1++; str2++; }
|
||||||
return d;
|
return d;
|
||||||
}
|
}
|
||||||
|
|
||||||
int ImStrnicmp(const char* str1, const char* str2, size_t count)
|
int ImStrnicmp(const char* str1, const char* str2, size_t count)
|
||||||
{
|
{
|
||||||
int d = 0;
|
int d = 0;
|
||||||
while (count > 0 && (d = ImToUpper(*str2) - ImToUpper(*str1)) == 0 && *str1) { str1++; str2++; count--; }
|
while (count > 0 && (d = ImToUpper(*str1) - ImToUpper(*str2)) == 0 && *str1) { str1++; str2++; count--; }
|
||||||
return d;
|
return d;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -4727,12 +4744,13 @@ void ImGui::RemoveContextHook(ImGuiContext* ctx, ImGuiID hook_id)
|
|||||||
|
|
||||||
// Call context hooks (used by e.g. test engine)
|
// Call context hooks (used by e.g. test engine)
|
||||||
// We assume a small number of hooks so all stored in same array
|
// We assume a small number of hooks so all stored in same array
|
||||||
|
// Iterate by index: a callback may add a hook, which reallocates the array. Hooks added here are called from the next call.
|
||||||
void ImGui::CallContextHooks(ImGuiContext* ctx, ImGuiContextHookType hook_type)
|
void ImGui::CallContextHooks(ImGuiContext* ctx, ImGuiContextHookType hook_type)
|
||||||
{
|
{
|
||||||
ImGuiContext& g = *ctx;
|
ImGuiContext& g = *ctx;
|
||||||
for (ImGuiContextHook& hook : g.Hooks)
|
for (int n = 0, hooks_count = g.Hooks.Size; n < hooks_count; n++)
|
||||||
if (hook.Type == hook_type)
|
if (g.Hooks[n].Type == hook_type)
|
||||||
hook.Callback(&g, &hook);
|
g.Hooks[n].Callback(&g, &g.Hooks[n]);
|
||||||
}
|
}
|
||||||
|
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
@ -6104,7 +6122,8 @@ static void ImGui::RenderDimmedBackgroundBehindWindow(ImGuiWindow* window, ImU32
|
|||||||
if (draw_list->CmdBuffer.Size == 0)
|
if (draw_list->CmdBuffer.Size == 0)
|
||||||
draw_list->AddDrawCmd();
|
draw_list->AddDrawCmd();
|
||||||
draw_list->PushClipRect(viewport_rect.Min - ImVec2(1, 1), viewport_rect.Max + ImVec2(1, 1), false); // FIXME: Need to strictly ensure ImDrawCmd are not merged (ElemCount==6 checks below will verify that)
|
draw_list->PushClipRect(viewport_rect.Min - ImVec2(1, 1), viewport_rect.Max + ImVec2(1, 1), false); // FIXME: Need to strictly ensure ImDrawCmd are not merged (ElemCount==6 checks below will verify that)
|
||||||
draw_list->AddRectFilled(viewport_rect.Min, viewport_rect.Max, col);
|
draw_list->PrimReserve(6, 4);
|
||||||
|
draw_list->PrimRect(viewport_rect.Min, viewport_rect.Max, col);
|
||||||
ImDrawCmd cmd = draw_list->CmdBuffer.back();
|
ImDrawCmd cmd = draw_list->CmdBuffer.back();
|
||||||
IM_ASSERT(cmd.ElemCount == 6);
|
IM_ASSERT(cmd.ElemCount == 6);
|
||||||
draw_list->CmdBuffer.pop_back();
|
draw_list->CmdBuffer.pop_back();
|
||||||
@ -7975,9 +7994,13 @@ bool ImGui::Begin(const char* name, bool* p_open, ImGuiWindowFlags flags)
|
|||||||
window->Pos = parent_window->DC.CursorPos;
|
window->Pos = parent_window->DC.CursorPos;
|
||||||
}
|
}
|
||||||
|
|
||||||
const bool window_pos_with_pivot = (window->SetWindowPosVal.x != FLT_MAX && window->HiddenFramesCannotSkipItems == 0);
|
if (window->SetWindowPosVal.x != FLT_MAX)
|
||||||
if (window_pos_with_pivot)
|
{
|
||||||
|
const ImVec2 backup_pos_val = window->SetWindowPosVal;
|
||||||
SetWindowPos(window, window->SetWindowPosVal - window->Size * window->SetWindowPosPivot, 0); // Position given a pivot (e.g. for centering)
|
SetWindowPos(window, window->SetWindowPosVal - window->Size * window->SetWindowPosPivot, 0); // Position given a pivot (e.g. for centering)
|
||||||
|
if (window->HiddenFramesCannotSkipItems != 0)
|
||||||
|
window->SetWindowPosVal = backup_pos_val; // Restore set request while hidden, so an updated size will be accounted for. (#9568)
|
||||||
|
}
|
||||||
else if ((flags & ImGuiWindowFlags_ChildMenu) != 0)
|
else if ((flags & ImGuiWindowFlags_ChildMenu) != 0)
|
||||||
window->Pos = FindBestWindowPosForPopup(window);
|
window->Pos = FindBestWindowPosForPopup(window);
|
||||||
else if ((flags & ImGuiWindowFlags_Popup) != 0 && !window_pos_set_by_api && window_just_appearing_after_hidden_for_resize)
|
else if ((flags & ImGuiWindowFlags_Popup) != 0 && !window_pos_set_by_api && window_just_appearing_after_hidden_for_resize)
|
||||||
@ -11195,6 +11218,15 @@ static void ImGui::ErrorCheckNewFrameSanityChecks()
|
|||||||
// #define IM_ASSERT(EXPR) do { if (SomeCode(EXPR)) SomeMoreCode(); } while (0) // Correct!
|
// #define IM_ASSERT(EXPR) do { if (SomeCode(EXPR)) SomeMoreCode(); } while (0) // Correct!
|
||||||
if (true) IM_ASSERT(1); else IM_ASSERT(0);
|
if (true) IM_ASSERT(1); else IM_ASSERT(0);
|
||||||
|
|
||||||
|
// Check user IM_VEC2_CLASS_EXTRA macro
|
||||||
|
// (IF YOU GET A "ambiguous overload" COMPILE ERROR HERE: does your IM_VEC2_CLASS_EXTRA macro contains an operator=?
|
||||||
|
// e.g. ImVec2& operator=(const MyPoint & p) { x = p.x; y = p.y; return *this; }
|
||||||
|
// You should be able to remove it if you have the corresponding constructor:
|
||||||
|
// e.g. IM_NODEBUGSTEP constexpr inline ImVec2(const MyPoint& f) : x(f.x), y(f.y) {}
|
||||||
|
// Allowing you to add this extra operator to ImVec2 would prevent our whole codebase from using v = {x,y} assignment style.
|
||||||
|
// PLEASE GET IN TOUCH IF REMOVING THE operator= IS A PROBLEM TO YOU)
|
||||||
|
ImVec2 v; v = { 1.0f, 2.0f };
|
||||||
|
|
||||||
// Emscripten backends are often imprecise in their submission of DeltaTime. (#6114, #3644)
|
// Emscripten backends are often imprecise in their submission of DeltaTime. (#6114, #3644)
|
||||||
// Ideally the Emscripten app/backend should aim to fix or smooth this value and avoid feeding zero, but we tolerate it.
|
// Ideally the Emscripten app/backend should aim to fix or smooth this value and avoid feeding zero, but we tolerate it.
|
||||||
#ifdef __EMSCRIPTEN__
|
#ifdef __EMSCRIPTEN__
|
||||||
@ -11244,10 +11276,10 @@ static void ImGui::ErrorCheckNewFrameSanityChecks()
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Remap legacy clipboard handlers (OBSOLETED in 1.91.1, August 2024)
|
// Remap legacy clipboard handlers (OBSOLETED in 1.91.1, August 2024)
|
||||||
if (g.IO.GetClipboardTextFn != NULL && (g.PlatformIO.Platform_GetClipboardTextFn == NULL || g.PlatformIO.Platform_GetClipboardTextFn == Platform_GetClipboardTextFn_DefaultImpl))
|
//if (g.IO.GetClipboardTextFn != NULL && (g.PlatformIO.Platform_GetClipboardTextFn == NULL || g.PlatformIO.Platform_GetClipboardTextFn == Platform_GetClipboardTextFn_DefaultImpl))
|
||||||
g.PlatformIO.Platform_GetClipboardTextFn = [](ImGuiContext* ctx) { return ctx->IO.GetClipboardTextFn(ctx->IO.ClipboardUserData); };
|
// g.PlatformIO.Platform_GetClipboardTextFn = [](ImGuiContext* ctx) { return ctx->IO.GetClipboardTextFn(ctx->IO.ClipboardUserData); };
|
||||||
if (g.IO.SetClipboardTextFn != NULL && (g.PlatformIO.Platform_SetClipboardTextFn == NULL || g.PlatformIO.Platform_SetClipboardTextFn == Platform_SetClipboardTextFn_DefaultImpl))
|
//if (g.IO.SetClipboardTextFn != NULL && (g.PlatformIO.Platform_SetClipboardTextFn == NULL || g.PlatformIO.Platform_SetClipboardTextFn == Platform_SetClipboardTextFn_DefaultImpl))
|
||||||
g.PlatformIO.Platform_SetClipboardTextFn = [](ImGuiContext* ctx, const char* text) { return ctx->IO.SetClipboardTextFn(ctx->IO.ClipboardUserData, text); };
|
// g.PlatformIO.Platform_SetClipboardTextFn = [](ImGuiContext* ctx, const char* text) { return ctx->IO.SetClipboardTextFn(ctx->IO.ClipboardUserData, text); };
|
||||||
|
|
||||||
// Remap legacy CurveTessellationTol into CurveTessellationMaxError (OBSOLETED in 1.93.0, August 2026)
|
// Remap legacy CurveTessellationTol into CurveTessellationMaxError (OBSOLETED in 1.93.0, August 2026)
|
||||||
if (g.Style.CurveTessellationTol != 0.0f)
|
if (g.Style.CurveTessellationTol != 0.0f)
|
||||||
|
|||||||
44
imgui.h
44
imgui.h
@ -1,4 +1,4 @@
|
|||||||
// dear imgui, v1.93.0
|
// dear imgui, v1.93.1 WIP
|
||||||
// (headers)
|
// (headers)
|
||||||
|
|
||||||
// Help:
|
// Help:
|
||||||
@ -29,8 +29,8 @@
|
|||||||
|
|
||||||
// Library Version
|
// Library Version
|
||||||
// (Integer encoded as XYYZZ for use in #if preprocessor conditionals, e.g. '#if IMGUI_VERSION_NUM >= 12345')
|
// (Integer encoded as XYYZZ for use in #if preprocessor conditionals, e.g. '#if IMGUI_VERSION_NUM >= 12345')
|
||||||
#define IMGUI_VERSION "1.93.0"
|
#define IMGUI_VERSION "1.93.1 WIP"
|
||||||
#define IMGUI_VERSION_NUM 19300
|
#define IMGUI_VERSION_NUM 19302
|
||||||
#define IMGUI_HAS_TABLE // Added BeginTable() - from IMGUI_VERSION_NUM >= 18000
|
#define IMGUI_HAS_TABLE // Added BeginTable() - from IMGUI_VERSION_NUM >= 18000
|
||||||
#define IMGUI_HAS_TEXTURES // Added ImGuiBackendFlags_RendererHasTextures - from IMGUI_VERSION_NUM >= 19198
|
#define IMGUI_HAS_TEXTURES // Added ImGuiBackendFlags_RendererHasTextures - from IMGUI_VERSION_NUM >= 19198
|
||||||
|
|
||||||
@ -130,6 +130,7 @@ Index of this file:
|
|||||||
|
|
||||||
// Alternative to using a .natstepfilter file or other scripts in misc/debuggers/ to skip debug-stepping selected trivial functions.
|
// Alternative to using a .natstepfilter file or other scripts in misc/debuggers/ to skip debug-stepping selected trivial functions.
|
||||||
// If you get a compiler error or warning related to use, please report it to us!
|
// If you get a compiler error or warning related to use, please report it to us!
|
||||||
|
#ifndef IM_NODEBUGSTEP
|
||||||
#if (defined(__clang__) && (__clang_major__ >= 7)) || (defined(__GNUC__) && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 8)))
|
#if (defined(__clang__) && (__clang_major__ >= 7)) || (defined(__GNUC__) && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 8)))
|
||||||
#define IM_NODEBUGSTEP [[gnu::artificial]]
|
#define IM_NODEBUGSTEP [[gnu::artificial]]
|
||||||
#elif defined(_MSC_VER) && (_MSC_VER >= 1915)
|
#elif defined(_MSC_VER) && (_MSC_VER >= 1915)
|
||||||
@ -137,6 +138,7 @@ Index of this file:
|
|||||||
#else
|
#else
|
||||||
#define IM_NODEBUGSTEP
|
#define IM_NODEBUGSTEP
|
||||||
#endif
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
// Warnings
|
// Warnings
|
||||||
#ifdef _MSC_VER
|
#ifdef _MSC_VER
|
||||||
@ -767,7 +769,7 @@ namespace ImGui
|
|||||||
IMGUI_API bool CollapsingHeader(const char* label, bool* p_visible, ImGuiTreeNodeFlags flags = 0); // when 'p_visible != NULL': if '*p_visible==true' display an additional small close button on upper right of the header which will set the bool to false when clicked, if '*p_visible==false' don't display the header.
|
IMGUI_API bool CollapsingHeader(const char* label, bool* p_visible, ImGuiTreeNodeFlags flags = 0); // when 'p_visible != NULL': if '*p_visible==true' display an additional small close button on upper right of the header which will set the bool to false when clicked, if '*p_visible==false' don't display the header.
|
||||||
IMGUI_API void SetNextItemOpen(bool is_open, ImGuiCond cond = 0); // set next TreeNode/CollapsingHeader open state.
|
IMGUI_API void SetNextItemOpen(bool is_open, ImGuiCond cond = 0); // set next TreeNode/CollapsingHeader open state.
|
||||||
IMGUI_API void SetNextItemStorageID(ImGuiID storage_id); // set id to use for open/close storage (default to same as item id).
|
IMGUI_API void SetNextItemStorageID(ImGuiID storage_id); // set id to use for open/close storage (default to same as item id).
|
||||||
IMGUI_API bool TreeNodeGetOpen(ImGuiID storage_id); // retrieve tree node open/close state.
|
IMGUI_API bool TreeNodeGetOpen(ImGuiID storage_id, ImGuiTreeNodeFlags flags = 0); // retrieve tree node open/close state.
|
||||||
|
|
||||||
// Widgets: Selectables
|
// Widgets: Selectables
|
||||||
// - A selectable highlights when hovered, and can display another color when selected.
|
// - A selectable highlights when hovered, and can display another color when selected.
|
||||||
@ -1407,7 +1409,7 @@ enum ImGuiSelectableFlags_
|
|||||||
ImGuiSelectableFlags_SelectOnNav = 1 << 6, // Auto-select when moved into, unless Ctrl is held. Automatic when in a BeginMultiSelect() block.
|
ImGuiSelectableFlags_SelectOnNav = 1 << 6, // Auto-select when moved into, unless Ctrl is held. Automatic when in a BeginMultiSelect() block.
|
||||||
|
|
||||||
#ifndef IMGUI_DISABLE_OBSOLETE_FUNCTIONS
|
#ifndef IMGUI_DISABLE_OBSOLETE_FUNCTIONS
|
||||||
ImGuiSelectableFlags_DontClosePopups = ImGuiSelectableFlags_NoAutoClosePopups, // Renamed in 1.91.0
|
//ImGuiSelectableFlags_DontClosePopups = ImGuiSelectableFlags_NoAutoClosePopups, // Renamed in 1.91.0
|
||||||
//ImGuiSelectableFlags_AllowItemOverlap = ImGuiSelectableFlags_AllowOverlap, // Renamed in 1.89.7
|
//ImGuiSelectableFlags_AllowItemOverlap = ImGuiSelectableFlags_AllowOverlap, // Renamed in 1.89.7
|
||||||
#endif
|
#endif
|
||||||
};
|
};
|
||||||
@ -1710,7 +1712,7 @@ enum ImGuiKey : int
|
|||||||
|
|
||||||
#ifndef IMGUI_DISABLE_OBSOLETE_FUNCTIONS
|
#ifndef IMGUI_DISABLE_OBSOLETE_FUNCTIONS
|
||||||
ImGuiKey_COUNT = ImGuiKey_NamedKey_END, // Obsoleted in 1.91.5 because it was misleading (since named keys don't start at 0 anymore)
|
ImGuiKey_COUNT = ImGuiKey_NamedKey_END, // Obsoleted in 1.91.5 because it was misleading (since named keys don't start at 0 anymore)
|
||||||
ImGuiMod_Shortcut = ImGuiMod_Ctrl, // Removed in 1.90.7, you can now simply use ImGuiMod_Ctrl
|
//ImGuiMod_Shortcut = ImGuiMod_Ctrl, // Removed in 1.90.7, you can now simply use ImGuiMod_Ctrl (will auto map to Cmd on Mac)
|
||||||
//ImGuiKey_ModCtrl = ImGuiMod_Ctrl, ImGuiKey_ModShift = ImGuiMod_Shift, ImGuiKey_ModAlt = ImGuiMod_Alt, ImGuiKey_ModSuper = ImGuiMod_Super, // Renamed in 1.89
|
//ImGuiKey_ModCtrl = ImGuiMod_Ctrl, ImGuiKey_ModShift = ImGuiMod_Shift, ImGuiKey_ModAlt = ImGuiMod_Alt, ImGuiKey_ModSuper = ImGuiMod_Super, // Renamed in 1.89
|
||||||
//ImGuiKey_KeyPadEnter = ImGuiKey_KeypadEnter, // Renamed in 1.87
|
//ImGuiKey_KeyPadEnter = ImGuiKey_KeypadEnter, // Renamed in 1.87
|
||||||
#endif
|
#endif
|
||||||
@ -1839,10 +1841,10 @@ enum ImGuiCol_
|
|||||||
ImGuiCol_COUNT,
|
ImGuiCol_COUNT,
|
||||||
|
|
||||||
#ifndef IMGUI_DISABLE_OBSOLETE_FUNCTIONS
|
#ifndef IMGUI_DISABLE_OBSOLETE_FUNCTIONS
|
||||||
ImGuiCol_TabActive = ImGuiCol_TabSelected, // [renamed in 1.90.9]
|
|
||||||
ImGuiCol_TabUnfocused = ImGuiCol_TabDimmed, // [renamed in 1.90.9]
|
|
||||||
ImGuiCol_TabUnfocusedActive = ImGuiCol_TabDimmedSelected, // [renamed in 1.90.9]
|
|
||||||
ImGuiCol_NavHighlight = ImGuiCol_NavCursor, // [renamed in 1.91.4]
|
ImGuiCol_NavHighlight = ImGuiCol_NavCursor, // [renamed in 1.91.4]
|
||||||
|
//ImGuiCol_TabActive = ImGuiCol_TabSelected, // [renamed in 1.90.9]
|
||||||
|
//ImGuiCol_TabUnfocused = ImGuiCol_TabDimmed, // [renamed in 1.90.9]
|
||||||
|
//ImGuiCol_TabUnfocusedActive = ImGuiCol_TabDimmedSelected, // [renamed in 1.90.9]
|
||||||
#endif
|
#endif
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -2394,6 +2396,10 @@ struct ImGuiStyle
|
|||||||
ImVec2 DisplaySafeAreaPadding; // Apply to every windows, menus, popups, tooltips: amount where we avoid displaying contents. Adjust if you cannot see the edges of your screen (e.g. on a TV where scaling has not been configured).
|
ImVec2 DisplaySafeAreaPadding; // Apply to every windows, menus, popups, tooltips: amount where we avoid displaying contents. Adjust if you cannot see the edges of your screen (e.g. on a TV where scaling has not been configured).
|
||||||
float MouseCursorScale; // Scale software rendered mouse cursor (when io.MouseDrawCursor is enabled). We apply per-monitor DPI scaling over this scale. May be removed later.
|
float MouseCursorScale; // Scale software rendered mouse cursor (when io.MouseDrawCursor is enabled). We apply per-monitor DPI scaling over this scale. May be removed later.
|
||||||
|
|
||||||
|
// Symbols
|
||||||
|
ImVec2 SymbolArrowSizeFactor; // Width/height factor of arrows (0.0f..1.0f).
|
||||||
|
float SymbolArrowThicknessFactor; // Thickness factor of arrows (0.0f..0.5f). 0.0f=Fill. >0.0f=Stroke.
|
||||||
|
|
||||||
// Rendering & Tessellation
|
// Rendering & Tessellation
|
||||||
bool AntiAliasedLines; // Enable anti-aliased lines/borders. Used at the beginning of the frame to set ImDrawFlags_AALines in all draw-lists.
|
bool AntiAliasedLines; // Enable anti-aliased lines/borders. Used at the beginning of the frame to set ImDrawFlags_AALines in all draw-lists.
|
||||||
bool AntiAliasedLineEnds; // Enable anti-aliased lines/borders ends. Nicer for thick lines but more expensive. Used at the beginning of the frame to set ImDrawFlags_AALineEnds in all draw-lists.
|
bool AntiAliasedLineEnds; // Enable anti-aliased lines/borders ends. Nicer for thick lines but more expensive. Used at the beginning of the frame to set ImDrawFlags_AALineEnds in all draw-lists.
|
||||||
@ -2678,11 +2684,11 @@ struct ImGuiIO
|
|||||||
#ifndef IMGUI_DISABLE_OBSOLETE_FUNCTIONS
|
#ifndef IMGUI_DISABLE_OBSOLETE_FUNCTIONS
|
||||||
float FontGlobalScale; // Moved io.FontGlobalScale to style.FontScaleMain in 1.92.0 (June 2025)
|
float FontGlobalScale; // Moved io.FontGlobalScale to style.FontScaleMain in 1.92.0 (June 2025)
|
||||||
|
|
||||||
// Legacy: before 1.91.1, clipboard functions were stored in ImGuiIO instead of ImGuiPlatformIO.
|
// [Moved in 1.91.1] Clipboard functions were stored in ImGuiIO instead of ImGuiPlatformIO.
|
||||||
// As this is will affect all users of custom engines/backends, we are providing proper legacy redirection (will obsolete).
|
// As this is will affect all users of custom engines/backends, we are providing proper legacy redirection (will obsolete).
|
||||||
const char* (*GetClipboardTextFn)(void* user_data);
|
//const char* (*GetClipboardTextFn)(void* user_data); // --> `platform_io.Platform_GetClipboardTextFn`
|
||||||
void (*SetClipboardTextFn)(void* user_data, const char* text);
|
//void (*SetClipboardTextFn)(void* user_data, const char* text); // --> `platform_io.Platform_SetClipboardTextFn`
|
||||||
void* ClipboardUserData;
|
//void* ClipboardUserData; // --> `platform_io.Platform_ClipboardUserData`
|
||||||
|
|
||||||
//void ClearInputCharacters() { InputQueueCharacters.resize(0); } // [Obsoleted in 1.89.8] Clear the current frame text input buffer. Now included within ClearInputKeys(). Removed this as it is ambiguous/misleading and generally incorrect to use with the existence of a higher-level input queue.
|
//void ClearInputCharacters() { InputQueueCharacters.resize(0); } // [Obsoleted in 1.89.8] Clear the current frame text input buffer. Now included within ClearInputKeys(). Removed this as it is ambiguous/misleading and generally incorrect to use with the existence of a higher-level input queue.
|
||||||
#endif
|
#endif
|
||||||
@ -3390,6 +3396,7 @@ enum ImDrawFlags_
|
|||||||
ImDrawFlags_RoundCornersBottom = ImDrawFlags_RoundBottom,
|
ImDrawFlags_RoundCornersBottom = ImDrawFlags_RoundBottom,
|
||||||
ImDrawFlags_RoundCornersLeft = ImDrawFlags_RoundLeft,
|
ImDrawFlags_RoundCornersLeft = ImDrawFlags_RoundLeft,
|
||||||
ImDrawFlags_RoundCornersRight = ImDrawFlags_RoundRight,
|
ImDrawFlags_RoundCornersRight = ImDrawFlags_RoundRight,
|
||||||
|
ImDrawFlags_RoundCornersMask_ = ImDrawFlags_RoundMask_,
|
||||||
#endif
|
#endif
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -3597,7 +3604,7 @@ struct ImDrawData
|
|||||||
ImVector<ImTextureData*>* Textures; // List of textures to update. Most of the times the list is shared by all ImDrawData, has only 1 texture and it doesn't need any update. This almost always points to ImGui::GetPlatformIO().Textures[]. May be overridden or set to NULL if you want to manually update textures.
|
ImVector<ImTextureData*>* Textures; // List of textures to update. Most of the times the list is shared by all ImDrawData, has only 1 texture and it doesn't need any update. This almost always points to ImGui::GetPlatformIO().Textures[]. May be overridden or set to NULL if you want to manually update textures.
|
||||||
|
|
||||||
#ifndef IMGUI_DISABLE_OBSOLETE_FUNCTIONS
|
#ifndef IMGUI_DISABLE_OBSOLETE_FUNCTIONS
|
||||||
int CmdListsCount; // Use CmdLists.Size instead. Number of ImDrawList* to render.
|
int CmdListsCount; // [OBSOLETED in 1.92.9] Use CmdLists.Size instead. Number of ImDrawList* to render.
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// Functions
|
// Functions
|
||||||
@ -4229,16 +4236,17 @@ namespace ImGui
|
|||||||
// OBSOLETED in 1.91.9 (from February 2025)
|
// OBSOLETED in 1.91.9 (from February 2025)
|
||||||
IMGUI_API void Image(ImTextureRef tex_ref, const ImVec2& image_size, const ImVec2& uv0, const ImVec2& uv1, const ImVec4& tint_col, const ImVec4& border_col); // <-- 'border_col' was removed in favor of ImGuiCol_ImageBorder. If you use 'tint_col', use ImageWithBg() instead.
|
IMGUI_API void Image(ImTextureRef tex_ref, const ImVec2& image_size, const ImVec2& uv0, const ImVec2& uv1, const ImVec4& tint_col, const ImVec4& border_col); // <-- 'border_col' was removed in favor of ImGuiCol_ImageBorder. If you use 'tint_col', use ImageWithBg() instead.
|
||||||
// OBSOLETED in 1.91.0 (from July 2024)
|
// OBSOLETED in 1.91.0 (from July 2024)
|
||||||
inline void PushButtonRepeat(bool repeat) { PushItemFlag(ImGuiItemFlags_ButtonRepeat, repeat); }
|
|
||||||
inline void PopButtonRepeat() { PopItemFlag(); }
|
|
||||||
inline void PushTabStop(bool tab_stop) { PushItemFlag(ImGuiItemFlags_NoTabStop, !tab_stop); }
|
|
||||||
inline void PopTabStop() { PopItemFlag(); }
|
|
||||||
// You do not need those functions! See #7838 on GitHub for more info.
|
// You do not need those functions! See #7838 on GitHub for more info.
|
||||||
IMGUI_API ImVec2 GetContentRegionMax(); // Content boundaries max (e.g. window boundaries including scrolling, or current column boundaries). You should never need this. Always use GetCursorScreenPos() and GetContentRegionAvail()!
|
IMGUI_API ImVec2 GetContentRegionMax(); // Content boundaries max (e.g. window boundaries including scrolling, or current column boundaries). You should never need this. Always use GetCursorScreenPos() and GetContentRegionAvail()!
|
||||||
IMGUI_API ImVec2 GetWindowContentRegionMin(); // Content boundaries min for the window (roughly (0,0)-Scroll), in window-local coordinates. You should never need this. Always use GetCursorScreenPos() and GetContentRegionAvail()!
|
IMGUI_API ImVec2 GetWindowContentRegionMin(); // Content boundaries min for the window (roughly (0,0)-Scroll), in window-local coordinates. You should never need this. Always use GetCursorScreenPos() and GetContentRegionAvail()!
|
||||||
IMGUI_API ImVec2 GetWindowContentRegionMax(); // Content boundaries max for the window (roughly (0,0)+Size-Scroll), in window-local coordinates. You should never need this. Always use GetCursorScreenPos() and GetContentRegionAvail()!
|
IMGUI_API ImVec2 GetWindowContentRegionMax(); // Content boundaries max for the window (roughly (0,0)+Size-Scroll), in window-local coordinates. You should never need this. Always use GetCursorScreenPos() and GetContentRegionAvail()!
|
||||||
|
|
||||||
// Some of the older obsolete names along with their replacement (commented out so they are not reported in IDE)
|
// Some of the older obsolete names along with their replacement (commented out so they are not reported in IDE)
|
||||||
|
// OBSOLETED in 1.91.0 (from July 2024)
|
||||||
|
//inline void PushButtonRepeat(bool repeat) { PushItemFlag(ImGuiItemFlags_ButtonRepeat, repeat); }
|
||||||
|
//inline void PopButtonRepeat() { PopItemFlag(); }
|
||||||
|
//inline void PushTabStop(bool tab_stop) { PushItemFlag(ImGuiItemFlags_NoTabStop, !tab_stop); }
|
||||||
|
//inline void PopTabStop() { PopItemFlag(); }
|
||||||
// OBSOLETED in 1.90.0 (from September 2023)
|
// OBSOLETED in 1.90.0 (from September 2023)
|
||||||
//IMGUI_API bool Combo(const char* label, int* current_item, bool (*old_callback)(void* user_data, int idx, const char** out_text), void* user_data, int items_count, int popup_max_height_in_items = -1); // Getter signature changed. See 2023/09/15 and 2026/02/27 commits.
|
//IMGUI_API bool Combo(const char* label, int* current_item, bool (*old_callback)(void* user_data, int idx, const char** out_text), void* user_data, int items_count, int popup_max_height_in_items = -1); // Getter signature changed. See 2023/09/15 and 2026/02/27 commits.
|
||||||
//IMGUI_API bool ListBox(const char* label, int* current_item, bool (*old_callback)(void* user_data, int idx, const char** out_text), void* user_data, int items_count, int height_in_items = -1); // Getter signature changed. See 2023/09/15 and 2026/02/27 commits.
|
//IMGUI_API bool ListBox(const char* label, int* current_item, bool (*old_callback)(void* user_data, int idx, const char** out_text), void* user_data, int items_count, int height_in_items = -1); // Getter signature changed. See 2023/09/15 and 2026/02/27 commits.
|
||||||
|
|||||||
@ -1,4 +1,4 @@
|
|||||||
// dear imgui, v1.93.0
|
// dear imgui, v1.93.1 WIP
|
||||||
// (demo code)
|
// (demo code)
|
||||||
|
|
||||||
// Help:
|
// Help:
|
||||||
@ -1651,10 +1651,10 @@ static void DemoWindowWidgetsDragAndDrop()
|
|||||||
{
|
{
|
||||||
if (ImGui::TreeNode("Drag and Drop"))
|
if (ImGui::TreeNode("Drag and Drop"))
|
||||||
{
|
{
|
||||||
IMGUI_DEMO_MARKER("Widgets/Drag and drop");
|
IMGUI_DEMO_MARKER("Widgets/Drag and Drop");
|
||||||
if (ImGui::TreeNode("Drag and drop in standard widgets"))
|
if (ImGui::TreeNode("Drag and drop in standard widgets"))
|
||||||
{
|
{
|
||||||
IMGUI_DEMO_MARKER("Widgets/Drag and drop/Standard widgets");
|
IMGUI_DEMO_MARKER("Widgets/Drag and Drop/Standard widgets");
|
||||||
// ColorEdit widgets automatically act as drag source and drag target.
|
// ColorEdit widgets automatically act as drag source and drag target.
|
||||||
// They are using standardized payload strings IMGUI_PAYLOAD_TYPE_COLOR_3F and IMGUI_PAYLOAD_TYPE_COLOR_4F
|
// They are using standardized payload strings IMGUI_PAYLOAD_TYPE_COLOR_3F and IMGUI_PAYLOAD_TYPE_COLOR_4F
|
||||||
// to allow your own widgets to use colors in their drag and drop interaction.
|
// to allow your own widgets to use colors in their drag and drop interaction.
|
||||||
@ -1669,7 +1669,7 @@ static void DemoWindowWidgetsDragAndDrop()
|
|||||||
|
|
||||||
if (ImGui::TreeNode("Drag and drop to copy/swap items"))
|
if (ImGui::TreeNode("Drag and drop to copy/swap items"))
|
||||||
{
|
{
|
||||||
IMGUI_DEMO_MARKER("Widgets/Drag and drop/Copy-swap items");
|
IMGUI_DEMO_MARKER("Widgets/Drag and Drop/Copy-swap items");
|
||||||
enum Mode
|
enum Mode
|
||||||
{
|
{
|
||||||
Mode_Copy,
|
Mode_Copy,
|
||||||
@ -1842,6 +1842,7 @@ static void DemoWindowWidgetsDragsAndSliders()
|
|||||||
//ImGui::DragFloat("DragFloat (0 -> 0)", &drag_f, 0.005f, 0.0f, 0.0f, "%.3f", flags); // To test ClampZeroRange
|
//ImGui::DragFloat("DragFloat (0 -> 0)", &drag_f, 0.005f, 0.0f, 0.0f, "%.3f", flags); // To test ClampZeroRange
|
||||||
//ImGui::DragFloat("DragFloat (100 -> 100)", &drag_f, 0.005f, 100.0f, 100.0f, "%.3f", flags);
|
//ImGui::DragFloat("DragFloat (100 -> 100)", &drag_f, 0.005f, 100.0f, 100.0f, "%.3f", flags);
|
||||||
ImGui::DragInt("DragInt (0 -> 100)", &drag_i, 0.5f, 0, 100, "%d", flags);
|
ImGui::DragInt("DragInt (0 -> 100)", &drag_i, 0.5f, 0, 100, "%d", flags);
|
||||||
|
ImGui::DragFloat("DragFloat (0 -> 100)", &drag_f, 0.2f, 0, 100, "%.2f", flags);
|
||||||
ImGui::DragFloat4("DragFloat4 (0 -> 1)", drag_f4, 0.005f, 0.0f, 1.0f, "%.3f", flags); // Multi-component item, mostly here to document the effect of ImGuiSliderFlags_ColorMarkers.
|
ImGui::DragFloat4("DragFloat4 (0 -> 1)", drag_f4, 0.005f, 0.0f, 1.0f, "%.3f", flags); // Multi-component item, mostly here to document the effect of ImGuiSliderFlags_ColorMarkers.
|
||||||
|
|
||||||
// Sliders
|
// Sliders
|
||||||
@ -1852,7 +1853,7 @@ static void DemoWindowWidgetsDragsAndSliders()
|
|||||||
ImGui::Text("Underlying float value: %f", slider_f);
|
ImGui::Text("Underlying float value: %f", slider_f);
|
||||||
ImGui::SliderFloat("SliderFloat (0 -> 1)", &slider_f, 0.0f, 1.0f, "%.3f", flags_for_sliders);
|
ImGui::SliderFloat("SliderFloat (0 -> 1)", &slider_f, 0.0f, 1.0f, "%.3f", flags_for_sliders);
|
||||||
ImGui::SliderInt("SliderInt (0 -> 100)", &slider_i, 0, 100, "%d", flags_for_sliders);
|
ImGui::SliderInt("SliderInt (0 -> 100)", &slider_i, 0, 100, "%d", flags_for_sliders);
|
||||||
ImGui::SliderFloat4("SliderFloat4 (0 -> 1)", slider_f4, 0.0f, 1.0f, "%.3f", flags); // Multi-component item, mostly here to document the effect of ImGuiSliderFlags_ColorMarkers.
|
ImGui::SliderFloat4("SliderFloat4 (0 -> 1)", slider_f4, 0.0f, 1.0f, "%.3f", flags_for_sliders); // Multi-component item, mostly here to document the effect of ImGuiSliderFlags_ColorMarkers.
|
||||||
|
|
||||||
ImGui::TreePop();
|
ImGui::TreePop();
|
||||||
}
|
}
|
||||||
@ -4430,6 +4431,7 @@ static void DemoWindowWidgetsTreeNodes()
|
|||||||
ImGui::CheckboxFlags("ImGuiTreeNodeFlags_Framed", &base_flags, ImGuiTreeNodeFlags_Framed); ImGui::SameLine(); HelpMarker("Draw frame with background (e.g. for CollapsingHeader)");
|
ImGui::CheckboxFlags("ImGuiTreeNodeFlags_Framed", &base_flags, ImGuiTreeNodeFlags_Framed); ImGui::SameLine(); HelpMarker("Draw frame with background (e.g. for CollapsingHeader)");
|
||||||
ImGui::CheckboxFlags("ImGuiTreeNodeFlags_FramePadding", &base_flags, ImGuiTreeNodeFlags_FramePadding);
|
ImGui::CheckboxFlags("ImGuiTreeNodeFlags_FramePadding", &base_flags, ImGuiTreeNodeFlags_FramePadding);
|
||||||
ImGui::CheckboxFlags("ImGuiTreeNodeFlags_NavLeftJumpsToParent", &base_flags, ImGuiTreeNodeFlags_NavLeftJumpsToParent);
|
ImGui::CheckboxFlags("ImGuiTreeNodeFlags_NavLeftJumpsToParent", &base_flags, ImGuiTreeNodeFlags_NavLeftJumpsToParent);
|
||||||
|
ImGui::CheckboxFlags("ImGuiTreeNodeFlags_Bullet", &base_flags, ImGuiTreeNodeFlags_Bullet);
|
||||||
|
|
||||||
HelpMarker("Default option for DrawLinesXXX is stored in style.TreeLinesFlags");
|
HelpMarker("Default option for DrawLinesXXX is stored in style.TreeLinesFlags");
|
||||||
ImGui::CheckboxFlags("ImGuiTreeNodeFlags_DrawLinesNone", &base_flags, ImGuiTreeNodeFlags_DrawLinesNone);
|
ImGui::CheckboxFlags("ImGuiTreeNodeFlags_DrawLinesNone", &base_flags, ImGuiTreeNodeFlags_DrawLinesNone);
|
||||||
@ -6427,7 +6429,9 @@ static void DemoWindowTables()
|
|||||||
{
|
{
|
||||||
static char text_bufs[3 * 5][16]; // Mini text storage for 3x5 cells
|
static char text_bufs[3 * 5][16]; // Mini text storage for 3x5 cells
|
||||||
static bool init = true;
|
static bool init = true;
|
||||||
if (!show_widget_frame_bg)
|
if (show_widget_frame_bg)
|
||||||
|
ImGui::PushStyleVar(ImGuiStyleVar_FrameRounding, 0.0f);
|
||||||
|
else
|
||||||
ImGui::PushStyleColor(ImGuiCol_FrameBg, 0);
|
ImGui::PushStyleColor(ImGuiCol_FrameBg, 0);
|
||||||
for (int cell = 0; cell < 3 * 5; cell++)
|
for (int cell = 0; cell < 3 * 5; cell++)
|
||||||
{
|
{
|
||||||
@ -6439,7 +6443,9 @@ static void DemoWindowTables()
|
|||||||
ImGui::InputText("##cell", text_bufs[cell], IM_COUNTOF(text_bufs[cell]));
|
ImGui::InputText("##cell", text_bufs[cell], IM_COUNTOF(text_bufs[cell]));
|
||||||
ImGui::PopID();
|
ImGui::PopID();
|
||||||
}
|
}
|
||||||
if (!show_widget_frame_bg)
|
if (show_widget_frame_bg)
|
||||||
|
ImGui::PopStyleVar();
|
||||||
|
else
|
||||||
ImGui::PopStyleColor();
|
ImGui::PopStyleColor();
|
||||||
init = false;
|
init = false;
|
||||||
ImGui::EndTable();
|
ImGui::EndTable();
|
||||||
@ -6953,6 +6959,7 @@ static void DemoWindowTables()
|
|||||||
if (ImGui::TreeNode("Outer size"))
|
if (ImGui::TreeNode("Outer size"))
|
||||||
{
|
{
|
||||||
IMGUI_DEMO_MARKER("Tables/Outer size");
|
IMGUI_DEMO_MARKER("Tables/Outer size");
|
||||||
|
|
||||||
// Showcasing use of ImGuiTableFlags_NoHostExtendX and ImGuiTableFlags_NoHostExtendY
|
// Showcasing use of ImGuiTableFlags_NoHostExtendX and ImGuiTableFlags_NoHostExtendY
|
||||||
// Important to that note how the two flags have slightly different behaviors!
|
// Important to that note how the two flags have slightly different behaviors!
|
||||||
ImGui::Text("Using NoHostExtendX and NoHostExtendY:");
|
ImGui::Text("Using NoHostExtendX and NoHostExtendY:");
|
||||||
@ -7048,7 +7055,7 @@ static void DemoWindowTables()
|
|||||||
// We use a transparent color so we can see the one behind in case our target is RowBg1 and RowBg0 was already targeted by the ImGuiTableFlags_RowBg flag.
|
// We use a transparent color so we can see the one behind in case our target is RowBg1 and RowBg0 was already targeted by the ImGuiTableFlags_RowBg flag.
|
||||||
if (row_bg_type != 0)
|
if (row_bg_type != 0)
|
||||||
{
|
{
|
||||||
ImU32 row_bg_color = ImGui::GetColorU32(row_bg_type == 1 ? ImVec4(0.7f, 0.3f, 0.3f, 0.65f) : ImVec4(0.2f + row * 0.1f, 0.2f, 0.2f, 0.65f)); // Flat or Gradient?
|
ImU32 row_bg_color = ImGui::GetColorU32(row_bg_type == 1 ? ImVec4(0.7f, 0.3f, 0.3f, 0.40f) : ImVec4(0.2f + row * 0.1f, 0.2f, 0.2f, 0.40f)); // Flat or Gradient?
|
||||||
ImGui::TableSetBgColor(ImGuiTableBgTarget_RowBg0 + row_bg_target, row_bg_color);
|
ImGui::TableSetBgColor(ImGuiTableBgTarget_RowBg0 + row_bg_target, row_bg_color);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -8807,6 +8814,10 @@ void ImGui::ShowStyleEditor(ImGuiStyle* ref)
|
|||||||
SliderFloat("ImageRounding", &style.ImageRounding, 0.0f, 12.0f, "%.0f");
|
SliderFloat("ImageRounding", &style.ImageRounding, 0.0f, 12.0f, "%.0f");
|
||||||
SliderFloat("ImageBorderSize", &style.ImageBorderSize, 0.0f, max_border_size, "%.0f");
|
SliderFloat("ImageBorderSize", &style.ImageBorderSize, 0.0f, max_border_size, "%.0f");
|
||||||
|
|
||||||
|
SeparatorText("Symbols");
|
||||||
|
DragFloat2("SymbolArrowSizeFactor", &style.SymbolArrowSizeFactor.x, 0.01f, 0.0f, 1.0f);
|
||||||
|
DragFloat("SymbolArrowThicknessFactor", &style.SymbolArrowThicknessFactor, 0.01f, 0.0f, 0.5f);
|
||||||
|
|
||||||
SeparatorText("Tooltips");
|
SeparatorText("Tooltips");
|
||||||
for (int n = 0; n < 2; n++)
|
for (int n = 0; n < 2; n++)
|
||||||
if (TreeNodeEx(n == 0 ? "HoverFlagsForTooltipMouse" : "HoverFlagsForTooltipNav"))
|
if (TreeNodeEx(n == 0 ? "HoverFlagsForTooltipMouse" : "HoverFlagsForTooltipNav"))
|
||||||
@ -9211,8 +9222,8 @@ struct ExampleAppConsole
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Portable helpers
|
// Portable helpers
|
||||||
static int Stricmp(const char* s1, const char* s2) { int d; while ((d = toupper(*s2) - toupper(*s1)) == 0 && *s1) { s1++; s2++; } return d; }
|
static int Stricmp(const char* s1, const char* s2) { int d; while ((d = toupper(*s1) - toupper(*s2)) == 0 && *s1) { s1++; s2++; } return d; }
|
||||||
static int Strnicmp(const char* s1, const char* s2, int n) { int d = 0; while (n > 0 && (d = toupper(*s2) - toupper(*s1)) == 0 && *s1) { s1++; s2++; n--; } return d; }
|
static int Strnicmp(const char* s1, const char* s2, int n) { int d = 0; while (n > 0 && (d = toupper(*s1) - toupper(*s2)) == 0 && *s1) { s1++; s2++; n--; } return d; }
|
||||||
static char* Strdup(const char* s) { IM_ASSERT(s); size_t len = strlen(s) + 1; void* buf = ImGui::MemAlloc(len); IM_ASSERT(buf); return (char*)memcpy(buf, (const void*)s, len); }
|
static char* Strdup(const char* s) { IM_ASSERT(s); size_t len = strlen(s) + 1; void* buf = ImGui::MemAlloc(len); IM_ASSERT(buf); return (char*)memcpy(buf, (const void*)s, len); }
|
||||||
static void Strtrimblanks(char* s) { char* str_end = s + strlen(s); while (str_end > s && str_end[-1] == ' ') str_end--; *str_end = 0; }
|
static void Strtrimblanks(char* s) { char* str_end = s + strlen(s); while (str_end > s && str_end[-1] == ' ') str_end--; *str_end = 0; }
|
||||||
|
|
||||||
|
|||||||
@ -1,4 +1,4 @@
|
|||||||
// dear imgui, v1.93.0
|
// dear imgui, v1.93.1 WIP
|
||||||
// (drawing and font code)
|
// (drawing and font code)
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -191,7 +191,7 @@ void ImGui::StyleColorsDark(ImGuiStyle* dst)
|
|||||||
|
|
||||||
colors[ImGuiCol_Text] = ImVec4(1.00f, 1.00f, 1.00f, 1.00f);
|
colors[ImGuiCol_Text] = ImVec4(1.00f, 1.00f, 1.00f, 1.00f);
|
||||||
colors[ImGuiCol_TextDisabled] = ImVec4(0.58f, 0.58f, 0.58f, 1.00f);
|
colors[ImGuiCol_TextDisabled] = ImVec4(0.58f, 0.58f, 0.58f, 1.00f);
|
||||||
colors[ImGuiCol_WindowBg] = ImVec4(0.18f, 0.18f, 0.18f, 1.00f);
|
colors[ImGuiCol_WindowBg] = ImVec4(0.15f, 0.15f, 0.15f, 1.00f);
|
||||||
colors[ImGuiCol_ChildBg] = ImVec4(0.00f, 0.00f, 0.00f, 0.00f);
|
colors[ImGuiCol_ChildBg] = ImVec4(0.00f, 0.00f, 0.00f, 0.00f);
|
||||||
colors[ImGuiCol_PopupBg] = ImVec4(0.08f, 0.08f, 0.08f, 0.94f);
|
colors[ImGuiCol_PopupBg] = ImVec4(0.08f, 0.08f, 0.08f, 0.94f);
|
||||||
colors[ImGuiCol_Border] = ImVec4(0.43f, 0.43f, 0.50f, 0.50f);
|
colors[ImGuiCol_Border] = ImVec4(0.43f, 0.43f, 0.50f, 0.50f);
|
||||||
@ -2280,7 +2280,7 @@ void ImDrawList::_AddRectTinyRounding(const ImVec2& p_min, const ImVec2& p_max,
|
|||||||
const float stem_y = outer_y + corner_offset[corner].y * stem_offset;
|
const float stem_y = outer_y + corner_offset[corner].y * stem_offset;
|
||||||
const float inner_x = outer_x + corner_offset[corner].x * thickness;
|
const float inner_x = outer_x + corner_offset[corner].x * thickness;
|
||||||
const float inner_y = outer_y + corner_offset[corner].y * thickness;
|
const float inner_y = outer_y + corner_offset[corner].y * thickness;
|
||||||
const bool is_rounded = (flags & corner_flags[corner]);
|
const bool is_rounded = (flags & corner_flags[corner]) != 0;
|
||||||
|
|
||||||
const int arc_idx = (int)_VtxCurrentIdx;
|
const int arc_idx = (int)_VtxCurrentIdx;
|
||||||
if (is_rounded)
|
if (is_rounded)
|
||||||
@ -6156,7 +6156,7 @@ static ImFontGlyph* ImFontBaked_BuildLoadGlyph(ImFontBaked* baked, ImWchar codep
|
|||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
static float ImFontBaked_BuildLoadGlyphAdvanceX(ImFontBaked* baked, ImWchar codepoint)
|
float ImFontBaked_BuildLoadGlyphAdvanceX(ImFontBaked* baked, ImWchar codepoint)
|
||||||
{
|
{
|
||||||
if (baked->Size >= IMGUI_FONT_SIZE_THRESHOLD_FOR_LOADADVANCEXONLYMODE || baked->LoadNoRenderOnLayout)
|
if (baked->Size >= IMGUI_FONT_SIZE_THRESHOLD_FOR_LOADADVANCEXONLYMODE || baked->LoadNoRenderOnLayout)
|
||||||
{
|
{
|
||||||
@ -7551,7 +7551,6 @@ begin:
|
|||||||
// - RenderArrow()
|
// - RenderArrow()
|
||||||
// - RenderBullet()
|
// - RenderBullet()
|
||||||
// - RenderCheckMark()
|
// - RenderCheckMark()
|
||||||
// - RenderArrowPointingAt()
|
|
||||||
// - RenderRectFilledInRangeH()
|
// - RenderRectFilledInRangeH()
|
||||||
// - RenderRectFilledWithHole()
|
// - RenderRectFilledWithHole()
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
@ -7559,36 +7558,47 @@ begin:
|
|||||||
// - RenderColorRectWithAlphaCheckerboard()
|
// - RenderColorRectWithAlphaCheckerboard()
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
|
|
||||||
// Render an arrow aimed to be aligned with text (p_min is a position in the same space text would be positioned). To e.g. denote expanded/collapsed state
|
static const ImVec2 g_ImGuiDirCosSin[4] = { { -1.0f, 0.0f }, { +1.0f, 0.0f }, { 0.0f, -1.0f }, { 0.0f, +1.0f } };
|
||||||
|
|
||||||
|
// arrow_h, arrow_w, arrow_th are normalized: 0.0f..1.0f
|
||||||
|
// arrow_th: 0.0f == fill, >0.0f == stroke weight.
|
||||||
|
void ImGui::RenderArrowEx(ImDrawList* draw_list, ImVec2 pos, ImU32 col, float cos_a, float sin_a, float scale, ImVec2 arrow_sizes, float arrow_th)
|
||||||
|
{
|
||||||
|
const bool is_fill = (arrow_th <= 0.0f);
|
||||||
|
const float r = draw_list->_Data->FontSize * 0.50f * scale;
|
||||||
|
const float thickness = is_fill ? 0.0f : IM_ROUND(ImClamp(r * arrow_th, 1.0f, r * 0.5f));
|
||||||
|
|
||||||
|
// Bias for shape to feel more centered
|
||||||
|
const float bias = is_fill ? (r * 0.05f) : (thickness * 0.8f * 0.7071f);
|
||||||
|
const ImVec2 center = ImVec2(pos.x + r + bias * cos_a, pos.y + r + bias * sin_a);
|
||||||
|
|
||||||
|
const float arrow_h = arrow_sizes.y * r;
|
||||||
|
const float arrow_w = arrow_sizes.x * r;
|
||||||
|
ImVec2 p[3];
|
||||||
|
p[0] = ImVec2(center.x - arrow_h * cos_a - arrow_w * -sin_a, center.y - arrow_h * sin_a - arrow_w * cos_a);
|
||||||
|
p[1] = ImVec2(center.x + arrow_h * cos_a, center.y + arrow_h * sin_a);
|
||||||
|
p[2] = ImVec2(center.x - arrow_h * cos_a + arrow_w * -sin_a, center.y - arrow_h * sin_a + arrow_w * cos_a);
|
||||||
|
|
||||||
|
// Pixel align when at a right angle
|
||||||
|
if (is_fill && (cos_a * sin_a >= -FLT_EPSILON) && (cos_a * sin_a <= FLT_EPSILON))
|
||||||
|
{
|
||||||
|
p[0] = ImRoundSigned(p[0]);
|
||||||
|
p[1] = ImRoundSigned(p[1]);
|
||||||
|
p[2] = ImRoundSigned(p[2]);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (is_fill)
|
||||||
|
draw_list->AddConvexPolyFilled(p, 3, col);
|
||||||
|
else
|
||||||
|
draw_list->_AddPolyline(p, 3, col, thickness, ImDrawFlags_StrokeInside | ImDrawFlags_AALineEnds, FLT_MAX); // FIXME-OPT: baked filled shape?
|
||||||
|
}
|
||||||
|
|
||||||
|
// Render an arrow aimed to be aligned with text.
|
||||||
void ImGui::RenderArrow(ImDrawList* draw_list, ImVec2 pos, ImU32 col, ImGuiDir dir, float scale)
|
void ImGui::RenderArrow(ImDrawList* draw_list, ImVec2 pos, ImU32 col, ImGuiDir dir, float scale)
|
||||||
{
|
{
|
||||||
const float h = draw_list->_Data->FontSize * 1.00f;
|
ImGuiContext& g = *GImGui;
|
||||||
float r = h * 0.40f * scale;
|
ImVec2 cos_sin = g_ImGuiDirCosSin[dir];
|
||||||
ImVec2 center = pos + ImVec2(h * 0.50f, h * 0.50f * scale);
|
RenderArrowEx(draw_list, pos, col, cos_sin.x, cos_sin.y, scale, g.Style.SymbolArrowSizeFactor, g.Style.SymbolArrowThicknessFactor);
|
||||||
|
|
||||||
ImVec2 a, b, c;
|
|
||||||
switch (dir)
|
|
||||||
{
|
|
||||||
case ImGuiDir_Up:
|
|
||||||
case ImGuiDir_Down:
|
|
||||||
if (dir == ImGuiDir_Up) r = -r;
|
|
||||||
a = ImVec2(+0.000f, +0.750f) * r;
|
|
||||||
b = ImVec2(-0.866f, -0.750f) * r;
|
|
||||||
c = ImVec2(+0.866f, -0.750f) * r;
|
|
||||||
break;
|
|
||||||
case ImGuiDir_Left:
|
|
||||||
case ImGuiDir_Right:
|
|
||||||
if (dir == ImGuiDir_Left) r = -r;
|
|
||||||
a = ImVec2(+0.750f, +0.000f) * r;
|
|
||||||
b = ImVec2(-0.750f, +0.866f) * r;
|
|
||||||
c = ImVec2(-0.750f, -0.866f) * r;
|
|
||||||
break;
|
|
||||||
case ImGuiDir_None:
|
|
||||||
case ImGuiDir_COUNT:
|
|
||||||
IM_ASSERT(0);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
draw_list->AddTriangleFilled(center + a, center + b, center + c, col);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void ImGui::RenderBullet(ImDrawList* draw_list, ImVec2 pos, ImU32 col)
|
void ImGui::RenderBullet(ImDrawList* draw_list, ImVec2 pos, ImU32 col)
|
||||||
@ -7613,19 +7623,6 @@ void ImGui::RenderCheckMark(ImDrawList* draw_list, ImVec2 pos, ImU32 col, float
|
|||||||
draw_list->PathStroke(col, thickness, ImDrawFlags_AALineEnds);
|
draw_list->PathStroke(col, thickness, ImDrawFlags_AALineEnds);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Render an arrow. 'pos' is position of the arrow tip. half_sz.x is length from base to tip. half_sz.y is length on each side.
|
|
||||||
void ImGui::RenderArrowPointingAt(ImDrawList* draw_list, ImVec2 pos, ImVec2 half_sz, ImGuiDir direction, ImU32 col)
|
|
||||||
{
|
|
||||||
switch (direction)
|
|
||||||
{
|
|
||||||
case ImGuiDir_Left: draw_list->AddTriangleFilled(ImVec2(pos.x + half_sz.x, pos.y - half_sz.y), ImVec2(pos.x + half_sz.x, pos.y + half_sz.y), pos, col); return;
|
|
||||||
case ImGuiDir_Right: draw_list->AddTriangleFilled(ImVec2(pos.x - half_sz.x, pos.y + half_sz.y), ImVec2(pos.x - half_sz.x, pos.y - half_sz.y), pos, col); return;
|
|
||||||
case ImGuiDir_Up: draw_list->AddTriangleFilled(ImVec2(pos.x + half_sz.x, pos.y + half_sz.y), ImVec2(pos.x - half_sz.x, pos.y + half_sz.y), pos, col); return;
|
|
||||||
case ImGuiDir_Down: draw_list->AddTriangleFilled(ImVec2(pos.x - half_sz.x, pos.y - half_sz.y), ImVec2(pos.x + half_sz.x, pos.y - half_sz.y), pos, col); return;
|
|
||||||
case ImGuiDir_None: case ImGuiDir_COUNT: break; // Fix warnings
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static inline float ImAcos01(float x)
|
static inline float ImAcos01(float x)
|
||||||
{
|
{
|
||||||
if (x <= 0.0f) return IM_PI * 0.5f;
|
if (x <= 0.0f) return IM_PI * 0.5f;
|
||||||
|
|||||||
@ -1,4 +1,4 @@
|
|||||||
// dear imgui, v1.93.0
|
// dear imgui, v1.93.1 WIP
|
||||||
// (internal structures/api)
|
// (internal structures/api)
|
||||||
|
|
||||||
// You may use this file to debug, understand or extend Dear ImGui features but we don't provide any guarantee of forward compatibility.
|
// You may use this file to debug, understand or extend Dear ImGui features but we don't provide any guarantee of forward compatibility.
|
||||||
@ -284,8 +284,8 @@ extern IMGUI_API ImGuiContext* GImGui; // Current implicit context pointer
|
|||||||
#define IM_MEMALIGN(_OFF,_ALIGN) (((_OFF) + ((_ALIGN) - 1)) & ~((_ALIGN) - 1)) // Memory align e.g. IM_ALIGN(0,4)=0, IM_ALIGN(1,4)=4, IM_ALIGN(4,4)=4, IM_ALIGN(5,4)=8
|
#define IM_MEMALIGN(_OFF,_ALIGN) (((_OFF) + ((_ALIGN) - 1)) & ~((_ALIGN) - 1)) // Memory align e.g. IM_ALIGN(0,4)=0, IM_ALIGN(1,4)=4, IM_ALIGN(4,4)=4, IM_ALIGN(5,4)=8
|
||||||
#define IM_F32_TO_INT8_UNBOUND(_VAL) ((int)((_VAL) * 255.0f + ((_VAL)>=0 ? 0.5f : -0.5f))) // Unsaturated, for display purpose
|
#define IM_F32_TO_INT8_UNBOUND(_VAL) ((int)((_VAL) * 255.0f + ((_VAL)>=0 ? 0.5f : -0.5f))) // Unsaturated, for display purpose
|
||||||
#define IM_F32_TO_INT8_SAT(_VAL) ((int)(ImSaturate(_VAL) * 255.0f + 0.5f)) // Saturated, always output 0..255
|
#define IM_F32_TO_INT8_SAT(_VAL) ((int)(ImSaturate(_VAL) * 255.0f + 0.5f)) // Saturated, always output 0..255
|
||||||
#define IM_TRUNC(_VAL) ((float)(int)(_VAL)) // Positive values only! ImTrunc() is not inlined in MSVC debug builds
|
#define IM_TRUNC(_VAL) ((float)(int)(_VAL)) // Positive values only! == ImTrunc() which is not inlined in MSVC debug builds
|
||||||
#define IM_ROUND(_VAL) ((float)(int)((_VAL) + 0.5f)) // Positive values only!
|
#define IM_ROUND(_VAL) ((float)(int)((_VAL) + 0.5f)) // Positive values only! == ImRoundPositive() which is not inlined in MSVC debug builds.
|
||||||
//#define IM_FLOOR IM_TRUNC // [OBSOLETE] Renamed in 1.90.0 (Sept 2023)
|
//#define IM_FLOOR IM_TRUNC // [OBSOLETE] Renamed in 1.90.0 (Sept 2023)
|
||||||
|
|
||||||
// Hint for branch prediction
|
// Hint for branch prediction
|
||||||
@ -531,6 +531,9 @@ template<typename T> T ImLerp(T a, T b, float t) { return
|
|||||||
template<typename T> void ImSwap(T& a, T& b) { T tmp = a; a = b; b = tmp; }
|
template<typename T> void ImSwap(T& a, T& b) { T tmp = a; a = b; b = tmp; }
|
||||||
template<typename T> T ImAddClampOverflow(T a, T b, T mn, T mx) { if (b < 0 && (a < mn - b)) return mn; if (b > 0 && (a > mx - b)) return mx; return a + b; }
|
template<typename T> T ImAddClampOverflow(T a, T b, T mn, T mx) { if (b < 0 && (a < mn - b)) return mn; if (b > 0 && (a > mx - b)) return mx; return a + b; }
|
||||||
template<typename T> T ImSubClampOverflow(T a, T b, T mn, T mx) { if (b > 0 && (a < mn + b)) return mn; if (b < 0 && (a > mx + b)) return mx; return a - b; }
|
template<typename T> T ImSubClampOverflow(T a, T b, T mn, T mx) { if (b > 0 && (a < mn + b)) return mn; if (b < 0 && (a > mx + b)) return mx; return a - b; }
|
||||||
|
inline float ImMod(float a, float b) { return ImFmod(a, b); }
|
||||||
|
inline double ImMod(double a, double b) { return (double)ImFmod((float)a, (float)b); } // FIXME
|
||||||
|
template<typename T> T ImMod(T a, T b) { return a % b; }
|
||||||
// - Misc maths helpers
|
// - Misc maths helpers
|
||||||
inline ImVec2 ImMin(const ImVec2& lhs, const ImVec2& rhs) { return ImVec2(lhs.x < rhs.x ? lhs.x : rhs.x, lhs.y < rhs.y ? lhs.y : rhs.y); }
|
inline ImVec2 ImMin(const ImVec2& lhs, const ImVec2& rhs) { return ImVec2(lhs.x < rhs.x ? lhs.x : rhs.x, lhs.y < rhs.y ? lhs.y : rhs.y); }
|
||||||
inline ImVec2 ImMax(const ImVec2& lhs, const ImVec2& rhs) { return ImVec2(lhs.x >= rhs.x ? lhs.x : rhs.x, lhs.y >= rhs.y ? lhs.y : rhs.y); }
|
inline ImVec2 ImMax(const ImVec2& lhs, const ImVec2& rhs) { return ImVec2(lhs.x >= rhs.x ? lhs.x : rhs.x, lhs.y >= rhs.y ? lhs.y : rhs.y); }
|
||||||
@ -542,12 +545,15 @@ inline float ImSaturate(float f) { return
|
|||||||
inline float ImLengthSqr(const ImVec2& lhs) { return (lhs.x * lhs.x) + (lhs.y * lhs.y); }
|
inline float ImLengthSqr(const ImVec2& lhs) { return (lhs.x * lhs.x) + (lhs.y * lhs.y); }
|
||||||
inline float ImLengthSqr(const ImVec4& lhs) { return (lhs.x * lhs.x) + (lhs.y * lhs.y) + (lhs.z * lhs.z) + (lhs.w * lhs.w); }
|
inline float ImLengthSqr(const ImVec4& lhs) { return (lhs.x * lhs.x) + (lhs.y * lhs.y) + (lhs.z * lhs.z) + (lhs.w * lhs.w); }
|
||||||
inline float ImInvLength(const ImVec2& lhs, float fail_value) { float d = (lhs.x * lhs.x) + (lhs.y * lhs.y); if (d > 0.0f) return ImRsqrt(d); return fail_value; }
|
inline float ImInvLength(const ImVec2& lhs, float fail_value) { float d = (lhs.x * lhs.x) + (lhs.y * lhs.y); if (d > 0.0f) return ImRsqrt(d); return fail_value; }
|
||||||
inline float ImTrunc(float f) { return (float)(int)(f); }
|
inline float ImTrunc(float f) { return (float)(int)(f); } // == IM_TRUNC()
|
||||||
inline ImVec2 ImTrunc(const ImVec2& v) { return ImVec2((float)(int)(v.x), (float)(int)(v.y)); }
|
inline ImVec2 ImTrunc(const ImVec2& v) { return ImVec2((float)(int)(v.x), (float)(int)(v.y)); }
|
||||||
|
inline float ImTrunc64(float f) { return (float)(ImS64)(f); }
|
||||||
inline float ImFloor(float f) { return (float)((f >= 0 || (float)(int)f == f) ? (int)f : (int)f - 1); } // Decent replacement for floorf()
|
inline float ImFloor(float f) { return (float)((f >= 0 || (float)(int)f == f) ? (int)f : (int)f - 1); } // Decent replacement for floorf()
|
||||||
inline ImVec2 ImFloor(const ImVec2& v) { return ImVec2(ImFloor(v.x), ImFloor(v.y)); }
|
inline ImVec2 ImFloor(const ImVec2& v) { return ImVec2(ImFloor(v.x), ImFloor(v.y)); }
|
||||||
inline float ImTrunc64(float f) { return (float)(ImS64)(f); }
|
inline float ImRoundPositive(float f) { return (float)(int)(f + 0.5f); } // == IM_ROUND(). Positive values only.
|
||||||
inline float ImRoundPositive64(float f) { return (float)(ImS64)(f + 0.5f); } // Positive values only.
|
inline float ImRoundPositive64(float f) { return (float)(ImS64)(f + 0.5f); } // Positive values only.
|
||||||
|
inline float ImRoundSigned(float f) { return (float)(int)(f >= 0.0f ? f + 0.5f : f - 0.5f); }
|
||||||
|
inline ImVec2 ImRoundSigned(const ImVec2& v) { return ImVec2((float)(int)(v.x >= 0.0f ? v.x + 0.5f : v.x - 0.5f), (float)(int)(v.y >= 0.0f ? v.y + 0.5f : v.y - 0.5f)); }
|
||||||
inline float ImRoundSigned64(float f) { return (float)(ImS64)(f >= 0.0f ? f + 0.5f : f - 0.5f); }
|
inline float ImRoundSigned64(float f) { return (float)(ImS64)(f >= 0.0f ? f + 0.5f : f - 0.5f); }
|
||||||
inline float ImCeilFast(float f) { int i = (int)f; return (float)(i + (f > (float)i)); } // Consider using the bit-hack version (search for "0x1p120f").
|
inline float ImCeilFast(float f) { int i = (int)f; return (float)(i + (f > (float)i)); } // Consider using the bit-hack version (search for "0x1p120f").
|
||||||
inline int ImModPositive(int a, int b) { return (a + b) % b; }
|
inline int ImModPositive(int a, int b) { return (a + b) % b; }
|
||||||
@ -652,6 +658,7 @@ struct IMGUI_API ImRect
|
|||||||
void TranslateY(float dy) { Min.y += dy; Max.y += dy; }
|
void TranslateY(float dy) { Min.y += dy; Max.y += dy; }
|
||||||
void ClipWith(const ImRect& r) { Min = ImMax(Min, r.Min); Max = ImMin(Max, r.Max); } // Simple version, may lead to an inverted rectangle, which is fine for Contains/Overlaps test but not for display.
|
void ClipWith(const ImRect& r) { Min = ImMax(Min, r.Min); Max = ImMin(Max, r.Max); } // Simple version, may lead to an inverted rectangle, which is fine for Contains/Overlaps test but not for display.
|
||||||
void ClipWithFull(const ImRect& r) { Min = ImClamp(Min, r.Min, r.Max); Max = ImClamp(Max, r.Min, r.Max); } // Full version, ensure both points are fully clipped.
|
void ClipWithFull(const ImRect& r) { Min = ImClamp(Min, r.Min, r.Max); Max = ImClamp(Max, r.Min, r.Max); } // Full version, ensure both points are fully clipped.
|
||||||
|
void ShrinkClamp(const ImVec2& inset_min, const ImVec2& inset_max) { Min.x = ImMin(Min.x + inset_min.x, Max.x); Min.y = ImMin(Min.y + inset_min.y, Max.y); Max.x = ImMax(Max.x - inset_max.x, Min.x); Max.y = ImMax(Max.y - inset_max.y, Min.y); }
|
||||||
bool IsInverted() const { return Min.x > Max.x || Min.y > Max.y; }
|
bool IsInverted() const { return Min.x > Max.x || Min.y > Max.y; }
|
||||||
ImVec4 ToVec4() const { return ImVec4(Min.x, Min.y, Max.x, Max.y); }
|
ImVec4 ToVec4() const { return ImVec4(Min.x, Min.y, Max.x, Max.y); }
|
||||||
const ImVec4& AsVec4() const { return *(const ImVec4*)&Min.x; }
|
const ImVec4& AsVec4() const { return *(const ImVec4*)&Min.x; }
|
||||||
@ -2935,7 +2942,7 @@ struct ImGuiTabItem
|
|||||||
{
|
{
|
||||||
ImGuiID ID;
|
ImGuiID ID;
|
||||||
ImGuiTabItemFlags Flags;
|
ImGuiTabItemFlags Flags;
|
||||||
int LastFrameVisible;
|
int LastFrameVisible; // TabItem visibility (not contents visibility)
|
||||||
int LastFrameSelected; // This allows us to infer an ordered list of the last activated tabs with little maintenance
|
int LastFrameSelected; // This allows us to infer an ordered list of the last activated tabs with little maintenance
|
||||||
float Offset; // Position relative to beginning of tab bar
|
float Offset; // Position relative to beginning of tab bar
|
||||||
float Width; // Width currently displayed
|
float Width; // Width currently displayed
|
||||||
@ -2945,6 +2952,7 @@ struct ImGuiTabItem
|
|||||||
ImS16 BeginOrder; // BeginTabItem() order, used to re-order tabs after toggling ImGuiTabBarFlags_Reorderable
|
ImS16 BeginOrder; // BeginTabItem() order, used to re-order tabs after toggling ImGuiTabBarFlags_Reorderable
|
||||||
ImS16 IndexDuringLayout; // Index only used during TabBarLayout(). Tabs gets reordered so 'Tabs[n].IndexDuringLayout == n' but may mismatch during additions.
|
ImS16 IndexDuringLayout; // Index only used during TabBarLayout(). Tabs gets reordered so 'Tabs[n].IndexDuringLayout == n' but may mismatch during additions.
|
||||||
bool WantClose; // Marked as closed by SetTabItemClosed()
|
bool WantClose; // Marked as closed by SetTabItemClosed()
|
||||||
|
bool ContentsIsVisible;
|
||||||
|
|
||||||
ImGuiTabItem() { memset((void*)this, 0, sizeof(*this)); LastFrameVisible = LastFrameSelected = -1; RequestedWidth = -1.0f; NameOffset = -1; BeginOrder = IndexDuringLayout = -1; }
|
ImGuiTabItem() { memset((void*)this, 0, sizeof(*this)); LastFrameVisible = LastFrameSelected = -1; RequestedWidth = -1.0f; NameOffset = -1; BeginOrder = IndexDuringLayout = -1; }
|
||||||
};
|
};
|
||||||
@ -2959,7 +2967,7 @@ struct IMGUI_API ImGuiTabBar
|
|||||||
ImGuiID SelectedTabId; // Selected tab/window
|
ImGuiID SelectedTabId; // Selected tab/window
|
||||||
ImGuiID NextSelectedTabId; // Next selected tab/window. Will also trigger a scrolling animation
|
ImGuiID NextSelectedTabId; // Next selected tab/window. Will also trigger a scrolling animation
|
||||||
ImGuiID NextScrollToTabId;
|
ImGuiID NextScrollToTabId;
|
||||||
ImGuiID VisibleTabId; // Can occasionally be != SelectedTabId (e.g. when previewing contents for Ctrl+Tab preview)
|
ImGuiID VisibleTabContentsId; // Can occasionally be != SelectedTabId (e.g. when previewing contents for Ctrl+Tab preview)
|
||||||
int CurrFrameVisible;
|
int CurrFrameVisible;
|
||||||
int PrevFrameVisible;
|
int PrevFrameVisible;
|
||||||
ImRect BarRect;
|
ImRect BarRect;
|
||||||
@ -2981,6 +2989,7 @@ struct IMGUI_API ImGuiTabBar
|
|||||||
ImS8 BeginCount;
|
ImS8 BeginCount;
|
||||||
bool WantLayout;
|
bool WantLayout;
|
||||||
bool VisibleTabWasSubmitted;
|
bool VisibleTabWasSubmitted;
|
||||||
|
bool LastTabItemContentsAppearing;
|
||||||
bool TabsAddedNew; // Set to true when a new tab item or button has been added to the tab bar during last frame
|
bool TabsAddedNew; // Set to true when a new tab item or button has been added to the tab bar during last frame
|
||||||
bool ScrollButtonEnabled;
|
bool ScrollButtonEnabled;
|
||||||
ImS16 TabsActiveCount; // Number of tabs submitted this frame.
|
ImS16 TabsActiveCount; // Number of tabs submitted this frame.
|
||||||
@ -3153,6 +3162,7 @@ struct IMGUI_API ImGuiTable
|
|||||||
ImU32 BorderColorLight;
|
ImU32 BorderColorLight;
|
||||||
float BorderX1;
|
float BorderX1;
|
||||||
float BorderX2;
|
float BorderX2;
|
||||||
|
float BorderSize;
|
||||||
float HostIndentX;
|
float HostIndentX;
|
||||||
float MinColumnWidth;
|
float MinColumnWidth;
|
||||||
float OuterPaddingX;
|
float OuterPaddingX;
|
||||||
@ -3255,6 +3265,7 @@ struct IMGUI_API ImGuiTableTempData
|
|||||||
int TableIndex; // Index in g.Tables.Buf[] pool
|
int TableIndex; // Index in g.Tables.Buf[] pool
|
||||||
float LastTimeActive; // Last timestamp this structure was used
|
float LastTimeActive; // Last timestamp this structure was used
|
||||||
float AngledHeadersExtraWidth; // Used in EndTable()
|
float AngledHeadersExtraWidth; // Used in EndTable()
|
||||||
|
ImRect BorderOuterSizes;
|
||||||
ImVector<ImGuiTableHeaderData> AngledHeadersRequests; // Used in TableAngledHeadersRow() // FIXME: Single instance is enough?
|
ImVector<ImGuiTableHeaderData> AngledHeadersRequests; // Used in TableAngledHeadersRow() // FIXME: Single instance is enough?
|
||||||
|
|
||||||
// Topology change
|
// Topology change
|
||||||
@ -3775,6 +3786,7 @@ namespace ImGui
|
|||||||
IMGUI_API void TabBarQueueReorderFromMousePos(ImGuiTabBar* tab_bar, ImGuiTabItem* tab, ImVec2 mouse_pos);
|
IMGUI_API void TabBarQueueReorderFromMousePos(ImGuiTabBar* tab_bar, ImGuiTabItem* tab, ImVec2 mouse_pos);
|
||||||
IMGUI_API bool TabBarProcessReorder(ImGuiTabBar* tab_bar);
|
IMGUI_API bool TabBarProcessReorder(ImGuiTabBar* tab_bar);
|
||||||
IMGUI_API bool TabItemEx(ImGuiTabBar* tab_bar, const char* label, bool* p_open, ImGuiTabItemFlags flags, ImGuiWindow* docked_window);
|
IMGUI_API bool TabItemEx(ImGuiTabBar* tab_bar, const char* label, bool* p_open, ImGuiTabItemFlags flags, ImGuiWindow* docked_window);
|
||||||
|
IMGUI_API bool TabItemIsContentsAppearing();
|
||||||
IMGUI_API void TabItemSpacing(const char* str_id, ImGuiTabItemFlags flags, float width);
|
IMGUI_API void TabItemSpacing(const char* str_id, ImGuiTabItemFlags flags, float width);
|
||||||
IMGUI_API ImVec2 TabItemCalcSize(const char* label, bool has_close_button_or_unsaved_marker);
|
IMGUI_API ImVec2 TabItemCalcSize(const char* label, bool has_close_button_or_unsaved_marker);
|
||||||
IMGUI_API ImVec2 TabItemCalcSize(ImGuiWindow* window);
|
IMGUI_API ImVec2 TabItemCalcSize(ImGuiWindow* window);
|
||||||
@ -3802,9 +3814,9 @@ namespace ImGui
|
|||||||
|
|
||||||
// Render helpers (those functions don't access any ImGui state!)
|
// Render helpers (those functions don't access any ImGui state!)
|
||||||
IMGUI_API void RenderArrow(ImDrawList* draw_list, ImVec2 pos, ImU32 col, ImGuiDir dir, float scale = 1.0f);
|
IMGUI_API void RenderArrow(ImDrawList* draw_list, ImVec2 pos, ImU32 col, ImGuiDir dir, float scale = 1.0f);
|
||||||
|
IMGUI_API void RenderArrowEx(ImDrawList* draw_list, ImVec2 pos, ImU32 col, float cos_a, float sin_a, float scale, ImVec2 arrow_sizes, float arrow_th);
|
||||||
IMGUI_API void RenderBullet(ImDrawList* draw_list, ImVec2 pos, ImU32 col);
|
IMGUI_API void RenderBullet(ImDrawList* draw_list, ImVec2 pos, ImU32 col);
|
||||||
IMGUI_API void RenderCheckMark(ImDrawList* draw_list, ImVec2 pos, ImU32 col, float sz);
|
IMGUI_API void RenderCheckMark(ImDrawList* draw_list, ImVec2 pos, ImU32 col, float sz);
|
||||||
IMGUI_API void RenderArrowPointingAt(ImDrawList* draw_list, ImVec2 pos, ImVec2 half_sz, ImGuiDir direction, ImU32 col);
|
|
||||||
IMGUI_API void RenderRectFilledInRangeH(ImDrawList* draw_list, const ImRect& rect, ImU32 col, float fill_x0, float fill_x1, float rounding);
|
IMGUI_API void RenderRectFilledInRangeH(ImDrawList* draw_list, const ImRect& rect, ImU32 col, float fill_x0, float fill_x1, float rounding);
|
||||||
IMGUI_API void RenderRectFilledWithHole(ImDrawList* draw_list, const ImRect& outer, const ImRect& inner, ImU32 col, float rounding);
|
IMGUI_API void RenderRectFilledWithHole(ImDrawList* draw_list, const ImRect& outer, const ImRect& inner, ImU32 col, float rounding);
|
||||||
IMGUI_API ImDrawFlags CalcRoundingFlagsForRectInRect(const ImRect& r_in, const ImRect& r_outer, float threshold);
|
IMGUI_API ImDrawFlags CalcRoundingFlagsForRectInRect(const ImRect& r_in, const ImRect& r_outer, float threshold);
|
||||||
@ -4132,6 +4144,8 @@ IMGUI_API void ImFontAtlasBakedAddFontGlyphAdvancedX(ImFontAtlas* a
|
|||||||
IMGUI_API void ImFontAtlasBakedDiscardFontGlyph(ImFontAtlas* atlas, ImFont* font, ImFontBaked* baked, ImFontGlyph* glyph);
|
IMGUI_API void ImFontAtlasBakedDiscardFontGlyph(ImFontAtlas* atlas, ImFont* font, ImFontBaked* baked, ImFontGlyph* glyph);
|
||||||
IMGUI_API void ImFontAtlasBakedSetFontGlyphBitmap(ImFontAtlas* atlas, ImFontBaked* baked, ImFontConfig* src, ImFontGlyph* glyph, ImTextureRect* r, const unsigned char* src_pixels, ImTextureFormat src_fmt, int src_pitch);
|
IMGUI_API void ImFontAtlasBakedSetFontGlyphBitmap(ImFontAtlas* atlas, ImFontBaked* baked, ImFontConfig* src, ImFontGlyph* glyph, ImTextureRect* r, const unsigned char* src_pixels, ImTextureFormat src_fmt, int src_pitch);
|
||||||
|
|
||||||
|
IMGUI_API float ImFontBaked_BuildLoadGlyphAdvanceX(ImFontBaked* baked, ImWchar codepoint);
|
||||||
|
|
||||||
IMGUI_API void ImFontAtlasPackInit(ImFontAtlas* atlas);
|
IMGUI_API void ImFontAtlasPackInit(ImFontAtlas* atlas);
|
||||||
IMGUI_API ImFontAtlasRectId ImFontAtlasPackAddRect(ImFontAtlas* atlas, int w, int h, ImFontAtlasRectEntry* overwrite_entry = NULL);
|
IMGUI_API ImFontAtlasRectId ImFontAtlasPackAddRect(ImFontAtlas* atlas, int w, int h, ImFontAtlasRectEntry* overwrite_entry = NULL);
|
||||||
IMGUI_API ImTextureRect* ImFontAtlasPackGetRect(ImFontAtlas* atlas, ImFontAtlasRectId id);
|
IMGUI_API ImTextureRect* ImFontAtlasPackGetRect(ImFontAtlas* atlas, ImFontAtlasRectId id);
|
||||||
|
|||||||
182
imgui_tables.cpp
182
imgui_tables.cpp
@ -1,4 +1,4 @@
|
|||||||
// dear imgui, v1.93.0
|
// dear imgui, v1.93.1 WIP
|
||||||
// (tables and columns code)
|
// (tables and columns code)
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -478,29 +478,24 @@ bool ImGui::BeginTableEx(const char* name, ImGuiID id, int columns_count, ImG
|
|||||||
temp_data->HostBackupItemWidthStackSize = outer_window->DC.ItemWidthStack.Size;
|
temp_data->HostBackupItemWidthStackSize = outer_window->DC.ItemWidthStack.Size;
|
||||||
inner_window->DC.PrevLineSize = inner_window->DC.CurrLineSize = ImVec2(0.0f, 0.0f);
|
inner_window->DC.PrevLineSize = inner_window->DC.CurrLineSize = ImVec2(0.0f, 0.0f);
|
||||||
|
|
||||||
|
// Border size
|
||||||
|
// FIXME-WIP: Changing this is not currently simple due to ClipRect requirements. Easier to manage with new 1.93 primitives though.
|
||||||
|
const float border_size = table->BorderSize = TABLE_BORDER_SIZE;
|
||||||
|
|
||||||
// Make borders not overlap our contents by offsetting HostClipRect (#6765, #7428, #3752)
|
// Make borders not overlap our contents by offsetting HostClipRect (#6765, #7428, #3752)
|
||||||
// (we normally shouldn't alter HostClipRect as we rely on TableMergeDrawChannels() expanding non-clipped column toward the
|
// - We normally shouldn't alter HostClipRect as we rely on TableMergeDrawChannels() expanding non-clipped column toward the
|
||||||
// limits of that rectangle, in order for ImDrawListSplitter::Merge() to merge the draw commands. However since the overlap
|
// limits of that rectangle, in order for ImDrawListSplitter::Merge() to merge the draw commands. However since the overlap
|
||||||
// problem only affect scrolling tables in this case we can get away with doing it without extra cost).
|
// problem only affect scrolling tables in this case we can get away with doing it without extra cost).
|
||||||
if (inner_window != outer_window)
|
// - (FIXME: Because inner_window's Scrollbar doesn't know about border size, since it's not encoded in window->WindowBorderSize,
|
||||||
{
|
|
||||||
// FIXME: Because inner_window's Scrollbar doesn't know about border size, since it's not encoded in window->WindowBorderSize,
|
|
||||||
// it already overlaps it and doesn't need an extra offset. Ideally we should be able to pass custom border size with
|
// it already overlaps it and doesn't need an extra offset. Ideally we should be able to pass custom border size with
|
||||||
// different x/y values to BeginChild().
|
// different x/y values to BeginChild().)
|
||||||
const float border_size = TABLE_BORDER_SIZE;
|
// - For non-scrolling window, this is applied to table->InnerClipRect below.
|
||||||
if (flags & ImGuiTableFlags_BordersOuterV)
|
temp_data->BorderOuterSizes.Min.x = (flags & ImGuiTableFlags_BordersOuterV) ? border_size : 0.0f;
|
||||||
{
|
temp_data->BorderOuterSizes.Min.y = (flags & ImGuiTableFlags_BordersOuterH) ? border_size : 0.0f;
|
||||||
table->HostClipRect.Min.x = ImMin(table->HostClipRect.Min.x + border_size, table->HostClipRect.Max.x);
|
temp_data->BorderOuterSizes.Max.x = ((flags & ImGuiTableFlags_BordersOuterV) && ((inner_window == outer_window) || inner_window->DecoOuterSizeX2 == 0.0f)) ? border_size : 0.0f;
|
||||||
if (inner_window->DecoOuterSizeX2 == 0.0f)
|
temp_data->BorderOuterSizes.Max.y = ((flags & ImGuiTableFlags_BordersOuterH) && ((inner_window == outer_window) || inner_window->DecoOuterSizeY2 == 0.0f)) ? border_size : 0.0f;
|
||||||
table->HostClipRect.Max.x = ImMax(table->HostClipRect.Max.x - border_size, table->HostClipRect.Min.x);
|
if (inner_window != outer_window)
|
||||||
}
|
table->HostClipRect.ShrinkClamp(temp_data->BorderOuterSizes.Min, temp_data->BorderOuterSizes.Max);
|
||||||
if (flags & ImGuiTableFlags_BordersOuterH)
|
|
||||||
{
|
|
||||||
table->HostClipRect.Min.y = ImMin(table->HostClipRect.Min.y + border_size, table->HostClipRect.Max.y);
|
|
||||||
if (inner_window->DecoOuterSizeY2 == 0.0f)
|
|
||||||
table->HostClipRect.Max.y = ImMax(table->HostClipRect.Max.y - border_size, table->HostClipRect.Min.y);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Padding and Spacing
|
// Padding and Spacing
|
||||||
// - None ........Content..... Pad .....Content........
|
// - None ........Content..... Pad .....Content........
|
||||||
@ -509,29 +504,22 @@ bool ImGui::BeginTableEx(const char* name, ImGuiID id, int columns_count, ImG
|
|||||||
// - PadOuter+PadInner | Pad ..Content.. Pad | Pad ..Content.. Pad |
|
// - PadOuter+PadInner | Pad ..Content.. Pad | Pad ..Content.. Pad |
|
||||||
const bool pad_outer_x = (flags & ImGuiTableFlags_NoPadOuterX) ? false : (flags & ImGuiTableFlags_PadOuterX) ? true : (flags & ImGuiTableFlags_BordersOuterV) != 0;
|
const bool pad_outer_x = (flags & ImGuiTableFlags_NoPadOuterX) ? false : (flags & ImGuiTableFlags_PadOuterX) ? true : (flags & ImGuiTableFlags_BordersOuterV) != 0;
|
||||||
const bool pad_inner_x = (flags & ImGuiTableFlags_NoPadInnerX) ? false : true;
|
const bool pad_inner_x = (flags & ImGuiTableFlags_NoPadInnerX) ? false : true;
|
||||||
const float inner_spacing_for_border = (flags & ImGuiTableFlags_BordersInnerV) ? TABLE_BORDER_SIZE : 0.0f;
|
const float inner_spacing_for_border = (flags & ImGuiTableFlags_BordersInnerV) ? border_size : 0.0f;
|
||||||
const float inner_spacing_explicit = (pad_inner_x && (flags & ImGuiTableFlags_BordersInnerV) == 0) ? g.Style.CellPadding.x : 0.0f;
|
const float inner_spacing_explicit = (pad_inner_x && (flags & ImGuiTableFlags_BordersInnerV) == 0) ? g.Style.CellPadding.x : 0.0f;
|
||||||
const float inner_padding_explicit = (pad_inner_x && (flags & ImGuiTableFlags_BordersInnerV) != 0) ? g.Style.CellPadding.x : 0.0f;
|
const float inner_padding_explicit = (pad_inner_x && (flags & ImGuiTableFlags_BordersInnerV) != 0) ? g.Style.CellPadding.x : 0.0f;
|
||||||
table->CellSpacingX1 = inner_spacing_explicit + inner_spacing_for_border;
|
table->CellSpacingX1 = inner_spacing_explicit + inner_spacing_for_border;
|
||||||
table->CellSpacingX2 = inner_spacing_explicit;
|
table->CellSpacingX2 = inner_spacing_explicit;
|
||||||
table->CellPaddingX = inner_padding_explicit;
|
table->CellPaddingX = inner_padding_explicit;
|
||||||
|
|
||||||
const float outer_padding_for_border = (flags & ImGuiTableFlags_BordersOuterV) ? TABLE_BORDER_SIZE : 0.0f;
|
const float outer_padding_for_border = (flags & ImGuiTableFlags_BordersOuterV) ? border_size : 0.0f;
|
||||||
const float outer_padding_explicit = pad_outer_x ? g.Style.CellPadding.x : 0.0f;
|
const float outer_padding_explicit = pad_outer_x ? g.Style.CellPadding.x : 0.0f;
|
||||||
table->OuterPaddingX = (outer_padding_for_border + outer_padding_explicit) - table->CellPaddingX;
|
table->OuterPaddingX = (outer_padding_for_border + outer_padding_explicit) - table->CellPaddingX;
|
||||||
|
|
||||||
table->CurrentColumn = -1;
|
|
||||||
table->CurrentRow = -1;
|
|
||||||
table->RowBgColorCounter = 0;
|
|
||||||
table->LastRowFlags = ImGuiTableRowFlags_None;
|
|
||||||
table->InnerClipRect = (inner_window == outer_window) ? table->WorkRect : inner_window->ClipRect;
|
|
||||||
table->InnerClipRect.ClipWith(table->WorkRect); // We need this to honor inner_width
|
|
||||||
table->InnerClipRect.ClipWithFull(table->HostClipRect);
|
|
||||||
table->InnerClipRect.Max.y = (flags & ImGuiTableFlags_NoHostExtendY) ? ImMin(table->InnerClipRect.Max.y, inner_window->WorkRect.Max.y) : table->HostClipRect.Max.y;
|
|
||||||
|
|
||||||
table->RowPosY1 = table->RowPosY2 = table->WorkRect.Min.y; // This is needed somehow
|
table->RowPosY1 = table->RowPosY2 = table->WorkRect.Min.y; // This is needed somehow
|
||||||
table->RowTextBaseline = 0.0f; // This will be cleared again by TableBeginRow()
|
table->RowTextBaseline = 0.0f; // This will be cleared again by TableBeginRow()
|
||||||
table->RowCellPaddingY = 0.0f;
|
table->RowCellPaddingY = 0.0f;
|
||||||
|
table->RowBgColorCounter = 0;
|
||||||
|
table->LastRowFlags = ImGuiTableRowFlags_None;
|
||||||
table->FreezeRowsRequest = table->FreezeRowsCount = 0; // This will be setup by TableSetupScrollFreeze(), if any
|
table->FreezeRowsRequest = table->FreezeRowsCount = 0; // This will be setup by TableSetupScrollFreeze(), if any
|
||||||
table->FreezeColumnsRequest = table->FreezeColumnsCount = 0;
|
table->FreezeColumnsRequest = table->FreezeColumnsCount = 0;
|
||||||
table->IsUnfrozenRows = true;
|
table->IsUnfrozenRows = true;
|
||||||
@ -541,6 +529,15 @@ bool ImGui::BeginTableEx(const char* name, ImGuiID id, int columns_count, ImG
|
|||||||
table->AngledHeadersHeight = 0.0f;
|
table->AngledHeadersHeight = 0.0f;
|
||||||
temp_data->AngledHeadersExtraWidth = 0.0f;
|
temp_data->AngledHeadersExtraWidth = 0.0f;
|
||||||
|
|
||||||
|
table->CurrentColumn = -1;
|
||||||
|
table->CurrentRow = -1;
|
||||||
|
table->InnerClipRect = (inner_window == outer_window) ? table->WorkRect : inner_window->ClipRect;
|
||||||
|
if (inner_window == outer_window)
|
||||||
|
table->InnerClipRect.ShrinkClamp(temp_data->BorderOuterSizes.Min, temp_data->BorderOuterSizes.Max);
|
||||||
|
table->InnerClipRect.ClipWith(table->WorkRect); // We need this to honor inner_width
|
||||||
|
table->InnerClipRect.ClipWithFull(table->HostClipRect);
|
||||||
|
if ((flags & ImGuiTableFlags_NoHostExtendY) == 0)
|
||||||
|
table->InnerClipRect.Max.y = table->HostClipRect.Max.y;
|
||||||
// Using opaque colors facilitate overlapping lines of the grid, otherwise we'd need to improve TableDrawBorders()
|
// Using opaque colors facilitate overlapping lines of the grid, otherwise we'd need to improve TableDrawBorders()
|
||||||
table->BorderColorStrong = GetColorU32(ImGuiCol_TableBorderStrong);
|
table->BorderColorStrong = GetColorU32(ImGuiCol_TableBorderStrong);
|
||||||
table->BorderColorLight = GetColorU32(ImGuiCol_TableBorderLight);
|
table->BorderColorLight = GetColorU32(ImGuiCol_TableBorderLight);
|
||||||
@ -1277,7 +1274,7 @@ void ImGui::TableUpdateLayout(ImGuiTable* table)
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (order_n < table->FreezeColumnsCount)
|
if (order_n < table->FreezeColumnsCount)
|
||||||
host_clip_rect.Min.x = ImClamp(column->MaxX + TABLE_BORDER_SIZE, host_clip_rect.Min.x, host_clip_rect.Max.x);
|
host_clip_rect.Min.x = ImClamp(column->MaxX + table->BorderSize, host_clip_rect.Min.x, host_clip_rect.Max.x);
|
||||||
|
|
||||||
offset_x += column->WidthGiven + table->CellSpacingX1 + table->CellSpacingX2 + table->CellPaddingX * 2.0f;
|
offset_x += column->WidthGiven + table->CellSpacingX1 + table->CellSpacingX2 + table->CellPaddingX * 2.0f;
|
||||||
}
|
}
|
||||||
@ -1309,10 +1306,12 @@ void ImGui::TableUpdateLayout(ImGuiTable* table)
|
|||||||
table->Flags &= ~ImGuiTableFlags_NoHostExtendX;
|
table->Flags &= ~ImGuiTableFlags_NoHostExtendX;
|
||||||
if (table->Flags & ImGuiTableFlags_NoHostExtendX)
|
if (table->Flags & ImGuiTableFlags_NoHostExtendX)
|
||||||
{
|
{
|
||||||
table->OuterRect.Max.x = table->WorkRect.Max.x = unused_x1;
|
const float border_size_outer_w = (table->Flags & ImGuiTableFlags_BordersOuterV) ? table->BorderSize : 0.0f;
|
||||||
table->InnerClipRect.Max.x = ImMin(table->InnerClipRect.Max.x, unused_x1);
|
table->OuterRect.Max.x = table->WorkRect.Max.x = ImMin(table->OuterRect.Max.x, unused_x1 + border_size_outer_w);
|
||||||
|
table->InnerClipRect.Max.x = ImClamp(table->OuterRect.Max.x - border_size_outer_w, table->InnerClipRect.Min.x, table->InnerClipRect.Max.x);
|
||||||
}
|
}
|
||||||
table->InnerWindow->ParentWorkRect = table->WorkRect;
|
table->InnerWindow->ParentWorkRect = table->WorkRect; // Used by Selectable/TreeNode highlight
|
||||||
|
table->InnerWindow->ParentWorkRect.ShrinkClamp(temp_data->BorderOuterSizes.Min, temp_data->BorderOuterSizes.Max);
|
||||||
table->BorderX1 = table->InnerClipRect.Min.x;
|
table->BorderX1 = table->InnerClipRect.Min.x;
|
||||||
table->BorderX2 = table->InnerClipRect.Max.x;
|
table->BorderX2 = table->InnerClipRect.Max.x;
|
||||||
|
|
||||||
@ -1503,10 +1502,10 @@ void ImGui::EndTable()
|
|||||||
// but since the later is likely to be impossible to do we'd rather update both axes together.
|
// but since the later is likely to be impossible to do we'd rather update both axes together.
|
||||||
if (table->Flags & ImGuiTableFlags_ScrollX)
|
if (table->Flags & ImGuiTableFlags_ScrollX)
|
||||||
{
|
{
|
||||||
const float outer_padding_for_border = (table->Flags & ImGuiTableFlags_BordersOuterV) ? TABLE_BORDER_SIZE : 0.0f;
|
const float border_size_outer_w = (table->Flags & ImGuiTableFlags_BordersOuterV) ? table->BorderSize : 0.0f;
|
||||||
float max_pos_x = inner_window->DC.CursorMaxPos.x;
|
float max_pos_x = inner_window->DC.CursorMaxPos.x;
|
||||||
if (table->RightMostEnabledColumn != -1)
|
if (table->RightMostEnabledColumn != -1)
|
||||||
max_pos_x = ImMax(max_pos_x, table->Columns[table->RightMostEnabledColumn].WorkMaxX + table->CellPaddingX + table->OuterPaddingX - outer_padding_for_border);
|
max_pos_x = ImMax(max_pos_x, table->Columns[table->RightMostEnabledColumn].WorkMaxX + table->CellPaddingX + table->OuterPaddingX - border_size_outer_w);
|
||||||
if (table->ResizedColumn != -1)
|
if (table->ResizedColumn != -1)
|
||||||
max_pos_x = ImMax(max_pos_x, table->ResizeLockMinContentsX2);
|
max_pos_x = ImMax(max_pos_x, table->ResizeLockMinContentsX2);
|
||||||
inner_window->DC.CursorMaxPos.x = max_pos_x + table->TempData->AngledHeadersExtraWidth;
|
inner_window->DC.CursorMaxPos.x = max_pos_x + table->TempData->AngledHeadersExtraWidth;
|
||||||
@ -2168,7 +2167,6 @@ void ImGui::TableEndRow(ImGuiTable* table)
|
|||||||
|
|
||||||
// Decide of top border color
|
// Decide of top border color
|
||||||
ImU32 top_border_col = 0;
|
ImU32 top_border_col = 0;
|
||||||
const float border_size = TABLE_BORDER_SIZE;
|
|
||||||
if (table->CurrentRow > 0 && (table->Flags & ImGuiTableFlags_BordersInnerH))
|
if (table->CurrentRow > 0 && (table->Flags & ImGuiTableFlags_BordersInnerH))
|
||||||
top_border_col = (table->LastRowFlags & ImGuiTableRowFlags_Headers) ? table->BorderColorStrong : table->BorderColorLight;
|
top_border_col = (table->LastRowFlags & ImGuiTableRowFlags_Headers) ? table->BorderColorStrong : table->BorderColorLight;
|
||||||
|
|
||||||
@ -2215,11 +2213,11 @@ void ImGui::TableEndRow(ImGuiTable* table)
|
|||||||
|
|
||||||
// Draw top border
|
// Draw top border
|
||||||
if (top_border_col && bg_y1 >= table->BgClipRect.Min.y && bg_y1 < table->BgClipRect.Max.y)
|
if (top_border_col && bg_y1 >= table->BgClipRect.Min.y && bg_y1 < table->BgClipRect.Max.y)
|
||||||
window->DrawList->AddLineH(table->BorderX1, table->BorderX2, bg_y1, top_border_col, border_size);
|
window->DrawList->AddLineH(table->BorderX1, table->BorderX2, bg_y1, top_border_col, table->BorderSize, ImDrawFlags_StrokeCenterBiased);
|
||||||
|
|
||||||
// Draw bottom border at the row unfreezing mark (always strong)
|
// Draw bottom border at the row unfreezing mark (always strong)
|
||||||
if (draw_strong_bottom_border && bg_y2 >= table->BgClipRect.Min.y && bg_y2 < table->BgClipRect.Max.y)
|
if (draw_strong_bottom_border && bg_y2 >= table->BgClipRect.Min.y && bg_y2 < table->BgClipRect.Max.y)
|
||||||
window->DrawList->AddLineH(table->BorderX1, table->BorderX2, bg_y2, table->BorderColorStrong, border_size);
|
window->DrawList->AddLineH(table->BorderX1, table->BorderX2, bg_y2, table->BorderColorStrong, table->BorderSize, ImDrawFlags_StrokeCenterBiased);
|
||||||
}
|
}
|
||||||
|
|
||||||
// End frozen rows (when we are past the last frozen row line, teleport cursor and alter clipping rectangle)
|
// End frozen rows (when we are past the last frozen row line, teleport cursor and alter clipping rectangle)
|
||||||
@ -2417,7 +2415,7 @@ void ImGui::TableEndCell(ImGuiTable* table)
|
|||||||
//-------------------------------------------------------------------------
|
//-------------------------------------------------------------------------
|
||||||
// [SECTION] Tables: Columns width management
|
// [SECTION] Tables: Columns width management
|
||||||
//-------------------------------------------------------------------------
|
//-------------------------------------------------------------------------
|
||||||
// - TableGetMaxColumnWidth() [Internal]
|
// - TableCalcMaxColumnWidth() [Internal]
|
||||||
// - TableGetColumnWidthAuto() [Internal]
|
// - TableGetColumnWidthAuto() [Internal]
|
||||||
// - TableSetColumnWidth()
|
// - TableSetColumnWidth()
|
||||||
// - TableSetColumnWidthAutoSingle() [Internal]
|
// - TableSetColumnWidthAutoSingle() [Internal]
|
||||||
@ -2734,6 +2732,10 @@ void ImGui::TableSetupDrawChannels(ImGuiTable* table)
|
|||||||
table->Bg0ClipRectForDrawCmd = table->OuterWindow->ClipRect;
|
table->Bg0ClipRectForDrawCmd = table->OuterWindow->ClipRect;
|
||||||
table->Bg2ClipRectForDrawCmd = table->HostClipRect;
|
table->Bg2ClipRectForDrawCmd = table->HostClipRect;
|
||||||
IM_ASSERT(table->BgClipRect.Min.y <= table->BgClipRect.Max.y);
|
IM_ASSERT(table->BgClipRect.Min.y <= table->BgClipRect.Max.y);
|
||||||
|
if (table->Flags & ImGuiTableFlags_NoHostExtendX)
|
||||||
|
table->Bg2ClipRectForDrawCmd.Max.x = ImMin(table->Bg2ClipRectForDrawCmd.Max.x, table->BgClipRect.Max.x); // Don't apply to Bg0: shapes in Bg0 are already CPU clipped and it makes merging fails.
|
||||||
|
if (table->Flags & ImGuiTableFlags_NoHostExtendY)
|
||||||
|
table->Bg2ClipRectForDrawCmd.Max.y = ImMin(table->Bg2ClipRectForDrawCmd.Max.y, table->BgClipRect.Max.y); // "
|
||||||
}
|
}
|
||||||
|
|
||||||
// This function reorder draw channels based on matching clip rectangle, to facilitate merging them. Called by EndTable().
|
// This function reorder draw channels based on matching clip rectangle, to facilitate merging them. Called by EndTable().
|
||||||
@ -2891,7 +2893,7 @@ void ImGui::TableMergeDrawChannels(ImGuiTable* table)
|
|||||||
merge_clip_rect.Min.x = ImMin(merge_clip_rect.Min.x, host_rect.Min.x);
|
merge_clip_rect.Min.x = ImMin(merge_clip_rect.Min.x, host_rect.Min.x);
|
||||||
if ((merge_group_n & 2) == 0 || !has_freeze_v)
|
if ((merge_group_n & 2) == 0 || !has_freeze_v)
|
||||||
merge_clip_rect.Min.y = ImMin(merge_clip_rect.Min.y, host_rect.Min.y);
|
merge_clip_rect.Min.y = ImMin(merge_clip_rect.Min.y, host_rect.Min.y);
|
||||||
if ((merge_group_n & 1) != 0)
|
if ((merge_group_n & 1) != 0 && (table->Flags & ImGuiTableFlags_NoHostExtendX) == 0)
|
||||||
merge_clip_rect.Max.x = ImMax(merge_clip_rect.Max.x, host_rect.Max.x);
|
merge_clip_rect.Max.x = ImMax(merge_clip_rect.Max.x, host_rect.Max.x);
|
||||||
if ((merge_group_n & 2) != 0 && (table->Flags & ImGuiTableFlags_NoHostExtendY) == 0)
|
if ((merge_group_n & 2) != 0 && (table->Flags & ImGuiTableFlags_NoHostExtendY) == 0)
|
||||||
merge_clip_rect.Max.y = ImMax(merge_clip_rect.Max.y, host_rect.Max.y);
|
merge_clip_rect.Max.y = ImMax(merge_clip_rect.Max.y, host_rect.Max.y);
|
||||||
@ -2951,19 +2953,52 @@ static ImU32 TableGetColumnBorderCol(ImGuiTable* table, int order_n, int column_
|
|||||||
void ImGui::TableDrawBorders(ImGuiTable* table)
|
void ImGui::TableDrawBorders(ImGuiTable* table)
|
||||||
{
|
{
|
||||||
ImGuiWindow* inner_window = table->InnerWindow;
|
ImGuiWindow* inner_window = table->InnerWindow;
|
||||||
if (!table->OuterWindow->ClipRect.Overlaps(table->OuterRect))
|
if (!table->OuterWindow->ClipRect.Overlaps(table->OuterRect)) // Note how OuterWindow->ClipRect == table->Bg0ClipRectForDrawCmd
|
||||||
return;
|
return;
|
||||||
|
|
||||||
ImDrawList* inner_drawlist = inner_window->DrawList;
|
ImDrawList* inner_drawlist = inner_window->DrawList;
|
||||||
table->DrawSplitter->SetCurrentChannel(inner_drawlist, TABLE_DRAW_CHANNEL_BG0);
|
table->DrawSplitter->SetCurrentChannel(inner_drawlist, TABLE_DRAW_CHANNEL_BG0);
|
||||||
inner_drawlist->PushClipRect(table->Bg0ClipRectForDrawCmd.Min, table->Bg0ClipRectForDrawCmd.Max, false);
|
inner_drawlist->PushClipRect(table->OuterWindow->ClipRect.Min, table->OuterWindow->ClipRect.Max, false);
|
||||||
|
|
||||||
|
// For e.g. non scrolling table we limit vertex coordinates in order to keep ImDrawCmd AABB roughly within visible range.
|
||||||
|
const float border_size_outer_w = (table->Flags & ImGuiTableFlags_BordersOuterV) ? table->BorderSize : 0.0f;
|
||||||
|
const float border_size_outer_h = (table->Flags & ImGuiTableFlags_BordersOuterH) ? table->BorderSize : 0.0f;
|
||||||
|
const float border_size_inner = table->BorderSize;
|
||||||
|
const float draw_y2_limit = table->OuterWindow->ClipRect.Max.y + (2.0f * ImMax(border_size_outer_h, inner_drawlist->_FringeScale));
|
||||||
|
|
||||||
|
// Draw outer border
|
||||||
|
if (table->Flags & ImGuiTableFlags_BordersOuter)
|
||||||
|
{
|
||||||
|
// Display outer border offset by 1 which is a simple way to display it without adding an extra draw call
|
||||||
|
// (Without the offset, in outer_window it would be rendered behind cells, because child windows are above their
|
||||||
|
// parent. In inner_window, it won't reach out over scrollbars. Another weird solution would be to display part
|
||||||
|
// of it in inner window, and the part that's over scrollbars in the outer window..)
|
||||||
|
// Either solution currently won't allow us to use a larger border size: the border would clipped.
|
||||||
|
ImRect outer_border = table->OuterRect;
|
||||||
|
outer_border.Max.y = ImMin(outer_border.Max.y, draw_y2_limit); // Clamp but keep bottom border non-visible.
|
||||||
|
const ImU32 outer_col = table->BorderColorStrong;
|
||||||
|
if ((table->Flags & ImGuiTableFlags_BordersOuter) == ImGuiTableFlags_BordersOuter)
|
||||||
|
{
|
||||||
|
inner_drawlist->AddRect(outer_border.Min, outer_border.Max, outer_col, 0.0f, border_size_outer_w);
|
||||||
|
}
|
||||||
|
else if (table->Flags & ImGuiTableFlags_BordersOuterV)
|
||||||
|
{
|
||||||
|
inner_drawlist->AddLineV(outer_border.Min.x, outer_border.Min.y, outer_border.Max.y, outer_col, border_size_outer_w);
|
||||||
|
inner_drawlist->AddLineV(outer_border.Max.x - border_size_outer_w, outer_border.Min.y, outer_border.Max.y, outer_col, border_size_outer_w);
|
||||||
|
}
|
||||||
|
else if (table->Flags & ImGuiTableFlags_BordersOuterH)
|
||||||
|
{
|
||||||
|
inner_drawlist->AddLineH(outer_border.Min.x, outer_border.Max.x, outer_border.Min.y, outer_col, border_size_outer_h);
|
||||||
|
inner_drawlist->AddLineH(outer_border.Min.x, outer_border.Max.x, outer_border.Max.y - border_size_outer_h, outer_col, border_size_outer_h);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Draw inner border and resizing feedback
|
// Draw inner border and resizing feedback
|
||||||
ImGuiTableInstanceData* table_instance = TableGetInstanceData(table, table->InstanceCurrent);
|
ImGuiTableInstanceData* table_instance = TableGetInstanceData(table, table->InstanceCurrent);
|
||||||
const float border_size = TABLE_BORDER_SIZE;
|
const float draw_y1 = ImMax(table->InnerRect.Min.y, (table->FreezeRowsCount >= 1 ? table->InnerRect.Min.y : table->WorkRect.Min.y) + table->AngledHeadersHeight) + ((table->Flags & ImGuiTableFlags_BordersOuterH) ? border_size_outer_h : 0.0f);
|
||||||
const float draw_y1 = ImMax(table->InnerRect.Min.y, (table->FreezeRowsCount >= 1 ? table->InnerRect.Min.y : table->WorkRect.Min.y) + table->AngledHeadersHeight) + ((table->Flags & ImGuiTableFlags_BordersOuterH) ? border_size : 0.0f);
|
const float draw_y2_body = ImMin(table->InnerRect.Max.y - border_size_outer_h, draw_y2_limit);
|
||||||
const float draw_y2_body = table->InnerRect.Max.y;
|
const float draw_y2_head = table->IsUsingHeaders ? ImMin(draw_y2_body, (table->FreezeRowsCount >= 1 ? table->InnerRect.Min.y : table->WorkRect.Min.y) + table_instance->LastTopHeadersRowHeight) : draw_y1;
|
||||||
const float draw_y2_head = table->IsUsingHeaders ? ImMin(table->InnerRect.Max.y, (table->FreezeRowsCount >= 1 ? table->InnerRect.Min.y : table->WorkRect.Min.y) + table_instance->LastTopHeadersRowHeight) : draw_y1;
|
|
||||||
if (table->Flags & ImGuiTableFlags_BordersInnerV)
|
if (table->Flags & ImGuiTableFlags_BordersInnerV)
|
||||||
{
|
{
|
||||||
for (int order_n = 0; order_n < table->ColumnsCount; order_n++)
|
for (int order_n = 0; order_n < table->ColumnsCount; order_n++)
|
||||||
@ -2977,14 +3012,21 @@ void ImGui::TableDrawBorders(ImGuiTable* table)
|
|||||||
const bool is_resized = (table->ResizedColumn == column_n) && (table->InstanceInteracted == table->InstanceCurrent);
|
const bool is_resized = (table->ResizedColumn == column_n) && (table->InstanceInteracted == table->InstanceCurrent);
|
||||||
const bool is_resizable = (column->Flags & (ImGuiTableColumnFlags_NoResize | ImGuiTableColumnFlags_NoDirectResize_)) == 0;
|
const bool is_resizable = (column->Flags & (ImGuiTableColumnFlags_NoResize | ImGuiTableColumnFlags_NoDirectResize_)) == 0;
|
||||||
const bool is_frozen_separator = (table->FreezeColumnsCount == order_n + 1);
|
const bool is_frozen_separator = (table->FreezeColumnsCount == order_n + 1);
|
||||||
if (column->MaxX > table->InnerClipRect.Max.x && !is_resized)
|
|
||||||
|
// FIXME-TABLE: 1-off display hack for right-most column when resizable (!Scroll && Resizable && (NoHostExtendX || RightMostIsFixed)).
|
||||||
|
// Fixing actual width would involve altering width_avail in layout and TableCalcMaxColumnWidth(), which would drop the property
|
||||||
|
// ColumnsGivenWidth == Outer Allocated Width. Worth reworking, but would only make sense if we accept that BorderSize affects layout.
|
||||||
|
float draw_x2 = column->MaxX;
|
||||||
|
if (draw_x2 >= table->InnerClipRect.Max.x && draw_x2 - 1.0f <= table->InnerClipRect.Max.x)
|
||||||
|
draw_x2 = table->InnerClipRect.Max.x;
|
||||||
|
if (draw_x2 >= table->InnerClipRect.Max.x && !is_resized && !is_hovered)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
// Decide whether right-most column is visible
|
// Decide whether right-most column is visible
|
||||||
if (column->NextEnabledColumn == -1 && !is_resizable)
|
if (column->NextEnabledColumn == -1 && !is_resizable)
|
||||||
if ((table->Flags & ImGuiTableFlags_SizingMask_) != ImGuiTableFlags_SizingFixedSame || (table->Flags & ImGuiTableFlags_NoHostExtendX))
|
if ((table->Flags & ImGuiTableFlags_SizingMask_) != ImGuiTableFlags_SizingFixedSame || (table->Flags & ImGuiTableFlags_NoHostExtendX))
|
||||||
continue;
|
continue;
|
||||||
if (column->MaxX <= column->ClipRect.Min.x) // FIXME-TABLE FIXME-STYLE: Assume BorderSize==1, this is problematic if we want to increase the border size..
|
if (draw_x2 <= column->ClipRect.Min.x) // FIXME-TABLE FIXME-STYLE: Assume BorderSize==1, this is problematic if we want to increase the border size..
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
// Draw in outer window so right-most column won't be clipped
|
// Draw in outer window so right-most column won't be clipped
|
||||||
@ -2996,43 +3038,16 @@ void ImGui::TableDrawBorders(ImGuiTable* table)
|
|||||||
else if ((table->Flags & (ImGuiTableFlags_NoBordersInBodyUntilResize | ImGuiTableFlags_NoBordersInBody)) == 0)
|
else if ((table->Flags & (ImGuiTableFlags_NoBordersInBodyUntilResize | ImGuiTableFlags_NoBordersInBody)) == 0)
|
||||||
draw_y2 = draw_y2_body;
|
draw_y2 = draw_y2_body;
|
||||||
if (draw_y2 > draw_y1)
|
if (draw_y2 > draw_y1)
|
||||||
inner_drawlist->AddLineV(column->MaxX, draw_y1, draw_y2, TableGetColumnBorderCol(table, order_n, column_n), border_size);
|
inner_drawlist->AddLineV(draw_x2, draw_y1, draw_y2, TableGetColumnBorderCol(table, order_n, column_n), border_size_inner);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Draw outer border
|
|
||||||
// FIXME: could use AddRect or explicit VLine/HLine helper?
|
|
||||||
if (table->Flags & ImGuiTableFlags_BordersOuter)
|
|
||||||
{
|
|
||||||
// Display outer border offset by 1 which is a simple way to display it without adding an extra draw call
|
|
||||||
// (Without the offset, in outer_window it would be rendered behind cells, because child windows are above their
|
|
||||||
// parent. In inner_window, it won't reach out over scrollbars. Another weird solution would be to display part
|
|
||||||
// of it in inner window, and the part that's over scrollbars in the outer window..)
|
|
||||||
// Either solution currently won't allow us to use a larger border size: the border would clipped.
|
|
||||||
const ImRect outer_border = table->OuterRect;
|
|
||||||
const ImU32 outer_col = table->BorderColorStrong;
|
|
||||||
if ((table->Flags & ImGuiTableFlags_BordersOuter) == ImGuiTableFlags_BordersOuter)
|
|
||||||
{
|
|
||||||
inner_drawlist->AddRect(outer_border.Min, outer_border.Max, outer_col, 0.0f, border_size);
|
|
||||||
}
|
|
||||||
else if (table->Flags & ImGuiTableFlags_BordersOuterV)
|
|
||||||
{
|
|
||||||
inner_drawlist->AddLineV(outer_border.Min.x, outer_border.Min.y, outer_border.Max.y, outer_col, border_size);
|
|
||||||
inner_drawlist->AddLineV(outer_border.Max.x - border_size, outer_border.Min.y, outer_border.Max.y, outer_col, border_size);
|
|
||||||
}
|
|
||||||
else if (table->Flags & ImGuiTableFlags_BordersOuterH)
|
|
||||||
{
|
|
||||||
inner_drawlist->AddLineH(outer_border.Min.x, outer_border.Max.x, outer_border.Min.y, outer_col, border_size);
|
|
||||||
inner_drawlist->AddLineH(outer_border.Min.x, outer_border.Max.x, outer_border.Max.y - border_size, outer_col, border_size);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if ((table->Flags & ImGuiTableFlags_BordersInnerH) && table->RowPosY2 < table->OuterRect.Max.y)
|
if ((table->Flags & ImGuiTableFlags_BordersInnerH) && table->RowPosY2 < table->OuterRect.Max.y)
|
||||||
{
|
{
|
||||||
// Draw bottom-most row border between it is above outer border.
|
// Draw bottom-most row border between it and above outer border.
|
||||||
const float h_inset = (table->Flags & ImGuiTableFlags_BordersOuterV) ? border_size : 0.0f;
|
|
||||||
const float border_y = table->RowPosY2;
|
const float border_y = table->RowPosY2;
|
||||||
if (border_y >= table->BgClipRect.Min.y && border_y < table->BgClipRect.Max.y)
|
if (border_y >= table->BgClipRect.Min.y && border_y < table->BgClipRect.Max.y)
|
||||||
inner_drawlist->AddLineH(table->BorderX1 + h_inset, table->BorderX2 - h_inset, border_y, table->BorderColorLight, border_size);
|
inner_drawlist->AddLineH(table->BorderX1, table->BorderX2, border_y, table->BorderColorLight, border_size_inner);
|
||||||
}
|
}
|
||||||
|
|
||||||
inner_drawlist->PopClipRect();
|
inner_drawlist->PopClipRect();
|
||||||
@ -3435,7 +3450,7 @@ void ImGui::TableHeader(const char* label)
|
|||||||
PopStyleColor();
|
PopStyleColor();
|
||||||
x += w_sort_text;
|
x += w_sort_text;
|
||||||
}
|
}
|
||||||
RenderArrow(window->DrawList, ImVec2(x, y), GetColorU32(ImGuiCol_Text), column->SortDirection == ImGuiSortDirection_Ascending ? ImGuiDir_Up : ImGuiDir_Down, ARROW_SCALE);
|
RenderArrow(window->DrawList, ImVec2(x + (g.FontSize * (1.0f - ARROW_SCALE) * 0.5f) , y), GetColorU32(ImGuiCol_Text), column->SortDirection == ImGuiSortDirection_Ascending ? ImGuiDir_Up : ImGuiDir_Down, ARROW_SCALE);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Handle clicking on column header to adjust Sort Order
|
// Handle clicking on column header to adjust Sort Order
|
||||||
@ -3625,8 +3640,9 @@ void ImGui::TableAngledHeadersRowEx(ImGuiID row_id, float angle, float max_label
|
|||||||
if (pass == 1)
|
if (pass == 1)
|
||||||
{
|
{
|
||||||
// Draw border
|
// Draw border
|
||||||
const float border_size = TABLE_BORDER_SIZE;
|
draw_list->AddLine(
|
||||||
draw_list->AddLine(bg_shape[0] + ImVec2(border_size * 0.5f, 0.0f), bg_shape[3] + ImVec2(border_size * 0.5f, 0.0f), TableGetColumnBorderCol(table, order_n, column_n), border_size);
|
bg_shape[0] + ImVec2(table->BorderSize * 0.5f, 0.0f),
|
||||||
|
bg_shape[3] + ImVec2(table->BorderSize * 0.5f, 0.0f), TableGetColumnBorderCol(table, order_n, column_n), table->BorderSize);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
PopClipRect();
|
PopClipRect();
|
||||||
|
|||||||
@ -1,4 +1,4 @@
|
|||||||
// dear imgui, v1.93.0
|
// dear imgui, v1.93.1 WIP
|
||||||
// (widgets code)
|
// (widgets code)
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -2650,10 +2650,12 @@ bool ImGui::DragBehaviorT(ImGuiDataType data_type, TYPE* v, float v_speed, const
|
|||||||
if (is_wrapped)
|
if (is_wrapped)
|
||||||
{
|
{
|
||||||
// Wrap values
|
// Wrap values
|
||||||
if (v_cur < v_min)
|
const TYPE range = v_max - v_min + (is_floating_point ? 0 : 1);
|
||||||
v_cur += v_max - v_min + (is_floating_point ? 0 : 1);
|
TYPE offset = ImMod((TYPE)(v_cur - v_min), range);
|
||||||
if (v_cur > v_max)
|
if (offset < 0)
|
||||||
v_cur -= v_max - v_min + (is_floating_point ? 0 : 1);
|
offset += range;
|
||||||
|
v_cur = (TYPE)(v_min + offset);
|
||||||
|
IM_ASSERT_PARANOID(v_cur >= v_min && v_cur <= v_max);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -2700,7 +2702,7 @@ bool ImGui::DragBehavior(ImGuiID id, ImGuiDataType data_type, void* p_v, float v
|
|||||||
{
|
{
|
||||||
// Canceling action reverts to initial value
|
// Canceling action reverts to initial value
|
||||||
size_t data_size = DataTypeGetInfo(data_type)->Size;
|
size_t data_size = DataTypeGetInfo(data_type)->Size;
|
||||||
bool value_changed = memcmp(p_v, &g.ActiveIdValueOnActivation, data_size);
|
bool value_changed = memcmp(p_v, &g.ActiveIdValueOnActivation, data_size) != 0;
|
||||||
memcpy(p_v, &g.ActiveIdValueOnActivation, data_size);
|
memcpy(p_v, &g.ActiveIdValueOnActivation, data_size);
|
||||||
ClearActiveID();
|
ClearActiveID();
|
||||||
return value_changed;
|
return value_changed;
|
||||||
@ -3322,7 +3324,7 @@ bool ImGui::SliderBehavior(const ImRect& bb, ImGuiID id, ImGuiDataType data_type
|
|||||||
{
|
{
|
||||||
// Canceling action reverts to initial value
|
// Canceling action reverts to initial value
|
||||||
size_t data_size = DataTypeGetInfo(data_type)->Size;
|
size_t data_size = DataTypeGetInfo(data_type)->Size;
|
||||||
bool value_changed = memcmp(p_v, &g.ActiveIdValueOnActivation, data_size);
|
bool value_changed = memcmp(p_v, &g.ActiveIdValueOnActivation, data_size) != 0;
|
||||||
memcpy(p_v, &g.ActiveIdValueOnActivation, data_size);
|
memcpy(p_v, &g.ActiveIdValueOnActivation, data_size);
|
||||||
ClearActiveID();
|
ClearActiveID();
|
||||||
return value_changed;
|
return value_changed;
|
||||||
@ -4471,7 +4473,7 @@ void ImGuiInputTextCallbackData::InsertChars(int pos, const char* new_text, cons
|
|||||||
if (new_text_len + BufTextLen + 1 > obj->TextA.Size && is_resizable && !is_readonly)
|
if (new_text_len + BufTextLen + 1 > obj->TextA.Size && is_resizable && !is_readonly)
|
||||||
{
|
{
|
||||||
IM_ASSERT(Buf == obj->TextA.Data);
|
IM_ASSERT(Buf == obj->TextA.Data);
|
||||||
int new_buf_size = BufTextLen + ImClamp(new_text_len * 4, 32, ImMax(256, new_text_len)) + 1;
|
int new_buf_size = BufTextLen + ImClamp(new_text_len, 32, ImMax(256, new_text_len)) + 1;
|
||||||
obj->TextA.resize(new_buf_size + 1);
|
obj->TextA.resize(new_buf_size + 1);
|
||||||
obj->TextSrc = obj->TextA.Data;
|
obj->TextSrc = obj->TextA.Data;
|
||||||
Buf = obj->TextA.Data;
|
Buf = obj->TextA.Data;
|
||||||
@ -6176,14 +6178,23 @@ bool ImGui::ColorPicker3(const char* label, float col[3], ImGuiColorEditFlags fl
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Helper for RenderArrowsForVerticalBar(). 'pos' is position of the arrow tip. half_sz.x is length from base to tip. half_sz.y is length on each side.
|
||||||
|
static void RenderArrowPointingAt(ImDrawList* draw_list, ImVec2 p, ImVec2 half_sz, ImGuiDir direction, ImU32 col)
|
||||||
|
{
|
||||||
|
if (direction == ImGuiDir_Left) { draw_list->AddTriangleFilled(ImVec2(p.x + half_sz.x, p.y - half_sz.y), ImVec2(p.x + half_sz.x, p.y + half_sz.y), p, col); }
|
||||||
|
if (direction == ImGuiDir_Right) { draw_list->AddTriangleFilled(ImVec2(p.x - half_sz.x, p.y + half_sz.y), ImVec2(p.x - half_sz.x, p.y - half_sz.y), p, col); }
|
||||||
|
//if (direction == ImGuiDir_Up) { draw_list->AddTriangleFilled(ImVec2(p.x + half_sz.x, p.y + half_sz.y), ImVec2(p.x - half_sz.x, p.y + half_sz.y), p, col); }
|
||||||
|
//if (direction == ImGuiDir_Down){ draw_list->AddTriangleFilled(ImVec2(p.x - half_sz.x, p.y - half_sz.y), ImVec2(p.x + half_sz.x, p.y - half_sz.y), p, col); }
|
||||||
|
}
|
||||||
|
|
||||||
// Helper for ColorPicker4()
|
// Helper for ColorPicker4()
|
||||||
static void RenderArrowsForVerticalBar(ImDrawList* draw_list, ImVec2 pos, ImVec2 half_sz, float bar_w, float alpha)
|
static void RenderArrowsForVerticalBar(ImDrawList* draw_list, ImVec2 p, ImVec2 half_sz, float bar_w, float alpha)
|
||||||
{
|
{
|
||||||
ImU32 alpha8 = IM_F32_TO_INT8_SAT(alpha);
|
ImU32 alpha8 = IM_F32_TO_INT8_SAT(alpha);
|
||||||
ImGui::RenderArrowPointingAt(draw_list, ImVec2(pos.x + half_sz.x + 1, pos.y), ImVec2(half_sz.x + 2, half_sz.y + 1), ImGuiDir_Right, IM_COL32(0,0,0,alpha8));
|
RenderArrowPointingAt(draw_list, ImVec2(p.x + half_sz.x + 1, p.y), ImVec2(half_sz.x + 2, half_sz.y + 1), ImGuiDir_Right, IM_COL32(0,0,0,alpha8));
|
||||||
ImGui::RenderArrowPointingAt(draw_list, ImVec2(pos.x + half_sz.x, pos.y), half_sz, ImGuiDir_Right, IM_COL32(255,255,255,alpha8));
|
RenderArrowPointingAt(draw_list, ImVec2(p.x + half_sz.x, p.y), half_sz, ImGuiDir_Right, IM_COL32(255,255,255,alpha8));
|
||||||
ImGui::RenderArrowPointingAt(draw_list, ImVec2(pos.x + bar_w - half_sz.x - 1, pos.y), ImVec2(half_sz.x + 2, half_sz.y + 1), ImGuiDir_Left, IM_COL32(0,0,0,alpha8));
|
RenderArrowPointingAt(draw_list, ImVec2(p.x + bar_w - half_sz.x - 1, p.y), ImVec2(half_sz.x + 2, half_sz.y + 1), ImGuiDir_Left, IM_COL32(0,0,0,alpha8));
|
||||||
ImGui::RenderArrowPointingAt(draw_list, ImVec2(pos.x + bar_w - half_sz.x, pos.y), half_sz, ImGuiDir_Left, IM_COL32(255,255,255,alpha8));
|
RenderArrowPointingAt(draw_list, ImVec2(p.x + bar_w - half_sz.x, p.y), half_sz, ImGuiDir_Left, IM_COL32(255,255,255,alpha8));
|
||||||
}
|
}
|
||||||
|
|
||||||
// Note: ColorPicker4() only accesses 3 floats if ImGuiColorEditFlags_NoAlpha flag is set.
|
// Note: ColorPicker4() only accesses 3 floats if ImGuiColorEditFlags_NoAlpha flag is set.
|
||||||
@ -6206,7 +6217,8 @@ bool ImGui::ColorPicker4(const char* label, float col[4], ImGuiColorEditFlags fl
|
|||||||
g.NextItemData.ClearFlags();
|
g.NextItemData.ClearFlags();
|
||||||
|
|
||||||
const float backup_alpha = g.Style.Alpha;
|
const float backup_alpha = g.Style.Alpha;
|
||||||
if (g.DisabledStackSize > 0)
|
const bool is_disabled = (g.CurrentItemFlags & ImGuiItemFlags_Disabled) != 0 && (g.DisabledStackSize > 0); // Intentionally not check ItemFlagsSet
|
||||||
|
if (is_disabled)
|
||||||
g.Style.Alpha = g.DisabledAlphaBackup; // Cancel out effect of BeginDisabled() for color swatches.
|
g.Style.Alpha = g.DisabledAlphaBackup; // Cancel out effect of BeginDisabled() for color swatches.
|
||||||
|
|
||||||
PushID(label);
|
PushID(label);
|
||||||
@ -6568,7 +6580,7 @@ bool ImGui::ColorPicker4(const char* label, float col[4], ImGuiColorEditFlags fl
|
|||||||
g.ColorEditCurrentID = 0;
|
g.ColorEditCurrentID = 0;
|
||||||
PopID();
|
PopID();
|
||||||
|
|
||||||
if (g.DisabledStackSize > 0)
|
if (is_disabled)
|
||||||
g.Style.Alpha = backup_alpha;
|
g.Style.Alpha = backup_alpha;
|
||||||
|
|
||||||
return value_changed;
|
return value_changed;
|
||||||
@ -6609,7 +6621,8 @@ bool ImGui::ColorButton(const char* desc_id, const ImVec4& col, ImGuiColorEditFl
|
|||||||
const bool is_mixed = (g.LastItemData.ItemFlags & ImGuiItemFlags_MixedValue) != 0;
|
const bool is_mixed = (g.LastItemData.ItemFlags & ImGuiItemFlags_MixedValue) != 0;
|
||||||
|
|
||||||
const float backup_alpha = g.Style.Alpha;
|
const float backup_alpha = g.Style.Alpha;
|
||||||
if (g.DisabledStackSize > 0)
|
const bool is_disabled = (g.CurrentItemFlags & ImGuiItemFlags_Disabled) != 0 && (g.DisabledStackSize > 0); // Intentionally not use LastItemData.ItemFlags here.
|
||||||
|
if (is_disabled)
|
||||||
g.Style.Alpha = g.DisabledAlphaBackup; // Cancel out effect of BeginDisabled() for color swatches.
|
g.Style.Alpha = g.DisabledAlphaBackup; // Cancel out effect of BeginDisabled() for color swatches.
|
||||||
if (is_mixed)
|
if (is_mixed)
|
||||||
{
|
{
|
||||||
@ -6637,7 +6650,7 @@ bool ImGui::ColorButton(const char* desc_id, const ImVec4& col, ImGuiColorEditFl
|
|||||||
else
|
else
|
||||||
window->DrawList->AddRectFilled(bb.Min, bb.Max, GetColorU32(col_source), rounding);
|
window->DrawList->AddRectFilled(bb.Min, bb.Max, GetColorU32(col_source), rounding);
|
||||||
}
|
}
|
||||||
if (g.DisabledStackSize > 0)
|
if (is_disabled)
|
||||||
g.Style.Alpha = backup_alpha;
|
g.Style.Alpha = backup_alpha;
|
||||||
RenderNavCursor(bb, id);
|
RenderNavCursor(bb, id);
|
||||||
if ((flags & ImGuiColorEditFlags_NoBorder) == 0)
|
if ((flags & ImGuiColorEditFlags_NoBorder) == 0)
|
||||||
@ -6922,13 +6935,15 @@ bool ImGui::TreeNodeExV(const void* ptr_id, ImGuiTreeNodeFlags flags, const char
|
|||||||
return TreeNodeBehavior(id, flags, label, label_end);
|
return TreeNodeBehavior(id, flags, label, label_end);
|
||||||
}
|
}
|
||||||
|
|
||||||
// The reason those two functions are not yet in public API is because I would like to design a more feature-full and generic API for this.
|
// I would like to design a more feature-full and generic API for this.
|
||||||
// They are otherwise function (cc: #3823, #9251, #7553, #6754, #5423, #2958, #2079, #1947, #1131, #722)
|
// (cc: #3823, #9251, #7553, #6754, #5423, #2958, #2079, #1947, #1131, #722, #9569)
|
||||||
bool ImGui::TreeNodeGetOpen(ImGuiID storage_id)
|
bool ImGui::TreeNodeGetOpen(ImGuiID storage_id, ImGuiTreeNodeFlags flags)
|
||||||
{
|
{
|
||||||
|
if (flags & ImGuiTreeNodeFlags_Leaf)
|
||||||
|
return true;
|
||||||
ImGuiContext& g = *GImGui;
|
ImGuiContext& g = *GImGui;
|
||||||
ImGuiStorage* storage = g.CurrentWindow->DC.StateStorage;
|
ImGuiStorage* storage = g.CurrentWindow->DC.StateStorage;
|
||||||
return storage->GetInt(storage_id, 0) != 0;
|
return storage->GetInt(storage_id, (flags & ImGuiTreeNodeFlags_DefaultOpen) ? 1 : 0) != 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
void ImGui::TreeNodeSetOpen(ImGuiID storage_id, bool is_open)
|
void ImGui::TreeNodeSetOpen(ImGuiID storage_id, bool is_open)
|
||||||
@ -7030,9 +7045,10 @@ bool ImGui::TreeNodeBehavior(ImGuiID id, ImGuiTreeNodeFlags flags, const char* l
|
|||||||
label_end = FindRenderedTextEnd(label);
|
label_end = FindRenderedTextEnd(label);
|
||||||
const ImVec2 label_size = CalcTextSize(label, label_end, false);
|
const ImVec2 label_size = CalcTextSize(label, label_end, false);
|
||||||
|
|
||||||
const float text_offset_x = g.FontSize + (display_frame ? padding.x * 3 : padding.x * 2); // Collapsing arrow width + Spacing
|
const float icon_width = g.FontSize + padding.x * 2;
|
||||||
|
const float text_offset_x = display_frame ? icon_width + padding.x : icon_width; // Collapsing arrow width + Spacing
|
||||||
const float text_offset_y = use_frame_padding ? ImMax(style.FramePadding.y, window->DC.CurrLineTextBaseOffset) : window->DC.CurrLineTextBaseOffset; // Latch before ItemSize changes it
|
const float text_offset_y = use_frame_padding ? ImMax(style.FramePadding.y, window->DC.CurrLineTextBaseOffset) : window->DC.CurrLineTextBaseOffset; // Latch before ItemSize changes it
|
||||||
const float text_width = g.FontSize + label_size.x + padding.x * 2; // Include collapsing arrow
|
const float text_width = icon_width + label_size.x; // Include collapsing arrow
|
||||||
|
|
||||||
const float frame_height = label_size.y + padding.y * 2;
|
const float frame_height = label_size.y + padding.y * 2;
|
||||||
const bool span_all_columns = (flags & ImGuiTreeNodeFlags_SpanAllColumns) != 0 && (g.CurrentTable != NULL);
|
const bool span_all_columns = (flags & ImGuiTreeNodeFlags_SpanAllColumns) != 0 && (g.CurrentTable != NULL);
|
||||||
@ -7065,6 +7081,7 @@ bool ImGui::TreeNodeBehavior(ImGuiID id, ImGuiTreeNodeFlags flags, const char* l
|
|||||||
if (span_all_columns || span_all_columns_label)
|
if (span_all_columns || span_all_columns_label)
|
||||||
{
|
{
|
||||||
// Modify ClipRect for the ItemAdd(), faster than doing a PushColumnsBackground/PushTableBackgroundChannel for every Selectable..
|
// Modify ClipRect for the ItemAdd(), faster than doing a PushColumnsBackground/PushTableBackgroundChannel for every Selectable..
|
||||||
|
// FIXME: Investigate moving this to an item flag, along duplicate code in Selectable(). How to do optimally?
|
||||||
const float backup_clip_rect_min_x = window->ClipRect.Min.x;
|
const float backup_clip_rect_min_x = window->ClipRect.Min.x;
|
||||||
const float backup_clip_rect_max_x = window->ClipRect.Max.x;
|
const float backup_clip_rect_max_x = window->ClipRect.Max.x;
|
||||||
window->ClipRect.Min.x = window->ParentWorkRect.Min.x;
|
window->ClipRect.Min.x = window->ParentWorkRect.Min.x;
|
||||||
@ -7272,7 +7289,7 @@ bool ImGui::TreeNodeBehavior(ImGuiID id, ImGuiTreeNodeFlags flags, const char* l
|
|||||||
if (flags & ImGuiTreeNodeFlags_Bullet)
|
if (flags & ImGuiTreeNodeFlags_Bullet)
|
||||||
RenderBullet(window->DrawList, ImVec2(text_pos.x - text_offset_x * 0.5f, text_pos.y + g.FontSize * 0.5f), text_col);
|
RenderBullet(window->DrawList, ImVec2(text_pos.x - text_offset_x * 0.5f, text_pos.y + g.FontSize * 0.5f), text_col);
|
||||||
else if (!is_leaf)
|
else if (!is_leaf)
|
||||||
RenderArrow(window->DrawList, ImVec2(text_pos.x - text_offset_x + padding.x, text_pos.y + g.FontSize * 0.15f), text_col, is_open ? ((flags & ImGuiTreeNodeFlags_UpsideDownArrow) ? ImGuiDir_Up : ImGuiDir_Down) : ImGuiDir_Right, 0.70f);
|
RenderArrow(window->DrawList, ImVec2(text_pos.x + g.FontSize * 0.15f - text_offset_x + padding.x, text_pos.y + g.FontSize * 0.15f), text_col, is_open ? ((flags & ImGuiTreeNodeFlags_UpsideDownArrow) ? ImGuiDir_Up : ImGuiDir_Down) : ImGuiDir_Right, 0.70f);
|
||||||
if (g.LogEnabled)
|
if (g.LogEnabled)
|
||||||
LogSetNextTextDecoration(">", NULL);
|
LogSetNextTextDecoration(">", NULL);
|
||||||
}
|
}
|
||||||
@ -8790,7 +8807,7 @@ bool ImGuiSelectionBasicStorage::GetNextSelectedItem(void** opaque_it, ImGuiID*
|
|||||||
it = _Storage.Data.Data;
|
it = _Storage.Data.Data;
|
||||||
IM_ASSERT(it >= _Storage.Data.Data && it <= it_end);
|
IM_ASSERT(it >= _Storage.Data.Data && it <= it_end);
|
||||||
if (it != it_end)
|
if (it != it_end)
|
||||||
while (it->val_i == 0 && it < it_end)
|
while (it < it_end && it->val_i == 0)
|
||||||
it++;
|
it++;
|
||||||
const bool has_more = (it != it_end);
|
const bool has_more = (it != it_end);
|
||||||
*opaque_it = has_more ? (void**)(it + 1) : (void**)(it);
|
*opaque_it = has_more ? (void**)(it + 1) : (void**)(it);
|
||||||
@ -10058,7 +10075,7 @@ void ImGui::EndTabBar()
|
|||||||
|
|
||||||
// Restore the last visible height if no tab is visible, this reduce vertical flicker/movement when a tabs gets removed without calling SetTabItemClosed().
|
// Restore the last visible height if no tab is visible, this reduce vertical flicker/movement when a tabs gets removed without calling SetTabItemClosed().
|
||||||
const bool tab_bar_appearing = (tab_bar->PrevFrameVisible + 1 < g.FrameCount);
|
const bool tab_bar_appearing = (tab_bar->PrevFrameVisible + 1 < g.FrameCount);
|
||||||
if (tab_bar->VisibleTabWasSubmitted || tab_bar->VisibleTabId == 0 || tab_bar_appearing)
|
if (tab_bar->VisibleTabWasSubmitted || tab_bar->VisibleTabContentsId == 0 || tab_bar_appearing)
|
||||||
{
|
{
|
||||||
tab_bar->CurrTabsContentsHeight = ImMax(window->DC.CursorPos.y - tab_bar->BarRect.Max.y, tab_bar->CurrTabsContentsHeight);
|
tab_bar->CurrTabsContentsHeight = ImMax(window->DC.CursorPos.y - tab_bar->BarRect.Max.y, tab_bar->CurrTabsContentsHeight);
|
||||||
window->DC.CursorPos.y = tab_bar->BarRect.Max.y + tab_bar->CurrTabsContentsHeight;
|
window->DC.CursorPos.y = tab_bar->BarRect.Max.y + tab_bar->CurrTabsContentsHeight;
|
||||||
@ -10106,7 +10123,7 @@ static void ImGui::TabBarLayout(ImGuiTabBar* tab_bar)
|
|||||||
if (tab->LastFrameVisible < tab_bar->PrevFrameVisible || tab->WantClose)
|
if (tab->LastFrameVisible < tab_bar->PrevFrameVisible || tab->WantClose)
|
||||||
{
|
{
|
||||||
// Remove tab
|
// Remove tab
|
||||||
if (tab_bar->VisibleTabId == tab->ID) { tab_bar->VisibleTabId = 0; }
|
if (tab_bar->VisibleTabContentsId == tab->ID) { tab_bar->VisibleTabContentsId = 0; }
|
||||||
if (tab_bar->SelectedTabId == tab->ID) { tab_bar->SelectedTabId = 0; }
|
if (tab_bar->SelectedTabId == tab->ID) { tab_bar->SelectedTabId = 0; }
|
||||||
if (tab_bar->NextSelectedTabId == tab->ID) { tab_bar->NextSelectedTabId = 0; }
|
if (tab_bar->NextSelectedTabId == tab->ID) { tab_bar->NextSelectedTabId = 0; }
|
||||||
continue;
|
continue;
|
||||||
@ -10311,8 +10328,8 @@ static void ImGui::TabBarLayout(ImGuiTabBar* tab_bar)
|
|||||||
scroll_to_tab_id = tab_bar->SelectedTabId = most_recently_selected_tab->ID;
|
scroll_to_tab_id = tab_bar->SelectedTabId = most_recently_selected_tab->ID;
|
||||||
|
|
||||||
// Lock in visible tab
|
// Lock in visible tab
|
||||||
tab_bar->VisibleTabId = tab_bar->SelectedTabId;
|
tab_bar->VisibleTabContentsId = tab_bar->SelectedTabId;
|
||||||
tab_bar->VisibleTabWasSubmitted = false;
|
tab_bar->VisibleTabWasSubmitted = tab_bar->LastTabItemContentsAppearing = false;
|
||||||
|
|
||||||
// Apply request requests
|
// Apply request requests
|
||||||
if (scroll_to_tab_id != 0)
|
if (scroll_to_tab_id != 0)
|
||||||
@ -10425,7 +10442,7 @@ void ImGui::TabBarRemoveTab(ImGuiTabBar* tab_bar, ImGuiID tab_id)
|
|||||||
{
|
{
|
||||||
if (ImGuiTabItem* tab = TabBarFindTabByID(tab_bar, tab_id))
|
if (ImGuiTabItem* tab = TabBarFindTabByID(tab_bar, tab_id))
|
||||||
tab_bar->Tabs.erase(tab);
|
tab_bar->Tabs.erase(tab);
|
||||||
if (tab_bar->VisibleTabId == tab_id) { tab_bar->VisibleTabId = 0; }
|
if (tab_bar->VisibleTabContentsId == tab_id){ tab_bar->VisibleTabContentsId = 0; }
|
||||||
if (tab_bar->SelectedTabId == tab_id) { tab_bar->SelectedTabId = 0; }
|
if (tab_bar->SelectedTabId == tab_id) { tab_bar->SelectedTabId = 0; }
|
||||||
if (tab_bar->NextSelectedTabId == tab_id) { tab_bar->NextSelectedTabId = 0; }
|
if (tab_bar->NextSelectedTabId == tab_id) { tab_bar->NextSelectedTabId = 0; }
|
||||||
}
|
}
|
||||||
@ -10441,7 +10458,7 @@ void ImGui::TabBarCloseTab(ImGuiTabBar* tab_bar, ImGuiTabItem* tab)
|
|||||||
// This will remove a frame of lag for selecting another tab on closure.
|
// This will remove a frame of lag for selecting another tab on closure.
|
||||||
// However we don't run it in the case where the 'Unsaved' flag is set, so user gets a chance to fully undo the closure
|
// However we don't run it in the case where the 'Unsaved' flag is set, so user gets a chance to fully undo the closure
|
||||||
tab->WantClose = true;
|
tab->WantClose = true;
|
||||||
if (tab_bar->VisibleTabId == tab->ID)
|
if (tab_bar->VisibleTabContentsId == tab->ID)
|
||||||
{
|
{
|
||||||
tab->LastFrameVisible = -1;
|
tab->LastFrameVisible = -1;
|
||||||
tab_bar->SelectedTabId = tab_bar->NextSelectedTabId = 0;
|
tab_bar->SelectedTabId = tab_bar->NextSelectedTabId = 0;
|
||||||
@ -10450,7 +10467,7 @@ void ImGui::TabBarCloseTab(ImGuiTabBar* tab_bar, ImGuiTabItem* tab)
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
// Actually select before expecting closure attempt (on an UnsavedDocument tab user is expect to e.g. show a popup)
|
// Actually select before expecting closure attempt (on an UnsavedDocument tab user is expect to e.g. show a popup)
|
||||||
if (tab_bar->VisibleTabId != tab->ID)
|
if (tab_bar->VisibleTabContentsId != tab->ID)
|
||||||
TabBarQueueFocus(tab_bar, tab);
|
TabBarQueueFocus(tab_bar, tab);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -10741,6 +10758,12 @@ void ImGui::EndTabItem()
|
|||||||
PopID();
|
PopID();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool ImGui::TabItemIsContentsAppearing()
|
||||||
|
{
|
||||||
|
ImGuiContext& g = *GImGui;
|
||||||
|
return g.CurrentTabBar->LastTabItemContentsAppearing;
|
||||||
|
}
|
||||||
|
|
||||||
bool ImGui::TabItemButton(const char* label, ImGuiTabItemFlags flags)
|
bool ImGui::TabItemButton(const char* label, ImGuiTabItemFlags flags)
|
||||||
{
|
{
|
||||||
ImGuiContext& g = *GImGui;
|
ImGuiContext& g = *GImGui;
|
||||||
@ -10852,21 +10875,24 @@ bool ImGui::TabItemEx(ImGuiTabBar* tab_bar, const char* label, bool* p_open,
|
|||||||
TabBarQueueFocus(tab_bar, tab);
|
TabBarQueueFocus(tab_bar, tab);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// On the very first frame of a tab bar we let first tab contents be visible to minimize appearing glitches
|
||||||
|
if (tab_bar->VisibleTabContentsId == 0 && tab_bar->SelectedTabId == 0 && tab_bar_appearing)
|
||||||
|
if (tab_bar->Tabs.Size == 1 && !(tab_bar->Flags & ImGuiTabBarFlags_AutoSelectNewTabs))
|
||||||
|
tab_bar->VisibleTabContentsId = id;
|
||||||
|
|
||||||
// Lock visibility
|
// Lock visibility
|
||||||
// (Note: tab_contents_visible != tab_selected... because Ctrl+Tab operations may preview some tabs without selecting them!)
|
// (Note: tab_contents_visible != tab_selected... because Ctrl+Tab operations may preview some tabs without selecting them!)
|
||||||
bool tab_contents_visible = (tab_bar->VisibleTabId == id);
|
const bool tab_contents_visible = (tab_bar->VisibleTabContentsId == id);
|
||||||
if (tab_contents_visible)
|
if (tab_contents_visible)
|
||||||
tab_bar->VisibleTabWasSubmitted = true;
|
tab_bar->VisibleTabWasSubmitted = true;
|
||||||
|
tab_bar->LastTabItemContentsAppearing = tab_contents_visible && !tab->ContentsIsVisible;
|
||||||
// On the very first frame of a tab bar we let first tab contents be visible to minimize appearing glitches
|
tab->ContentsIsVisible = tab_contents_visible;
|
||||||
if (!tab_contents_visible && tab_bar->SelectedTabId == 0 && tab_bar_appearing)
|
|
||||||
if (tab_bar->Tabs.Size == 1 && !(tab_bar->Flags & ImGuiTabBarFlags_AutoSelectNewTabs))
|
|
||||||
tab_contents_visible = true;
|
|
||||||
|
|
||||||
// Note that tab_is_new is not necessarily the same as tab_appearing! When a tab bar stops being submitted
|
// Note that tab_is_new is not necessarily the same as tab_appearing! When a tab bar stops being submitted
|
||||||
// and then gets submitted again, the tabs will have 'tab_appearing=true' but 'tab_is_new=false'.
|
// and then gets submitted again, the tabs will have 'tab_appearing=true' but 'tab_is_new=false'.
|
||||||
if (tab_appearing && (!tab_bar_appearing || tab_is_new))
|
if (tab_appearing && (!tab_bar_appearing || tab_is_new))
|
||||||
{
|
{
|
||||||
|
// This path doesn't render the tab.
|
||||||
ItemAdd(ImRect(), id, NULL, ImGuiItemFlags_NoNav);
|
ItemAdd(ImRect(), id, NULL, ImGuiItemFlags_NoNav);
|
||||||
if (is_tab_button)
|
if (is_tab_button)
|
||||||
return false;
|
return false;
|
||||||
|
|||||||
@ -1,5 +1,6 @@
|
|||||||
// dear imgui: FreeType font builder (used as a replacement for the stb_truetype builder)
|
// dear imgui: FreeType font builder
|
||||||
// (code)
|
// (code)
|
||||||
|
// (used as a replacement for the stb_truetype builder)
|
||||||
|
|
||||||
// Get the latest version at https://github.com/ocornut/imgui/tree/master/misc/freetype
|
// Get the latest version at https://github.com/ocornut/imgui/tree/master/misc/freetype
|
||||||
// Original code by @vuhdo (Aleksei Skriabin) in 2017, with improvements by @mikesart.
|
// Original code by @vuhdo (Aleksei Skriabin) in 2017, with improvements by @mikesart.
|
||||||
@ -294,7 +295,7 @@ static void ImGui_ImplFreeType_BlitGlyph(const FT_Bitmap* ft_bitmap, uint32_t* d
|
|||||||
case FT_PIXEL_MODE_BGRA:
|
case FT_PIXEL_MODE_BGRA:
|
||||||
{
|
{
|
||||||
// FIXME: Converting pre-multiplied alpha to straight. Doesn't smell good.
|
// FIXME: Converting pre-multiplied alpha to straight. Doesn't smell good.
|
||||||
#define DE_MULTIPLY(color, alpha) ImMin((ImU32)(255.0f * (float)color / (float)(alpha + FLT_MIN) + 0.5f), 255u)
|
#define DE_MULTIPLY(color, alpha) (ImU32)ImMin(255.0f * (float)color / (float)(alpha + FLT_MIN) + 0.5f, 255.0f)
|
||||||
for (uint32_t y = 0; y < h; y++, src += src_pitch, dst += dst_pitch)
|
for (uint32_t y = 0; y < h; y++, src += src_pitch, dst += dst_pitch)
|
||||||
for (uint32_t x = 0; x < w; x++)
|
for (uint32_t x = 0; x < w; x++)
|
||||||
{
|
{
|
||||||
|
|||||||
@ -1,5 +1,6 @@
|
|||||||
// dear imgui: FreeType font builder (used as a replacement for the stb_truetype builder)
|
// dear imgui: FreeType font builder
|
||||||
// (headers)
|
// (headers)
|
||||||
|
// (used as a replacement for the stb_truetype builder)
|
||||||
|
|
||||||
#pragma once
|
#pragma once
|
||||||
#include "imgui.h" // IMGUI_API
|
#include "imgui.h" // IMGUI_API
|
||||||
@ -40,6 +41,7 @@ enum ImGuiFreeTypeLoaderFlags_
|
|||||||
ImGuiFreeTypeLoaderFlags_Bitmap = 1 << 9, // Enable FreeType bitmap glyphs
|
ImGuiFreeTypeLoaderFlags_Bitmap = 1 << 9, // Enable FreeType bitmap glyphs
|
||||||
|
|
||||||
#ifndef IMGUI_DISABLE_OBSOLETE_FUNCTIONS
|
#ifndef IMGUI_DISABLE_OBSOLETE_FUNCTIONS
|
||||||
|
// Renamed in 1.92.0 (June 2025)
|
||||||
ImGuiFreeTypeBuilderFlags_NoHinting = ImGuiFreeTypeLoaderFlags_NoHinting,
|
ImGuiFreeTypeBuilderFlags_NoHinting = ImGuiFreeTypeLoaderFlags_NoHinting,
|
||||||
ImGuiFreeTypeBuilderFlags_NoAutoHint = ImGuiFreeTypeLoaderFlags_NoAutoHint,
|
ImGuiFreeTypeBuilderFlags_NoAutoHint = ImGuiFreeTypeLoaderFlags_NoAutoHint,
|
||||||
ImGuiFreeTypeBuilderFlags_ForceAutoHint = ImGuiFreeTypeLoaderFlags_ForceAutoHint,
|
ImGuiFreeTypeBuilderFlags_ForceAutoHint = ImGuiFreeTypeLoaderFlags_ForceAutoHint,
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user