Misc tidying up (zero-clear structures, more unused default in ClipRetFullscreen, NavApplyItemToResult() coding style fix)
Zero-clearing more structures
Remove arbitrary default ClipRetFullscreen value in ImDrawListSharedData.
Nav extracted NavApplyItemToResult() function.
Coding style fixes in OSX Backends.
diff --git a/examples/example_apple_metal/main.mm b/examples/example_apple_metal/main.mm
index ec6482e..541dc5e 100644
--- a/examples/example_apple_metal/main.mm
+++ b/examples/example_apple_metal/main.mm
@@ -1,3 +1,6 @@
+// Dear ImGui: standalone example application for OSX + Metal.
+// If you are new to Dear ImGui, read documentation from the docs/ folder + read the top of imgui.cpp.
+// Read online: https://github.com/ocornut/imgui/tree/master/docs
#import <Foundation/Foundation.h>
@@ -31,13 +34,15 @@
@implementation ViewController
-- (instancetype)initWithNibName:(nullable NSString *)nibNameOrNil bundle:(nullable NSBundle *)nibBundleOrNil {
+- (instancetype)initWithNibName:(nullable NSString *)nibNameOrNil bundle:(nullable NSBundle *)nibBundleOrNil
+{
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
_device = MTLCreateSystemDefaultDevice();
_commandQueue = [_device newCommandQueue];
- if (!self.device) {
+ if (!self.device)
+ {
NSLog(@"Metal is not supported");
abort();
}
@@ -75,11 +80,13 @@
return self;
}
-- (MTKView *)mtkView {
+- (MTKView *)mtkView
+{
return (MTKView *)self.view;
}
-- (void)loadView {
+- (void)loadView
+{
self.view = [[MTKView alloc] initWithFrame:CGRectMake(0, 0, 1200, 720)];
}
@@ -104,14 +111,13 @@
// window, we'd want to be much more careful than just ingesting the complete event stream, though we
// do make an effort to be good citizens by passing along events when Dear ImGui doesn't want to capture.
NSEventMask eventMask = NSEventMaskKeyDown | NSEventMaskKeyUp | NSEventMaskFlagsChanged | NSEventTypeScrollWheel;
- [NSEvent addLocalMonitorForEventsMatchingMask:eventMask handler:^NSEvent * _Nullable(NSEvent *event) {
+ [NSEvent addLocalMonitorForEventsMatchingMask:eventMask handler:^NSEvent * _Nullable(NSEvent *event)
+ {
BOOL wantsCapture = ImGui_ImplOSX_HandleEvent(event, self.view);
- if (event.type == NSEventTypeKeyDown && wantsCapture) {
+ if (event.type == NSEventTypeKeyDown && wantsCapture)
return nil;
- } else {
+ else
return event;
- }
-
}];
ImGui_ImplOSX_Init();
@@ -174,15 +180,18 @@
// multitouch correctly at all. This causes the "cursor" to behave very erratically
// when there are multiple active touches. But for demo purposes, single-touch
// interaction actually works surprisingly well.
-- (void)updateIOWithTouchEvent:(UIEvent *)event {
+- (void)updateIOWithTouchEvent:(UIEvent *)event
+{
UITouch *anyTouch = event.allTouches.anyObject;
CGPoint touchLocation = [anyTouch locationInView:self.view];
ImGuiIO &io = ImGui::GetIO();
io.MousePos = ImVec2(touchLocation.x, touchLocation.y);
BOOL hasActiveTouch = NO;
- for (UITouch *touch in event.allTouches) {
- if (touch.phase != UITouchPhaseEnded && touch.phase != UITouchPhaseCancelled) {
+ for (UITouch *touch in event.allTouches)
+ {
+ if (touch.phase != UITouchPhaseEnded && touch.phase != UITouchPhaseCancelled)
+ {
hasActiveTouch = YES;
break;
}
@@ -190,19 +199,23 @@
io.MouseDown[0] = hasActiveTouch;
}
-- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event {
+- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event
+{
[self updateIOWithTouchEvent:event];
}
-- (void)touchesMoved:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event {
+- (void)touchesMoved:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event
+{
[self updateIOWithTouchEvent:event];
}
-- (void)touchesCancelled:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event {
+- (void)touchesCancelled:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event
+{
[self updateIOWithTouchEvent:event];
}
-- (void)touchesEnded:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event {
+- (void)touchesEnded:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event
+{
[self updateIOWithTouchEvent:event];
}
@@ -212,7 +225,7 @@
- (void)drawInMTKView:(MTKView*)view
{
- ImGuiIO &io = ImGui::GetIO();
+ ImGuiIO& io = ImGui::GetIO();
io.DisplaySize.x = view.bounds.size.width;
io.DisplaySize.y = view.bounds.size.height;
@@ -288,8 +301,8 @@
// Rendering
ImGui::Render();
- ImDrawData* drawData = ImGui::GetDrawData();
- ImGui_ImplMetal_RenderDrawData(drawData, commandBuffer, renderEncoder);
+ ImDrawData* draw_data = ImGui::GetDrawData();
+ ImGui_ImplMetal_RenderDrawData(draw_data, commandBuffer, renderEncoder);
[renderEncoder popDebugGroup];
[renderEncoder endEncoding];
@@ -316,8 +329,10 @@
@implementation AppDelegate
-- (instancetype)init {
- if (self = [super init]) {
+- (instancetype)init
+{
+ if (self = [super init])
+ {
NSViewController *rootViewController = [[ViewController alloc] initWithNibName:nil bundle:nil];
self.window = [[NSWindow alloc] initWithContentRect:NSZeroRect
styleMask:NSWindowStyleMaskTitled | NSWindowStyleMaskClosable | NSWindowStyleMaskResizable | NSWindowStyleMaskMiniaturizable
@@ -331,7 +346,8 @@
return self;
}
-- (BOOL)applicationShouldTerminateAfterLastWindowClosed:(NSApplication *)sender {
+- (BOOL)applicationShouldTerminateAfterLastWindowClosed:(NSApplication *)sender
+{
return YES;
}
@@ -363,14 +379,17 @@
#if TARGET_OS_OSX
-int main(int argc, const char * argv[]) {
+int main(int argc, const char * argv[])
+{
return NSApplicationMain(argc, argv);
}
#else
-int main(int argc, char * argv[]) {
- @autoreleasepool {
+int main(int argc, char * argv[])
+{
+ @autoreleasepool
+ {
return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
}
}
diff --git a/examples/example_apple_opengl2/main.mm b/examples/example_apple_opengl2/main.mm
index c3f43bd..5bcc9ea 100644
--- a/examples/example_apple_opengl2/main.mm
+++ b/examples/example_apple_opengl2/main.mm
@@ -139,7 +139,7 @@
animationTimer = nil;
}
-// Forward Mouse/Keyboard events to dear imgui OSX backend. It returns true when imgui is expecting to use the event.
+// Forward Mouse/Keyboard events to Dear ImGui OSX backend.
-(void)keyUp:(NSEvent *)event { ImGui_ImplOSX_HandleEvent(event, self); }
-(void)keyDown:(NSEvent *)event { ImGui_ImplOSX_HandleEvent(event, self); }
-(void)flagsChanged:(NSEvent *)event { ImGui_ImplOSX_HandleEvent(event, self); }
diff --git a/imgui.cpp b/imgui.cpp
index 7f2bd0a..427806d 100644
--- a/imgui.cpp
+++ b/imgui.cpp
@@ -862,6 +862,7 @@
static inline void NavUpdateAnyRequestFlag();
static void NavEndFrame();
static bool NavScoreItem(ImGuiNavMoveResult* result, ImRect cand);
+static void NavApplyItemToResult(ImGuiNavMoveResult* result, ImGuiWindow* window, ImGuiID id, const ImRect& nav_bb_rel);
static void NavProcessItem(ImGuiWindow* window, const ImRect& nav_bb, ImGuiID id);
static ImVec2 NavCalcPreferredRefPos();
static void NavSaveLastChildNavWindowIntoParent(ImGuiWindow* nav_window);
@@ -8377,6 +8378,14 @@
return new_best;
}
+static void ImGui::NavApplyItemToResult(ImGuiNavMoveResult* result, ImGuiWindow* window, ImGuiID id, const ImRect& nav_bb_rel)
+{
+ result->Window = window;
+ result->ID = id;
+ result->FocusScopeId = window->DC.NavFocusScopeIdCurrent;
+ result->RectRel = nav_bb_rel;
+}
+
// We get there when either NavId == id, or when g.NavAnyRequest is set (which is updated by NavUpdateAnyRequestFlag above)
static void ImGui::NavProcessItem(ImGuiWindow* window, const ImRect& nav_bb, const ImGuiID id)
{
@@ -8417,25 +8426,14 @@
bool new_best = g.NavMoveRequest && NavScoreItem(result, nav_bb);
#endif
if (new_best)
- {
- result->Window = window;
- result->ID = id;
- result->FocusScopeId = window->DC.NavFocusScopeIdCurrent;
- result->RectRel = nav_bb_rel;
- }
+ NavApplyItemToResult(result, window, id, nav_bb_rel);
// Features like PageUp/PageDown need to maintain a separate score for the visible set of items.
const float VISIBLE_RATIO = 0.70f;
if ((g.NavMoveRequestFlags & ImGuiNavMoveFlags_AlsoScoreVisibleSet) && window->ClipRect.Overlaps(nav_bb))
if (ImClamp(nav_bb.Max.y, window->ClipRect.Min.y, window->ClipRect.Max.y) - ImClamp(nav_bb.Min.y, window->ClipRect.Min.y, window->ClipRect.Max.y) >= (nav_bb.Max.y - nav_bb.Min.y) * VISIBLE_RATIO)
if (NavScoreItem(&g.NavMoveResultLocalVisibleSet, nav_bb))
- {
- result = &g.NavMoveResultLocalVisibleSet;
- result->Window = window;
- result->ID = id;
- result->FocusScopeId = window->DC.NavFocusScopeIdCurrent;
- result->RectRel = nav_bb_rel;
- }
+ NavApplyItemToResult(&g.NavMoveResultLocalVisibleSet, window, id, nav_bb_rel);
}
// Update window-relative bounding box of navigated item
diff --git a/imgui_draw.cpp b/imgui_draw.cpp
index 3dd0a36..8a10222 100644
--- a/imgui_draw.cpp
+++ b/imgui_draw.cpp
@@ -344,21 +344,12 @@
ImDrawListSharedData::ImDrawListSharedData()
{
- Font = NULL;
- FontSize = 0.0f;
- CurveTessellationTol = 0.0f;
- CircleSegmentMaxError = 0.0f;
- ClipRectFullscreen = ImVec4(-8192.0f, -8192.0f, +8192.0f, +8192.0f);
- InitialFlags = ImDrawListFlags_None;
-
- // Lookup tables
+ memset(this, 0, sizeof(*this));
for (int i = 0; i < IM_ARRAYSIZE(ArcFastVtx); i++)
{
const float a = ((float)i * 2 * IM_PI) / (float)IM_ARRAYSIZE(ArcFastVtx);
ArcFastVtx[i] = ImVec2(ImCos(a), ImSin(a));
}
- memset(CircleSegmentCounts, 0, sizeof(CircleSegmentCounts)); // This will be set by SetCircleSegmentMaxError()
- TexUvLines = NULL;
}
void ImDrawListSharedData::SetCircleSegmentMaxError(float max_error)
diff --git a/imgui_internal.h b/imgui_internal.h
index 7fa1339..ff8dbe6 100644
--- a/imgui_internal.h
+++ b/imgui_internal.h
@@ -844,7 +844,7 @@
float Width, NextWidth;
float Pos[3], NextWidths[3];
- ImGuiMenuColumns();
+ ImGuiMenuColumns() { memset(this, 0, sizeof(*this)); }
void Update(int count, float spacing, bool clear);
float DeclColumns(float w0, float w1, float w2);
float CalcExtraSpace(float avail_w) const;
@@ -897,7 +897,7 @@
ImVec2 OpenPopupPos; // Set on OpenPopup(), preferred popup position (typically == OpenMousePos when using mouse)
ImVec2 OpenMousePos; // Set on OpenPopup(), copy of mouse position at the time of opening popup
- ImGuiPopupData() { PopupId = 0; Window = SourceWindow = NULL; OpenFrameCount = -1; OpenParentId = 0; }
+ ImGuiPopupData() { memset(this, 0, sizeof(*this)); OpenFrameCount = -1; }
};
struct ImGuiNavMoveResult
@@ -1006,7 +1006,7 @@
ImGuiColumnsFlags Flags; // Not exposed
ImRect ClipRect;
- ImGuiColumnData() { OffsetNorm = OffsetNormBeforeResize = 0.0f; Flags = ImGuiColumnsFlags_None; }
+ ImGuiColumnData() { memset(this, 0, sizeof(*this)); }
};
struct ImGuiColumns
@@ -1027,21 +1027,7 @@
ImVector<ImGuiColumnData> Columns;
ImDrawListSplitter Splitter;
- ImGuiColumns() { Clear(); }
- void Clear()
- {
- ID = 0;
- Flags = ImGuiColumnsFlags_None;
- IsFirstFrame = false;
- IsBeingResized = false;
- Current = 0;
- Count = 1;
- OffMinX = OffMaxX = 0.0f;
- LineMinY = LineMaxY = 0.0f;
- HostCursorPosY = 0.0f;
- HostCursorMaxPosX = 0.0f;
- Columns.clear();
- }
+ ImGuiColumns() { memset(this, 0, sizeof(*this)); }
};
//-----------------------------------------------------------------------------
@@ -1083,7 +1069,7 @@
bool Collapsed;
bool WantApply; // Set when loaded from .ini data (to enable merging/loading .ini data into an already running context)
- ImGuiWindowSettings() { ID = 0; Pos = Size = ImVec2ih(0, 0); Collapsed = WantApply = false; }
+ ImGuiWindowSettings() { memset(this, 0, sizeof(*this)); }
char* GetName() { return (char*)(this + 1); }
};
diff --git a/imgui_widgets.cpp b/imgui_widgets.cpp
index ca5c3b9..eed4a04 100644
--- a/imgui_widgets.cpp
+++ b/imgui_widgets.cpp
@@ -6388,13 +6388,6 @@
//-------------------------------------------------------------------------
// Helpers for internal use
-ImGuiMenuColumns::ImGuiMenuColumns()
-{
- Spacing = Width = NextWidth = 0.0f;
- memset(Pos, 0, sizeof(Pos));
- memset(NextWidths, 0, sizeof(NextWidths));
-}
-
void ImGuiMenuColumns::Update(int count, float spacing, bool clear)
{
IM_ASSERT(count == IM_ARRAYSIZE(Pos));