Skip to content

Commit 61a026f

Browse files
authored
[examples] Reorganize some conditions to fix overlap bugs (#4829)
* Reorganize some conditions to fix overlap bugs * Fix edge case where control point selection outlives mouse down
1 parent 5bda469 commit 61a026f

File tree

1 file changed

+30
-20
lines changed

1 file changed

+30
-20
lines changed

examples/shapes/shapes_splines_drawing.c

+30-20
Original file line numberDiff line numberDiff line change
@@ -101,15 +101,18 @@ int main(void)
101101
}
102102

103103
// Spline point focus and selection logic
104-
for (int i = 0; i < pointCount; i++)
104+
if ((selectedPoint == -1) && ((splineTypeActive != SPLINE_BEZIER) || (selectedControlPoint == NULL)))
105105
{
106-
if (CheckCollisionPointCircle(GetMousePosition(), points[i], 8.0f))
106+
focusedPoint = -1;
107+
for (int i = 0; i < pointCount; i++)
107108
{
108-
focusedPoint = i;
109-
if (IsMouseButtonDown(MOUSE_LEFT_BUTTON)) selectedPoint = i;
110-
break;
109+
if (CheckCollisionPointCircle(GetMousePosition(), points[i], 8.0f))
110+
{
111+
focusedPoint = i;
112+
break;
113+
}
111114
}
112-
else focusedPoint = -1;
115+
if (IsMouseButtonPressed(MOUSE_LEFT_BUTTON)) selectedPoint = focusedPoint;
113116
}
114117

115118
// Spline point movement logic
@@ -123,21 +126,23 @@ int main(void)
123126
if ((splineTypeActive == SPLINE_BEZIER) && (focusedPoint == -1))
124127
{
125128
// Spline control point focus and selection logic
126-
for (int i = 0; i < pointCount - 1; i++)
129+
if (selectedControlPoint == NULL)
127130
{
128-
if (CheckCollisionPointCircle(GetMousePosition(), control[i].start, 6.0f))
129-
{
130-
focusedControlPoint = &control[i].start;
131-
if (IsMouseButtonDown(MOUSE_LEFT_BUTTON)) selectedControlPoint = &control[i].start;
132-
break;
133-
}
134-
else if (CheckCollisionPointCircle(GetMousePosition(), control[i].end, 6.0f))
131+
focusedControlPoint = NULL;
132+
for (int i = 0; i < pointCount - 1; i++)
135133
{
136-
focusedControlPoint = &control[i].end;
137-
if (IsMouseButtonDown(MOUSE_LEFT_BUTTON)) selectedControlPoint = &control[i].end;
138-
break;
134+
if (CheckCollisionPointCircle(GetMousePosition(), control[i].start, 6.0f))
135+
{
136+
focusedControlPoint = &control[i].start;
137+
break;
138+
}
139+
else if (CheckCollisionPointCircle(GetMousePosition(), control[i].end, 6.0f))
140+
{
141+
focusedControlPoint = &control[i].end;
142+
break;
143+
}
139144
}
140-
else focusedControlPoint = NULL;
145+
if (IsMouseButtonPressed(MOUSE_LEFT_BUTTON)) selectedControlPoint = focusedControlPoint;
141146
}
142147

143148
// Spline control point movement logic
@@ -153,6 +158,9 @@ int main(void)
153158
else if (IsKeyPressed(KEY_TWO)) splineTypeActive = 1;
154159
else if (IsKeyPressed(KEY_THREE)) splineTypeActive = 2;
155160
else if (IsKeyPressed(KEY_FOUR)) splineTypeActive = 3;
161+
162+
// Clear selection when changing to a spline without control points
163+
if (IsKeyPressed(KEY_ONE) || IsKeyPressed(KEY_TWO) || IsKeyPressed(KEY_THREE)) selectedControlPoint = NULL;
156164
//----------------------------------------------------------------------------------
157165

158166
// Draw
@@ -249,18 +257,20 @@ int main(void)
249257
}
250258

251259
// Check all possible UI states that require controls lock
252-
if (splineTypeEditMode) GuiLock();
260+
if (splineTypeEditMode || (selectedPoint != -1) || (selectedControlPoint != NULL)) GuiLock();
253261

254262
// Draw spline config
255263
GuiLabel((Rectangle){ 12, 62, 140, 24 }, TextFormat("Spline thickness: %i", (int)splineThickness));
256264
GuiSliderBar((Rectangle){ 12, 60 + 24, 140, 16 }, NULL, NULL, &splineThickness, 1.0f, 40.0f);
257265

258266
GuiCheckBox((Rectangle){ 12, 110, 20, 20 }, "Show point helpers", &splineHelpersActive);
259267

260-
GuiUnlock();
268+
if (splineTypeEditMode) GuiUnlock();
261269

262270
GuiLabel((Rectangle){ 12, 10, 140, 24 }, "Spline type:");
263271
if (GuiDropdownBox((Rectangle){ 12, 8 + 24, 140, 28 }, "LINEAR;BSPLINE;CATMULLROM;BEZIER", &splineTypeActive, splineTypeEditMode)) splineTypeEditMode = !splineTypeEditMode;
272+
273+
GuiUnlock();
264274

265275
EndDrawing();
266276
//----------------------------------------------------------------------------------

0 commit comments

Comments
 (0)