#pragma once #include "imgui/imgui.h" #include #if defined(IMGUI_IMPL_OPENGL_ES2) #include #else #include #endif #include #include #ifdef __EMSCRIPTEN__ #include "emscripten_mainloop_stub.h" #include #include #endif #include #include "theme.h" static const char* NAME = "Looper"; class RendererBackend { void BackendDeinit(); void LoopFunction(); bool started = false; //SDL_GLContext gl_context; bool resize_needed = true; void on_resize(); bool update_scale = false; public: std::optional touchScreenModeOverride; std::optional scaleOverride; bool isTouchScreenMode(); static void resize_static(); double scale = 1.0; SDL_Window *window; SDL_Renderer *rend; int window_width = 475; int window_height = 354; bool done = false; Theme *theme; bool vsync = false; std::string lang; std::string userdir; int framerate = 60; ImVec4 clear_color = ImVec4(0.45f, 0.55f, 0.60f, 1.00f); ImFont *title; const char *prefPath; ImVec4 accent_color = ImVec4(0.75, 1.0, 1.0, 1.0); int Run(); void SetWindowTitle(const char *title); virtual void Init(); virtual void GuiFunction(); virtual void Deinit(); virtual void Drop(std::string file); virtual void OnScale(float scale); void UpdateScale(); void QueueUpdateScale(); void AddFonts(); void SetWindowSize(int w, int h); void GetWindowsize(int *w, int *h); RendererBackend(); ~RendererBackend(); friend void main_loop(); };