75 g.fillAll(getLookAndFeel().findColour(juce::ResizableWindow::backgroundColourId));
78 auto visuAreaWidth =
static_cast<float>(getWidth());
79 auto visuAreaHeight =
static_cast<float>(getHeight());
81 auto channelCount =
static_cast<unsigned long>(m_channelCount);
85 auto margin = getWidth() / ((2 * channelCount) + 1);
87 auto visuArea = getLocalBounds();
88 auto visuAreaOrigY = visuAreaHeight;
91 auto meterSpacing = margin;
92 auto meterThickness = float(visuArea.getWidth() - (channelCount) * meterSpacing) / float(channelCount);
93 auto meterMaxLength = visuArea.getHeight();
94 auto meterLeft = 0.5f * meterSpacing;
97 for (
unsigned long i = 1; i <= channelCount; ++i)
99 auto level = m_levelData.
GetLevel(i);
100 float peakMeterLength{ 0 };
101 float rmsMeterLength{ 0 };
102 float holdMeterLength{ 0 };
106 rmsMeterLength = meterMaxLength * level.GetFactorRMSdB();
107 holdMeterLength = meterMaxLength * level.GetFactorHOLDdB();
111 peakMeterLength = meterMaxLength * level.peak;
112 rmsMeterLength = meterMaxLength * level.rms;
113 holdMeterLength = meterMaxLength * level.hold;
117 g.setColour(getLookAndFeel().findColour(JUCEAppBasics::CustomLookAndFeel::ColourIds::MeteringPeakColourId));
118 g.fillRect(juce::Rectangle<float>(meterLeft, visuAreaOrigY - peakMeterLength, meterThickness, peakMeterLength));
120 g.setColour(getLookAndFeel().findColour(JUCEAppBasics::CustomLookAndFeel::ColourIds::MeteringRmsColourId));
121 g.fillRect(juce::Rectangle<float>(meterLeft, visuAreaOrigY - rmsMeterLength, meterThickness, rmsMeterLength));
123 g.setColour(getLookAndFeel().findColour(JUCEAppBasics::CustomLookAndFeel::ColourIds::MeteringHoldColourId));
124 g.drawLine(juce::Line<float>(meterLeft, visuAreaOrigY - holdMeterLength, meterLeft + meterThickness, visuAreaOrigY - holdMeterLength));
126 g.setColour(getLookAndFeel().findColour(juce::TextButton::textColourOffId));
127 g.drawText(juce::String(i), juce::Rectangle<float>(meterLeft - (0.5f * meterSpacing), visuAreaOrigY -
float(margin + 2), meterThickness + meterSpacing,
float(margin)), juce::Justification::centred);
129 meterLeft += meterThickness + meterSpacing;
133 g.setColour(getLookAndFeel().findColour(juce::TextButton::textColourOffId));
134 g.drawLine(juce::Line<float>(0.0f, visuAreaOrigY, visuAreaWidth, visuAreaOrigY));
137 g.setColour(getLookAndFeel().findColour(juce::TextButton::textColourOffId));
138 juce::String rangeText;
142 rangeText =
"0 ... 1";
143 g.drawText(rangeText, visuArea, juce::Justification::topRight,
true);
147 auto margin = getHeight() / ((2 * channelCount) + 1);
149 auto visuArea = getLocalBounds();
150 auto visuAreaOrigX = 0.0f;
153 auto meterSpacing = margin;
154 auto meterThickness = float(visuArea.getHeight() - (channelCount) * meterSpacing) / float(channelCount);
155 auto meterMaxLength = visuArea.getWidth();
156 auto meterTop = 0.5f * meterSpacing;
159 for (
unsigned long i = 1; i <= channelCount; ++i)
161 auto level = m_levelData.
GetLevel(i);
162 float peakMeterLength{ 0 };
163 float rmsMeterLength{ 0 };
164 float holdMeterLength{ 0 };
168 rmsMeterLength = meterMaxLength * level.GetFactorRMSdB();
169 holdMeterLength = meterMaxLength * level.GetFactorHOLDdB();
173 peakMeterLength = meterMaxLength * level.peak;
174 rmsMeterLength = meterMaxLength * level.rms;
175 holdMeterLength = meterMaxLength * level.hold;
179 g.setColour(getLookAndFeel().findColour(JUCEAppBasics::CustomLookAndFeel::ColourIds::MeteringPeakColourId));
180 g.fillRect(juce::Rectangle<float>(visuAreaOrigX, meterTop, peakMeterLength, meterThickness));
182 g.setColour(getLookAndFeel().findColour(JUCEAppBasics::CustomLookAndFeel::ColourIds::MeteringRmsColourId));
183 g.fillRect(juce::Rectangle<float>(visuAreaOrigX, meterTop, rmsMeterLength, meterThickness));
185 g.setColour(getLookAndFeel().findColour(JUCEAppBasics::CustomLookAndFeel::ColourIds::MeteringHoldColourId));
186 g.drawLine(juce::Line<float>(visuAreaOrigX + holdMeterLength, meterTop, visuAreaOrigX + holdMeterLength, meterTop + meterThickness));
188 g.setColour(getLookAndFeel().findColour(juce::TextButton::textColourOffId));
189 g.drawText(juce::String(i), juce::Rectangle<float>(visuAreaOrigX, meterTop,
float(0.5f * meterMaxLength), meterThickness), juce::Justification::centred);
191 meterTop += meterThickness + meterSpacing;
195 g.setColour(getLookAndFeel().findColour(juce::TextButton::textColourOffId));
196 g.drawLine(juce::Line<float>(0.0f, 0.0f, 0.0f, visuAreaHeight));
199 g.setColour(getLookAndFeel().findColour(juce::TextButton::textColourOffId));
200 juce::String rangeText;
204 rangeText =
"0 ... 1";
206 g.setOrigin(visuArea.getBottomLeft());
207 g.addTransform(juce::AffineTransform().rotated(90));
208 g.drawText(rangeText, visuArea, juce::Justification::topRight,
true);