Fix issue with testbed application on non retina displays
This commit is contained in:
parent
5ff56759ee
commit
a2514b8fa4
|
@ -422,44 +422,49 @@ void imguiEndScrollArea()
|
||||||
g_state.insideCurrentScroll = false;
|
g_state.insideCurrentScroll = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool imguiButton(const char* text, bool enabled, int width)
|
bool imguiButton(const char* text, bool enabled, int width, int height, float scaleX, float scaleY)
|
||||||
{
|
{
|
||||||
g_state.widgetId++;
|
g_state.widgetId++;
|
||||||
unsigned int id = (g_state.areaId<<16) | g_state.widgetId;
|
unsigned int id = (g_state.areaId<<16) | g_state.widgetId;
|
||||||
|
|
||||||
|
int textHeight = TEXT_HEIGHT * scaleY;
|
||||||
|
int h = height > 0 ? height : BUTTON_HEIGHT;
|
||||||
int x = g_state.widgetX;
|
int x = g_state.widgetX;
|
||||||
int y = g_state.widgetY - BUTTON_HEIGHT;
|
int y = g_state.widgetY - h;
|
||||||
int w = width > 0 ? width : g_state.widgetW;
|
int w = width > 0 ? width : g_state.widgetW;
|
||||||
int h = BUTTON_HEIGHT;
|
|
||||||
if (g_state.nextItemSameLine) {
|
if (g_state.nextItemSameLine) {
|
||||||
g_state.widgetX += width;
|
g_state.widgetX += width;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
g_state.widgetY -= BUTTON_HEIGHT;
|
g_state.widgetY -= h;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool over = enabled && inRect(x, y, w, h);
|
bool over = enabled && inRect(x, y, w, h);
|
||||||
bool res = buttonLogic(id, over);
|
bool res = buttonLogic(id, over);
|
||||||
|
|
||||||
addGfxCmdRoundedRect((float)x, (float)y, (float)w, (float)h, (float)BUTTON_HEIGHT/2-1, imguiRGBA(128,128,128, isActive(id)?196:96));
|
addGfxCmdRoundedRect((float)x, (float)y, (float)w, (float)h, (float)h/2-1, imguiRGBA(128,128,128, isActive(id)?196:96));
|
||||||
if (enabled)
|
if (enabled)
|
||||||
addGfxCmdText(x+w/2, y+BUTTON_HEIGHT/2-TEXT_HEIGHT/2, IMGUI_ALIGN_CENTER, text, isHot(id) ? imguiRGBA(255,196,0,255) : imguiRGBA(255,255,255,200));
|
addGfxCmdText(x+w/2, y+h/2-textHeight/2, IMGUI_ALIGN_CENTER, text, isHot(id) ? imguiRGBA(255,196,0,255) : imguiRGBA(255,255,255,200));
|
||||||
else
|
else
|
||||||
addGfxCmdText(x+w/2, y+BUTTON_HEIGHT/2-TEXT_HEIGHT/2, IMGUI_ALIGN_CENTER, text, imguiRGBA(128,128,128,200));
|
addGfxCmdText(x+w/2, y+h/2-textHeight/2, IMGUI_ALIGN_CENTER, text, imguiRGBA(128,128,128,200));
|
||||||
|
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool imguiItem(const char* text, bool enabled)
|
bool imguiItem(const char* text, bool enabled, float scaleX, float scaleY)
|
||||||
{
|
{
|
||||||
g_state.widgetId++;
|
g_state.widgetId++;
|
||||||
unsigned int id = (g_state.areaId<<16) | g_state.widgetId;
|
unsigned int id = (g_state.areaId<<16) | g_state.widgetId;
|
||||||
|
|
||||||
|
int vertSpacing = scaleY * DEFAULT_VERTICAL_SPACING;
|
||||||
|
int heightItem = scaleY * BUTTON_HEIGHT;
|
||||||
|
int heightText = scaleY * TEXT_HEIGHT;
|
||||||
|
|
||||||
int x = g_state.widgetX;
|
int x = g_state.widgetX;
|
||||||
int y = g_state.widgetY - BUTTON_HEIGHT;
|
int y = g_state.widgetY - heightItem;
|
||||||
int w = g_state.widgetW;
|
int w = g_state.widgetW;
|
||||||
int h = BUTTON_HEIGHT;
|
int h = heightItem;
|
||||||
g_state.widgetY -= BUTTON_HEIGHT + DEFAULT_VERTICAL_SPACING;
|
g_state.widgetY -= heightItem + vertSpacing;
|
||||||
|
|
||||||
bool over = enabled && inRect(x, y, w, h);
|
bool over = enabled && inRect(x, y, w, h);
|
||||||
bool res = buttonLogic(id, over);
|
bool res = buttonLogic(id, over);
|
||||||
|
@ -468,47 +473,50 @@ bool imguiItem(const char* text, bool enabled)
|
||||||
addGfxCmdRoundedRect((float)x, (float)y, (float)w, (float)h, 2.0f, imguiRGBA(255,196,0,isActive(id)?196:96));
|
addGfxCmdRoundedRect((float)x, (float)y, (float)w, (float)h, 2.0f, imguiRGBA(255,196,0,isActive(id)?196:96));
|
||||||
|
|
||||||
if (enabled)
|
if (enabled)
|
||||||
addGfxCmdText(x+BUTTON_HEIGHT/2, y+BUTTON_HEIGHT/2-TEXT_HEIGHT/2, IMGUI_ALIGN_LEFT, text, imguiRGBA(255,255,255,200));
|
addGfxCmdText(x+heightItem/2, y+heightItem/2-heightText/2, IMGUI_ALIGN_LEFT, text, imguiRGBA(255,255,255,200));
|
||||||
else
|
else
|
||||||
addGfxCmdText(x+BUTTON_HEIGHT/2, y+BUTTON_HEIGHT/2-TEXT_HEIGHT/2, IMGUI_ALIGN_LEFT, text, imguiRGBA(128,128,128,200));
|
addGfxCmdText(x+heightItem/2, y+heightItem/2-heightText/2, IMGUI_ALIGN_LEFT, text, imguiRGBA(128,128,128,200));
|
||||||
|
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool imguiCheck(const char* text, bool checked, bool enabled)
|
bool imguiCheck(const char* text, bool checked, bool enabled, float scaleX, float scaleY)
|
||||||
{
|
{
|
||||||
g_state.widgetId++;
|
g_state.widgetId++;
|
||||||
unsigned int id = (g_state.areaId<<16) | g_state.widgetId;
|
unsigned int id = (g_state.areaId<<16) | g_state.widgetId;
|
||||||
|
|
||||||
|
int spacingX = DEFAULT_HORIZONTAL_SPACING * scaleX;
|
||||||
int x = g_state.widgetX;
|
int x = g_state.widgetX;
|
||||||
int y = g_state.widgetY - BUTTON_HEIGHT;
|
int heightText = scaleY * TEXT_HEIGHT;
|
||||||
|
int sizeCheck = scaleY * CHECK_SIZE;
|
||||||
|
int y = g_state.widgetY - heightText - DEFAULT_VERTICAL_SPACING * scaleY;
|
||||||
int w = g_state.widgetW;
|
int w = g_state.widgetW;
|
||||||
int h = BUTTON_HEIGHT;
|
int h = heightText;
|
||||||
if (g_state.nextItemSameLine) {
|
if (g_state.nextItemSameLine) {
|
||||||
g_state.widgetX += w;
|
g_state.widgetX += w;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
g_state.widgetY -= BUTTON_HEIGHT;
|
g_state.widgetY -= heightText + DEFAULT_VERTICAL_SPACING * scaleY;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool over = enabled && inRect(x, y, w, h);
|
bool over = enabled && inRect(x, y, w, h);
|
||||||
bool res = buttonLogic(id, over);
|
bool res = buttonLogic(id, over);
|
||||||
|
|
||||||
const int cx = x+BUTTON_HEIGHT/2-CHECK_SIZE/2;
|
const int cx = x;
|
||||||
const int cy = y+BUTTON_HEIGHT/2-CHECK_SIZE/2;
|
const int cy = y+heightText/2-sizeCheck/2;
|
||||||
addGfxCmdRoundedRect((float)cx-3, (float)cy-3, (float)CHECK_SIZE+6, (float)CHECK_SIZE+6, 4, imguiRGBA(128,128,128, isActive(id)?196:96));
|
addGfxCmdRoundedRect((float)cx-3, (float)cy-3, (float)sizeCheck+6, (float)sizeCheck+6, 4, imguiRGBA(128,128,128, isActive(id)?196:96));
|
||||||
if (checked)
|
if (checked)
|
||||||
{
|
{
|
||||||
if (enabled)
|
if (enabled)
|
||||||
addGfxCmdRoundedRect((float)cx, (float)cy, (float)CHECK_SIZE, (float)CHECK_SIZE, (float)CHECK_SIZE/2-1, imguiRGBA(255,255,255,isActive(id)?255:200));
|
addGfxCmdRoundedRect((float)cx, (float)cy, (float)sizeCheck, (float)sizeCheck, (float)sizeCheck/2-1, imguiRGBA(255,255,255,isActive(id)?255:200));
|
||||||
else
|
else
|
||||||
addGfxCmdRoundedRect((float)cx, (float)cy, (float)CHECK_SIZE, (float)CHECK_SIZE, (float)CHECK_SIZE/2-1, imguiRGBA(128,128,128,200));
|
addGfxCmdRoundedRect((float)cx, (float)cy, (float)sizeCheck, (float)sizeCheck, (float)sizeCheck/2-1, imguiRGBA(128,128,128,200));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (enabled)
|
if (enabled)
|
||||||
addGfxCmdText(x+BUTTON_HEIGHT, y+BUTTON_HEIGHT/2-TEXT_HEIGHT/2, IMGUI_ALIGN_LEFT, text, isHot(id) ? imguiRGBA(255,196,0,255) : imguiRGBA(255,255,255,200));
|
addGfxCmdText(x+sizeCheck + spacingX, y+heightText/2-sizeCheck/2, IMGUI_ALIGN_LEFT, text, isHot(id) ? imguiRGBA(255,196,0,255) : imguiRGBA(255,255,255,200));
|
||||||
else
|
else
|
||||||
addGfxCmdText(x+BUTTON_HEIGHT, y+BUTTON_HEIGHT/2-TEXT_HEIGHT/2, IMGUI_ALIGN_LEFT, text, imguiRGBA(128,128,128,200));
|
addGfxCmdText(x+sizeCheck + spacingX, y+heightText/2-sizeCheck/2, IMGUI_ALIGN_LEFT, text, imguiRGBA(128,128,128,200));
|
||||||
|
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
@ -564,27 +572,33 @@ void imguiValue(const char* text)
|
||||||
addGfxCmdText(x+w-BUTTON_HEIGHT/2, y+BUTTON_HEIGHT/2-TEXT_HEIGHT/2, IMGUI_ALIGN_RIGHT, text, imguiRGBA(255,255,255,200));
|
addGfxCmdText(x+w-BUTTON_HEIGHT/2, y+BUTTON_HEIGHT/2-TEXT_HEIGHT/2, IMGUI_ALIGN_RIGHT, text, imguiRGBA(255,255,255,200));
|
||||||
}
|
}
|
||||||
|
|
||||||
bool imguiSlider(const char* text, float* val, float vmin, float vmax, float vinc, bool enabled)
|
bool imguiSlider(const char* text, float* val, float vmin, float vmax, float vinc, bool enabled,
|
||||||
|
float scalingX, float scalingY)
|
||||||
{
|
{
|
||||||
g_state.widgetId++;
|
g_state.widgetId++;
|
||||||
unsigned int id = (g_state.areaId<<16) | g_state.widgetId;
|
unsigned int id = (g_state.areaId<<16) | g_state.widgetId;
|
||||||
|
|
||||||
|
int buttonHeight = BUTTON_HEIGHT * scalingY;
|
||||||
|
int sliderHeight = SLIDER_HEIGHT * scalingY;
|
||||||
|
int textHeight = TEXT_HEIGHT * scalingY;
|
||||||
|
int sliderMarkerWidth = SLIDER_MARKER_WIDTH * scalingX;
|
||||||
|
|
||||||
int x = g_state.widgetX;
|
int x = g_state.widgetX;
|
||||||
int y = g_state.widgetY - BUTTON_HEIGHT;
|
int y = g_state.widgetY - buttonHeight;
|
||||||
int w = g_state.widgetW;
|
int w = g_state.widgetW;
|
||||||
int h = SLIDER_HEIGHT;
|
int h = sliderHeight;
|
||||||
g_state.widgetY -= SLIDER_HEIGHT + DEFAULT_VERTICAL_SPACING;
|
g_state.widgetY -= sliderHeight + DEFAULT_VERTICAL_SPACING * scalingY;
|
||||||
|
|
||||||
addGfxCmdRoundedRect((float)x, (float)y, (float)w, (float)h, 4.0f, imguiRGBA(0,0,0,128));
|
addGfxCmdRoundedRect((float)x, (float)y, (float)w, (float)h, 4.0f, imguiRGBA(0,0,0,128));
|
||||||
|
|
||||||
const int range = w - SLIDER_MARKER_WIDTH;
|
const int range = w - sliderMarkerWidth;
|
||||||
|
|
||||||
float u = (*val - vmin) / (vmax-vmin);
|
float u = (*val - vmin) / (vmax-vmin);
|
||||||
if (u < 0) u = 0;
|
if (u < 0) u = 0;
|
||||||
if (u > 1) u = 1;
|
if (u > 1) u = 1;
|
||||||
int m = (int)(u * range);
|
int m = (int)(u * range);
|
||||||
|
|
||||||
bool over = enabled && inRect(x+m, y, SLIDER_MARKER_WIDTH, SLIDER_HEIGHT);
|
bool over = enabled && inRect(x+m, y, sliderMarkerWidth, sliderHeight);
|
||||||
bool res = buttonLogic(id, over);
|
bool res = buttonLogic(id, over);
|
||||||
bool valChanged = false;
|
bool valChanged = false;
|
||||||
|
|
||||||
|
@ -608,9 +622,9 @@ bool imguiSlider(const char* text, float* val, float vmin, float vmax, float vin
|
||||||
}
|
}
|
||||||
|
|
||||||
if (isActive(id))
|
if (isActive(id))
|
||||||
addGfxCmdRoundedRect((float)(x+m), (float)y, (float)SLIDER_MARKER_WIDTH, (float)SLIDER_HEIGHT, 4.0f, imguiRGBA(255,255,255,255));
|
addGfxCmdRoundedRect((float)(x+m), (float)y, (float)sliderMarkerWidth, (float)sliderHeight, 4.0f, imguiRGBA(255,255,255,255));
|
||||||
else
|
else
|
||||||
addGfxCmdRoundedRect((float)(x+m), (float)y, (float)SLIDER_MARKER_WIDTH, (float)SLIDER_HEIGHT, 4.0f, isHot(id) ? imguiRGBA(255,196,0,128) : imguiRGBA(255,255,255,64));
|
addGfxCmdRoundedRect((float)(x+m), (float)y, (float)sliderMarkerWidth, (float)sliderHeight, 4.0f, isHot(id) ? imguiRGBA(255,196,0,128) : imguiRGBA(255,255,255,64));
|
||||||
|
|
||||||
// TODO: fix this, take a look at 'nicenum'.
|
// TODO: fix this, take a look at 'nicenum'.
|
||||||
int digits = (int)(ceilf(log10f(vinc)));
|
int digits = (int)(ceilf(log10f(vinc)));
|
||||||
|
@ -621,13 +635,13 @@ bool imguiSlider(const char* text, float* val, float vmin, float vmax, float vin
|
||||||
|
|
||||||
if (enabled)
|
if (enabled)
|
||||||
{
|
{
|
||||||
addGfxCmdText(x+SLIDER_HEIGHT/2, y+SLIDER_HEIGHT/2-TEXT_HEIGHT/2, IMGUI_ALIGN_LEFT, text, isHot(id) ? imguiRGBA(255,196,0,255) : imguiRGBA(255,255,255,200));
|
addGfxCmdText(x+sliderHeight/2, y+sliderHeight/2-textHeight/2, IMGUI_ALIGN_LEFT, text, isHot(id) ? imguiRGBA(255,196,0,255) : imguiRGBA(255,255,255,200));
|
||||||
addGfxCmdText(x+w-SLIDER_HEIGHT/2, y+SLIDER_HEIGHT/2-TEXT_HEIGHT/2, IMGUI_ALIGN_RIGHT, msg, isHot(id) ? imguiRGBA(255,196,0,255) : imguiRGBA(255,255,255,200));
|
addGfxCmdText(x+w-sliderHeight/2, y+sliderHeight/2-textHeight/2, IMGUI_ALIGN_RIGHT, msg, isHot(id) ? imguiRGBA(255,196,0,255) : imguiRGBA(255,255,255,200));
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
addGfxCmdText(x+SLIDER_HEIGHT/2, y+SLIDER_HEIGHT/2-TEXT_HEIGHT/2, IMGUI_ALIGN_LEFT, text, imguiRGBA(128,128,128,200));
|
addGfxCmdText(x+sliderHeight/2, y+sliderHeight/2-textHeight/2, IMGUI_ALIGN_LEFT, text, imguiRGBA(128,128,128,200));
|
||||||
addGfxCmdText(x+w-SLIDER_HEIGHT/2, y+SLIDER_HEIGHT/2-TEXT_HEIGHT/2, IMGUI_ALIGN_RIGHT, msg, imguiRGBA(128,128,128,200));
|
addGfxCmdText(x+w-sliderHeight/2, y+sliderHeight/2-textHeight/2, IMGUI_ALIGN_RIGHT, msg, imguiRGBA(128,128,128,200));
|
||||||
}
|
}
|
||||||
|
|
||||||
return res || valChanged;
|
return res || valChanged;
|
||||||
|
|
|
@ -22,13 +22,13 @@
|
||||||
#ifndef IMGUI_H
|
#ifndef IMGUI_H
|
||||||
#define IMGUI_H
|
#define IMGUI_H
|
||||||
|
|
||||||
static const int BUTTON_HEIGHT = 40;
|
static const int BUTTON_HEIGHT = 20;
|
||||||
static const int SLIDER_HEIGHT = 30;
|
static const int SLIDER_HEIGHT = 20;
|
||||||
static const int SLIDER_MARKER_WIDTH = 10;
|
static const int SLIDER_MARKER_WIDTH = 5;
|
||||||
static const int CHECK_SIZE = 18;
|
static const int CHECK_SIZE = 10;
|
||||||
static const int DEFAULT_VERTICAL_SPACING = 14;
|
static const int DEFAULT_VERTICAL_SPACING = 7;
|
||||||
static const int DEFAULT_HORIZONTAL_SPACING = 14;
|
static const int DEFAULT_HORIZONTAL_SPACING = 14;
|
||||||
static const int TEXT_HEIGHT = 16;
|
static const int TEXT_HEIGHT = 10;
|
||||||
static const int FONT_HEIGHT = 30;
|
static const int FONT_HEIGHT = 30;
|
||||||
static const int SCROll_AREA_TOP_PADDING = 5;
|
static const int SCROll_AREA_TOP_PADDING = 5;
|
||||||
static const int SCROLL_AREA_PADDING = 5;
|
static const int SCROLL_AREA_PADDING = 5;
|
||||||
|
@ -68,13 +68,13 @@ void imguiVerticalSpace(int spaceY);
|
||||||
void imguiHorizontalSpace(int spaceX);
|
void imguiHorizontalSpace(int spaceX);
|
||||||
void imguiSeparatorLine();
|
void imguiSeparatorLine();
|
||||||
|
|
||||||
bool imguiButton(const char* text, bool enabled = true, int width = -1);
|
bool imguiButton(const char* text, bool enabled = true, int width = -1, int height = -1, float scaleX=1, float scaleY=1);
|
||||||
bool imguiItem(const char* text, bool enabled = true);
|
bool imguiItem(const char* text, bool enabled = true, float scaleX=1, float scaleY=1);
|
||||||
bool imguiCheck(const char* text, bool checked, bool enabled = true);
|
bool imguiCheck(const char* text, bool checked, bool enabled = true, float scaleX = 1, float scaleY = 1);
|
||||||
bool imguiCollapse(const char* text, const char* subtext, bool checked, bool enabled = true);
|
bool imguiCollapse(const char* text, const char* subtext, bool checked, bool enabled = true);
|
||||||
void imguiLabel(const char* text);
|
void imguiLabel(const char* text);
|
||||||
void imguiValue(const char* text);
|
void imguiValue(const char* text);
|
||||||
bool imguiSlider(const char* text, float* val, float vmin, float vmax, float vinc, bool enabled = true);
|
bool imguiSlider(const char* text, float* val, float vmin, float vmax, float vinc, bool enabled = true, float scalingX = 1.0f, float scalingY = 1.0f);
|
||||||
|
|
||||||
void imguiDrawText(int x, int y, int align, const char* text, unsigned int color);
|
void imguiDrawText(int x, int y, int align, const char* text, unsigned int color);
|
||||||
void imguiDrawLine(float x0, float y0, float x1, float y1, float r, unsigned int color);
|
void imguiDrawLine(float x0, float y0, float x1, float y1, float r, unsigned int color);
|
||||||
|
|
|
@ -94,6 +94,9 @@ void Gui::displayLeftPane() {
|
||||||
|
|
||||||
TestbedApplication& app = TestbedApplication::getInstance();
|
TestbedApplication& app = TestbedApplication::getInstance();
|
||||||
|
|
||||||
|
const float scalingX = app.mWindowToFramebufferRatio.x;
|
||||||
|
const float scalingY = app.mWindowToFramebufferRatio.y;
|
||||||
|
|
||||||
int windowWidth, windowHeight;
|
int windowWidth, windowHeight;
|
||||||
glfwGetWindowSize(mWindow, &windowWidth, &windowHeight);
|
glfwGetWindowSize(mWindow, &windowWidth, &windowHeight);
|
||||||
|
|
||||||
|
@ -104,60 +107,61 @@ void Gui::displayLeftPane() {
|
||||||
|
|
||||||
// ------ Header ----- //
|
// ------ Header ----- //
|
||||||
|
|
||||||
imguiHorizontalSpace(10);
|
imguiHorizontalSpace(scalingX * 2.5);
|
||||||
imguiVerticalSpace(20);
|
imguiVerticalSpace(scalingY * 5);
|
||||||
imguiStartLine();
|
imguiStartLine();
|
||||||
|
|
||||||
const int button_width = 150;
|
const int button_width = app.mWindowToFramebufferRatio.x * 75.0f;
|
||||||
|
const int button_height = app.mWindowToFramebufferRatio.y * 20.0f;
|
||||||
|
|
||||||
// Play/Pause
|
// Play/Pause
|
||||||
if (imguiButton(app.mTimer.isRunning() ? "Pause" : "Play", true, button_width)) {
|
if (imguiButton(app.mTimer.isRunning() ? "Pause" : "Play", true, button_width, button_height, scalingX, scalingY)) {
|
||||||
app.togglePlayPauseSimulation();
|
app.togglePlayPauseSimulation();
|
||||||
}
|
}
|
||||||
imguiHorizontalSpace(5);
|
imguiHorizontalSpace(scalingX * 2.5);
|
||||||
|
|
||||||
// Step
|
// Step
|
||||||
if (imguiButton("Step", !app.mTimer.isRunning(), button_width)) {
|
if (imguiButton("Step", !app.mTimer.isRunning(), button_width, button_height, scalingX, scalingY)) {
|
||||||
app.toggleTakeSinglePhysicsStep();
|
app.toggleTakeSinglePhysicsStep();
|
||||||
}
|
}
|
||||||
imguiHorizontalSpace(5);
|
imguiHorizontalSpace(scalingX * 2.5);
|
||||||
|
|
||||||
// Restart
|
// Restart
|
||||||
if (imguiButton("Restart", true, button_width)) {
|
if (imguiButton("Restart", true, button_width, button_height, scalingX, scalingY)) {
|
||||||
app.restartSimulation();
|
app.restartSimulation();
|
||||||
}
|
}
|
||||||
|
|
||||||
imguiEndLine();
|
imguiEndLine();
|
||||||
imguiVerticalSpace(70);
|
imguiVerticalSpace(scalingY * 35);
|
||||||
|
|
||||||
imguiSeparatorLine();
|
imguiSeparatorLine();
|
||||||
imguiVerticalSpace(5);
|
imguiVerticalSpace(scalingY * 2.5);
|
||||||
imguiStartLine();
|
imguiStartLine();
|
||||||
|
|
||||||
// ----- Left Pane Tabs ----- //
|
// ----- Left Pane Tabs ----- //
|
||||||
|
|
||||||
int widthButton = app.mWindowToFramebufferRatio.x * LEFT_PANE_WIDTH / 4.3;
|
int widthButton = app.mWindowToFramebufferRatio.x * LEFT_PANE_WIDTH / 4.3;
|
||||||
if (imguiButton("Scenes", true, widthButton)) {
|
if (imguiButton("Scenes", true, widthButton, button_height, scalingX, scalingY)) {
|
||||||
mLeftPane = SCENES;
|
mLeftPane = SCENES;
|
||||||
}
|
}
|
||||||
imguiHorizontalSpace(5);
|
imguiHorizontalSpace(scalingX * 2.5);
|
||||||
|
|
||||||
if (imguiButton("Physics", true, widthButton)) {
|
if (imguiButton("Physics", true, widthButton, button_height, scalingX, scalingY)) {
|
||||||
mLeftPane = PHYSICS;
|
mLeftPane = PHYSICS;
|
||||||
}
|
}
|
||||||
imguiHorizontalSpace(5);
|
imguiHorizontalSpace(scalingX * 2.5);
|
||||||
|
|
||||||
if (imguiButton("Rendering", true, widthButton)) {
|
if (imguiButton("Rendering", true, widthButton, button_height, scalingX, scalingY)) {
|
||||||
mLeftPane = RENDERING;
|
mLeftPane = RENDERING;
|
||||||
}
|
}
|
||||||
imguiHorizontalSpace(5);
|
imguiHorizontalSpace(scalingX * 2.5);
|
||||||
|
|
||||||
if (imguiButton("Profiling", true, widthButton)) {
|
if (imguiButton("Profiling", true, widthButton, button_height, scalingX, scalingY)) {
|
||||||
mLeftPane = PROFILING;
|
mLeftPane = PROFILING;
|
||||||
}
|
}
|
||||||
|
|
||||||
imguiEndLine();
|
imguiEndLine();
|
||||||
imguiVerticalSpace(BUTTON_HEIGHT + 8);
|
imguiVerticalSpace(scalingY * (BUTTON_HEIGHT/2 + 15));
|
||||||
imguiSeparatorLine();
|
imguiSeparatorLine();
|
||||||
imguiEndScrollArea();
|
imguiEndScrollArea();
|
||||||
|
|
||||||
|
@ -175,6 +179,9 @@ void Gui::displayScenesPane() {
|
||||||
|
|
||||||
TestbedApplication& app = TestbedApplication::getInstance();
|
TestbedApplication& app = TestbedApplication::getInstance();
|
||||||
|
|
||||||
|
const float scalingX = app.mWindowToFramebufferRatio.x;
|
||||||
|
const float scalingY = app.mWindowToFramebufferRatio.y;
|
||||||
|
|
||||||
static int choice = 0;
|
static int choice = 0;
|
||||||
int startChoice = choice;
|
int startChoice = choice;
|
||||||
int scrollarea = 1;
|
int scrollarea = 1;
|
||||||
|
@ -194,7 +201,7 @@ void Gui::displayScenesPane() {
|
||||||
for (int i=0; i<scenes.size(); i++) {
|
for (int i=0; i<scenes.size(); i++) {
|
||||||
|
|
||||||
// Display a radio button
|
// Display a radio button
|
||||||
if (imguiCheck(scenes[i]->getName().c_str(), choice == i)) {
|
if (imguiCheck(scenes[i]->getName().c_str(), choice == i, true, scalingX, scalingY)) {
|
||||||
choice = i;
|
choice = i;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -209,6 +216,9 @@ void Gui::displayPhysicsPane() {
|
||||||
|
|
||||||
TestbedApplication& app = TestbedApplication::getInstance();
|
TestbedApplication& app = TestbedApplication::getInstance();
|
||||||
|
|
||||||
|
const float scalingX = app.mWindowToFramebufferRatio.x;
|
||||||
|
const float scalingY = app.mWindowToFramebufferRatio.y;
|
||||||
|
|
||||||
int windowWidth, windowHeight;
|
int windowWidth, windowHeight;
|
||||||
glfwGetWindowSize(mWindow, &windowWidth, &windowHeight);
|
glfwGetWindowSize(mWindow, &windowWidth, &windowHeight);
|
||||||
|
|
||||||
|
@ -218,66 +228,68 @@ void Gui::displayPhysicsPane() {
|
||||||
app.mWindowToFramebufferRatio.y * (windowHeight - LEFT_PANE_HEADER_HEIGHT),
|
app.mWindowToFramebufferRatio.y * (windowHeight - LEFT_PANE_HEADER_HEIGHT),
|
||||||
&scrollarea);
|
&scrollarea);
|
||||||
|
|
||||||
imguiVerticalSpace(15);
|
imguiVerticalSpace(10 * scalingY);
|
||||||
|
|
||||||
// Enabled/Disable Sleeping
|
// Enabled/Disable Sleeping
|
||||||
bool toggle = imguiCheck("Sleeping enabled", app.mEngineSettings.isSleepingEnabled);
|
bool toggle = imguiCheck("Sleeping enabled", app.mEngineSettings.isSleepingEnabled, true, scalingX, scalingY);
|
||||||
if (toggle) {
|
if (toggle) {
|
||||||
app.mEngineSettings.isSleepingEnabled = !app.mEngineSettings.isSleepingEnabled;
|
app.mEngineSettings.isSleepingEnabled = !app.mEngineSettings.isSleepingEnabled;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Enabled/Disable Gravity
|
// Enabled/Disable Gravity
|
||||||
toggle = imguiCheck("Gravity enabled", app.mEngineSettings.isGravityEnabled);
|
toggle = imguiCheck("Gravity enabled", app.mEngineSettings.isGravityEnabled, true, scalingX, scalingY);
|
||||||
if (toggle) {
|
if (toggle) {
|
||||||
app.mEngineSettings.isGravityEnabled = !app.mEngineSettings.isGravityEnabled;
|
app.mEngineSettings.isGravityEnabled = !app.mEngineSettings.isGravityEnabled;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
imguiVerticalSpace(10 * scalingY);
|
||||||
|
|
||||||
// Timestep
|
// Timestep
|
||||||
float timeStep = app.mEngineSettings.timeStep;
|
float timeStep = app.mEngineSettings.timeStep;
|
||||||
if (imguiSlider("Timestep", &timeStep, 0.001f, 1.0f, 0.001f)) {
|
if (imguiSlider("Timestep", &timeStep, 0.001f, 1.0f, 0.001f, true, scalingX, scalingY)) {
|
||||||
app.mEngineSettings.timeStep = timeStep;
|
app.mEngineSettings.timeStep = timeStep;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Nb velocity solver iterations
|
// Nb velocity solver iterations
|
||||||
float nbVelocityIterations = static_cast<float>(app.mEngineSettings.nbVelocitySolverIterations);
|
float nbVelocityIterations = static_cast<float>(app.mEngineSettings.nbVelocitySolverIterations);
|
||||||
if (imguiSlider("Velocity Solver Iterations", &nbVelocityIterations, 1.0f, 100.0f, 1.0f)) {
|
if (imguiSlider("Velocity Solver Iterations", &nbVelocityIterations, 1.0f, 100.0f, 1.0f, true, scalingX, scalingY)) {
|
||||||
app.mEngineSettings.nbVelocitySolverIterations = static_cast<int>(nbVelocityIterations);
|
app.mEngineSettings.nbVelocitySolverIterations = static_cast<int>(nbVelocityIterations);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Nb position solver iterations
|
// Nb position solver iterations
|
||||||
float nbPositionIterations = static_cast<float>(app.mEngineSettings.nbPositionSolverIterations);
|
float nbPositionIterations = static_cast<float>(app.mEngineSettings.nbPositionSolverIterations);
|
||||||
if (imguiSlider("Position Solver Iterations", &nbPositionIterations, 1.0f, 100.0f, 1.0f)) {
|
if (imguiSlider("Position Solver Iterations", &nbPositionIterations, 1.0f, 100.0f, 1.0f, true, scalingX, scalingY)) {
|
||||||
app.mEngineSettings.nbPositionSolverIterations = static_cast<int>(nbPositionIterations);
|
app.mEngineSettings.nbPositionSolverIterations = static_cast<int>(nbPositionIterations);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Time before sleep
|
// Time before sleep
|
||||||
float timeBeforeSleep = app.mEngineSettings.timeBeforeSleep;
|
float timeBeforeSleep = app.mEngineSettings.timeBeforeSleep;
|
||||||
if (imguiSlider("Time before sleep", &timeBeforeSleep, 0.0f, 60.0f, 0.5f)) {
|
if (imguiSlider("Time before sleep", &timeBeforeSleep, 0.0f, 60.0f, 0.5f, true, scalingX, scalingY)) {
|
||||||
app.mEngineSettings.timeBeforeSleep = timeBeforeSleep;
|
app.mEngineSettings.timeBeforeSleep = timeBeforeSleep;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Sleep linear velocity
|
// Sleep linear velocity
|
||||||
float sleepLinearVelocity = app.mEngineSettings.sleepLinearVelocity;
|
float sleepLinearVelocity = app.mEngineSettings.sleepLinearVelocity;
|
||||||
if (imguiSlider("Sleep linear velocity", &sleepLinearVelocity, 0.0f, 30.0f, 0.5f)) {
|
if (imguiSlider("Sleep linear velocity", &sleepLinearVelocity, 0.0f, 30.0f, 0.5f, true, scalingX, scalingY)) {
|
||||||
app.mEngineSettings.sleepLinearVelocity = sleepLinearVelocity;
|
app.mEngineSettings.sleepLinearVelocity = sleepLinearVelocity;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Sleep angular velocity
|
// Sleep angular velocity
|
||||||
float sleepAngularVelocity = app.mEngineSettings.sleepAngularVelocity;
|
float sleepAngularVelocity = app.mEngineSettings.sleepAngularVelocity;
|
||||||
if (imguiSlider("Sleep angular velocity", &sleepAngularVelocity, 0.0f, 30.0f, 0.5f)) {
|
if (imguiSlider("Sleep angular velocity", &sleepAngularVelocity, 0.0f, 30.0f, 0.5f, true, scalingX, scalingY)) {
|
||||||
app.mEngineSettings.sleepAngularVelocity = sleepAngularVelocity;
|
app.mEngineSettings.sleepAngularVelocity = sleepAngularVelocity;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Gravity vector
|
// Gravity vector
|
||||||
openglframework::Vector3 gravity = app.mEngineSettings.gravity;
|
openglframework::Vector3 gravity = app.mEngineSettings.gravity;
|
||||||
float gravityX = gravity.x, gravityY = gravity.y, gravityZ = gravity.z;
|
float gravityX = gravity.x, gravityY = gravity.y, gravityZ = gravity.z;
|
||||||
if (imguiSlider("Gravity X", &gravityX, -50.0f, 50.0f, 0.5f)) {
|
if (imguiSlider("Gravity X", &gravityX, -50.0f, 50.0f, 0.5f, true, scalingX, scalingY)) {
|
||||||
app.mEngineSettings.gravity.x = gravityX;
|
app.mEngineSettings.gravity.x = gravityX;
|
||||||
}
|
}
|
||||||
if (imguiSlider("Gravity Y", &gravityY, -50.0f, 50.0f, 0.5f)) {
|
if (imguiSlider("Gravity Y", &gravityY, -50.0f, 50.0f, 0.5f, true, scalingX, scalingY)) {
|
||||||
app.mEngineSettings.gravity.y = gravityY;
|
app.mEngineSettings.gravity.y = gravityY;
|
||||||
}
|
}
|
||||||
if (imguiSlider("Gravity Z", &gravityZ, -50.0f, 50.0f, 0.5f)) {
|
if (imguiSlider("Gravity Z", &gravityZ, -50.0f, 50.0f, 0.5f, true, scalingX, scalingY)) {
|
||||||
app.mEngineSettings.gravity.z = gravityZ;
|
app.mEngineSettings.gravity.z = gravityZ;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -288,6 +300,9 @@ void Gui::displayRenderingPane() {
|
||||||
|
|
||||||
TestbedApplication& app = TestbedApplication::getInstance();
|
TestbedApplication& app = TestbedApplication::getInstance();
|
||||||
|
|
||||||
|
const float scalingX = app.mWindowToFramebufferRatio.x;
|
||||||
|
const float scalingY = app.mWindowToFramebufferRatio.y;
|
||||||
|
|
||||||
int windowWidth, windowHeight;
|
int windowWidth, windowHeight;
|
||||||
glfwGetWindowSize(mWindow, &windowWidth, &windowHeight);
|
glfwGetWindowSize(mWindow, &windowWidth, &windowHeight);
|
||||||
|
|
||||||
|
@ -299,21 +314,20 @@ void Gui::displayRenderingPane() {
|
||||||
|
|
||||||
imguiVerticalSpace(15);
|
imguiVerticalSpace(15);
|
||||||
|
|
||||||
|
|
||||||
// Display/Hide contact points
|
// Display/Hide contact points
|
||||||
bool toggleContactPoints = imguiCheck("Contacts", app.mIsContactPointsDisplayed);
|
bool toggleContactPoints = imguiCheck("Contacts", app.mIsContactPointsDisplayed, true, scalingX, scalingY);
|
||||||
if (toggleContactPoints) {
|
if (toggleContactPoints) {
|
||||||
app.displayContactPoints(!app.mIsContactPointsDisplayed);
|
app.displayContactPoints(!app.mIsContactPointsDisplayed);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Enabled/Disable VSync
|
// Enabled/Disable VSync
|
||||||
bool toggleVSync = imguiCheck("V Sync", app.mIsVSyncEnabled);
|
bool toggleVSync = imguiCheck("V Sync", app.mIsVSyncEnabled, true, scalingX, scalingY);
|
||||||
if (toggleVSync) {
|
if (toggleVSync) {
|
||||||
app.enableVSync(!app.mIsVSyncEnabled);
|
app.enableVSync(!app.mIsVSyncEnabled);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Enabled/Disable Shadows
|
// Enabled/Disable Shadows
|
||||||
bool toggleShadows = imguiCheck("Shadows", app.mIsShadowMappingEnabled);
|
bool toggleShadows = imguiCheck("Shadows", app.mIsShadowMappingEnabled, true, scalingX, scalingY);
|
||||||
if (toggleShadows) {
|
if (toggleShadows) {
|
||||||
app.enableShadows(!app.mIsShadowMappingEnabled);
|
app.enableShadows(!app.mIsShadowMappingEnabled);
|
||||||
}
|
}
|
||||||
|
@ -325,6 +339,9 @@ void Gui::displayProfilingPane() {
|
||||||
|
|
||||||
TestbedApplication& app = TestbedApplication::getInstance();
|
TestbedApplication& app = TestbedApplication::getInstance();
|
||||||
|
|
||||||
|
const float scalingX = app.mWindowToFramebufferRatio.x;
|
||||||
|
const float scalingY = app.mWindowToFramebufferRatio.y;
|
||||||
|
|
||||||
double currentTime = glfwGetTime();
|
double currentTime = glfwGetTime();
|
||||||
if ((currentTime - mTimeSinceLastProfilingDisplay) > TIME_INTERVAL_DISPLAY_PROFILING_INFO) {
|
if ((currentTime - mTimeSinceLastProfilingDisplay) > TIME_INTERVAL_DISPLAY_PROFILING_INFO) {
|
||||||
mTimeSinceLastProfilingDisplay = currentTime;
|
mTimeSinceLastProfilingDisplay = currentTime;
|
||||||
|
@ -348,20 +365,20 @@ void Gui::displayProfilingPane() {
|
||||||
std::stringstream ss;
|
std::stringstream ss;
|
||||||
ss << std::setprecision(4) << mCachedFPS;
|
ss << std::setprecision(4) << mCachedFPS;
|
||||||
std::string fps = std::string("FPS : ") + ss.str();
|
std::string fps = std::string("FPS : ") + ss.str();
|
||||||
imguiItem(fps.c_str());
|
imguiItem(fps.c_str(), true, scalingX, scalingY);
|
||||||
|
|
||||||
// Update time
|
// Update time
|
||||||
std::stringstream ss1;
|
std::stringstream ss1;
|
||||||
double updateTime = mCachedUpdateTime * 1000.0;
|
double updateTime = mCachedUpdateTime * 1000.0;
|
||||||
ss1 << std::setprecision(4) << updateTime;
|
ss1 << std::setprecision(4) << updateTime;
|
||||||
std::string updateTimeStr = std::string("Update time (ms) : ") + ss1.str();
|
std::string updateTimeStr = std::string("Update time (ms) : ") + ss1.str();
|
||||||
imguiItem(updateTimeStr.c_str());
|
imguiItem(updateTimeStr.c_str(), true, scalingX, scalingY);
|
||||||
|
|
||||||
// Update time (physics)
|
// Update time (physics)
|
||||||
std::stringstream ss2;
|
std::stringstream ss2;
|
||||||
ss2 << std::setprecision(4) << (mCachedPhysicsUpdateTime * 1000.0);
|
ss2 << std::setprecision(4) << (mCachedPhysicsUpdateTime * 1000.0);
|
||||||
std::string updatePhysicsTimeStr = std::string("Update physics time (ms) : ") + ss2.str();
|
std::string updatePhysicsTimeStr = std::string("Update physics time (ms) : ") + ss2.str();
|
||||||
imguiItem(updatePhysicsTimeStr.c_str());
|
imguiItem(updatePhysicsTimeStr.c_str(), true, scalingX, scalingY);
|
||||||
|
|
||||||
imguiEndScrollArea();
|
imguiEndScrollArea();
|
||||||
}
|
}
|
||||||
|
|
|
@ -37,6 +37,7 @@
|
||||||
const int LEFT_PANE_WIDTH = 300;
|
const int LEFT_PANE_WIDTH = 300;
|
||||||
const int LEFT_PANE_HEADER_HEIGHT = 90;
|
const int LEFT_PANE_HEADER_HEIGHT = 90;
|
||||||
const double TIME_INTERVAL_DISPLAY_PROFILING_INFO = 0.3;
|
const double TIME_INTERVAL_DISPLAY_PROFILING_INFO = 0.3;
|
||||||
|
const int CHECKBOX_SIZE = 9;
|
||||||
|
|
||||||
using namespace openglframework;
|
using namespace openglframework;
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user