RE Edit is a free and open source WYSIWYG editor for the UI of a Rack Extension, or in other words, a graphical editor for hdgui_2D.lua
and device_2D.lua
. Although the tool is currently limited to the UI only, it is already extremely useful and depending on feedback, it may be expanded, at a later date, to allow supporting editing ALL configuration files (motherboard_def.lua, display.lua, etc...).
This README is about the project itself not the product. If you want information about how to install and use the product, check the RE Edit product page.
- CMake based Dear ImGui application
- Uses raylib for the ImGui backend
- Uses custom shader for live image editing
- Render to texture for merging raylib + custom shader and ImGui
- Uses Dear ImGui docking branch to allow to dock windows (offer quick way to toggle between horizontal/vertical layouts)
- Clickable, zoomable "panel" where widgets can be freely moved around (100% ImGui code with rendered textures and mouse event handling)
- Uses a "Welcome" window which occupies the entire available space and properly resizes as the (native) window is resized
- Native implementation preference management (load/save preferences as a lua file stored in the "default" preference location per platform)
- Native file browser (integrates btzy/nativefiledialog-extended)
- Remembers location/sizes when the application is closed and reopened
- Remembers the history of previously opened Rack Extensions
- Handle high resolution (4K/retina) on macOS properly (font is rendered super crisp ;) ) as well as resolution change (ex: dragging to a non retina monitor)
- Handle high resolution (4K) on Windows properly (using a scaling factor so that everything looks about right), as well as resolution change (ex: dragging to a low resolution monitor)
- Undo/Redo (Undo is challenging and requires merging events (ex: moving a widget around = one undo entry))
- Native implementation "open URL in browser"
- Native implementation network access (HTTPS GET only)
- Embedded lua parser (used by Rack Extensions as well as preferences for RE Edit)
- Asynchronous texture loading (which works out of the box on macOS/metal but is challenging on Windows/OpenGL3)
- Uses a different font (JetBrains Mono) and FontAwesome (embedded via base85 compressed encoding)
- Uses built-in icons (embedded via base85 compressed encoding)
- The project is a CMake based project and requires CMake 3.24+ to be installed.
- If you want to build the archive on Windows, you must install Wix (v3)
- All other dependencies are fetched automatically
- It successfully builds on macOS 11.7.2/Xcode 13.2.1 (Intel only) as well as macOS 13.0.1/Xcode 14.1 (universal build).
- It successfully builds on Windows 10 with Visual Studio 16 2019 build tools.
Clone this repository and run the following commands.
configure.py
andre-edit.py
are simple (python 3) wrappers aroundcmake
invocation to make it less error-prone and build with the right set of parameters. Each command takes a-n
option to show which actualcmake
command is being invoked (dry-run).- Use
-h
option for help
# will build the macOS app in release mode (-r option)
> ./configure.py -r
> cd build
> ./re-edit.py -r build
# will build the Windows executable in release mode (-r option)
> python3 .\configure.py -r
> cd build
> python3 .\re-edit.py -r build
Feedback and/or suggestions to improve the tool are more than welcomed. Feel free to open a ticket to discuss or contact me.
pongasoft produces a variety of high quality and free/open source software. If you would like to support my work and help offset the cost of development tools, web hosting, etc. here are a couple ways to do so:
- Send money via PayPal
- Sponsor Me on GitHub
- Added support for
device_categories
which was added as a new requirement to Reason 13
- Fixed issue with contrast not being saved
- Added "Commit All Effects", at the widget level as well as at the global level, to be able to remove all
re_edit_*
entries fromdevice_2D.lua
once the effects are applied (permanent/no more undo) - Added concept of notifications to inform the user of important messages
- Fixed instances where RE Edit would generate duplicate names
- Some performance improvements (textures are removed from the GPU when deleted)
- Use a button (rather than a menu) for resizing the panel
- Added "Show Performance" menu entry to always show (resp. hide) the performance
- Added new icons, especially for widget visibility to make it clear that the user has manually changed it
- Fixed "Escape key" closes the application
- Added "light" image editing/effects: resize, tint, brightness, contrast and flip (horizontal and vertical)
- all effects are done live on the GPU
- when the project is saved a new image with the effects applied is generated
device_2D.lua
uses this image so that it works with Render2Ddevice_2D.lua
also stores which original image + effects were used so that when reloaded in RE Edit, it works as well- Check it in action on YouTube
- Added a menu entry "File/Delete unused images" to figure out which images (under GUI2D) are used by the project and which ones are not
- Added a performance menu to tweak the frame rate
- Use
Alt
key to disable most filters (used when selecting images or properties in drop down lists) - Internally, massive refactoring of the code to use raylib as the backend for ImGui:
- much more common code between Windows and macOS
- using custom OpenGL shader (for effects on GPU)
- generate the panel (using raylib + custom shader) into a texture to be rendered as an image in ImGui
- Added ability to drag and drop image(s) (png) from the Finder (resp. File Explorer) onto the main window to import them
- Use grid when adding widgets/decals
- Turned "Add Decal" into a menu showing the list of all graphics (since a decal is nothing more than a graphic)
- Shows the image in Quick View for graphics
- Added Quick View in lists of graphics (menu lists and dropdowns) to easily and quickly be able to pick the right graphic
- Added Help menu: displays the keyboard shortcuts
- Uses re-mock 1.4.3 which means re-edit can be built without depending on the RE SDK
- Added ability to load a project by simply dragging it from the Finder (resp. File Explorer) onto the main window
- Disable saving preferences when there are multiple instances running (to avoid conflicts)
- Fixed visibility property type and owner
- Implemented Undo History / Timeline (quickly undo/redo multiple operations)
- Easily show/hide a widget even if there is no visibility property defined (eye icon)
- Added an "All" widgets tab in the Widgets window (in this tab, widgets are sorted by name). The "Widgets" and "Decals" tab remain the same and are sorted by Z-order (this is where you would go to change their respective orders).
- Major redesign of the "Properties" window to only show visibility properties currently in use
- Implemented "drag and drop" to easily add a widget to a visibility group (use "Alt" key to add to multiple groups): drag a widget from the Widgets window and drop onto a group in the Properties window (drag and drop also works from within the Properties window itself).
- Internal complete redesign of the Undo layer to be more flexible and allow "timeline"
- Implemented Copy/Paste for bulk editing/changes
- You can copy a single widget (copies all attributes), and it can be pasted into:
- any panel where the type of the widget is allowed => duplicates the widget
- another widget => copy all (possible) attributes to the widget
- selected widgets => copy all (possible) attributes to all selected widgets
- You can copy a single widget attribute value, and it can be pasted into:
- another widget => copy this attribute to the widget (if possible)
- selected widgets => copy this attribute to the selected widgets (if possible)
- You can copy the selected widgets, and it can be pasted into:
- any panel where the type of the widgets is allowed => duplicates the widgets
- You can copy a single widget (copies all attributes), and it can be pasted into:
- Removed "Duplicate Widget(s)" menu entry since it is redundant with copy/paste (duplicate only allowed duplication on the same panel, copy/paste does not have this restriction)
- Added Select All/Select By Type menu entries (use
Alt
to include hidden widgets) - Simplified popup menu on Panel (added Widgets submenu instead of multiple menu entries)
- Added "A" keyboard shortcut to toggle between Select All/Select None
- Added "Q" keyboard shortcut to show a Quick View (while the key is being held). Essentially a tooltip on demand:
- When hovering above a widget on the Panel
- When hovering above a widget name in the "Widgets" window
- When hovering above a property path
- When hovering above a graphics attribute
- When hovering above an entry in the "Open Recent" submenu
- Shift + click now also selects the widget under the mouse pointer (no need to move)
- Added more visible error icon in the tab bar
- Moved the notification section up to be sure it is always visible
- Various UI tweaks
- Fixed some issue with Undo/Redo
- Fixed application name on macOS
- Fixed trackpad and mouse wheel sensitivity issue when zooming in/out
- Major redesign of the panel:
- no more scrollbars
- input shortcuts
- click + drag to move freely (or space + click + drag if on top of a widget to disable selecting the widget)
- arrows to move the panel
- mouse wheel to zoom in/out (zoom focus point is wherever the mouse pointer is)
X
to toggle Widget X-RayF
for Zoom to fitC
for Center panelB
to toggle Widget bordersR
to toggle Rails (+ panel X-Ray to see them)
- added "Clear Recent List" menu entry
- fixed crash on redo
- fixed improper error reporting when moving multiple widgets
- Added Fold Icon / Rack Rails (thanks to @jengstrom at Reason Studios for the icons)
- Added Panel rendering (None / Border / Normal / X-Ray) (for example, to see the rails)
- Changed zoom to be common to all panels and added Zoom to Fit (now defaults when device opens)
- Added keyboard shortcuts (Save, Undo/Redo, Zoom In/Out/Fit, Quit)
- Fixes #1: RE Edit fails to load nested decals
- Fixes #2: Decals are not rendered properly
- Some minor performance improvements
- First public release
This project uses the following open source projects (some of them are embedded in this source tree under external
)
- Apache 2.0 License. This project can be used according to the terms of the Apache 2.0 license.