Cardinal/src/override/context.cpp
falkTX 1262f318da
Update and adapt to Rack 2.3
Signed-off-by: falkTX <falktx@falktx.com>
2023-05-20 19:38:29 +02:00

90 lines
2.1 KiB
C++

/*
* DISTRHO Cardinal Plugin
* Copyright (C) 2021-2023 Filipe Coelho <falktx@falktx.com>
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License as
* published by the Free Software Foundation; either version 3 of
* the License, or any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* For a full copy of the GNU General Public License see the LICENSE file.
*/
/**
* This file is an edited version of VCVRack's context.cpp
* Copyright (C) 2016-2023 VCV.
*
* This program is free software: you can redistribute it and/or
* modify it under the terms of the GNU General Public License as
* published by the Free Software Foundation; either version 3 of
* the License, or (at your option) any later version.
*/
#include <context.hpp>
#include <window/Window.hpp>
#include <patch.hpp>
#include <engine/Engine.hpp>
#include <app/Scene.hpp>
#include <history.hpp>
#ifdef NDEBUG
# undef DEBUG
#endif
#include "DistrhoUtils.hpp"
namespace rack {
Context::~Context() {
// Deleting NULL is safe in C++.
// 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 = NULL;
Context* contextGet() {
DISTRHO_SAFE_ASSERT(threadContext != nullptr);
return threadContext;
}
// Apple's clang incorrectly compiles this function when -O2 or higher is enabled.
#ifdef ARCH_MAC
__attribute__((optnone))
#endif
void contextSet(Context* context) {
threadContext = context;
}
} // namespace rack