diff --git a/src/override/Engine.cpp b/src/override/Engine.cpp index 7f98fda..700a267 100644 --- a/src/override/Engine.cpp +++ b/src/override/Engine.cpp @@ -1,6 +1,6 @@ /* * DISTRHO Cardinal Plugin - * Copyright (C) 2021 Filipe Coelho + * Copyright (C) 2021-2022 Filipe Coelho * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License as @@ -16,7 +16,7 @@ */ /** - * This file is an edited version of VCVRack's Engine.cpp + * This file is an edited version of VCVRack's engine/Engine.cpp * Copyright (C) 2016-2021 VCV. * * This program is free software: you can redistribute it and/or diff --git a/src/override/MenuBar.cpp b/src/override/MenuBar.cpp index 8598668..526eea8 100644 --- a/src/override/MenuBar.cpp +++ b/src/override/MenuBar.cpp @@ -1,6 +1,6 @@ /* * DISTRHO Cardinal Plugin - * Copyright (C) 2021 Filipe Coelho + * Copyright (C) 2021-2022 Filipe Coelho * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License as @@ -16,7 +16,7 @@ */ /** - * This file is an edited version of VCVRack's MenuBar.cpp + * This file is an edited version of VCVRack's app/MenuBar.cpp * Copyright (C) 2016-2021 VCV. * * This program is free software: you can redistribute it and/or @@ -160,7 +160,6 @@ struct FileButton : MenuButton { // Load selection menu->addChild(createMenuItem("Import selection", "", [=]() { - // APP->scene->rack->loadSelectionDialog(); patchUtils::loadSelectionDialog(); }, false, true)); @@ -622,7 +621,6 @@ struct MenuBar : widget::OpaqueWidget { MenuBar(const bool isStandalone) : widget::OpaqueWidget() - // : context(ctx) { const float margin = 5; box.size.y = BND_WIDGET_HEIGHT + 2 * margin; diff --git a/src/override/Model.cpp b/src/override/Model.cpp index db5c498..e548454 100644 --- a/src/override/Model.cpp +++ b/src/override/Model.cpp @@ -1,6 +1,6 @@ /* * DISTRHO Cardinal Plugin - * Copyright (C) 2021 Filipe Coelho + * Copyright (C) 2021-2022 Filipe Coelho * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License as @@ -16,7 +16,7 @@ */ /** - * This file is an edited version of VCVRack's Model.cpp + * This file is an edited version of VCVRack's plugin/Model.cpp * Copyright (C) 2016-2021 VCV. * * This program is free software: you can redistribute it and/or @@ -44,7 +44,7 @@ namespace plugin { void Model::fromJson(json_t* rootJ) { - assert(plugin); + DISTRHO_SAFE_ASSERT_RETURN(plugin != nullptr,); json_t* nameJ = json_object_get(rootJ, "name"); if (nameJ) @@ -95,7 +95,7 @@ void Model::fromJson(json_t* rootJ) { std::string Model::getFullName() { - assert(plugin); + DISTRHO_SAFE_ASSERT_RETURN(plugin, {}); return plugin->getBrand() + " " + name; } diff --git a/src/override/Scene.cpp b/src/override/Scene.cpp index e503125..26a0193 100644 --- a/src/override/Scene.cpp +++ b/src/override/Scene.cpp @@ -1,6 +1,6 @@ /* * DISTRHO Cardinal Plugin - * Copyright (C) 2021 Filipe Coelho + * Copyright (C) 2021-2022 Filipe Coelho * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License as @@ -16,7 +16,7 @@ */ /** - * This file is an edited version of VCVRack's Scene.cpp + * This file is an edited version of VCVRack's app/Scene.cpp * Copyright (C) 2016-2021 VCV. * * This program is free software: you can redistribute it and/or @@ -27,6 +27,8 @@ #include +#include + #include #include #include diff --git a/src/override/Window.cpp b/src/override/Window.cpp index 75e82ab..6cb8fc0 100644 --- a/src/override/Window.cpp +++ b/src/override/Window.cpp @@ -1,6 +1,6 @@ /* * DISTRHO Cardinal Plugin - * Copyright (C) 2021 Filipe Coelho + * Copyright (C) 2021-2022 Filipe Coelho * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License as @@ -16,7 +16,7 @@ */ /** - * This file is an edited version of VCVRack's Window.cpp + * This file is an edited version of VCVRack's window/Window.cpp * Copyright (C) 2016-2021 VCV. * * This program is free software: you can redistribute it and/or @@ -56,7 +56,23 @@ namespace rack { namespace window { -static const math::Vec minWindowSize = math::Vec(648, 538); +static const math::Vec WINDOW_SIZE_MIN = math::Vec(648, 538); + + +struct FontWithOriginalContext : Font { + int ohandle = -1; + std::string ofilename; +}; + +struct ImageWithOriginalContext : Image { + int ohandle = -1; + std::string ofilename; +}; + + +Font::~Font() { + // There is no NanoVG deleteFont() function yet, so do nothing +} void Font::loadFile(const std::string& filename, NVGcontext* vg) { @@ -75,13 +91,15 @@ void Font::loadFile(const std::string& filename, NVGcontext* vg) { } -Font::~Font() { - // There is no NanoVG deleteFont() function yet, so do nothing +std::shared_ptr Font::load(const std::string& filename) { + return APP->window->loadFont(filename); } -std::shared_ptr Font::load(const std::string& filename) { - return APP->window->loadFont(filename); +Image::~Image() { + // TODO What if handle is invalid? + if (handle >= 0) + nvgDeleteImage(vg, handle); } @@ -96,30 +114,14 @@ void Image::loadFile(const std::string& filename, NVGcontext* vg) { } -Image::~Image() { - // TODO What if handle is invalid? - if (handle >= 0) - nvgDeleteImage(vg, handle); -} - - std::shared_ptr Image::load(const std::string& filename) { return APP->window->loadImage(filename); } -struct FontWithOriginalContext : Font { - int ohandle = -1; - std::string ofilename; -}; - -struct ImageWithOriginalContext : Image { - int ohandle = -1; - std::string ofilename; -}; - - struct Window::Internal { + std::string lastWindowTitle; + DISTRHO_NAMESPACE::UI* ui = nullptr; DISTRHO_NAMESPACE::WindowParameters params; DISTRHO_NAMESPACE::WindowParametersCallback* callback = nullptr; @@ -130,16 +132,16 @@ struct Window::Internal { NVGcontext* o_vg = nullptr; NVGcontext* o_fbVg = nullptr; - math::Vec size = minWindowSize; - std::string lastWindowTitle; + math::Vec size = WINDOW_SIZE_MIN; int mods = 0; + int currentRateLimit = 0; + int frame = 0; int frameSwapInterval = 1; - double monitorRefreshRate = 60.0; // FIXME + double monitorRefreshRate = 60.0; double frameTime = 0.0; double lastFrameDuration = 0.0; - int currentRateLimit = 0; std::map> fontCache; std::map> imageCache; @@ -327,7 +329,8 @@ math::Vec Window::getSize() { void Window::setSize(math::Vec size) { - internal->size = size.max(minWindowSize); + size = size.max(WINDOW_SIZE_MIN); + internal->size = size; if (DISTRHO_NAMESPACE::UI* const ui = internal->ui) ui->setSize(internal->size.x, internal->size.y); @@ -391,24 +394,30 @@ void Window::step() { APP->scene->step(); // Render scene - // Update and render - nvgScale(vg, pixelRatio, pixelRatio); - - // Draw scene - widget::Widget::DrawArgs args; - args.vg = vg; - args.clipBox = APP->scene->box.zeroPos(); - APP->scene->draw(args); - - glViewport(0, 0, fbWidth, fbHeight); - glClearColor(0.0, 0.0, 0.0, 1.0); - glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT); + { + // Update and render + nvgScale(vg, pixelRatio, pixelRatio); + + // Draw scene + widget::Widget::DrawArgs args; + args.vg = vg; + args.clipBox = APP->scene->box.zeroPos(); + APP->scene->draw(args); + + glViewport(0, 0, fbWidth, fbHeight); + glClearColor(0.0, 0.0, 0.0, 1.0); + glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT); + } } ++internal->frame; } +void Window::activateContext() { +} + + void Window::screenshot(const std::string&) { } @@ -524,6 +533,14 @@ int& Window::fbCount() { } +void init() { +} + + +void destroy() { +} + + } // namespace window } // namespace rack diff --git a/src/override/common.cpp b/src/override/common.cpp index b43bc25..941dc6a 100644 --- a/src/override/common.cpp +++ b/src/override/common.cpp @@ -1,6 +1,6 @@ /* * DISTRHO Cardinal Plugin - * Copyright (C) 2021 Filipe Coelho + * Copyright (C) 2021-2022 Filipe Coelho * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License as @@ -34,17 +34,16 @@ #include "DistrhoPluginUtils.hpp" -// fopen_u8 -#ifdef ARCH_WIN +#if defined ARCH_WIN #include -FILE* fopen_u8(const char* filename, const char* mode) -{ - return _wfopen(rack::string::UTF8toUTF16(filename).c_str(), rack::string::UTF8toUTF16(mode).c_str()); +FILE* fopen_u8(const char* filename, const char* mode) { + return _wfopen(rack::string::UTF8toUTF16(filename).c_str(), rack::string::UTF8toUTF16(mode).c_str()); } + #endif -// Define the global names to indicate this is Cardinal and not VCVRack + namespace rack { const std::string APP_NAME = "Cardinal"; @@ -52,22 +51,24 @@ const std::string APP_EDITION = getPluginFormatName(); const std::string APP_EDITION_NAME = "Audio Plugin"; const std::string APP_VERSION_MAJOR = "2"; const std::string APP_VERSION = "2.0"; -#if defined(ARCH_WIN) -const std::string APP_OS = "win"; -#elif defined(ARCH_MAC) -const std::string APP_OS = "mac"; +#if defined ARCH_WIN + const std::string APP_OS = "win"; +#elif ARCH_MAC + const std::string APP_OS = "mac"; +#elif defined ARCH_LIN + const std::string APP_OS = "lin"; #else -const std::string APP_OS = "lin"; + #error ARCH_LIN undefined #endif const std::string API_URL = ""; -Exception::Exception(const char* format, ...) -{ - va_list args; - va_start(args, format); - msg = string::fV(format, args); - va_end(args); +Exception::Exception(const char* format, ...) { + va_list args; + va_start(args, format); + msg = string::fV(format, args); + va_end(args); } -} + +} // namespace rack diff --git a/src/override/context.cpp b/src/override/context.cpp index 391aaa9..3f08e74 100644 --- a/src/override/context.cpp +++ b/src/override/context.cpp @@ -1,6 +1,6 @@ /* * DISTRHO Cardinal Plugin - * Copyright (C) 2021 Filipe Coelho + * Copyright (C) 2021-2022 Filipe Coelho * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License as @@ -46,26 +46,33 @@ Context::~Context() { // Set pointers to NULL so other objects will segfault when attempting to access them + INFO("Deleting window"); delete window; window = NULL; + INFO("Deleting patch manager"); delete patch; patch = NULL; + INFO("Deleting scene"); delete scene; scene = NULL; + INFO("Deleting event state"); delete event; event = NULL; + INFO("Deleting history state"); delete history; history = NULL; + INFO("Deleting engine"); delete engine; engine = NULL; } -static thread_local Context* threadContext = nullptr; + +static thread_local Context* threadContext = NULL; Context* contextGet() { DISTRHO_SAFE_ASSERT(threadContext != nullptr); @@ -76,9 +83,9 @@ Context* contextGet() { #ifdef ARCH_MAC __attribute__((optnone)) #endif -void contextSet(Context* const context) { - // DISTRHO_SAFE_ASSERT(threadContext == nullptr); +void contextSet(Context* context) { threadContext = context; } + } // namespace rack