Working on the testbed application

This commit is contained in:
Daniel Chappuis 2015-07-12 00:05:49 +02:00
parent be5d635e81
commit 58992169e7
5 changed files with 62 additions and 39 deletions

View File

@ -149,7 +149,8 @@ struct GuiState
mx(-1), my(-1), scroll(0),
active(0), hot(0), hotToBe(0), isHot(false), isActive(false), wentActive(false),
dragX(0), dragY(0), dragOrig(0), widgetX(0), widgetY(0), widgetW(100),
insideCurrentScroll(false), nextItemSameLine(false), areaId(0), widgetId(0)
insideCurrentScroll(false), nextItemSameLine(false), newLinePreviousX(0),
areaId(0), widgetId(0)
{
}
@ -168,6 +169,7 @@ struct GuiState
int widgetX, widgetY, widgetW;
bool insideCurrentScroll;
bool nextItemSameLine;
int newLinePreviousX;
unsigned int areaId;
unsigned int widgetId;
@ -324,7 +326,7 @@ bool imguiBeginScrollArea(const char* name, int x, int y, int w, int h, int* scr
const int areaHeading = name ? AREA_HEADER : 0;
g_state.widgetX = x + SCROLL_AREA_PADDING;
g_state.widgetY = y+h-areaHeading + (*scroll);
g_state.widgetY = y+h-areaHeading + (*scroll) - SCROll_AREA_TOP_PADDING;
g_state.widgetW = w - SCROLL_AREA_PADDING*4;
g_scrollTop = y-areaHeading+h;
g_scrollBottom = y+SCROLL_AREA_PADDING;
@ -339,7 +341,7 @@ bool imguiBeginScrollArea(const char* name, int x, int y, int w, int h, int* scr
g_insideScrollArea = inRect(x, y, w, h, false);
g_state.insideCurrentScroll = g_insideScrollArea;
addGfxCmdRoundedRect((float)x, (float)y, (float)w, (float)h, 6, imguiRGBA(0,0,0,192));
addGfxCmdRoundedRect((float)x, (float)y, (float)w, (float)h, 6, imguiRGBA(40,40,40,192));
if (name) addGfxCmdText(x+areaHeading/2, y+h-areaHeading/2-TEXT_HEIGHT/2, IMGUI_ALIGN_LEFT, name, imguiRGBA(255,255,255,128));
@ -430,10 +432,10 @@ bool imguiButton(const char* text, bool enabled, int width)
int w = width > 0 ? width : g_state.widgetW;
int h = BUTTON_HEIGHT;
if (g_state.nextItemSameLine) {
g_state.widgetX += width + DEFAULT_HORIZONTAL_SPACING;
g_state.widgetX += width;
}
else {
g_state.widgetY -= BUTTON_HEIGHT + DEFAULT_VERTICAL_SPACING;
g_state.widgetY -= BUTTON_HEIGHT;
}
bool over = enabled && inRect(x, y, w, h);
@ -482,7 +484,12 @@ bool imguiCheck(const char* text, bool checked, bool enabled)
int y = g_state.widgetY - BUTTON_HEIGHT;
int w = g_state.widgetW;
int h = BUTTON_HEIGHT;
g_state.widgetY -= BUTTON_HEIGHT + DEFAULT_VERTICAL_SPACING;
if (g_state.nextItemSameLine) {
g_state.widgetX += w;
}
else {
g_state.widgetY -= BUTTON_HEIGHT;
}
bool over = enabled && inRect(x, y, w, h);
bool res = buttonLogic(id, over);
@ -626,40 +633,35 @@ bool imguiSlider(const char* text, float* val, float vmin, float vmax, float vin
return res || valChanged;
}
void imguiStartLineOfItems() {
void imguiStartLine() {
g_state.nextItemSameLine = true;
g_state.newLinePreviousX = g_state.widgetX;
}
void imguiEndLineOfItems() {
void imguiEndLine() {
g_state.nextItemSameLine = false;
g_state.widgetX = g_state.newLinePreviousX;
g_state.newLinePreviousX = 0;
}
void imguiIndent()
void imguiVerticalSpace(int spaceY)
{
g_state.widgetX += INDENT_SIZE;
g_state.widgetW -= INDENT_SIZE;
g_state.widgetY -= spaceY;
}
void imguiUnindent()
{
g_state.widgetX -= INDENT_SIZE;
g_state.widgetW += INDENT_SIZE;
}
void imguiSeparator()
{
g_state.widgetY -= DEFAULT_VERTICAL_SPACING*3;
void imguiHorizontalSpace(int spaceX) {
g_state.widgetX += spaceX;
}
void imguiSeparatorLine()
{
int x = g_state.widgetX;
int y = g_state.widgetY - DEFAULT_VERTICAL_SPACING*2;
int y = g_state.widgetY;
int w = g_state.widgetW;
int h = 1;
g_state.widgetY -= DEFAULT_VERTICAL_SPACING*4;
int h = SEPARATOR_LINE_WIDTH;
g_state.widgetY -= SEPARATOR_LINE_WIDTH;
addGfxCmdRect((float)x, (float)y, (float)w, (float)h, imguiRGBA(255,255,255,32));
addGfxCmdRect((float)x, (float)y, (float)w, (float)h, imguiRGBA(255,255,255,70));
}
void imguiDrawText(int x, int y, int align, const char* text, unsigned int color)

View File

@ -23,16 +23,18 @@
#define IMGUI_H
static const int BUTTON_HEIGHT = 40;
static const int SLIDER_HEIGHT = 20;
static const int SLIDER_HEIGHT = 30;
static const int SLIDER_MARKER_WIDTH = 10;
static const int CHECK_SIZE = 18;
static const int DEFAULT_VERTICAL_SPACING = 14;
static const int DEFAULT_HORIZONTAL_SPACING = 14;
static const int TEXT_HEIGHT = 16;
static const int FONT_HEIGHT = 30;
static const int SCROLL_AREA_PADDING = 6;
static const int SCROll_AREA_TOP_PADDING = 5;
static const int SCROLL_AREA_PADDING = 5;
static const int INDENT_SIZE = 16;
static const int AREA_HEADER = 28;
static const int AREA_HEADER = 20;
static const int SEPARATOR_LINE_WIDTH = 2;
enum imguiMouseButton
{
@ -58,11 +60,12 @@ void imguiEndFrame();
bool imguiBeginScrollArea(const char* name, int x, int y, int w, int h, int* scroll);
void imguiEndScrollArea();
void imguiStartLineOfItems();
void imguiEndLineOfItems();
void imguiStartLine();
void imguiEndLine();
void imguiIndent();
void imguiUnindent();
void imguiSeparator();
void imguiVerticalSpace(int spaceY);
void imguiHorizontalSpace(int spaceX);
void imguiSeparatorLine();
bool imguiButton(const char* text, bool enabled = true, int width = -1);

View File

@ -96,7 +96,9 @@ void Gui::displayHeader() {
app.mWindowToFramebufferRatio.x * windowWidth,
app.mWindowToFramebufferRatio.y * HEADER_HEIGHT, &scrollarea);
imguiStartLineOfItems();
imguiHorizontalSpace(10);
imguiVerticalSpace(20);
imguiStartLine();
// ----- Left Pane Header ----- //
@ -104,18 +106,20 @@ void Gui::displayHeader() {
if (imguiButton(app.mTimer.isRunning() ? "Pause" : "Play", true, button_width)) {
app.togglePlayPauseSimulation();
}
imguiHorizontalSpace(5);
// Step
if (imguiButton("Step", !app.mTimer.isRunning(), button_width)) {
app.toggleTakeSinglePhysicsStep();
}
imguiHorizontalSpace(5);
// Restart
if (imguiButton("Restart", true, button_width)) {
app.restartSimulation();
}
imguiEndLineOfItems();
imguiEndLine();
imguiEndScrollArea();
}
@ -131,21 +135,30 @@ void Gui::displayLeftPane() {
app.mWindowToFramebufferRatio.x * LEFT_PANE_WIDTH,
app.mWindowToFramebufferRatio.y * LEFT_PANE_HEADER_HEIGHT, &scrollarea);
imguiStartLineOfItems();
imguiSeparatorLine();
imguiVerticalSpace(5);
imguiStartLine();
// ----- Left Pane Header ----- //
int widthButton = app.mWindowToFramebufferRatio.x * LEFT_PANE_WIDTH / 5;
int widthButton = app.mWindowToFramebufferRatio.x * LEFT_PANE_WIDTH / 4.3;
if (imguiButton("Scenes", true, widthButton)) {
mLeftPane = SCENES;
}
imguiHorizontalSpace(5);
if (imguiButton("Physics", true, widthButton)) {
mLeftPane = PHYSICS;
}
imguiHorizontalSpace(5);
imguiButton("Rendering", true, widthButton);
imguiHorizontalSpace(5);
imguiButton("Profiling", true, widthButton);
imguiEndLineOfItems();
imguiEndLine();
imguiVerticalSpace(BUTTON_HEIGHT + 8);
imguiSeparatorLine();
imguiEndScrollArea();
// Display the left pane content
@ -175,6 +188,8 @@ void Gui::displayScenesPane() {
app.mWindowToFramebufferRatio.y * (windowHeight - HEADER_HEIGHT - LEFT_PANE_HEADER_HEIGHT),
&scrollarea);
imguiVerticalSpace(15);
// For each scene
for (int i=0; i<scenes.size(); i++) {
@ -203,6 +218,8 @@ void Gui::displayPhysicsPane() {
app.mWindowToFramebufferRatio.y * (windowHeight - HEADER_HEIGHT - LEFT_PANE_HEADER_HEIGHT),
&scrollarea);
imguiVerticalSpace(15);
// Enabled/Disable Sleeping
bool toggle = imguiCheck("Sleeping enabled", app.mEngineSettings.isSleepingEnabled);
if (toggle) {
@ -302,7 +319,8 @@ void Gui::render() {
}
imguiBeginFrame(app.mWindowToFramebufferRatio.x * mouseX,
app.mWindowToFramebufferRatio.y * (windowHeight - mouseY), mousebutton, -mScrollY);
app.mWindowToFramebufferRatio.y * (windowHeight - mouseY), mousebutton,
- app.mWindowToFramebufferRatio.y * mScrollY);
resetScroll();
displayHeader();

View File

@ -37,7 +37,7 @@
const float GUI_SCALING = 2.0f;
const int HEADER_HEIGHT = 80;
const int LEFT_PANE_WIDTH = 300;
const int LEFT_PANE_HEADER_HEIGHT = 60;
const int LEFT_PANE_HEADER_HEIGHT = 50;
using namespace openglframework;

View File

@ -131,7 +131,7 @@ void TestbedApplication::init() {
glfwSetScrollCallback(mWindow, scroll);
// Define the background color (black)
glClearColor(0.0, 0.0, 0.0, 1.0);
glClearColor(0, 0, 0, 1.0);
// Create all the scenes
createScenes();
@ -164,7 +164,7 @@ void TestbedApplication::createScenes() {
mScenes.push_back(raycastScene);
assert(mScenes.size() > 0);
mCurrentScene = mScenes[1];
mCurrentScene = mScenes[0];
// Get the engine settings from the scene
mEngineSettings = mCurrentScene->getEngineSettings();