rGuiLayout: changed controls selection

- Added focusedControl
- selectedControl now works with IsMouseButtonPressed()
This commit is contained in:
Ray
2018-05-22 12:37:04 +02:00
parent 39b0afdd86
commit 7b1c986635

View File

@ -178,6 +178,7 @@ int main()
int framesCounterSnap = 0; int framesCounterSnap = 0;
int selectedControl = -1; int selectedControl = -1;
int storedControl = -1; int storedControl = -1;
int focusedControl = -1;
int selectedType = WINDOWBOX; int selectedType = WINDOWBOX;
int selectedTypeDraw = LABEL; int selectedTypeDraw = LABEL;
Vector2 panControlOffset = { 0 }; Vector2 panControlOffset = { 0 };
@ -440,7 +441,7 @@ int main()
} }
// Create new control // Create new control
if (IsMouseButtonPressed(MOUSE_LEFT_BUTTON) && (selectedControl == -1) && !anchorMode && !tracemapEditMode && !closingWindowActive && !paletteMode && !generateWindowActive && (!resetWindowActive)) if (IsMouseButtonPressed(MOUSE_LEFT_BUTTON) && (focusedControl == -1) && (selectedControl == -1) && !anchorMode && !tracemapEditMode && !closingWindowActive && !generateWindowActive && (!resetWindowActive) && !CheckCollisionPointRec(mouse, palettePanel))
{ {
// Add new control (button) // Add new control (button)
layout.controls[layout.controlsCount].id = layout.controlsCount; layout.controls[layout.controlsCount].id = layout.controlsCount;
@ -523,25 +524,42 @@ int main()
if (controlDrag || tracemapEditMode || anchorLockMode) break; if (controlDrag || tracemapEditMode || anchorLockMode) break;
if ((layout.controls[i].type == WINDOWBOX) && (!layout.controls[i].ap->hidding) && (CheckCollisionPointRec(mouse, (Rectangle){ layout.controls[i].ap->x + layout.controls[i].rec.x, layout.controls[i].ap->y + layout.controls[i].rec.y, layout.controls[i].rec.width, 24 }))) if ((layout.controls[i].type == WINDOWBOX) && (!layout.controls[i].ap->hidding) && (CheckCollisionPointRec(mouse, (Rectangle){ layout.controls[i].ap->x + layout.controls[i].rec.x, layout.controls[i].ap->y + layout.controls[i].rec.y, layout.controls[i].rec.width, 24 })))
{ {
selectedControl = i; focusedControl = i;
if (undoSelectedControl != selectedControl)
if (IsMouseButtonPressed(MOUSE_LEFT_BUTTON))
{ {
undoSelectedControl = selectedControl; selectedControl = focusedControl;
}
if (undoSelectedControl != focusedControl)
{
undoSelectedControl = focusedControl;
undoLastRec = layout.controls[i].rec; undoLastRec = layout.controls[i].rec;
} }
break; break;
} }
else if ((!layout.controls[i].ap->hidding) && (CheckCollisionPointRec(mouse, (Rectangle){ layout.controls[i].ap->x + layout.controls[i].rec.x, layout.controls[i].ap->y + layout.controls[i].rec.y, layout.controls[i].rec.width, layout.controls[i].rec.height }) && layout.controls[i].type != WINDOWBOX)) else if ((!layout.controls[i].ap->hidding) && (CheckCollisionPointRec(mouse, (Rectangle){ layout.controls[i].ap->x + layout.controls[i].rec.x, layout.controls[i].ap->y + layout.controls[i].rec.y, layout.controls[i].rec.width, layout.controls[i].rec.height }) && layout.controls[i].type != WINDOWBOX))
{ {
selectedControl = i; focusedControl = i;
if (undoSelectedControl != selectedControl)
if (IsMouseButtonPressed(MOUSE_LEFT_BUTTON))
{ {
undoSelectedControl = selectedControl; selectedControl = focusedControl;
}
if (undoSelectedControl != focusedControl)
{
undoSelectedControl = focusedControl;
undoLastRec = layout.controls[i].rec; undoLastRec = layout.controls[i].rec;
} }
break; break;
} }
else selectedControl = -1; else
{
focusedControl = -1;
if (IsMouseButtonPressed(MOUSE_LEFT_BUTTON)) selectedControl = -1;
}
} }
} }
@ -1024,13 +1042,13 @@ int main()
// Links the selected control to the current anchor // Links the selected control to the current anchor
if (IsMouseButtonReleased(MOUSE_RIGHT_BUTTON)) if (IsMouseButtonReleased(MOUSE_RIGHT_BUTTON))
{ {
if (selectedControl != -1) if (focusedControl != -1)
{ {
layout.controls[selectedControl].rec.x += layout.controls[selectedControl].ap->x; layout.controls[focusedControl].rec.x += layout.controls[focusedControl].ap->x;
layout.controls[selectedControl].rec.y += layout.controls[selectedControl].ap->y; layout.controls[focusedControl].rec.y += layout.controls[focusedControl].ap->y;
layout.controls[selectedControl].ap = &layout.anchors[linkedAnchor]; layout.controls[focusedControl].ap = &layout.anchors[linkedAnchor];
layout.controls[selectedControl].rec.x -= layout.anchors[linkedAnchor].x; layout.controls[focusedControl].rec.x -= layout.anchors[linkedAnchor].x;
layout.controls[selectedControl].rec.y -= layout.anchors[linkedAnchor].y; layout.controls[focusedControl].rec.y -= layout.anchors[linkedAnchor].y;
} }
anchorLinkMode = false; anchorLinkMode = false;
@ -1439,15 +1457,20 @@ int main()
} }
// Draw selected control selection rectangle (transparent RED/WHITE) // Draw selected control selection rectangle (transparent RED/WHITE)
if ((selectedControl != -1) && (selectedControl < layout.controlsCount)) if (((selectedControl != -1) || (focusedControl != -1)) && (selectedControl < layout.controlsCount))
{ {
DrawRectangleRec((Rectangle){ layout.controls[selectedControl].ap->x + layout.controls[selectedControl].rec.x, layout.controls[selectedControl].ap->y + layout.controls[selectedControl].rec.y, layout.controls[selectedControl].rec.width, layout.controls[selectedControl].rec.height }, (nameEditMode) ? Fade(WHITE, 0.7f) : Fade(RED, 0.5f)); if (selectedControl != -1) DrawRectangleRec((Rectangle){ layout.controls[selectedControl].ap->x + layout.controls[selectedControl].rec.x, layout.controls[selectedControl].ap->y + layout.controls[selectedControl].rec.y, layout.controls[selectedControl].rec.width, layout.controls[selectedControl].rec.height }, (nameEditMode) ? Fade(WHITE, 0.7f) : Fade(RED, 0.5f));
// Draw anchor lines (if not hidden) if (focusedControl != -1) DrawRectangleLinesEx((Rectangle){ layout.controls[focusedControl].ap->x + layout.controls[focusedControl].rec.x, layout.controls[focusedControl].ap->y + layout.controls[focusedControl].rec.y, layout.controls[focusedControl].rec.width, layout.controls[focusedControl].rec.height }, 1, RED);
if (layout.controls[selectedControl].ap->id > 0 && !layout.controls[selectedControl].ap->hidding) DrawLine(layout.controls[selectedControl].ap->x, layout.controls[selectedControl].ap->y, layout.controls[selectedControl].ap->x + layout.controls[selectedControl].rec.x, layout.controls[selectedControl].ap->y + layout.controls[selectedControl].rec.y, RED);
else if (layout.controls[selectedControl].ap->id > 0 && layout.controls[selectedControl].ap->hidding) DrawLine(layout.controls[selectedControl].ap->x, layout.controls[selectedControl].ap->y, layout.controls[selectedControl].ap->x + layout.controls[selectedControl].rec.x, layout.controls[selectedControl].ap->y + layout.controls[selectedControl].rec.y, BLUE);
} }
// Draw anchor lines
if ((selectedControl != -1) && layout.controls[selectedControl].ap->id > 0 && !layout.controls[selectedControl].ap->hidding) DrawLine(layout.controls[selectedControl].ap->x, layout.controls[selectedControl].ap->y, layout.controls[selectedControl].ap->x + layout.controls[selectedControl].rec.x, layout.controls[selectedControl].ap->y + layout.controls[selectedControl].rec.y, RED);
else if ((selectedControl != -1) && layout.controls[selectedControl].ap->id > 0 && layout.controls[selectedControl].ap->hidding) DrawLine(layout.controls[selectedControl].ap->x, layout.controls[selectedControl].ap->y, layout.controls[selectedControl].ap->x + layout.controls[selectedControl].rec.x, layout.controls[selectedControl].ap->y + layout.controls[selectedControl].rec.y, BLUE);
if ((focusedControl != -1) && layout.controls[focusedControl].ap->id > 0 && !layout.controls[focusedControl].ap->hidding) DrawLine(layout.controls[focusedControl].ap->x, layout.controls[focusedControl].ap->y, layout.controls[focusedControl].ap->x + layout.controls[focusedControl].rec.x, layout.controls[focusedControl].ap->y + layout.controls[focusedControl].rec.y, RED);
else if ((focusedControl != -1) && layout.controls[focusedControl].ap->id > 0 && layout.controls[focusedControl].ap->hidding) DrawLine(layout.controls[focusedControl].ap->x, layout.controls[focusedControl].ap->y, layout.controls[focusedControl].ap->x + layout.controls[focusedControl].rec.x, layout.controls[focusedControl].ap->y + layout.controls[focusedControl].rec.y, BLUE);
// Draw cursor (control mode or anchor mode) // Draw cursor (control mode or anchor mode)
if ((selectedControl == -1) && (selectedAnchor == -1)) if ((selectedControl == -1) && (selectedAnchor == -1))
{ {