1
0
Fork 0
mirror of https://github.com/ocornut/imgui.git synced 2026-01-11 00:04:24 +00:00
This commit is contained in:
Tim-Rex 2025-11-21 08:12:16 +02:00 committed by GitHub
commit b2d477bd0d
No known key found for this signature in database
GPG key ID: B5690EEEBB952194

View file

@ -403,8 +403,33 @@ IMGUI_IMPL_API void ImGui_ImplOSX_NewFrame(void* _Nullable view) {
#endif
NSLock *ImGui_IO_lock;
@interface ScopedLock : NSObject
@property (strong) NSLock *lockptr;
@end
@implementation ScopedLock
- (id)init:(NSLock *)incoming
{
_lockptr = incoming;
[_lockptr lock];
return self;
}
- (void)dealloc {
[_lockptr unlock];
}
@end
bool ImGui_ImplOSX_Init(NSView* view)
{
ImGui_IO_lock = [[NSLock alloc] init];
ImGuiIO& io = ImGui::GetIO();
ImGuiPlatformIO& platform_io = ImGui::GetPlatformIO();
IMGUI_CHECKVERSION();
@ -629,8 +654,18 @@ void ImGui_ImplOSX_NewFrame(NSView* view)
// Setup display size
if (view)
{
const float dpi = (float)[view.window backingScaleFactor];
io.DisplaySize = ImVec2((float)view.bounds.size.width, (float)view.bounds.size.height);
dispatch_async(dispatch_get_main_queue(), ^{
[bd->exclusive.lock lock];
bd->exclusive.backingScaleFactor = view.window.backingScaleFactor;
bd->exclusive.bounds = view.bounds;
[bd->exclusive.lock unlock];
});
[bd->exclusive.lock lock];
const float dpi = (float) bd->exclusive.backingScaleFactor;
io.DisplaySize = ImVec2((float) bd->exclusive.bounds.size.width, bd->exclusive.bounds.size.height);
[bd->exclusive.lock unlock];
io.DisplayFramebufferScale = ImVec2(dpi, dpi);
}
@ -674,6 +709,8 @@ static bool ImGui_ImplOSX_HandleEvent(NSEvent* event, NSView* view)
return false;
ImGuiIO& io = ImGui::GetIO();
ScopedLock *sclock = [[ScopedLock alloc] init:ImGui_IO_lock];
if (event.type == NSEventTypeLeftMouseDown || event.type == NSEventTypeRightMouseDown || event.type == NSEventTypeOtherMouseDown)
{
int button = (int)[event buttonNumber];