If there’s something that truly represents my devotion to open source, it’s the Elements GUI library. The work was literally 30 years in the making, from my first foray into the world of C++ in the mid- to late ’90s, when I was an engineer in Japan, writing a GUI library named Pica. It was shelved, then resurrected around 2016 and ported to modern C++, and it was first announced in 2019.
Today, Elements reaches a milestone: v1.0. It’s a modern C++ GUI library, declarative, fine-grained and resolution independent. It runs on macOS, Windows and Linux, and draws with Quartz 2D, Direct2D, Cairo or Skia. It doesn’t own the event loop, so it works inside audio plugins as well as in applications. It’s the face of QPlug, Q’s plugin framework: every QPlug editor is built with Elements. It’s open source, under the MIT License.
Docs: https://cycfi.github.io/elements/
Code: https://github.com/cycfi/elements
Modern C++
- A Declarative C++20 DSEL: No Visual Editor, No Code Generator
- Fine-Grained, Composable Elements
- Models That Bind Values to Controls
- MIT License
Cross-Platform and Embeddable
- macOS, Windows and Linux
- Native Hosts: Cocoa, Win32, GTK 3, X11, Wayland, and Headless
- Drawing with Quartz 2D, Direct2D, Cairo or Skia, Through Artist
- Resolution Independent, HiDPI Ready
- Does Not Own the Event Loop: Plug-ins for Audio Hosts
Layout
- Tiles, Grids, Flow, Layers, Decks, Margins and Alignment
- Docking, Splits and Child Windows
Controls
- Buttons, Check Boxes, Radio Buttons and Switches
- Sliders, Dials and Thumbwheels
- Styled Tracks: Gradients, Bands and Glows
- Marks, Labels and Decibel Scales
- Curve Editor and Swatches
Text
- Editable Text: Shaping with HarfBuzz, Clipboard, Undo and Redo
- Input Methods for Japanese and Other Languages
- Labels and Icons
Menus, Popups and Interaction
- Menu Bars, Submenus and Shortcuts
- Popups, Modals and Tooltips
- Drag and Drop
Look and Feel
- Themes and Styles
- A 2D Canvas in the HTML5 Style, Through Artist
Testing and Learning
- Test Without a Display: a Headless Host and a Recording Backend
- Step-by-Step Tutorials and Over 30 Examples
- The Gallery
