Element catalog
Version française : CONTROLS_FR.md
All types are in the PluginUI namespace. Value controls derive from ValueControl: binding to an IParameter (Parameter = …), full VST3 gesture, reset on double-click or Ctrl+click (ResetOnDoubleClick, ResetOnControlClick), keyboard value entry for Knob and Slider (double-click on the value text, Alt+click, right double-click or Enter, chosen with TextEntryTriggers; numbers always use a decimal point), mouse wheel, arrow keys, Shift for fine adjustment, value bubble (ShowValueBubble), skin (Skin) and style (Style). The "Equivalent" column gives the corresponding VSTGUI or iPlug2 class.
Reference versions for the equivalents: VSTGUI 4.15.1 (VST 3 SDK 3.8.1) and iPlug2 master of 18 October 2026 (commit 39ea73a, after tag v1.0.0-beta).
Rotary
| Element |
Key points |
Equivalent |
Knob |
Arc / Classic / Minimal styles, bipolar mode (IsBipolar, BipolarCenter), modulation arc (ModulationAmount), tick marks, vertical/horizontal drag, keyboard entry (double-click on the value, Alt+click…), film strip and SVG via Skin |
CKnob, CAnimKnob, IVKnobControl, IBKnobControl, ISVGKnobControl |
EndlessKnob |
Endless encoder: Turned(steps) event, optional parameter control with StepSize, Wrap |
— |
Linear
| Element |
Key points |
Equivalent |
Slider |
Vertical or horizontal, bipolar, Cap/Round/Line/None handles, JumpToClick, tick marks, side label, SliderHandleSkin (bitmap handle) |
CSlider, IVSliderControl, IBSliderControl, ISVGSliderControl, CHorizontalSlider, CVerticalSlider |
RangeSlider |
Two bounds (Low/High, LowParameter/HighParameter), minimum gap, dragging of the band |
IVRangeSliderControl |
MultiSlider |
N bars, drawing with the mouse (interpolated, Ctrl: straight line), bipolar, step, highlighted index, BindParameters |
IVMultiSliderControl |
XYPad |
Two parameters edited in simultaneous gestures, grid, crosshair |
CXYPad, IVXYPadControl |
ScrollBar |
Minimum/Maximum/ViewportSize/Value, arrows, paging with auto-repeat, auto-hide |
CScrollbar |
EnvelopeEditor |
ADSR with draggable points, four optional parameters, square-root time axis |
— (bonus) |
CurveEditor |
Multi-segment envelope / LFO (MSEG): draggable points, adding and removing by double-click, per-segment curvature, snap grid, playhead, exact Evaluate for the audio engine |
— (bonus) |
| Element |
Key points |
Equivalent |
Button |
Text and/or icon (bitmap, SVG, IconRenderer), Normal/Accent/Flat/Outline appearances, repeat while pressed, momentary parameter |
CKickButton, CTextButton, IVButtonControl, IBButtonControl (+ ImageStateSkin), ISVGButtonControl (+ SvgStateSkin) |
ToggleButton |
OnText/OffText, LED, state color; with a FilmStripSkin, equivalent to CMovieButton |
COnOffButton, CMovieButton, IVToggleControl, ITextToggleControl, ISVGToggleControl |
CheckBox |
Animated box + text |
CCheckBox |
Switch |
N positions, vertical/horizontal, direct or cyclic selection, film strip by state index |
CHorizontalSwitch, IVSwitchControl, CVerticalSwitch, IBSwitchControl (+ FilmStripSkin), ISVGSwitchControl |
SlideSwitch |
Animated "pill" switch |
IVSlideSwitchControl |
SegmentedControl |
Segments in a row or column, sliding highlight |
CSegmentButton, IVTabSwitchControl |
RadioGroup |
List of radio buttons |
IVRadioButtonControl |
RockerSwitch |
Momentary −1/0/+1, auto-repeat, parameter stepping |
CRockerSwitch |
MultiToggle |
Row of N toggles (gate sequencer), drawing by dragging, playback position |
IVMultiToggleControl |
StepSequencer |
Per-step values (interpolated drawing) + gates, active length, beat groups, playing step, binding to one parameter per step (one gesture per parameter touched) |
— (bonus) |
ModulationSourceButton |
Modulation source chip to drag onto a control that accepts modulation (AcceptsModulation, ModulationDropped event) |
— (bonus, Serum / Vital style) |
| Element |
Key points |
Equivalent |
DropDown |
Items from the parameter or an explicit list, submenus via a separator ("Group/Item"), mouse wheel and arrows, unavailable items hidden (IsItemAvailable) |
COptionMenu, IVMenuButtonControl |
MenuButton |
Arbitrary menu (MenuItem), hamburger / dots / text + chevron styles |
IVMenuButtonControl |
MenuPopup |
Drawn menu: check marks, shortcuts, separators, submenus, keyboard, type-ahead, scrolling |
IPopupMenuControl |
NativeMenu |
Native Win32 menu (UIHost.UseNativeMenus) |
COptionMenu (native) |
| DAW context menu |
Right-click on a bound control: VST3 host menu (IComponentHandler3), custom entries can be added |
built into VSTGUI and iPlug2 |
Text
| Element |
Key points |
Equivalent |
Label |
One or more lines, alignments, TextSource refreshed every frame (real-time text) |
CTextLabel, CMultiLineTextLabel, ITextControl, IRTTextControl, IVLabelControl, IMultiLineTextControl |
ValueDisplay |
Parameter value, entry by double-click or Enter, optional dragging |
CParamDisplay, ICaptionControl |
NumberBox |
Drag, mouse wheel, text entry, −/+ buttons |
IVNumberBoxControl |
TextBox |
Single-line entry: selection, clipboard, words (Ctrl+arrows), filter, max. length, read-only, search style |
CTextEdit, CSearchTextEdit, ITextEntryControl |
UIHost.BeginTextEdit |
In-place text entry over any rectangle |
IEditableTextControl |
SegmentDisplay |
Vector 7-segment display, unlit segments visible, decimal point, slant, glow |
CSpecialDigit |
Hyperlink |
Clickable link (default browser) |
IURLControl |
BitmapText, BitmapFont |
Text in a fixed-width bitmap font (LCD, VFD, pixel art), integer scaling without smoothing, unlit segments visible, real-time text |
IBTextControl |
| Value bubble |
ShowValueBubble on any ValueControl |
IBubbleControl |
Metering and visualization
| Element |
Key points |
Equivalent |
LevelMeter |
1 to 64 channels, gradient / segments / solid, peak + RMS, peak hold, clip indicator, dB scale, gain reduction mode, lock-free PeakValue sources, film strip via Skin (one frame per level, drawn per channel) |
CVuMeter, IVMeterControl, IVLEDMeterControl, IVPeakAvgMeterControl, IBMeterControl (+ FilmStripSkin) |
Led |
Brightness, glow, round or square shapes, function-based source |
ILEDControl |
Oscilloscope |
Reads an AudioRingBuffer, rising-edge trigger, gain, fill, glow |
IVScopeControl, IVDisplayControl |
SpectrumAnalyzer |
FFT (Dsp.Fft), log axis 20 Hz–20 kHz, slope compensation, attack/release smoothing, peak hold, fractional-octave bar mode |
IVSpectrumAnalyzerControl, IVBarGraphSpectrumAnalyzerControl |
Plot |
Functions or point lists, logarithmic X, fill, automatic tick marks (equalizer curve) |
IVPlotControl |
ProgressBar |
Determinate (with percentage) or indeterminate |
— |
FpsCounter |
Frames per second and frame time (debugging) |
IFPSDisplayControl |
HistoryGraph |
Scrolling history of a value (gain reduction, envelope, LFO): line, filled or bars, lock-free PeakValue source or polled function |
IVDisplayControl |
ParametricEqEditor, EqBand |
Parametric equalizer: exact curve of the RBJ biquads, draggable nodes (frequency and gain in parallel gestures), Q with the mouse wheel, shape menu per band, adding and removing bands, spectrum in the background |
— (bonus) |
FrequencyResponseView, ResponseCurve, ResponseNode |
Response display for any filter: consumer-supplied curves, log or linear frequency axis, fixed left axis and auto-scaled right axis (phase in multiples of π, delays), analyzed input spectrum (50 % overlap, release smoothing, 20·log10 or 6·log2 dB) and the spectrum shaped by a response without a second FFT, nodes bound to parameters, band nodes defined by two edges with their own handles |
— (bonus) |
CompressorCurve |
Transfer curve (threshold, ratio, soft knee), threshold and ratio adjustable with the mouse, live input level |
— (bonus) |
LoudnessMeter + Dsp.LoudnessAnalyzer |
EBU R128 / BS.1770-4 loudness: momentary, short-term, integrated (with gating), LRA range, peak; target and tolerance |
— (bonus) |
Goniometer, CorrelationMeter |
Stereo image (M/S Lissajous) and phase correlation −1…+1 |
— (bonus) |
Spectrogram |
Scrolling spectrogram, logarithmic frequency axis, color map |
— (bonus) |
WaveformView + Dsp.WavReader |
Multichannel waveform: zoom and scrolling, start / end / loop markers that can be bound to parameters, selection, playhead, WAV file drop |
— (bonus, sampler) |
MIDI
| Element |
Key points |
Equivalent |
PitchWheel, ModWheel (WheelControl) |
Pitch wheel (animated return to center within the same gesture) and modulation wheel |
IWheelControl |
PianoKeyboard |
Configurable range, glissando, velocity from the vertical click position, NoteOn/NoteOff, SetNoteState callable from any thread, processor notes via ActivitySource (NoteActivity, lock-free), playing from the computer keyboard; in an NPlug plug-in, ConnectKeyboard sends the notes to the processor |
KeyboardView, IVKeyboardControl |
Containers and layout
| Element |
Key points |
Equivalent |
Canvas |
Absolute positioning (SetBounds): the usual root of an editor |
CViewContainer |
StackPanel, WrapPanel, DockPanel, UniformGrid |
Stacking, wrapping, docking, regular grid |
CRowColumnView |
Grid |
Auto / pixel / star rows and columns, spanning, spacing (new Grid("Auto,*", "120,*")) |
iPlug2 Flexbox |
Border, Panel |
Background (color or gradient, equivalent to CGradientView), border, rounded corners, drop shadow, padding |
CShadowViewContainer, IVPanelControl, IPanelControl |
GroupBox |
Titled frame, accent bar, collapsible |
IVGroupControl |
TabView |
Tabs on top or on the left, animated indicator, pages that can be disabled, Ctrl+Tab; only the visible page is attached |
CTabView, IVTabbedPagesControl |
ViewSwitcher |
Shows one child at a time, chosen by SelectedIndex or a bound parameter (discrete: step index; continuous: value spread over the children); hidden views keep their state |
UIViewSwitchContainer |
ScrollViewer |
Vertical and horizontal scrolling, thin overlay scroll bars, mouse wheel (Shift: horizontal), ScrollIntoView |
CScrollView |
SplitView |
Two panes and a movable splitter |
CSplitView |
ListBox |
Virtualized list, single or extended selection, keyboard, type-ahead search, reordering by dragging |
CListControl, CStringList |
DataTable |
Fixed or star columns, sorting, resizing, auto-fit, virtualized rows, cell editing |
CDataBrowser |
CornerResizer |
Editor resize grip (double-click: 100 %) |
ICornerResizerControl |
Separator, Spacer |
Separator line, fixed or stretchable space |
— |
LayeredPanel |
Full-size stacked layers, composited opacity per layer, BringToFront / SendToBack |
CLayeredViewContainer |
Dialogs and pickers
| Element |
Key points |
Equivalent |
ColorSwatch, ColorPicker, ColorPickerPopup |
S/V square, hue, alpha, hexadecimal entry, recent colors, Esc restores |
CColorChooser, IColorPickerControl, IVColorSwatchControl |
FilePathBox |
Path shortened in the middle, native dialog (file, folder, save), file drop |
CNewFileSelector, IDirBrowseControlBase |
FileDialogs |
IFileOpenDialog / IFileSaveDialog |
— |
ABCompareBar, ParameterSnapshot |
A/B comparison of complete settings, copy to the other slot, restore through gestures |
— (bonus) |
PresetBar, IPresetProvider, PresetList |
Previous/next, menu by bank, Save / Save as / Delete, Ctrl+S |
IVBakedPresetManagerControl, IVDiskPresetManagerControl |
Dialog |
Modal dialog, default and cancel buttons, Dialog.ShowMessage |
— |
AboutBox, SplashScreen |
"About" window, splash screen that fades out |
CSplashScreen, IAboutBoxControl, CAnimationSplashScreen |
Images and integration
| Element |
Key points |
Equivalent |
ImageView |
Fitted image (ImageFit) or animated film strip (loop, ping-pong) |
CMovieBitmap, CAutoAnimation, IBitmapControl |
SvgView |
Native SVG, fitting, rotation |
ISVGControl |
NativeWindowHost |
Embeds a third-party Win32 window (video, WebView2 created by the application) |
CExternalView, IPlatformViewControl, CExternalControl |
Skins (Skins)
| Skin |
Use |
FilmStripSkin |
Film strip: frame chosen from the value or the state index (CMultiFrameBitmap) |
ImageStateSkin |
One image per state: normal, on, hover, pressed, disabled |
SvgRotarySkin |
SVG rotor turned according to the value, fixed background and highlight |
ImageRotarySkin |
Bitmap rotor turned according to the value, fixed background and highlight (IBKnobRotaterControl) |
SvgStateSkin |
One SVG per state or per value range |
NineSliceSkin |
Stretchable bitmap frame without distorting the corners (CNinePartTiledBitmap) |
SliderHandleSkin |
Bitmap handle (and track) for Slider |
DelegateSkin |
Free drawing by a function (ILambdaControl) |
Cross-cutting services
MIDI learn (UIHost.MidiLearn, IMidiLearnService, MidiLearnService: "MIDI Learn" / "Forget MIDI assignment" entries in the context menu, including the DAW's; outline around the control waiting for MIDI), interface language (UIHost.Language, English / French UIStrings tables, extensible), culture-independent numbers (InvariantNumber), tooltips (ToolTip), context menus (ContextMenu), internal drag and drop (UIHost.BeginDrag) and file drop (AllowFileDrop), animations (UIHost.Animator, Easing curves), per-frame tickers, keyboard navigation (Tab, focus ring), clipboard, light and dark themes, live edit mode, off-screen PNG rendering, display DSP (Dsp.Fft, AudioRingBuffer, PeakValue, LevelBallistics).
Not included (by design)
Built-in WebView2 web view (IWebViewControl; use NativeWindowHost), GPU shaders (IShaderControl), OpenGL view (COpenGLView), full code editor (VSTGUI text editor), font and date pickers (CFontChooser). Multi-touch (IMultiTouchControlBase): PluginUI handles the mouse, and single-finger touch through Windows' mouse emulation.