initial: added first widget
This commit is contained in:
1
.gitignore
vendored
1
.gitignore
vendored
@@ -1,2 +1,3 @@
|
|||||||
JuceLibraryCode/
|
JuceLibraryCode/
|
||||||
Builds/
|
Builds/
|
||||||
|
*bak
|
||||||
|
51
Source/LookAndFeel.h
Normal file
51
Source/LookAndFeel.h
Normal file
@@ -0,0 +1,51 @@
|
|||||||
|
//
|
||||||
|
// LookAndFeel.h
|
||||||
|
// lampshade
|
||||||
|
//
|
||||||
|
// Created by Veit Heller on 19.06.17.
|
||||||
|
//
|
||||||
|
//
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include "../JuceLibraryCode/JuceHeader.h"
|
||||||
|
|
||||||
|
class LampshadeLookAndFeel : public LookAndFeel_V4 {
|
||||||
|
public:
|
||||||
|
void drawLinearSlider (Graphics& g,
|
||||||
|
int x,
|
||||||
|
int y,
|
||||||
|
int width,
|
||||||
|
int height,
|
||||||
|
float sliderPos,
|
||||||
|
float minSliderPos,
|
||||||
|
float maxSliderPos,
|
||||||
|
const Slider::SliderStyle s,
|
||||||
|
Slider& slider) override
|
||||||
|
{
|
||||||
|
g.setColour(fillColor);
|
||||||
|
g.fillRect((int)(x-minSliderPos), y, (int)(width+minSliderPos+maxSliderPos), height);
|
||||||
|
drawLinearSliderThumb(g, x, y, width, height, sliderPos, minSliderPos, maxSliderPos, s, slider);
|
||||||
|
}
|
||||||
|
|
||||||
|
void drawLinearSliderThumb(Graphics & g,
|
||||||
|
int x,
|
||||||
|
int y,
|
||||||
|
int width,
|
||||||
|
int height,
|
||||||
|
float sliderPos,
|
||||||
|
float minSliderPos,
|
||||||
|
float maxSliderPos,
|
||||||
|
const Slider::SliderStyle ,
|
||||||
|
Slider& slider) override {
|
||||||
|
g.setColour(sliderColor);
|
||||||
|
int nwidth = width+minSliderPos+maxSliderPos;
|
||||||
|
g.fillRect((int)(x-minSliderPos), y, (int)(nwidth*((sliderPos-minSliderPos)/width)), height);
|
||||||
|
}
|
||||||
|
|
||||||
|
Label* createSliderTextBox(Slider&) override { return nullptr; }
|
||||||
|
|
||||||
|
private:
|
||||||
|
Colour fillColor = Colours::yellow;
|
||||||
|
Colour sliderColor = Colours::red;
|
||||||
|
};
|
@@ -12,13 +12,15 @@
|
|||||||
#include "PluginEditor.h"
|
#include "PluginEditor.h"
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
//==============================================================================
|
//==============================================================================
|
||||||
LampshadeAudioProcessorEditor::LampshadeAudioProcessorEditor (LampshadeAudioProcessor& p)
|
LampshadeAudioProcessorEditor::LampshadeAudioProcessorEditor (LampshadeAudioProcessor& p)
|
||||||
: AudioProcessorEditor (&p), processor (p)
|
: AudioProcessorEditor (&p), processor (p), nlines (3), lineThickness(4)
|
||||||
{
|
{
|
||||||
// Make sure that before the constructor has finished, you've set the
|
component.setTextBoxStyle(Slider::NoTextBox, true, 0, 0);
|
||||||
// editor's size to whatever you need it to be.
|
setSize(400, 300);
|
||||||
setSize (400, 300);
|
component.setLookAndFeel(gui);
|
||||||
|
addAndMakeVisible(component);
|
||||||
}
|
}
|
||||||
|
|
||||||
LampshadeAudioProcessorEditor::~LampshadeAudioProcessorEditor()
|
LampshadeAudioProcessorEditor::~LampshadeAudioProcessorEditor()
|
||||||
@@ -29,15 +31,15 @@ LampshadeAudioProcessorEditor::~LampshadeAudioProcessorEditor()
|
|||||||
void LampshadeAudioProcessorEditor::paint (Graphics& g)
|
void LampshadeAudioProcessorEditor::paint (Graphics& g)
|
||||||
{
|
{
|
||||||
// (Our component is opaque, so we must completely fill the background with a solid colour)
|
// (Our component is opaque, so we must completely fill the background with a solid colour)
|
||||||
g.fillAll (getLookAndFeel().findColour (ResizableWindow::backgroundColourId));
|
g.fillAll(Colours::white);
|
||||||
|
|
||||||
g.setColour (Colours::white);
|
for (int i = 1; i < nlines; i++) {
|
||||||
g.setFont (15.0f);
|
g.drawLine(0, getHeight()*((float)i / nlines), getWidth(), getHeight()*((float)i / nlines), lineThickness);
|
||||||
g.drawFittedText ("Hello World!", getLocalBounds(), Justification::centred, 1);
|
g.drawLine(getWidth()*((float) i /nlines), 0, getWidth()*((float) i /nlines), getHeight(), lineThickness);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void LampshadeAudioProcessorEditor::resized()
|
void LampshadeAudioProcessorEditor::resized()
|
||||||
{
|
{
|
||||||
// This is generally where you'll want to lay out the positions of any
|
component.setBounds(getWidth()/nlines+lineThickness/2, getHeight()/nlines+lineThickness/2, getWidth()/nlines-lineThickness+1, getHeight()/nlines-lineThickness);
|
||||||
// subcomponents in your editor..
|
|
||||||
}
|
}
|
||||||
|
@@ -12,6 +12,7 @@
|
|||||||
|
|
||||||
#include "../JuceLibraryCode/JuceHeader.h"
|
#include "../JuceLibraryCode/JuceHeader.h"
|
||||||
#include "PluginProcessor.h"
|
#include "PluginProcessor.h"
|
||||||
|
#include "LookAndFeel.h"
|
||||||
|
|
||||||
|
|
||||||
//==============================================================================
|
//==============================================================================
|
||||||
@@ -31,6 +32,11 @@ private:
|
|||||||
// This reference is provided as a quick way for your editor to
|
// This reference is provided as a quick way for your editor to
|
||||||
// access the processor object that created it.
|
// access the processor object that created it.
|
||||||
LampshadeAudioProcessor& processor;
|
LampshadeAudioProcessor& processor;
|
||||||
|
LampshadeLookAndFeel* gui = new LampshadeLookAndFeel();
|
||||||
|
int nlines;
|
||||||
|
int lineThickness;
|
||||||
|
|
||||||
|
Slider component;
|
||||||
|
|
||||||
JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (LampshadeAudioProcessorEditor)
|
JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (LampshadeAudioProcessorEditor)
|
||||||
};
|
};
|
||||||
|
@@ -1,18 +1,7 @@
|
|||||||
/*
|
|
||||||
==============================================================================
|
|
||||||
|
|
||||||
This file was auto-generated!
|
|
||||||
|
|
||||||
It contains the basic framework code for a JUCE plugin processor.
|
|
||||||
|
|
||||||
==============================================================================
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include "PluginProcessor.h"
|
#include "PluginProcessor.h"
|
||||||
#include "PluginEditor.h"
|
#include "PluginEditor.h"
|
||||||
|
|
||||||
|
|
||||||
//==============================================================================
|
|
||||||
LampshadeAudioProcessor::LampshadeAudioProcessor()
|
LampshadeAudioProcessor::LampshadeAudioProcessor()
|
||||||
#ifndef JucePlugin_PreferredChannelConfigurations
|
#ifndef JucePlugin_PreferredChannelConfigurations
|
||||||
: AudioProcessor (BusesProperties()
|
: AudioProcessor (BusesProperties()
|
||||||
@@ -31,7 +20,6 @@ LampshadeAudioProcessor::~LampshadeAudioProcessor()
|
|||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
//==============================================================================
|
|
||||||
const String LampshadeAudioProcessor::getName() const
|
const String LampshadeAudioProcessor::getName() const
|
||||||
{
|
{
|
||||||
return JucePlugin_Name;
|
return JucePlugin_Name;
|
||||||
@@ -48,11 +36,7 @@ bool LampshadeAudioProcessor::acceptsMidi() const
|
|||||||
|
|
||||||
bool LampshadeAudioProcessor::producesMidi() const
|
bool LampshadeAudioProcessor::producesMidi() const
|
||||||
{
|
{
|
||||||
#if JucePlugin_ProducesMidiOutput
|
return false;
|
||||||
return true;
|
|
||||||
#else
|
|
||||||
return false;
|
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
double LampshadeAudioProcessor::getTailLengthSeconds() const
|
double LampshadeAudioProcessor::getTailLengthSeconds() const
|
||||||
@@ -62,8 +46,7 @@ double LampshadeAudioProcessor::getTailLengthSeconds() const
|
|||||||
|
|
||||||
int LampshadeAudioProcessor::getNumPrograms()
|
int LampshadeAudioProcessor::getNumPrograms()
|
||||||
{
|
{
|
||||||
return 1; // NB: some hosts don't cope very well if you tell them there are 0 programs,
|
return 1;
|
||||||
// so this should be at least 1, even if you're not really implementing programs.
|
|
||||||
}
|
}
|
||||||
|
|
||||||
int LampshadeAudioProcessor::getCurrentProgram()
|
int LampshadeAudioProcessor::getCurrentProgram()
|
||||||
@@ -84,31 +67,22 @@ void LampshadeAudioProcessor::changeProgramName (int index, const String& newNam
|
|||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
//==============================================================================
|
|
||||||
void LampshadeAudioProcessor::prepareToPlay (double sampleRate, int samplesPerBlock)
|
void LampshadeAudioProcessor::prepareToPlay (double sampleRate, int samplesPerBlock)
|
||||||
{
|
{
|
||||||
// Use this method as the place to do any pre-playback
|
|
||||||
// initialisation that you need..
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void LampshadeAudioProcessor::releaseResources()
|
void LampshadeAudioProcessor::releaseResources()
|
||||||
{
|
{
|
||||||
// When playback stops, you can use this as an opportunity to free up any
|
|
||||||
// spare memory, etc.
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifndef JucePlugin_PreferredChannelConfigurations
|
#ifndef JucePlugin_PreferredChannelConfigurations
|
||||||
bool LampshadeAudioProcessor::isBusesLayoutSupported (const BusesLayout& layouts) const
|
bool LampshadeAudioProcessor::isBusesLayoutSupported (const BusesLayout& layouts) const
|
||||||
{
|
{
|
||||||
#if JucePlugin_IsMidiEffect
|
// This is the place where you check if the layout is supported.
|
||||||
ignoreUnused (layouts);
|
// In this template code we only support mono or stereo.
|
||||||
return true;
|
if (layouts.getMainOutputChannelSet() != AudioChannelSet::mono()
|
||||||
#else
|
&& layouts.getMainOutputChannelSet() != AudioChannelSet::stereo())
|
||||||
// This is the place where you check if the layout is supported.
|
return false;
|
||||||
// In this template code we only support mono or stereo.
|
|
||||||
if (layouts.getMainOutputChannelSet() != AudioChannelSet::mono()
|
|
||||||
&& layouts.getMainOutputChannelSet() != AudioChannelSet::stereo())
|
|
||||||
return false;
|
|
||||||
|
|
||||||
// This checks if the input layout matches the output layout
|
// This checks if the input layout matches the output layout
|
||||||
#if ! JucePlugin_IsSynth
|
#if ! JucePlugin_IsSynth
|
||||||
@@ -117,7 +91,6 @@ bool LampshadeAudioProcessor::isBusesLayoutSupported (const BusesLayout& layouts
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@@ -139,16 +112,15 @@ void LampshadeAudioProcessor::processBlock (AudioSampleBuffer& buffer, MidiBuffe
|
|||||||
// audio processing...
|
// audio processing...
|
||||||
for (int channel = 0; channel < totalNumInputChannels; ++channel)
|
for (int channel = 0; channel < totalNumInputChannels; ++channel)
|
||||||
{
|
{
|
||||||
float* channelData = buffer.getWritePointer (channel);
|
//float* channelData = buffer.getWritePointer (channel);
|
||||||
|
|
||||||
// ..do something to the data...
|
// ..do something to the data...
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//==============================================================================
|
|
||||||
bool LampshadeAudioProcessor::hasEditor() const
|
bool LampshadeAudioProcessor::hasEditor() const
|
||||||
{
|
{
|
||||||
return true; // (change this to false if you choose to not supply an editor)
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
AudioProcessorEditor* LampshadeAudioProcessor::createEditor()
|
AudioProcessorEditor* LampshadeAudioProcessor::createEditor()
|
||||||
@@ -156,7 +128,6 @@ AudioProcessorEditor* LampshadeAudioProcessor::createEditor()
|
|||||||
return new LampshadeAudioProcessorEditor (*this);
|
return new LampshadeAudioProcessorEditor (*this);
|
||||||
}
|
}
|
||||||
|
|
||||||
//==============================================================================
|
|
||||||
void LampshadeAudioProcessor::getStateInformation (MemoryBlock& destData)
|
void LampshadeAudioProcessor::getStateInformation (MemoryBlock& destData)
|
||||||
{
|
{
|
||||||
// You should use this method to store your parameters in the memory block.
|
// You should use this method to store your parameters in the memory block.
|
||||||
|
105
test.RPP
Normal file
105
test.RPP
Normal file
@@ -0,0 +1,105 @@
|
|||||||
|
<REAPER_PROJECT 0.1 "5.40/OSX64" 1497899251
|
||||||
|
RIPPLE 0
|
||||||
|
GROUPOVERRIDE 0 0 0
|
||||||
|
AUTOXFADE 1
|
||||||
|
ENVATTACH 1
|
||||||
|
MIXERUIFLAGS 11 48
|
||||||
|
PEAKGAIN 1
|
||||||
|
FEEDBACK 0
|
||||||
|
PANLAW 1
|
||||||
|
PROJOFFS 0 0
|
||||||
|
MAXPROJLEN 0 600
|
||||||
|
GRID 3199 8 1 8 1 0 0 0
|
||||||
|
TIMEMODE 1 5 -1 30 0
|
||||||
|
VIDEO_CONFIG 0 0 256
|
||||||
|
PANMODE 3
|
||||||
|
CURSOR 0
|
||||||
|
ZOOM 100 0 0
|
||||||
|
VZOOMEX 6
|
||||||
|
USE_REC_CFG 0
|
||||||
|
RECMODE 1
|
||||||
|
SMPTESYNC 0 30 100 40 1000 300 0 0 1 0 0
|
||||||
|
LOOP 0
|
||||||
|
LOOPGRAN 0 4
|
||||||
|
RECORD_PATH "" ""
|
||||||
|
<RECORD_CFG
|
||||||
|
>
|
||||||
|
<APPLYFX_CFG
|
||||||
|
>
|
||||||
|
RENDER_FILE ""
|
||||||
|
RENDER_PATTERN ""
|
||||||
|
RENDER_FMT 0 2 0
|
||||||
|
RENDER_1X 0
|
||||||
|
RENDER_RANGE 1 0 0 18 1000
|
||||||
|
RENDER_RESAMPLE 3 0 1
|
||||||
|
RENDER_ADDTOPROJ 0
|
||||||
|
RENDER_STEMS 0
|
||||||
|
RENDER_DITHER 0
|
||||||
|
TIMELOCKMODE 1
|
||||||
|
TEMPOENVLOCKMODE 1
|
||||||
|
ITEMMIX 0
|
||||||
|
DEFPITCHMODE 589824
|
||||||
|
TAKELANE 1
|
||||||
|
SAMPLERATE 44100 0 0
|
||||||
|
<RENDER_CFG
|
||||||
|
>
|
||||||
|
LOCK 1
|
||||||
|
<METRONOME 6 2
|
||||||
|
VOL 0.25 0.125
|
||||||
|
FREQ 800 1600 1
|
||||||
|
BEATLEN 4
|
||||||
|
SAMPLES "" ""
|
||||||
|
PATTERN 2863311530 2863311529
|
||||||
|
>
|
||||||
|
GLOBAL_AUTO -1
|
||||||
|
TEMPO 120 4 4
|
||||||
|
PLAYRATE 1 0 0.25 4
|
||||||
|
SELECTION 0 0
|
||||||
|
SELECTION2 0 0
|
||||||
|
MASTERAUTOMODE 0
|
||||||
|
MASTERTRACKHEIGHT 0
|
||||||
|
MASTERPEAKCOL 16576
|
||||||
|
MASTERMUTESOLO 0
|
||||||
|
MASTERTRACKVIEW 0 0.6667 0.5 0.5 0 0 0
|
||||||
|
MASTERHWOUT 0 0 1 0 0 0 0 -1
|
||||||
|
MASTER_NCH 2 2
|
||||||
|
MASTER_VOLUME 1 0 -1 -1 1
|
||||||
|
MASTER_FX 1
|
||||||
|
MASTER_SEL 0
|
||||||
|
<MASTERFXLIST
|
||||||
|
WNDRECT 34 368 639 377
|
||||||
|
SHOW 0
|
||||||
|
LASTSEL 0
|
||||||
|
DOCKED 0
|
||||||
|
BYPASS 0 0 0
|
||||||
|
<AU "AU: yourcompany: lampshade" "yourcompany: lampshade" "" 1635083896 1382378611 1298230901
|
||||||
|
6QMAAAAAAAACAAAAAQAAAAAAAAACAAAAAAAAAAIAAAABAAAAAAAAAAIAAAAAAAAAkgIAADw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+CjwhRE9D
|
||||||
|
VFlQRSBwbGlzdCBQVUJMSUMgIi0vL0FwcGxlLy9EVEQgUExJU1QgMS4wLy9FTiIgImh0dHA6Ly93d3cuYXBwbGUuY29tL0RURHMvUHJvcGVydHlMaXN0LTEuMC5kdGQi
|
||||||
|
Pgo8cGxpc3QgdmVyc2lvbj0iMS4wIj4KPGRpY3Q+Cgk8a2V5PmRhdGE8L2tleT4KCTxkYXRhPgoJPC9kYXRhPgoJPGtleT5lbGVtZW50LW5hbWU8L2tleT4KCTxkaWN0
|
||||||
|
PgoJCTxrZXk+MTwva2V5PgoJCTxkaWN0PgoJCQk8a2V5PjA8L2tleT4KCQkJPHN0cmluZz5JbnB1dDwvc3RyaW5nPgoJCTwvZGljdD4KCQk8a2V5PjI8L2tleT4KCQk8
|
||||||
|
ZGljdD4KCQkJPGtleT4wPC9rZXk+CgkJCTxzdHJpbmc+T3V0cHV0PC9zdHJpbmc+CgkJPC9kaWN0PgoJPC9kaWN0PgoJPGtleT5tYW51ZmFjdHVyZXI8L2tleT4KCTxp
|
||||||
|
bnRlZ2VyPjEyOTgyMzA5MDE8L2ludGVnZXI+Cgk8a2V5Pm5hbWU8L2tleT4KCTxzdHJpbmc+VW50aXRsZWQ8L3N0cmluZz4KCTxrZXk+c3VidHlwZTwva2V5PgoJPGlu
|
||||||
|
dGVnZXI+MTM4MjM3ODYxMTwvaW50ZWdlcj4KCTxrZXk+dHlwZTwva2V5PgoJPGludGVnZXI+MTYzNTA4Mzg5NjwvaW50ZWdlcj4KCTxrZXk+dmVyc2lvbjwva2V5PgoJ
|
||||||
|
PGludGVnZXI+MDwvaW50ZWdlcj4KPC9kaWN0Pgo8L3BsaXN0PgoBAAAAAAAAAAAA
|
||||||
|
>
|
||||||
|
FLOATPOS 0 0 0 0
|
||||||
|
FXID {3568A34C-460C-D046-82F7-7D87378ABB20}
|
||||||
|
WAK 0
|
||||||
|
>
|
||||||
|
<MASTERPLAYSPEEDENV
|
||||||
|
ACT 0
|
||||||
|
VIS 0 1 1
|
||||||
|
LANEHEIGHT 0 0
|
||||||
|
ARM 0
|
||||||
|
DEFSHAPE 0 -1 -1
|
||||||
|
>
|
||||||
|
<TEMPOENVEX
|
||||||
|
ACT 0
|
||||||
|
VIS 1 0 1
|
||||||
|
LANEHEIGHT 0 0
|
||||||
|
ARM 0
|
||||||
|
DEFSHAPE 1 -1 -1
|
||||||
|
>
|
||||||
|
<PROJBAY
|
||||||
|
>
|
||||||
|
>
|
Reference in New Issue
Block a user