window and panel resizing

pull/1/head
Clyne 3 years ago
parent f211f96288
commit 074c596605
Signed by: clyne
GPG Key ID: 3267C8EBF3F9AFC7

@ -1,8 +0,0 @@
#ifndef STMDSP_CONFIG_H
#define STMDSP_CONFIG_H
constexpr unsigned int WINDOW_WIDTH = 640;
constexpr unsigned int WINDOW_HEIGHT = 720;
#endif

@ -14,8 +14,6 @@
#include "backends/imgui_impl_sdl.h" #include "backends/imgui_impl_sdl.h"
#include "backends/imgui_impl_opengl2.h" #include "backends/imgui_impl_opengl2.h"
#include "config.h"
#include <SDL2/SDL.h> #include <SDL2/SDL.h>
#include <SDL2/SDL_opengl.h> #include <SDL2/SDL_opengl.h>
@ -42,14 +40,16 @@ bool guiInitialize()
SDL_GL_SetAttribute(SDL_GL_CONTEXT_MINOR_VERSION, 2); SDL_GL_SetAttribute(SDL_GL_CONTEXT_MINOR_VERSION, 2);
window = SDL_CreateWindow("stmdsp gui", window = SDL_CreateWindow("stmdsp gui",
SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED,
WINDOW_WIDTH, WINDOW_HEIGHT, 550, 700,
SDL_WINDOW_OPENGL /*| SDL_WINDOW_RESIZABLE | SDL_WINDOW_ALLOW_HIGHDPI*/); SDL_WINDOW_OPENGL | SDL_WINDOW_RESIZABLE /*| SDL_WINDOW_ALLOW_HIGHDPI*/);
if (window == nullptr) { if (window == nullptr) {
puts("Error: Could not create the window!"); puts("Error: Could not create the window!");
return false; return false;
} }
SDL_SetWindowMinimumSize(window, 320, 320);
gl_context = SDL_GL_CreateContext(window); gl_context = SDL_GL_CreateContext(window);
SDL_GL_MakeCurrent(window, gl_context); SDL_GL_MakeCurrent(window, gl_context);
SDL_GL_SetSwapInterval(1); // Enable vsync SDL_GL_SetSwapInterval(1); // Enable vsync

@ -14,8 +14,6 @@
#include "backends/imgui_impl_opengl2.h" #include "backends/imgui_impl_opengl2.h"
#include "TextEditor.h" #include "TextEditor.h"
#include "config.h"
#include <string> #include <string>
extern void compileEditorCode(const std::string& code); extern void compileEditorCode(const std::string& code);
@ -52,9 +50,9 @@ void codeRenderToolbar()
codeCompile(); codeCompile();
} }
void codeRenderWidgets() void codeRenderWidgets(const ImVec2& size)
{ {
editor.Render("code", {WINDOW_WIDTH - 15, 450}, true); editor.Render("code", size, true);
} }
static void codeCompile() static void codeCompile()

@ -13,7 +13,6 @@
#include "backends/imgui_impl_sdl.h" #include "backends/imgui_impl_sdl.h"
#include "backends/imgui_impl_opengl2.h" #include "backends/imgui_impl_opengl2.h"
#include "config.h"
#include "logview.h" #include "logview.h"
#include "stmdsp.hpp" #include "stmdsp.hpp"
@ -26,7 +25,7 @@
void codeEditorInit(); void codeEditorInit();
void codeRenderMenu(); void codeRenderMenu();
void codeRenderToolbar(); void codeRenderToolbar();
void codeRenderWidgets(); void codeRenderWidgets(const ImVec2& size);
void deviceRenderDraw(); void deviceRenderDraw();
void deviceRenderMenu(); void deviceRenderMenu();
void deviceRenderToolbar(); void deviceRenderToolbar();
@ -45,6 +44,7 @@ static LogView logView;
static ImFont *fontSans = nullptr; static ImFont *fontSans = nullptr;
static ImFont *fontMono = nullptr; static ImFont *fontMono = nullptr;
template<bool first = false>
static void renderWindow(); static void renderWindow();
int main(int, char **) int main(int, char **)
@ -63,6 +63,8 @@ int main(int, char **)
codeEditorInit(); codeEditorInit();
fileInit(); fileInit();
renderWindow<true>();
while (1) { while (1) {
constexpr std::chrono::duration<double> fpsDelay (1. / 60.); constexpr std::chrono::duration<double> fpsDelay (1. / 60.);
const auto endTime = std::chrono::steady_clock::now() + fpsDelay; const auto endTime = std::chrono::steady_clock::now() + fpsDelay;
@ -85,6 +87,7 @@ void log(const std::string& str)
logView.AddLog(str); logView.AddLog(str);
} }
template<bool first>
void renderWindow() void renderWindow()
{ {
// Start the new window frame and render the menu bar. // Start the new window frame and render the menu bar.
@ -99,35 +102,41 @@ void renderWindow()
ImGui::EndMainMenuBar(); ImGui::EndMainMenuBar();
} }
// Begin the main view which the controls will be drawn onto. if constexpr (first) {
constexpr float LOGVIEW_HEIGHT = 200; ImGui::SetNextWindowSize({550, 440});
constexpr ImVec2 WINDOW_POS (0, 22); }
constexpr ImVec2 WINDOW_SIZE (WINDOW_WIDTH, WINDOW_HEIGHT - 22 - LOGVIEW_HEIGHT);
ImGui::SetNextWindowPos(WINDOW_POS); constexpr int MainTopMargin = 22;
ImGui::SetNextWindowSize(WINDOW_SIZE); const auto& displaySize = ImGui::GetIO().DisplaySize;
ImGui::SetNextWindowPos({0, MainTopMargin});
ImGui::SetNextWindowSizeConstraints({displaySize.x, 150}, {displaySize.x, displaySize.y - 150});
ImGui::Begin("main", nullptr, ImGui::Begin("main", nullptr,
ImGuiWindowFlags_NoBackground | ImGuiWindowFlags_NoDecoration | ImGuiWindowFlags_NoBackground | ImGuiWindowFlags_NoTitleBar |
ImGuiWindowFlags_NoBringToFrontOnFocus); ImGuiWindowFlags_NoBringToFrontOnFocus);
// Render main controls (order is important). const float mainWindowHeight = ImGui::GetWindowHeight();
{
ImGui::PushFont(fontSans); ImGui::PushFont(fontSans);
codeRenderToolbar(); codeRenderToolbar();
deviceRenderToolbar(); deviceRenderToolbar();
fileRenderDialog(); fileRenderDialog();
deviceRenderWidgets(); deviceRenderWidgets();
ImGui::PopFont(); ImGui::PopFont();
ImGui::PushFont(fontMono); ImGui::PushFont(fontMono);
codeRenderWidgets(); codeRenderWidgets({displaySize.x - 16, mainWindowHeight - MainTopMargin - 24});
ImGui::SetNextWindowPos({0, WINDOW_HEIGHT - LOGVIEW_HEIGHT}); ImGui::PopFont();
ImGui::SetNextWindowSize({WINDOW_WIDTH, LOGVIEW_HEIGHT});
logView.Draw("log", nullptr, ImGuiWindowFlags_NoDecoration | ImGuiWindowFlags_NoBringToFrontOnFocus);
ImGui::PopFont();
}
ImGui::End(); ImGui::End();
// The log window is kept separate from "main" to support panel resizing.
ImGui::PushFont(fontMono);
ImGui::SetNextWindowPos({0, mainWindowHeight + MainTopMargin});
ImGui::SetNextWindowSize({displaySize.x, displaySize.y - mainWindowHeight - MainTopMargin});
logView.Draw("log", nullptr, ImGuiWindowFlags_NoDecoration | ImGuiWindowFlags_NoBringToFrontOnFocus);
ImGui::PopFont();
deviceRenderDraw(); deviceRenderDraw();
// Draw everything to the screen. // Draw everything to the screen.

Loading…
Cancel
Save