MCPcopy Create free account
hub / github.com/StrangeLoopsAudio/gRainbow / updateFilterPath

Method updateFilterPath

Source/Components/FilterControl.cpp:129–191  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

127}
128
129void FilterControl::updateFilterPath() {
130 auto drawRect = mVizRect.reduced(Utils::PADDING * 2, Utils::PADDING * 2);
131
132 // Draw selected filter path
133 mFilterPath.clear();
134 int resPadding = drawRect.getHeight() * 0.3f; // both width and height max size of resonance peak
135 float cutoffWidth = drawRect.getWidth() *
136 ParamRanges::FILT_CUTOFF.convertTo0to1(mSliderCutoff.getValue());
137 float resHeight =
138 drawRect.getHeight() * 0.3f * ParamRanges::FILT_RESONANCE.convertTo0to1(mSliderResonance.getValue());
139
140 juce::Point<float> startPt = drawRect.getBottomLeft();
141 juce::Point<float> midPt1, midPt2, midPt3, midPt4;
142 juce::Point<float> endPt = drawRect.getBottomRight();
143
144 switch (mFilterType.getSelectedId() - 1) {
145 case (Utils::FilterType::LOWPASS):
146 midPt1 = juce::Point<float>(drawRect.getX(), drawRect.getY() + resPadding);
147 midPt2 = juce::Point<float>(drawRect.getX() + cutoffWidth - resPadding / 2, drawRect.getY() + resPadding);
148 midPt3 = juce::Point<float>(drawRect.getX() + cutoffWidth, drawRect.getY() + (resPadding - resHeight));
149 midPt4 = juce::Point<float>(drawRect.getX() + cutoffWidth + resPadding / 2, drawRect.getBottom());
150 break;
151 case (Utils::FilterType::HIGHPASS):
152 cutoffWidth = drawRect.getWidth() - cutoffWidth; // Reverse for HP
153 midPt1 = juce::Point<float>(drawRect.getRight() - cutoffWidth - resPadding / 2, drawRect.getBottom());
154 midPt2 = juce::Point<float>(drawRect.getRight() - cutoffWidth, drawRect.getY() + (resPadding - resHeight));
155 midPt3 = juce::Point<float>(drawRect.getRight() - cutoffWidth + resPadding / 2, drawRect.getY() + resPadding);
156 midPt4 = juce::Point<float>(drawRect.getRight(), drawRect.getY() + resPadding);
157 break;
158 case (Utils::FilterType::BANDPASS):
159 midPt1 = juce::Point<float>(drawRect.getCentreX() - cutoffWidth / 2 - resPadding / 2,
160 drawRect.getBottom());
161 midPt2 = juce::Point<float>(drawRect.getCentreX() - cutoffWidth / 2, drawRect.getY() + (resPadding - resHeight));
162 midPt3 = juce::Point<float>(drawRect.getCentreX() + cutoffWidth / 2, drawRect.getY() + (resPadding - resHeight));
163 midPt4 = juce::Point<float>(drawRect.getCentreX() + cutoffWidth / 2 + resPadding / 2,
164 drawRect.getBottom());
165 break;
166 case (Utils::FilterType::NO_FILTER):
167 midPt1 = juce::Point<float>(drawRect.getTopLeft().translated(0, resPadding));
168 midPt2 = juce::Point<float>(drawRect.getTopLeft().translated(10, resPadding));
169 midPt3 = juce::Point<float>(drawRect.getTopRight().translated(-10, resPadding));
170 midPt4 = juce::Point<float>(drawRect.getTopRight().translated(0, resPadding));
171 break;
172 }
173
174 // I'm not happy with this either, clean it up if possible
175 midPt1.setXY(juce::jlimit(drawRect.getX(), drawRect.getRight(), midPt1.x), juce::jlimit(drawRect.getY(), drawRect.getBottom(), midPt1.y));
176 midPt2.setXY(juce::jlimit(drawRect.getX(), drawRect.getRight(), midPt2.x), juce::jlimit(drawRect.getY(), drawRect.getBottom(), midPt2.y));
177 midPt3.setXY(juce::jlimit(drawRect.getX(), drawRect.getRight(), midPt3.x), juce::jlimit(drawRect.getY(), drawRect.getBottom(), midPt3.y));
178 midPt4.setXY(juce::jlimit(drawRect.getX(), drawRect.getRight(), midPt4.x), juce::jlimit(drawRect.getY(), drawRect.getBottom(), midPt4.y));
179
180 // Make path from points
181 if (startPt.x < midPt1.x) startPt.x = midPt1.x + 5;
182 if (endPt.x > midPt4.x) endPt.x = midPt4.x - 5;
183 mFilterPath.startNewSubPath(startPt);
184 mFilterPath.lineTo(midPt1);
185 mFilterPath.lineTo(midPt2);
186 mFilterPath.lineTo(midPt3);

Callers

nothing calls this directly

Calls 2

getHeightMethod · 0.80
clearMethod · 0.45

Tested by

no test coverage detected