Official and Community made reusable GUI widgets for DPF
This is a repository for shared GUI widgets targetting DPF.
Since DPF allows multiple backends (cairo, opengl or vulkan), we need to split them as such. Each folder provides widgets for its dedicated backend type. It is not mandatory that a widget is usable for more than 1 backend. Generic widgets (those based on DPF core classes like Color, Rectangle, etc) are placed under the "generic" directory.
Resize handle for DPF windows, will sit on bottom-right.
Works in both Cairo and OpenGL modes (classic/legacy OpenGL only, does not support OpenGL3 mode).
Used very often and in many plugins.
Exposes the LVGL drawing API inside a DGL Widget. This class will take care of setting up LVGL for drawing, and also user input, resizes and everything in between.
See lvgl-template-plugin for a CMake-based template plugin project around LVGL.
oui-blendish widgets for DPF. Work in progress, usable in very select cases.
Used in:
- AIDA-X (standalone options)
Exposes the Dear ImGui drawing API inside a DGL Widget.
The drawing function onDisplay()
is implemented internally but a new onImGuiDisplay()
needs to be overridden instead.
This class will take care of setting up ImGui for drawing, and also also user input, resizes and everything in between.
Used in:
- dear-plugins
- Ildaeil
- master_me (histogram display)
- WSTD CRSHR
- WSTD DLAY
- WSTD DL3Y
- WSTD EQ
- WSTD 3Q
- WSTD FLANGR
- WSTD FL3NGR
- WSTD FLDR
- WSTD MANGLR
- WSTD M3NGLR
- WSTD SMTHR
See imgui-template-plugin for a CMake-based template plugin project around ImGui. See imgui-template-app for a standalone application template.
Text Editor Widget class, based on ImGuiColorTextEdit.
Used in:
Quanta-inspired widgets for DPF.
Used in:
Each widget MUST follow these rules:
- contain exactly 1 header file, with hpp extension
- must subclass SubWidget (for cairo use CairoSubWidget, nanovg should use NanoSubWidget) or TopLevelWidget
- widget name must match filename
- must have DISTRHO_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR(ClassName) at the end of its class definition
- filenames must avoid generic terms such as widget
- contain 0 or 1 implementation files, with cpp extension and same basename as the matching hpp file
- optionally contain extra files, directly included from the cpp file
- place any extra files under a directory with the same basename as the cpp file, minus the file extension
- try to be self-contained, not needing externally installed dependencies (besides the locally available extra files defined in the previous point)
- be contained within DGL_NAMESPACE
- have clear documentation specifying its use
- be cross-platform (win32 and posix)
- be liberally licensed (the same way as DPF or with a compatible license allowing commercial use)
Coding style rules yet to be defined.