diff --git a/conan/icu/all/conanfile.py b/conan/icu/all/conanfile.py index f55283e..ec38251 100644 --- a/conan/icu/all/conanfile.py +++ b/conan/icu/all/conanfile.py @@ -150,7 +150,7 @@ class ICUConan(ConanFile): "--disable-samples", ]) if cross_building(self): - base_path = unix_path(self, self.dependencies.build["icu"].package_folder) + base_path = unix_path(self, self.dependencies.build["icu-infinipaint"].package_folder) tc.configure_args.append(f"--with-cross-build={base_path}") if self.settings.os in ["iOS", "tvOS", "watchOS"]: # ICU build scripts interpret all Apple platforms as 'darwin'. diff --git a/src/MainProgram.cpp b/src/MainProgram.cpp index 7a0d939..bf74386 100755 --- a/src/MainProgram.cpp +++ b/src/MainProgram.cpp @@ -4,6 +4,8 @@ #include "VersionConstants.hpp" #include "cereal/archives/portable_binary.hpp" #include "cereal/details/helpers.hpp" +#include +#include #include #include #include @@ -251,6 +253,14 @@ void MainProgram::load_config() { NetLibrary::copy_default_p2p_config_to_path(configPath / "p2p.json"); } +void MainProgram::set_vsync_value(int vsyncValue) { + if(!SDL_GL_SetSwapInterval(vsyncValue)) { + Logger::get().log("INFO", "Vsync value " + std::to_string(vsyncValue) + " not available. Setting to 1"); + SDL_GL_SetSwapInterval(1); + } + window.vsyncValue = vsyncValue; +} + void MainProgram::draw(SkCanvas* canvas) { canvas->clear(transparentBackground ? SkColor4f{0.0f, 0.0f, 0.0f, 0.0f} : world->canvasTheme.backColor); world->draw(canvas); diff --git a/src/MainProgram.hpp b/src/MainProgram.hpp index 60d947e..4224911 100644 --- a/src/MainProgram.hpp +++ b/src/MainProgram.hpp @@ -1,5 +1,6 @@ #pragma once #include "DrawData.hpp" +#include #include #include #include "InputManager.hpp" @@ -40,6 +41,7 @@ class MainProgram { bool fullscreen = false; SkColorType defaultColorType; SkAlphaType defaultAlphaType; + int vsyncValue = 1; float scale = 1.0f; @@ -91,6 +93,7 @@ class MainProgram { void load_config(); void init_net_library(); + void set_vsync_value(int vsyncValue); std::filesystem::path homePath; std::filesystem::path configPath; diff --git a/src/Toolbar.cpp b/src/Toolbar.cpp index 1d6ba8b..7078ba0 100644 --- a/src/Toolbar.cpp +++ b/src/Toolbar.cpp @@ -12,6 +12,7 @@ #include "VersionConstants.hpp" #include "World.hpp" #include +#include #include #include #include @@ -225,6 +226,7 @@ nlohmann::json Toolbar::get_config_json() { toRet["jumpTransitionTime"] = jumpTransitionTime; toRet["dragZoomSpeed"] = dragZoomSpeed; toRet["scrollZoomSpeed"] = scrollZoomSpeed; + toRet["vsync"] = main.window.vsyncValue; toRet["showPerformance"] = showPerformance; toRet["displayName"] = main.displayName; toRet["useNativeFilePicker"] = useNativeFilePicker; @@ -277,6 +279,13 @@ void Toolbar::set_config_json(const nlohmann::json& j, VersionNumber version) { try{j.at("jumpTransitionTime").get_to(jumpTransitionTime);} catch(...) {} try{j.at("dragZoomSpeed").get_to(dragZoomSpeed);} catch(...) {} try{j.at("scrollZoomSpeed").get_to(scrollZoomSpeed);} catch(...) {} + try { + j.at("vsync").get_to(main.window.vsyncValue); + main.set_vsync_value(main.window.vsyncValue); + } + catch(...) { + main.set_vsync_value(1); + } try{j.at("guiScale").get_to(guiScale);} catch(...) {} try{j.at("showPerformance").get_to(showPerformance);} catch(...) {} try{j.at("useNativeFilePicker").get_to(useNativeFilePicker);} catch(...) {} @@ -1416,6 +1425,15 @@ void Toolbar::options_menu() { gui.input_scalar_field("jump transition time", "Jump transition time", &jumpTransitionTime, 0.01f, 1000.0f, 2); gui.checkbox_field("changebrushwidthwithspeed", "Change brush size with mouse speed", &velocityAffectsBrushWidth); gui.input_scalar_field("Max GUI Scale", "Max GUI Scale", &guiScale, 0.5f, 3.0f, 1); + + gui.text_label("VSync:"); + if(gui.radio_button_field("Vsync On", "On", main.window.vsyncValue == 1)) + main.set_vsync_value(1); + if(gui.radio_button_field("Vsync Off", "Off", main.window.vsyncValue == 0)) + main.set_vsync_value(0); + if(gui.radio_button_field("Vsync Adaptive", "Adaptive", main.window.vsyncValue == -1)) + main.set_vsync_value(-1); + gui.pop_id(); break; } @@ -1426,7 +1444,7 @@ void Toolbar::options_menu() { gui.input_scalar_field("middle click", "Middle click pen button", &tabletOptions.middleClickButton, 1, 255); gui.input_scalar_field("right click", "Right click pen button", &tabletOptions.rightClickButton, 1, 255); #ifdef _WIN32 - gui.checkbox_field("mouse ignore when pen proximity", "Ignore mouse movement when pen in proximity (may fix some issues on Windows, dont check if not required)", &tabletOptions.ignoreMouseMovementWhenPenInProximity); + gui.checkbox_field("mouse ignore when pen proximity", "Ignore mouse movement when pen in proximity", &tabletOptions.ignoreMouseMovementWhenPenInProximity); #endif gui.pop_id(); break; diff --git a/src/main.cpp b/src/main.cpp index 56a8b94..5448659 100755 --- a/src/main.cpp +++ b/src/main.cpp @@ -310,7 +310,7 @@ void resize_window(MainStruct& mS) { SkSurfaceProps props2; mS.target = GrBackendRenderTargets::MakeGL(mS.m->window.size.x(), mS.m->window.size.y(), 0, mS.kStencilBits, info); - mS.surface = SkSurfaces::WrapBackendRenderTarget(mS.ctx.get(), mS.target, kBottomLeft_GrSurfaceOrigin, kRGBA_8888_SkColorType, nullptr, &props2); + mS.surface = SkSurfaces::WrapBackendRenderTarget(mS.ctx.get(), mS.target, kBottomLeft_GrSurfaceOrigin, kRGBA_8888_SkColorType, SkColorSpace::MakeSRGB(), &props2); if(!mS.surface) throw std::runtime_error("[resize_window] Could not make surface");