MostlyHarmless 0.0.1
 
Loading...
Searching...
No Matches
mostlyharmless_PluginBase.h
Go to the documentation of this file.
1//
2// Created by Syl Morrison on 20/10/2024.
3//
4
5#ifndef MOSTLYHARMLESS_MOSTLYHARMLESS_PLUGINBASE_H
6#define MOSTLYHARMLESS_MOSTLYHARMLESS_PLUGINBASE_H
13#include <clap/helpers/plugin.hh>
14
22 std::unique_ptr<IPluginEntry> createPluginEntry() noexcept;
23} // namespace mostly_harmless::core
24
33 class PluginBase final : public clap::helpers::Plugin<clap::helpers::MisbehaviourHandler::Ignore, clap::helpers::CheckingLevel::Maximal> {
34 public:
39 explicit PluginBase(const clap_host* host);
40
41 private:
42 bool activate(double sampleRate, std::uint32_t minFrameCount, std::uint32_t maxFrameCount) noexcept override;
43 clap_process_status process(const clap_process* processContext) noexcept override;
44 void paramsFlush(const clap_input_events* in, const clap_output_events* out) noexcept override;
45 void handleGuiEvents(const clap_output_events_t* outputQueue) noexcept;
46 void handleEvent(const clap_event_header_t* event) noexcept;
47
48 [[nodiscard]] bool implementsParams() const noexcept override;
49 [[nodiscard]] bool isValidParamId(clap_id paramId) const noexcept override;
50 [[nodiscard]] std::uint32_t paramsCount() const noexcept override;
51 [[nodiscard]] bool paramsInfo(std::uint32_t paramIndex, clap_param_info* info) const noexcept override;
52 [[nodiscard]] bool paramsValue(clap_id id, double* value) noexcept override;
53
54 [[nodiscard]] bool implementsAudioPorts() const noexcept override;
55 [[nodiscard]] std::uint32_t audioPortsCount(bool isInput) const noexcept override;
56 [[nodiscard]] bool audioPortsInfo(std::uint32_t index, bool isInput, clap_audio_port_info* info) const noexcept override;
57 [[nodiscard]] bool implementsNotePorts() const noexcept override;
58 [[nodiscard]] std::uint32_t notePortsCount(bool isInput) const noexcept override;
59 [[nodiscard]] bool notePortsInfo(std::uint32_t index, bool isInput, clap_note_port_info* info) const noexcept override;
60
61 [[nodiscard]] bool implementsState() const noexcept override;
62 [[nodiscard]] bool stateSave(const clap_ostream* stream) noexcept override;
63 [[nodiscard]] bool stateLoad(const clap_istream* stream) noexcept override;
64
65 [[nodiscard]] bool implementsGui() const noexcept override;
66 [[nodiscard]] bool guiIsApiSupported(const char* api, bool isFloating) noexcept override;
67 [[nodiscard]] bool guiCreate(const char* api, bool isFloating) noexcept override;
68 [[nodiscard]] bool guiShow() noexcept override;
69 [[nodiscard]] bool guiHide() noexcept override;
70 void guiDestroy() noexcept override;
71 [[nodiscard]] bool guiSetParent(const clap_window* window) noexcept override;
72 [[nodiscard]] bool guiSetScale(double scale) noexcept override;
73 [[nodiscard]] bool guiCanResize() const noexcept override;
74 [[nodiscard]] bool guiAdjustSize(std::uint32_t* width, std::uint32_t* height) noexcept override;
75 [[nodiscard]] bool guiSetSize(std::uint32_t width, std::uint32_t height) noexcept override;
76 [[nodiscard]] bool guiGetSize(std::uint32_t* width, std::uint32_t* height) noexcept override;
77
78 std::optional<TransportState> m_lastTransportState{};
79 utils::Timer m_guiDispatchThread;
80 std::unique_ptr<core::IPluginEntry> m_pluginEntry{ nullptr };
81 std::unique_ptr<core::ISharedState> m_state{ nullptr };
82 std::unique_ptr<core::IEngine> m_engine{ nullptr };
83 std::unique_ptr<core::IEditor> m_editor{ nullptr };
84 };
85} // namespace mostly_harmless::internal
86#endif // MOSTLYHARMLESS_MOSTLYHARMLESS_PLUGINBASE_H
PluginBase(const clap_host *host)
Definition mostlyharmless_Timer.h:10
Contains core functionality of the framework.
Definition mostlyharmless_PluginBase.h:15
std::unique_ptr< IPluginEntry > createPluginEntry() noexcept
Definition mostlyharmless_PluginBase.h:25
The top-level namespace, contains all things plugin-related.
Definition mostlyharmless_BusConfig.h:3
Contains info from the host about the current transport state.
Definition mostlyharmless_TransportState.h:54