@@ -17,11 +17,12 @@ struct RackScrollWidget : ui::ScrollWidget { | |||||
math::Vec oldOffset; | math::Vec oldOffset; | ||||
RackScrollWidget(); | RackScrollWidget(); | ||||
void reset(); | |||||
void step() override; | void step() override; | ||||
void draw(const DrawArgs& args) override; | void draw(const DrawArgs& args) override; | ||||
void onHoverKey(const event::HoverKey& e) override; | void onHoverKey(const event::HoverKey& e) override; | ||||
void onHoverScroll(const event::HoverScroll& e) override; | void onHoverScroll(const event::HoverScroll& e) override; | ||||
void reset(); | |||||
void onHover(const event::Hover& e) override; | |||||
}; | }; | ||||
@@ -32,8 +32,6 @@ struct Scene : widget::OpaqueWidget { | |||||
void onDragHover(const event::DragHover& e) override; | void onDragHover(const event::DragHover& e) override; | ||||
void onHoverKey(const event::HoverKey& e) override; | void onHoverKey(const event::HoverKey& e) override; | ||||
void onPathDrop(const event::PathDrop& e) override; | void onPathDrop(const event::PathDrop& e) override; | ||||
void runCheckVersion(); | |||||
}; | }; | ||||
@@ -46,7 +46,7 @@ extern bool tooltips; | |||||
extern bool cpuMeter; | extern bool cpuMeter; | ||||
extern bool lockModules; | extern bool lockModules; | ||||
extern int frameSwapInterval; | extern int frameSwapInterval; | ||||
extern float autosavePeriod; | |||||
extern float autosaveInterval; | |||||
extern bool skipLoadOnLaunch; | extern bool skipLoadOnLaunch; | ||||
extern std::string patchPath; | extern std::string patchPath; | ||||
extern std::list<std::string> recentPatchPaths; | extern std::list<std::string> recentPatchPaths; | ||||
@@ -5,9 +5,6 @@ | |||||
#include <app/MenuBar.hpp> | #include <app/MenuBar.hpp> | ||||
#include <widget/OpaqueWidget.hpp> | #include <widget/OpaqueWidget.hpp> | ||||
#include <window.hpp> | |||||
#include <engine/Engine.hpp> | |||||
#include <asset.hpp> | |||||
#include <ui/Button.hpp> | #include <ui/Button.hpp> | ||||
#include <ui/MenuItem.hpp> | #include <ui/MenuItem.hpp> | ||||
#include <ui/MenuSeparator.hpp> | #include <ui/MenuSeparator.hpp> | ||||
@@ -16,6 +13,9 @@ | |||||
#include <ui/TextField.hpp> | #include <ui/TextField.hpp> | ||||
#include <ui/PasswordField.hpp> | #include <ui/PasswordField.hpp> | ||||
#include <ui/ProgressBar.hpp> | #include <ui/ProgressBar.hpp> | ||||
#include <engine/Engine.hpp> | |||||
#include <window.hpp> | |||||
#include <asset.hpp> | |||||
#include <context.hpp> | #include <context.hpp> | ||||
#include <settings.hpp> | #include <settings.hpp> | ||||
#include <helpers.hpp> | #include <helpers.hpp> | ||||
@@ -20,6 +20,13 @@ RackScrollWidget::RackScrollWidget() { | |||||
reset(); | reset(); | ||||
} | } | ||||
void RackScrollWidget::reset() { | |||||
offset = RACK_OFFSET.mult(zoomWidget->zoom); | |||||
offset = offset.minus(math::Vec(30, 30)); | |||||
} | |||||
void RackScrollWidget::step() { | void RackScrollWidget::step() { | ||||
// Clamp zoom | // Clamp zoom | ||||
settings::zoom = math::clamp(settings::zoom, -2.f, 2.f); | settings::zoom = math::clamp(settings::zoom, -2.f, 2.f); | ||||
@@ -78,10 +85,12 @@ void RackScrollWidget::step() { | |||||
oldOffset = offset; | oldOffset = offset; | ||||
} | } | ||||
void RackScrollWidget::draw(const DrawArgs& args) { | void RackScrollWidget::draw(const DrawArgs& args) { | ||||
ScrollWidget::draw(args); | ScrollWidget::draw(args); | ||||
} | } | ||||
void RackScrollWidget::onHoverKey(const event::HoverKey& e) { | void RackScrollWidget::onHoverKey(const event::HoverKey& e) { | ||||
ScrollWidget::onHoverKey(e); | ScrollWidget::onHoverKey(e); | ||||
if (e.isConsumed()) | if (e.isConsumed()) | ||||
@@ -116,6 +125,7 @@ void RackScrollWidget::onHoverKey(const event::HoverKey& e) { | |||||
} | } | ||||
} | } | ||||
void RackScrollWidget::onHoverScroll(const event::HoverScroll& e) { | void RackScrollWidget::onHoverScroll(const event::HoverScroll& e) { | ||||
if ((APP->window->getMods() & RACK_MOD_MASK) == RACK_MOD_CTRL) { | if ((APP->window->getMods() & RACK_MOD_MASK) == RACK_MOD_CTRL) { | ||||
// Increase zoom | // Increase zoom | ||||
@@ -131,9 +141,14 @@ void RackScrollWidget::onHoverScroll(const event::HoverScroll& e) { | |||||
ScrollWidget::onHoverScroll(e); | ScrollWidget::onHoverScroll(e); | ||||
} | } | ||||
void RackScrollWidget::reset() { | |||||
offset = RACK_OFFSET.mult(zoomWidget->zoom); | |||||
offset = offset.minus(math::Vec(30, 30)); | |||||
void RackScrollWidget::onHover(const event::Hover& e) { | |||||
ScrollWidget::onHover(e); | |||||
// Hide menu bar if fullscreen and moving mouse over the RackScrollWidget | |||||
if (APP->window->isFullScreen()) { | |||||
APP->scene->menuBar->hide(); | |||||
} | |||||
} | } | ||||
@@ -56,9 +56,16 @@ Scene::~Scene() { | |||||
} | } | ||||
void Scene::step() { | void Scene::step() { | ||||
bool fullscreen = APP->window->isFullScreen(); | |||||
menuBar->visible = !fullscreen; | |||||
rackScroll->box.pos.y = menuBar->visible ? menuBar->box.size.y : 0; | |||||
if (APP->window->isFullScreen()) { | |||||
// Expand RackScrollWidget to cover entire screen if fullscreen | |||||
rackScroll->box.pos.y = 0; | |||||
} | |||||
else { | |||||
// Always show MenuBar if not fullscreen | |||||
menuBar->show(); | |||||
rackScroll->box.pos.y = menuBar->box.size.y; | |||||
} | |||||
frameRateWidget->box.pos.x = box.size.x - frameRateWidget->box.size.x; | frameRateWidget->box.pos.x = box.size.x - frameRateWidget->box.size.x; | ||||
// Resize owned descendants | // Resize owned descendants | ||||
@@ -66,9 +73,9 @@ void Scene::step() { | |||||
rackScroll->box.size = box.size.minus(rackScroll->box.pos); | rackScroll->box.size = box.size.minus(rackScroll->box.pos); | ||||
// Autosave periodically | // Autosave periodically | ||||
if (settings::autosavePeriod > 0.0) { | |||||
if (settings::autosaveInterval > 0.0) { | |||||
double time = glfwGetTime(); | double time = glfwGetTime(); | ||||
if (time - lastAutosaveTime >= settings::autosavePeriod) { | |||||
if (time - lastAutosaveTime >= settings::autosaveInterval) { | |||||
lastAutosaveTime = time; | lastAutosaveTime = time; | ||||
APP->patch->saveAutosave(); | APP->patch->saveAutosave(); | ||||
settings::save(asset::settingsPath); | settings::save(asset::settingsPath); | ||||
@@ -84,6 +91,9 @@ void Scene::draw(const DrawArgs& args) { | |||||
void Scene::onHover(const event::Hover& e) { | void Scene::onHover(const event::Hover& e) { | ||||
mousePos = e.pos; | mousePos = e.pos; | ||||
if (mousePos.y < menuBar->box.size.y) { | |||||
menuBar->show(); | |||||
} | |||||
OpaqueWidget::onHover(e); | OpaqueWidget::onHover(e); | ||||
} | } | ||||
@@ -169,6 +179,8 @@ void Scene::onHoverKey(const event::HoverKey& e) { | |||||
} | } | ||||
if (e.key == GLFW_KEY_F11 && (e.mods & RACK_MOD_MASK) == 0) { | if (e.key == GLFW_KEY_F11 && (e.mods & RACK_MOD_MASK) == 0) { | ||||
APP->window->setFullScreen(!APP->window->isFullScreen()); | APP->window->setFullScreen(!APP->window->isFullScreen()); | ||||
// The MenuBar will be hidden when the mouse moves over the RackScrollWidget. | |||||
// menuBar->hide(); | |||||
e.consume(this); | e.consume(this); | ||||
} | } | ||||
// Alternate key command for exiting fullscreen, since F11 doesn't work reliably on Mac due to "Show desktop" OS binding. | // Alternate key command for exiting fullscreen, since F11 doesn't work reliably on Mac due to "Show desktop" OS binding. | ||||
@@ -37,7 +37,7 @@ bool lockModules = false; | |||||
#else | #else | ||||
int frameSwapInterval = 1; | int frameSwapInterval = 1; | ||||
#endif | #endif | ||||
float autosavePeriod = 15.0; | |||||
float autosaveInterval = 15.0; | |||||
bool skipLoadOnLaunch = false; | bool skipLoadOnLaunch = false; | ||||
std::string patchPath; | std::string patchPath; | ||||
std::list<std::string> recentPatchPaths; | std::list<std::string> recentPatchPaths; | ||||
@@ -90,7 +90,7 @@ json_t* toJson() { | |||||
json_object_set_new(rootJ, "frameSwapInterval", json_integer(frameSwapInterval)); | json_object_set_new(rootJ, "frameSwapInterval", json_integer(frameSwapInterval)); | ||||
json_object_set_new(rootJ, "autosavePeriod", json_real(autosavePeriod)); | |||||
json_object_set_new(rootJ, "autosaveInterval", json_real(autosaveInterval)); | |||||
if (skipLoadOnLaunch) | if (skipLoadOnLaunch) | ||||
json_object_set_new(rootJ, "skipLoadOnLaunch", json_boolean(true)); | json_object_set_new(rootJ, "skipLoadOnLaunch", json_boolean(true)); | ||||
@@ -196,9 +196,9 @@ void fromJson(json_t* rootJ) { | |||||
if (frameSwapIntervalJ) | if (frameSwapIntervalJ) | ||||
frameSwapInterval = json_integer_value(frameSwapIntervalJ); | frameSwapInterval = json_integer_value(frameSwapIntervalJ); | ||||
json_t* autosavePeriodJ = json_object_get(rootJ, "autosavePeriod"); | |||||
if (autosavePeriodJ) | |||||
autosavePeriod = json_number_value(autosavePeriodJ); | |||||
json_t* autosaveIntervalJ = json_object_get(rootJ, "autosaveInterval"); | |||||
if (autosaveIntervalJ) | |||||
autosaveInterval = json_number_value(autosaveIntervalJ); | |||||
json_t* skipLoadOnLaunchJ = json_object_get(rootJ, "skipLoadOnLaunch"); | json_t* skipLoadOnLaunchJ = json_object_get(rootJ, "skipLoadOnLaunch"); | ||||
if (skipLoadOnLaunchJ) | if (skipLoadOnLaunchJ) | ||||