Multiple tool improvements

- Support loading tracemap images for reference (and corresponding
controls)
- Support linked anchors movement (and relink)
- Hide/Unhide selected anchor-controls
- New fancy help menu
This commit is contained in:
Ray San
2018-04-04 14:15:21 +02:00
parent daec91e5c8
commit 01835cbe81
8 changed files with 252 additions and 221 deletions

View File

@ -15,7 +15,7 @@
#define RAYGUI_STYLE_SAVE_LOAD #define RAYGUI_STYLE_SAVE_LOAD
#include "raygui.h" #include "raygui.h"
#include "easings.h" #include "external/easings.h"
#include "external/tinyfiledialogs.h" // Open/Save file dialogs #include "external/tinyfiledialogs.h" // Open/Save file dialogs
#include <stdlib.h> #include <stdlib.h>
@ -61,6 +61,7 @@ typedef struct {
int x; int x;
int y; int y;
bool enabled; bool enabled;
bool hidding;
} AnchorPoint; } AnchorPoint;
// Gui control type // Gui control type
@ -124,8 +125,15 @@ int main()
int selectedAnchor = -1; int selectedAnchor = -1;
int linkedAnchor = -1; int linkedAnchor = -1;
AnchorPoint auxAnchor = { 9, 0, 0, 0};
bool anchorNewPos = false;
bool lockMode = false; bool lockMode = false;
bool helpMode = false;
int helpPosX = -300;
int helpCounter = 0;
int startPosXHelp = -300;
int deltaPosXHelp = 0;
int fileCount = 0; int fileCount = 0;
char **droppedFiles = { 0 }; char **droppedFiles = { 0 };
@ -154,16 +162,16 @@ int main()
// List view required variables // List view required variables
Rectangle listViewControls = { -200, 0, 140, 500 }; Rectangle listViewControls = { -200, 0, 140, 500 };
int counterListViewControls = 0;
int startPosXListViewControls = -200;
int deltaPosXListViewControls = 0;
Rectangle listViewControlsCounter = { GetScreenWidth() + 140, 0, 140, 500 }; Rectangle listViewControlsCounter = { GetScreenWidth() + 140, 0, 140, 500 };
int counterListViewControlsCounter = 0; int counterListViewControlsCounter = 0;
int startPosXListViewControlsCounter = GetScreenWidth() + 140; int startPosXListViewControlsCounter = GetScreenWidth() + 140;
int deltaPosXListViewControlsCounter = 0; int deltaPosXListViewControlsCounter = 0;
// ToggleGroup, ComboBox, DropdownBox use this data
const char *list[3] = { "ONE", "TWO", "THREE" }; const char *list[3] = { "ONE", "TWO", "THREE" };
const char *guiControls[18] = { const char *guiControls[18] = {
"LABEL", "LABEL",
"BUTTON", "BUTTON",
@ -205,7 +213,12 @@ int main()
}; };
Texture2D texture = LoadTexture("icons.png"); Texture2D texture = LoadTexture("icons.png");
Texture2D rfxgenLayout = LoadTexture("screenshot001.png"); Texture2D tracemap = { 0 };
Rectangle tracemapRec = { 0 };
bool tracemapEditMode = false;
float tracemapFade = 0.5f;
Vector2 panOffset = { 0 };
Vector2 prevPosition = { tracemapRec.x, tracemapRec.y };
// Initialize anchor points to default values // Initialize anchor points to default values
for (int i = 0; i < MAX_ANCHOR_POINTS; i++) for (int i = 0; i < MAX_ANCHOR_POINTS; i++)
@ -214,6 +227,7 @@ int main()
anchors[i].x = 0; anchors[i].x = 0;
anchors[i].y = 0; anchors[i].y = 0;
anchors[i].enabled = false; anchors[i].enabled = false;
anchors[i].hidding = false;
} }
anchors[0].enabled = true; // Enable anchors parent (0, 0) anchors[0].enabled = true; // Enable anchors parent (0, 0)
@ -247,34 +261,35 @@ int main()
if (CheckCollisionPointRec(GetMousePosition(), listViewControls)) controlCollision = true; if (CheckCollisionPointRec(GetMousePosition(), listViewControls)) controlCollision = true;
else if (CheckCollisionPointRec(GetMousePosition(), listViewControlsCounter)) controlCollision = true; else if (CheckCollisionPointRec(GetMousePosition(), listViewControlsCounter)) controlCollision = true;
/*
// Toggle on the controlListView // Toggle on the controlListView
if (IsKeyPressed(KEY_TAB)) if (IsKeyPressed(KEY_TAB))
{ {
startPosXListViewControls = listViewControls.x; startPosXHelp = helpPosX;
deltaPosXListViewControls = 0 - startPosXListViewControls; deltaPosXHelp = 0 - startPosXHelp;
counterListViewControls = 0; helpCounter = 0;
} }
if (IsKeyDown(KEY_TAB)) if (IsKeyDown(KEY_TAB))
{ {
counterListViewControls++; helpCounter++;
if (counterListViewControls >= 60) counterListViewControls = 60; if (helpCounter >= 60) helpCounter = 60;
listViewControls.x = (int)EaseCubicInOut(counterListViewControls, startPosXListViewControls, deltaPosXListViewControls, 60); helpPosX = (int)EaseCubicInOut(helpCounter, startPosXHelp, deltaPosXHelp, 60);
} }
else if (IsKeyReleased(KEY_TAB)) else if (IsKeyReleased(KEY_TAB))
{ {
startPosXListViewControls = listViewControls.x; startPosXHelp = helpPosX;
deltaPosXListViewControls = -200 - startPosXListViewControls; deltaPosXHelp = -300 - startPosXHelp;
counterListViewControls = 0; helpCounter = 0;
} }
else else
{ {
counterListViewControls++; helpCounter++;
if (counterListViewControls >= 60) counterListViewControls = 60; if (helpCounter >= 60) helpCounter = 60;
listViewControls.x = (int)EaseCubicInOut(counterListViewControls, startPosXListViewControls, deltaPosXListViewControls, 60); helpPosX = (int)EaseCubicInOut(helpCounter, startPosXHelp, deltaPosXHelp, 60);
} }
/*
// Toggle on the controlListViewCounter // Toggle on the controlListViewCounter
if (IsKeyPressed(KEY_W)) if (IsKeyPressed(KEY_W))
{ {
@ -303,7 +318,7 @@ int main()
} }
*/ */
if (IsMouseButtonPressed(MOUSE_LEFT_BUTTON) && (selectedControl == -1) && !controlCollision && !anchorMode) if (IsMouseButtonPressed(MOUSE_LEFT_BUTTON) && (selectedControl == -1) && !controlCollision && !anchorMode && !tracemapEditMode)
{ {
// Add new control (button) // Add new control (button)
layout[controlsCounter].id = controlsCounter; layout[controlsCounter].id = controlsCounter;
@ -339,13 +354,13 @@ int main()
// Check selected control (on mouse hover) // Check selected control (on mouse hover)
for (int i = 0; i < controlsCounter; i++) for (int i = 0; i < controlsCounter; i++)
{ {
if (controlDrag || lockMode) break; if (controlDrag || lockMode || tracemapEditMode) break;
if ((layout[i].type == WINDOWBOX) && (CheckCollisionPointRec(GetMousePosition(), (Rectangle){ layout[i].ap->x + layout[i].rec.x, layout[i].ap->y + layout[i].rec.y, layout[i].rec.width, 24 }))) if ((layout[i].type == WINDOWBOX) && (!layout[i].ap->hidding) && (CheckCollisionPointRec(GetMousePosition(), (Rectangle){ layout[i].ap->x + layout[i].rec.x, layout[i].ap->y + layout[i].rec.y, layout[i].rec.width, 24 })))
{ {
selectedControl = i; selectedControl = i;
break; break;
} }
else if (CheckCollisionPointRec(GetMousePosition(), (Rectangle){ layout[i].ap->x + layout[i].rec.x, layout[i].ap->y + layout[i].rec.y, layout[i].rec.width, layout[i].rec.height }) && layout[i].type != WINDOWBOX) else if ((!layout[i].ap->hidding) && (CheckCollisionPointRec(GetMousePosition(), (Rectangle){ layout[i].ap->x + layout[i].rec.x, layout[i].ap->y + layout[i].rec.y, layout[i].rec.width, layout[i].rec.height }) && layout[i].type != WINDOWBOX))
{ {
selectedControl = i; selectedControl = i;
break; break;
@ -586,13 +601,8 @@ int main()
saveControlSelected = selectedControl; saveControlSelected = selectedControl;
} }
if (IsKeyPressed(KEY_H) && !textEditMode) helpMode = !helpMode;
// Selected control lock logic // Selected control lock logic
if (lockMode) if (lockMode) selectedControl = saveControlSelected;
{
selectedControl = saveControlSelected;
}
if (IsKeyPressed(KEY_SPACE) && !textEditMode && (selectedControl != -1) && !lockMode && !anchorMode) if (IsKeyPressed(KEY_SPACE) && !textEditMode && (selectedControl != -1) && !lockMode && !anchorMode)
{ {
@ -658,17 +668,50 @@ int main()
anchors[selectedAnchor].x = 0; anchors[selectedAnchor].x = 0;
anchors[selectedAnchor].y = 0; anchors[selectedAnchor].y = 0;
anchors[selectedAnchor].enabled = false; anchors[selectedAnchor].enabled = false;
anchors[selectedAnchor].hidding = false;
anchorMode = false; anchorMode = false;
} }
// Allows to drag an anchor without losing collision // Allows to drag an anchor without losing collision
if (IsMouseButtonPressed(MOUSE_LEFT_BUTTON)) controlDrag = true; if (IsMouseButtonPressed(MOUSE_LEFT_BUTTON) && IsKeyDown(KEY_A))
{
controlDrag = true;
anchorNewPos = true;
for (int i = 0; i < controlsCounter; i++)
{
if (layout[i].ap->id == selectedAnchor)
{
layout[i].rec.x += layout[i].ap->x;
layout[i].rec.y += layout[i].ap->y;
layout[i].ap = &auxAnchor;
}
}
}
else if (IsMouseButtonPressed(MOUSE_LEFT_BUTTON)) controlDrag = true;
if (IsMouseButtonReleased(MOUSE_LEFT_BUTTON)) if (IsMouseButtonReleased(MOUSE_LEFT_BUTTON))
{ {
if (anchorNewPos)
{
for (int i = 0; i < controlsCounter; i++)
{
if (layout[i].ap->id == 9)
{
layout[i].rec.x += layout[i].ap->x;
layout[i].rec.y += layout[i].ap->y;
layout[i].ap = &anchors[selectedAnchor];
layout[i].rec.x -= anchors[selectedAnchor].x;
layout[i].rec.y -= anchors[selectedAnchor].y;
}
}
anchorNewPos = false;
}
controlDrag = false; controlDrag = false;
selectedAnchor = -1; selectedAnchor = -1;
anchorMode = false; anchorMode = false;
} }
// Moves the anchor to the mouse position // Moves the anchor to the mouse position
@ -700,6 +743,11 @@ int main()
anchorLinkMode = false; anchorLinkMode = false;
anchorMode = false; anchorMode = false;
} }
if (IsKeyPressed(KEY_H))
{
anchors[selectedAnchor].hidding = !anchors[selectedAnchor].hidding;
}
} }
} }
@ -758,6 +806,16 @@ int main()
if (IsFileExtension(name, ".rgl")) LoadLayoutRGL(name); if (IsFileExtension(name, ".rgl")) LoadLayoutRGL(name);
else if (IsFileExtension(name, ".rgs")) GuiLoadStyle(name); else if (IsFileExtension(name, ".rgs")) GuiLoadStyle(name);
else if (IsFileExtension(name, ".png"))
{
if (tracemap.id > 0) UnloadTexture(tracemap);
tracemap = LoadTexture(name);
SetTextureFilter(tracemap, FILTER_BILINEAR);
tracemapRec.width = tracemap.width;
tracemapRec.height = tracemap.height;
}
ClearDroppedFiles(); ClearDroppedFiles();
} }
@ -802,6 +860,72 @@ int main()
} }
if (IsKeyDown(KEY_LEFT_CONTROL) && IsKeyPressed(KEY_ENTER)) GenerateLayoutCode("test_layout.c"); if (IsKeyDown(KEY_LEFT_CONTROL) && IsKeyPressed(KEY_ENTER)) GenerateLayoutCode("test_layout.c");
// Tracemap texture control logic
if (tracemap.id > 0)
{
// Toggles Texture editting mode between true or false
if (IsKeyDown(KEY_LEFT_CONTROL) && IsKeyPressed(KEY_T)) tracemapEditMode = !tracemapEditMode;
if (tracemapEditMode)
{
int offsetX = mouseX%GRID_LINE_SPACING;
int offsetY = mouseY%GRID_LINE_SPACING;
// Moves the texture with the mouse
if (IsMouseButtonPressed(MOUSE_LEFT_BUTTON)) panOffset = (Vector2){ mouseX, mouseY };
if (IsMouseButtonDown(MOUSE_LEFT_BUTTON))
{
if (snapMode)
{
if (offsetX >= GRID_LINE_SPACING/2) mouseX += (GRID_LINE_SPACING - offsetX);
else mouseX -= offsetX;
if (offsetY >= GRID_LINE_SPACING/2) mouseY += (GRID_LINE_SPACING - offsetY);
else mouseY -= offsetY;
}
tracemapRec.x = prevPosition.x + (mouseX - panOffset.x);
tracemapRec.y = prevPosition.y + (mouseY - panOffset.y);
}
if (IsMouseButtonReleased(MOUSE_LEFT_BUTTON)) prevPosition = (Vector2){ tracemapRec.x, tracemapRec.y };
// Moves and scales the texture with snap.
if (IsKeyDown(KEY_LEFT_CONTROL))
{
tracemapRec.height -= GetMouseWheelMove();
tracemapRec.width -= GetMouseWheelMove();
}
else
{
tracemapRec.height -= 10*GetMouseWheelMove();
tracemapRec.width -= 10*GetMouseWheelMove();
}
tracemap.height = tracemapRec.height;
tracemap.width = tracemapRec.width;
// Change texture fade
if (IsKeyDown(KEY_LEFT)) tracemapFade-= 0.01f;
else if (IsKeyDown(KEY_RIGHT)) tracemapFade+=0.01f;
if (tracemapFade < 0) tracemapFade = 0;
else if (tracemapFade > 1) tracemapFade = 1;
// Deletes the texture and resets it
if (IsKeyPressed(KEY_DELETE))
{
UnloadTexture(tracemap);
tracemap.id = 0;
tracemapEditMode = false;
tracemapRec.x = 0;
tracemapRec.y = 0;
}
}
}
//---------------------------------------------------------------------------------- //----------------------------------------------------------------------------------
// Draw // Draw
@ -812,41 +936,45 @@ int main()
if (showGrid) DrawGrid2D(GetScreenWidth()/13, GetScreenHeight()/13); if (showGrid) DrawGrid2D(GetScreenWidth()/13, GetScreenHeight()/13);
DrawTexture(rfxgenLayout, 100, 50, Fade(WHITE, 0.6f)); if (tracemap.id > 0) DrawTexture(tracemap, tracemapRec.x, tracemapRec.y, Fade(WHITE, tracemapFade));
for (int i = 0; i < controlsCounter; i++) for (int i = 0; i < controlsCounter; i++)
{ {
// Draws the Controls when placed on the grid. // Draws the Controls when placed on the grid.
switch (layout[i].type) if (!layout[i].ap->hidding)
{ {
case LABEL: GuiLabel((Rectangle){ layout[i].ap->x + layout[i].rec.x, layout[i].ap->y + layout[i].rec.y, layout[i].rec.width, layout[i].rec.height }, layout[i].text); break; switch (layout[i].type)
case BUTTON: GuiButton((Rectangle){ layout[i].ap->x + layout[i].rec.x, layout[i].ap->y + layout[i].rec.y, layout[i].rec.width, layout[i].rec.height }, layout[i].text); break; {
case IMAGEBUTTON: GuiImageButtonEx((Rectangle){ layout[i].ap->x + layout[i].rec.x, layout[i].ap->y + layout[i].rec.y, layout[i].rec.width, layout[i].rec.height }, texture, (Rectangle){ 0, 0, texture.width/3, texture.height/6 }, layout[i].text); break; case LABEL: GuiLabel((Rectangle){ layout[i].ap->x + layout[i].rec.x, layout[i].ap->y + layout[i].rec.y, layout[i].rec.width, layout[i].rec.height }, layout[i].text); break;
case TOGGLE: GuiToggleButton((Rectangle){ layout[i].ap->x + layout[i].rec.x, layout[i].ap->y + layout[i].rec.y, layout[i].rec.width, layout[i].rec.height }, layout[i].text, false); break; case BUTTON: GuiButton((Rectangle){ layout[i].ap->x + layout[i].rec.x, layout[i].ap->y + layout[i].rec.y, layout[i].rec.width, layout[i].rec.height }, layout[i].text); break;
case TOGGLEGROUP: GuiToggleGroup((Rectangle){ layout[i].ap->x + layout[i].rec.x, layout[i].ap->y + layout[i].rec.y, layout[i].rec.width, layout[i].rec.height }, list, 3, 1); break; case IMAGEBUTTON: GuiImageButtonEx((Rectangle){ layout[i].ap->x + layout[i].rec.x, layout[i].ap->y + layout[i].rec.y, layout[i].rec.width, layout[i].rec.height }, texture, (Rectangle){ 0, 0, texture.width/3, texture.height/6 }, layout[i].text); break;
case SLIDER: GuiSlider((Rectangle){ layout[i].ap->x + layout[i].rec.x, layout[i].ap->y + layout[i].rec.y, layout[i].rec.width, layout[i].rec.height }, 40, 0, 100); break; case TOGGLE: GuiToggleButton((Rectangle){ layout[i].ap->x + layout[i].rec.x, layout[i].ap->y + layout[i].rec.y, layout[i].rec.width, layout[i].rec.height }, layout[i].text, false); break;
case SLIDERBAR: GuiSliderBar((Rectangle){ layout[i].ap->x + layout[i].rec.x, layout[i].ap->y + layout[i].rec.y, layout[i].rec.width, layout[i].rec.height }, 40, 0, 100); break; case TOGGLEGROUP: GuiToggleGroup((Rectangle){ layout[i].ap->x + layout[i].rec.x, layout[i].ap->y + layout[i].rec.y, layout[i].rec.width, layout[i].rec.height }, list, 3, 1); break;
case PROGRESSBAR: GuiProgressBar((Rectangle){ layout[i].ap->x + layout[i].rec.x, layout[i].ap->y + layout[i].rec.y, layout[i].rec.width, layout[i].rec.height }, 40, 0, 100); break; case SLIDER: GuiSlider((Rectangle){ layout[i].ap->x + layout[i].rec.x, layout[i].ap->y + layout[i].rec.y, layout[i].rec.width, layout[i].rec.height }, 40, 0, 100); break;
case SPINNER: GuiSpinner((Rectangle){ layout[i].ap->x + layout[i].rec.x, layout[i].ap->y + layout[i].rec.y, layout[i].rec.width, layout[i].rec.height }, 40, 0, 100); break; case SLIDERBAR: GuiSliderBar((Rectangle){ layout[i].ap->x + layout[i].rec.x, layout[i].ap->y + layout[i].rec.y, layout[i].rec.width, layout[i].rec.height }, 40, 0, 100); break;
case COMBOBOX: GuiComboBox((Rectangle){ layout[i].ap->x + layout[i].rec.x, layout[i].ap->y + layout[i].rec.y, layout[i].rec.width, layout[i].rec.height }, list, 3, 1); break; case PROGRESSBAR: GuiProgressBar((Rectangle){ layout[i].ap->x + layout[i].rec.x, layout[i].ap->y + layout[i].rec.y, layout[i].rec.width, layout[i].rec.height }, 40, 0, 100); break;
case CHECKBOX: GuiCheckBox((Rectangle){ layout[i].ap->x + layout[i].rec.x, layout[i].ap->y + layout[i].rec.y, layout[i].rec.width, layout[i].rec.height }, false); break; case SPINNER: GuiSpinner((Rectangle){ layout[i].ap->x + layout[i].rec.x, layout[i].ap->y + layout[i].rec.y, layout[i].rec.width, layout[i].rec.height }, 40, 0, 100); break;
case TEXTBOX: GuiTextBox((Rectangle){ layout[i].ap->x + layout[i].rec.x, layout[i].ap->y + layout[i].rec.y, layout[i].rec.width, layout[i].rec.height }, layout[i].text, 32); break; case COMBOBOX: GuiComboBox((Rectangle){ layout[i].ap->x + layout[i].rec.x, layout[i].ap->y + layout[i].rec.y, layout[i].rec.width, layout[i].rec.height }, list, 3, 1); break;
case GROUPBOX: GuiGroupBox((Rectangle){ layout[i].ap->x + layout[i].rec.x, layout[i].ap->y + layout[i].rec.y, layout[i].rec.width, layout[i].rec.height }, layout[i].text); break; case CHECKBOX: GuiCheckBox((Rectangle){ layout[i].ap->x + layout[i].rec.x, layout[i].ap->y + layout[i].rec.y, layout[i].rec.width, layout[i].rec.height }, false); break;
case WINDOWBOX: GuiWindowBox((Rectangle){ layout[i].ap->x + layout[i].rec.x, layout[i].ap->y + layout[i].rec.y, layout[i].rec.width, layout[i].rec.height }, layout[i].text); break; case TEXTBOX: GuiTextBox((Rectangle){ layout[i].ap->x + layout[i].rec.x, layout[i].ap->y + layout[i].rec.y, layout[i].rec.width, layout[i].rec.height }, layout[i].text, 32); break;
case DUMMYREC: GuiDummyRec((Rectangle){ layout[i].ap->x + layout[i].rec.x, layout[i].ap->y + layout[i].rec.y, layout[i].rec.width, layout[i].rec.height }, layout[i].text); break; case GROUPBOX: GuiGroupBox((Rectangle){ layout[i].ap->x + layout[i].rec.x, layout[i].ap->y + layout[i].rec.y, layout[i].rec.width, layout[i].rec.height }, layout[i].text); break;
case STATUSBAR: GuiStatusBar((Rectangle){ layout[i].ap->x + layout[i].rec.x, layout[i].ap->y + layout[i].rec.y, layout[i].rec.width, layout[i].rec.height }, layout[i].text, 15); break; case WINDOWBOX: GuiWindowBox((Rectangle){ layout[i].ap->x + layout[i].rec.x, layout[i].ap->y + layout[i].rec.y, layout[i].rec.width, layout[i].rec.height }, layout[i].text); break;
case LISTVIEW: GuiListView((Rectangle){ layout[i].ap->x + layout[i].rec.x, layout[i].ap->y + layout[i].rec.y, layout[i].rec.width, layout[i].rec.height }, guiControls, 14, 1); break; case DUMMYREC: GuiDummyRec((Rectangle){ layout[i].ap->x + layout[i].rec.x, layout[i].ap->y + layout[i].rec.y, layout[i].rec.width, layout[i].rec.height }, layout[i].text); break;
case COLORPICKER: GuiColorPicker((Rectangle){ layout[i].ap->x + layout[i].rec.x, layout[i].ap->y + layout[i].rec.y, layout[i].rec.width, layout[i].rec.height }, RED); break; case STATUSBAR: GuiStatusBar((Rectangle){ layout[i].ap->x + layout[i].rec.x, layout[i].ap->y + layout[i].rec.y, layout[i].rec.width, layout[i].rec.height }, layout[i].text, 15); break;
default: break; case LISTVIEW: GuiListView((Rectangle){ layout[i].ap->x + layout[i].rec.x, layout[i].ap->y + layout[i].rec.y, layout[i].rec.width, layout[i].rec.height }, guiControls, 14, 1); break;
} case COLORPICKER: GuiColorPicker((Rectangle){ layout[i].ap->x + layout[i].rec.x, layout[i].ap->y + layout[i].rec.y, layout[i].rec.width, layout[i].rec.height }, RED); break;
default: break;
}
if ((layout[i].ap->id == selectedAnchor) && (layout[i].ap->id > 0)) DrawLine(layout[i].ap->x, layout[i].ap->y, layout[i].ap->x + layout[i].rec.x, layout[i].ap->y + layout[i].rec.y, RED); if ((layout[i].ap->id == selectedAnchor) && (layout[i].ap->id > 0)) DrawLine(layout[i].ap->x, layout[i].ap->y, layout[i].ap->x + layout[i].rec.x, layout[i].ap->y + layout[i].rec.y, RED);
}
else if ((layout[i].ap->id == selectedAnchor) && (layout[i].ap->id > 0)) DrawLine(layout[i].ap->x, layout[i].ap->y, layout[i].ap->x + layout[i].rec.x, layout[i].ap->y + layout[i].rec.y, BLUE);
// Draw Control anchor information // Draw Control anchor information
// DrawText(FormatText("Id: %i | X: %i | Y: %i | Enabled: %i", layout[0].ap->id, layout[0].ap->x, layout[0].ap->y, layout[0].ap->enabled), 100, 100, style[DEFAULT_TEXT_SIZE], RED); // DrawText(FormatText("Id: %i | X: %i | Y: %i | Enabled: %i", layout[0].ap->id, layout[0].ap->x, layout[0].ap->y, layout[0].ap->enabled), 100, 100, style[DEFAULT_TEXT_SIZE], RED);
} }
// Draws the defaultRec[selectedType] of the control selected // Draws the defaultRec[selectedType] of the control selected
if (selectedControl == -1 && !anchorMode) if (selectedControl == -1 && !anchorMode && !tracemapEditMode)
{ {
switch (selectedTypeDraw) switch (selectedTypeDraw)
{ {
@ -872,6 +1000,12 @@ int main()
} }
} }
// Draw the tracemap controler
if (tracemapEditMode)
{
DrawRectangleLines(tracemapRec.x, tracemapRec.y, tracemapRec.width, tracemapRec.height, RED);
}
/* /*
// Draw the list of controls // Draw the list of controls
DrawRectangleRec(listViewControls, Fade(WHITE, 0.7f)); DrawRectangleRec(listViewControls, Fade(WHITE, 0.7f));
@ -885,16 +1019,48 @@ int main()
// Draw the anchorPoints // Draw the anchorPoints
for (int i = 1; i < MAX_ANCHOR_POINTS; i++) for (int i = 1; i < MAX_ANCHOR_POINTS; i++)
{ {
if (anchors[i].id == selectedAnchor) DrawCircle(anchors[i].x, anchors[i].y, ANCHOR_RADIUS, Fade(RED, 0.5f)); if (anchors[i].id == selectedAnchor && anchorNewPos)
else DrawCircleLines(anchors[i].x, anchors[i].y, ANCHOR_RADIUS, Fade(RED, 0.5f)); {
DrawRectangle(anchors[i].x - ANCHOR_RADIUS - 5, anchors[i].y, ANCHOR_RADIUS*2 + 10, 1, RED); // Draw the anchor that is currently moving
DrawRectangle(anchors[i].x, anchors[i].y - ANCHOR_RADIUS - 5, 1, ANCHOR_RADIUS*2 + 10, RED); DrawCircle(anchors[i].x, anchors[i].y, ANCHOR_RADIUS, Fade(ORANGE, 0.5f));
DrawRectangle(anchors[i].x - ANCHOR_RADIUS - 5, anchors[i].y, ANCHOR_RADIUS*2 + 10, 1, ORANGE);
DrawRectangle(anchors[i].x, anchors[i].y - ANCHOR_RADIUS - 5, 1, ANCHOR_RADIUS*2 + 10, ORANGE);
}
else if (anchors[i].hidding && anchors[i].id == selectedAnchor)
{
// Draw idle anchor
DrawCircle(anchors[i].x, anchors[i].y, ANCHOR_RADIUS, Fade(BLUE, 0.5f));
DrawRectangle(anchors[i].x - ANCHOR_RADIUS - 5, anchors[i].y, ANCHOR_RADIUS*2 + 10, 1, BLUE);
DrawRectangle(anchors[i].x, anchors[i].y - ANCHOR_RADIUS - 5, 1, ANCHOR_RADIUS*2 + 10, BLUE);
}
else if (anchors[i].id == selectedAnchor)
{
// Draw the selected anchor
DrawCircle(anchors[i].x, anchors[i].y, ANCHOR_RADIUS, Fade(RED, 0.5f));
DrawRectangle(anchors[i].x - ANCHOR_RADIUS - 5, anchors[i].y, ANCHOR_RADIUS*2 + 10, 1, RED);
DrawRectangle(anchors[i].x, anchors[i].y - ANCHOR_RADIUS - 5, 1, ANCHOR_RADIUS*2 + 10, RED);
}
else if (anchors[i].hidding)
{
// Draw idle anchor
DrawCircleLines(anchors[i].x, anchors[i].y, ANCHOR_RADIUS, Fade(BLUE, 0.5f));
DrawRectangle(anchors[i].x - ANCHOR_RADIUS - 5, anchors[i].y, ANCHOR_RADIUS*2 + 10, 1, BLUE);
DrawRectangle(anchors[i].x, anchors[i].y - ANCHOR_RADIUS - 5, 1, ANCHOR_RADIUS*2 + 10, BLUE);
}
else
{
// Draw idle anchor
DrawCircleLines(anchors[i].x, anchors[i].y, ANCHOR_RADIUS, Fade(RED, 0.5f));
DrawRectangle(anchors[i].x - ANCHOR_RADIUS - 5, anchors[i].y, ANCHOR_RADIUS*2 + 10, 1, RED);
DrawRectangle(anchors[i].x, anchors[i].y - ANCHOR_RADIUS - 5, 1, ANCHOR_RADIUS*2 + 10, RED);
}
} }
if ((selectedControl != -1) && (selectedControl < controlsCounter)) if ((selectedControl != -1) && (selectedControl < controlsCounter))
{ {
DrawRectangleRec((Rectangle){ layout[selectedControl].ap->x + layout[selectedControl].rec.x, layout[selectedControl].ap->y + layout[selectedControl].rec.y, layout[selectedControl].rec.width, layout[selectedControl].rec.height }, Fade(RED, 0.5f)); DrawRectangleRec((Rectangle){ layout[selectedControl].ap->x + layout[selectedControl].rec.x, layout[selectedControl].ap->y + layout[selectedControl].rec.y, layout[selectedControl].rec.width, layout[selectedControl].rec.height }, Fade(RED, 0.5f));
if (layout[selectedControl].ap->id > 0) DrawLine(layout[selectedControl].ap->x, layout[selectedControl].ap->y, layout[selectedControl].ap->x + layout[selectedControl].rec.x, layout[selectedControl].ap->y + layout[selectedControl].rec.y, RED); if (layout[selectedControl].ap->id > 0 && !layout[selectedControl].ap->hidding) DrawLine(layout[selectedControl].ap->x, layout[selectedControl].ap->y, layout[selectedControl].ap->x + layout[selectedControl].rec.x, layout[selectedControl].ap->y + layout[selectedControl].rec.y, RED);
else if (layout[selectedControl].ap->id > 0 && layout[selectedControl].ap->hidding) DrawLine(layout[selectedControl].ap->x, layout[selectedControl].ap->y, layout[selectedControl].ap->x + layout[selectedControl].rec.x, layout[selectedControl].ap->y + layout[selectedControl].rec.y, BLUE);
} }
if ((selectedControl == -1) && (selectedAnchor == -1)) if ((selectedControl == -1) && (selectedAnchor == -1))
@ -928,34 +1094,33 @@ int main()
if (anchorLinkMode) DrawLine(anchors[linkedAnchor].x, anchors[linkedAnchor].y, mouseX, mouseY, BLACK); if (anchorLinkMode) DrawLine(anchors[linkedAnchor].x, anchors[linkedAnchor].y, mouseX, mouseY, BLACK);
if (helpMode) // Draw the help list
{ DrawRectangleRec((Rectangle){ helpPosX + 20, 20, 260, 350 }, GetColor(style[DEFAULT_BACKGROUND_COLOR]));
DrawRectangleRec((Rectangle){ 20, 20, 260, 330 }, GetColor(style[DEFAULT_BACKGROUND_COLOR])); GuiGroupBox((Rectangle){ helpPosX + 20, 20, 260, 350 }, "Shortcuts");
GuiGroupBox((Rectangle){ 20, 20, 260, 330 }, "Shortcuts"); GuiLabel((Rectangle){ helpPosX + 30, 30, 0, 0 }, "G - Show/hide grid");
GuiLabel((Rectangle){ 30, 30, 0, 0 }, "G - Show/hide grid"); GuiLabel((Rectangle){ helpPosX + 30, 50, 0, 0 }, "S - Toggle snap");
GuiLabel((Rectangle){ 30, 50, 0, 0 }, "S - Toggle snap"); GuiLabel((Rectangle){ helpPosX + 30, 70, 0, 0 }, "R - Resize to grid");
GuiLabel((Rectangle){ 30, 70, 0, 0 }, "R - Resize to grid"); GuiLabel((Rectangle){ helpPosX + 30, 90, 0, 0 }, "A - Anchor mode");
GuiLabel((Rectangle){ 30, 90, 0, 0 }, "A - Anchor mode"); GuiLabel((Rectangle){ helpPosX + 30, 110, 0, 0 }, "H - Hide controls of selected anchor");
GuiLabel((Rectangle){ 30, 110, 0, 0 }, "U - Unlink anchor"); GuiLabel((Rectangle){ helpPosX + 30, 130, 0, 0 }, "U - Unlink anchor");
GuiLabel((Rectangle){ 30, 130, 0, 0 }, "Space - Lock/unlock control"); GuiLabel((Rectangle){ helpPosX + 30, 150, 0, 0 }, "Space - Lock/unlock control");
GuiLabel((Rectangle){ 30, 150, 0, 0 }, "T - Enter text mode(if possible)"); GuiLabel((Rectangle){ helpPosX + 30, 170, 0, 0 }, "T - Enter text mode(if possible)");
GuiLabel((Rectangle){ 30, 170, 0, 0 }, "Enter - Exit text mode"); GuiLabel((Rectangle){ helpPosX + 30, 190, 0, 0 }, "Enter - Exit text mode");
GuiLabel((Rectangle){ 30, 190, 0, 0 }, "Delete - Delete a control"); GuiLabel((Rectangle){ helpPosX + 30, 210, 0, 0 }, "Delete - Delete a control");
GuiLabel((Rectangle){ 30, 210, 0, 0 }, "Arrows - Modify width/height"); GuiLabel((Rectangle){ helpPosX + 30, 230, 0, 0 }, "Arrows - Modify width/height");
GuiLabel((Rectangle){ 30, 230, 0, 0 }, "L. Ctrl + Arrows - Modify width/height(smooth)"); GuiLabel((Rectangle){ helpPosX + 30, 250, 0, 0 }, "L. Ctrl + Arrows - Modify width/height(smooth)");
GuiLabel((Rectangle){ 30, 250, 0, 0 }, "L. Alt + Arrows - Modify position"); GuiLabel((Rectangle){ helpPosX + 30, 270, 0, 0 }, "L. Alt + Arrows - Modify position");
GuiLabel((Rectangle){ 30, 270, 0, 0 }, "L. Ctrl + Enter - Export layout to code"); GuiLabel((Rectangle){ helpPosX + 30, 290, 0, 0 }, "L. Ctrl + Enter - Export layout to code");
GuiLabel((Rectangle){ 30, 290, 0, 0 }, "L. Ctrl + S - Save layout(.rgl)"); GuiLabel((Rectangle){ helpPosX + 30, 310, 0, 0 }, "L. Ctrl + S - Save layout(.rgl)");
GuiLabel((Rectangle){ 30, 310, 0, 0 }, "L. Ctrl + O - Open layout(.rgl)"); GuiLabel((Rectangle){ helpPosX + 30, 330, 0, 0 }, "L. Ctrl + O - Open layout(.rgl)");
GuiLabel((Rectangle){ 30, 330, 0, 0 }, "L. Ctrl + D - Duplicate selected control"); GuiLabel((Rectangle){ helpPosX + 30, 350, 0, 0 }, "L. Ctrl + D - Duplicate selected control");
}
// Draw status bar bottom with debug information // Draw status bar bottom with debug information
GuiStatusBar((Rectangle){ 0, GetScreenHeight() - 24, 125, 24}, FormatText("Controls count: %i", controlsCounter), 20); GuiStatusBar((Rectangle){ 0, GetScreenHeight() - 24, 125, 24}, FormatText("Controls count: %i", controlsCounter), 20);
GuiStatusBar((Rectangle){ 124, GetScreenHeight() - 24, 126, 24}, FormatText("Mouse: (%i, %i)", mouseX, mouseY), 15); GuiStatusBar((Rectangle){ 124, GetScreenHeight() - 24, 126, 24}, FormatText("Mouse: (%i, %i)", mouseX, mouseY), 15);
if (snapMode) GuiStatusBar((Rectangle){ 249, GetScreenHeight() - 24, 81, 24}, "SNAP ON", 10); if (snapMode) GuiStatusBar((Rectangle){ 249, GetScreenHeight() - 24, 81, 24}, "SNAP ON", 10);
else GuiStatusBar((Rectangle){ 249, GetScreenHeight() - 24, 81, 24}, "SNAP OFF", 10); else GuiStatusBar((Rectangle){ 249, GetScreenHeight() - 24, 81, 24}, "SNAP OFF", 10);
GuiStatusBar((Rectangle){ 329, GetScreenHeight() - 24, 80, 24}, "H - Help", 10); GuiStatusBar((Rectangle){ 329, GetScreenHeight() - 24, 80, 24}, "Tab - Help", 10);
GuiStatusBar((Rectangle){ 400, GetScreenHeight() - 24, GetScreenWidth() - 400, 24}, FormatText("Selected Control: %s (%i, %i, %i, %i)", controlTypeName[selectedType], layout[selectedControl].rec.x, layout[selectedControl].rec.y, layout[selectedControl].rec.width, layout[selectedControl].rec.height), 15); GuiStatusBar((Rectangle){ 400, GetScreenHeight() - 24, GetScreenWidth() - 400, 24}, FormatText("Selected Control: %s (%i, %i, %i, %i)", controlTypeName[selectedType], layout[selectedControl].rec.x, layout[selectedControl].rec.y, layout[selectedControl].rec.width, layout[selectedControl].rec.height), 15);
EndDrawing(); EndDrawing();
@ -965,7 +1130,7 @@ int main()
// De-Initialization // De-Initialization
//-------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------
UnloadTexture(texture); UnloadTexture(texture);
UnloadTexture(rfxgenLayout); UnloadTexture(tracemap);
CloseWindow(); // Close window and OpenGL context CloseWindow(); // Close window and OpenGL context
//-------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------

View File

@ -1,96 +0,0 @@
/*******************************************************************************************
*
* $(tool_name) - $(tool_description)
*
* LICENSE: zlib/libpng
*
* Copyright (c) $(year) $(author)
*
**********************************************************************************************/
#include "raylib.h"
#define RAYGUI_IMPLEMENTATION
#include "raygui.h"
//----------------------------------------------------------------------------------
// Controls Functions Declaration
//----------------------------------------------------------------------------------
static void Button000();
static void Button001();
//------------------------------------------------------------------------------------
// Program main entry point
//------------------------------------------------------------------------------------
int main()
{
// Initialization
//---------------------------------------------------------------------------------------
int screenWidth = 800;
int screenHeight = 450;
InitWindow(screenWidth, screenHeight, "rFXGen");
Rectangle layoutRecs[12] = {
(Rectangle){ 100, 50, 100, 30 }, // BUTTON 000
(Rectangle){ 100, 100, 150, 30 }, // BUTTON 001
(Rectangle){ 100, 150, 100, 30 }, // LABEL 002
(Rectangle){ 100, 190, 100, 30 }, // TOGGLE 003
(Rectangle){ 100, 240, 90, 30 }, // TOGGLEGROUP 004
(Rectangle){ 100, 290, 300, 20 }, // SLIDER 005
(Rectangle){ 100, 330, 250, 20 }, // PROGRESSBAR 006
(Rectangle){ 350, 50, 150, 30 }, // SPINNER 007
(Rectangle){ 350, 100, 120, 30 }, // COMBOBOX 008
(Rectangle){ 420, 160, 20, 20 }, // CHECKBOX 009
(Rectangle){ 420, 210, 20, 20 }, // CHECKBOX 010
(Rectangle){ 450, 250, 150, 30 } // TEXTBOX 011
};
SetTargetFPS(60);
//--------------------------------------------------------------------------------------
// Main game loop
while (!WindowShouldClose()) // Detect window close button or ESC key
{
// Update
//----------------------------------------------------------------------------------
// TODO: Implement required update logic
//----------------------------------------------------------------------------------
// Draw
//----------------------------------------------------------------------------------
BeginDrawing();
ClearBackground(GuiBackground());
if (GuiButton(layoutRecs[0], "BUTTON")) Button000();
if (GuiButton(layoutRecs[1], "BUTTON")) Button001();
GuiLabel(layoutRecs[2], "TEXT SAMPLE");
EndDrawing();
//----------------------------------------------------------------------------------
}
// De-Initialization
//--------------------------------------------------------------------------------------
CloseWindow(); // Close window and OpenGL context
//--------------------------------------------------------------------------------------
return 0;
}
//------------------------------------------------------------------------------------
// Controls Functions Definitions (local)
//------------------------------------------------------------------------------------
static void Button000()
{
// TODO: Implement control logic
}
static void Button001()
{
// TODO: Implement control logic
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 21 KiB

Binary file not shown.

View File

@ -1,38 +0,0 @@
# Num Controls : 12
# Control 000 : BUTTON
type 1 rec 100 50 100 30
# Control 001 : BUTTON
type 1 rec 100 100 150 30
# Control 002 : LABEL
type 0 rec 100 150 100 30
# Control 003 : TOGGLE
type 2 rec 100 190 100 30
# Control 004 : TOGGLEGROUP
type 3 rec 100 240 90 30
# Control 005 : SLIDER
type 4 rec 100 290 300 20
# Control 006 : PROGRESSBAR
type 6 rec 100 330 250 20
# Control 007 : SPINNER
type 7 rec 350 50 150 30
# Control 008 : COMBOBOX
type 8 rec 350 100 120 30
# Control 009 : CHECKBOX
type 9 rec 420 160 20 20
# Control 010 : CHECKBOX
type 9 rec 420 210 20 20
# Control 011 : TEXTBOX
type 10 rec 450 250 150 30

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 21 KiB