#pragma once #include #include "PluginProcessor.h" #include "components/EffectComponent.h" class OscirenderAudioProcessorEditor; class ObjComponent : public juce::GroupComponent, public juce::MouseListener { public: ObjComponent(OscirenderAudioProcessor&, OscirenderAudioProcessorEditor&); ~ObjComponent(); void resized() override; void mouseMove(const juce::MouseEvent& event) override; void disableMouseRotation(); private: OscirenderAudioProcessor& audioProcessor; OscirenderAudioProcessorEditor& pluginEditor; EffectComponent focalLength{0, 2, 0.01, audioProcessor.focalLength, false}; EffectComponent rotateX{-1, 1, 0.01, audioProcessor.rotateX, false}; EffectComponent rotateY{-1, 1, 0.01, audioProcessor.rotateY, false}; EffectComponent rotateZ{-1, 1, 0.01, audioProcessor.rotateZ, false}; EffectComponent rotateSpeed{-1, 1, 0.01, audioProcessor.rotateSpeed, false}; juce::TextButton resetRotation{"Reset Rotation"}; juce::ToggleButton mouseRotate{"Rotate with Mouse (Esc to disable)"}; std::unique_ptr fixedRotateWhite; std::unique_ptr fixedRotateRed; std::shared_ptr fixedRotateX = std::make_shared("fixedRotateX", juce::DrawableButton::ButtonStyle::ImageFitted); std::shared_ptr fixedRotateY = std::make_shared("fixedRotateY", juce::DrawableButton::ButtonStyle::ImageFitted); std::shared_ptr fixedRotateZ = std::make_shared("fixedRotateZ", juce::DrawableButton::ButtonStyle::ImageFitted); JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR(ObjComponent) };