Skip to content

Commit

Permalink
Update readme
Browse files Browse the repository at this point in the history
  • Loading branch information
Hermann Meyer committed Nov 14, 2021
1 parent a16e13e commit 45b0a8d
Show file tree
Hide file tree
Showing 2 changed files with 13 additions and 12 deletions.
23 changes: 12 additions & 11 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,38 +1,39 @@
# XUiDesigner
Very early draft of a X11 LV2 GUI design tool
A WYSIWYG LV2 X11UI GUI creator tool

![XUiDesigner](https://i.imgur.com/wKA2eqO.gif)

## Goal
Provide a easy to use GUI generator tool to create UI's for LV2 plugins.
Provide a easy to use GUI generator tool to create X11 UI's for LV2 plugins.
Currently only libxputty is supported, but the generated GUI C file could be used probably with other
widget tool-kits as well, just a wrapper file is needed to translate the generated file to the needs of a toolkit.

## Currently state
XUiDesigner could parse the ttl file from a selected plugin and generate the needed controller widgets.
XUiDesigner parse the ttl file from a selected plugin and generate the needed controller widgets.
Supported been the usual lv2:port parameter and as well the new atom based LV2_PATCH__writable and LV2_PATCH__readable
so as LV2_ATOM__Path.
XUiDesigner use the environment variable LV2_PATH to scan for plugins when no path is given with the
-p command-line parameter.
So you could easily create a GUI for a existing plugin.
A integrated Color chooser allow to create a Color theme for your GUI.
The created GUI could be saved as UI-Bundle, which then could be build (just make) and installed (just make install)
to replace or provide a new GUI for the plugin.

Additional control widgets could be created and moved freely around in the top Window, or,
a grid could be displayed and widgets could snap to grid (left, right, Center) to order them easily.
You could as well create a LV2 plugin from scratch and save it as Full Plugin-Bundle to a selected location.
The project settings window allow to setup the specs (like Author name, URI, Audio/Midi ports, etc.) for your plugin
XUIDesigner save the bundle in a git repository format, contain a working LV2 plugin with all needed resources
(ttl files, converted C files from used images, etc.) and build files to build, install and run the new generated plugin.
All you need to do to finish your plug is to implement your DSP part.

Control widgets could be created and moved/resized freely around in the top Window.
A grid could be displayed and widgets could snap to grid (left, right, Center) to order them easily.
Control widgets could be grouped in a frame or a tab box and then the complete group could be moved to the final position in the Window.
Any control widget could be replaced with a other control widget, so for example a Toggle Button could be replaced with a ComboBox,
or a Knob could be replaced with a slider, or . .
You could set the range for a controller, and it's default value, You could create enums for a ComboBox, . .

Most Control widgets could be replaced with images you could select from a included file browser.

You could as well create a LV2 plugin from scratch and save it as Full Plugin-Bundle to a selected location.
The project settings window allow to setup the specs (like Author name, URI, Audio/Midi ports, etc.) for your plugin
XUIDesigner save the bundle in a git repository format, contain a working LV2 plugin with all needed resources
(ttl files, converted C files from used images, etc.) and build files to build, install and run it.
All you need to do to finish your plug is, implement your DSP part.

XUIDesigner have a test-mode as well, which will build and run the created GUI, and give some useful information out in the terminal.

## Currently supported widget types
Expand Down
2 changes: 1 addition & 1 deletion XUiDesigner/XUiImageLoader.c
Original file line number Diff line number Diff line change
Expand Up @@ -328,7 +328,7 @@ void pop_menu_response(void *w_, void* item_, void* user_data) {
designer->controls[designer->active_widget_num].is_type == IS_VSLIDER ||
designer->controls[designer->active_widget_num].is_type == IS_LABEL ||
designer->controls[designer->active_widget_num].is_type == IS_HSLIDER) break;
Widget_t *dia = open_file_dialog(designer->ui, designer->image_path, ".png");
Widget_t *dia = open_file_dialog(designer->ui, designer->image_path, "image");
XSetTransientForHint(designer->ui->app->dpy, dia->widget, designer->ui->widget);
if (designer->controls[designer->active_widget_num].is_type == IS_FRAME ||
designer->controls[designer->active_widget_num].is_type == IS_IMAGE) {
Expand Down

0 comments on commit 45b0a8d

Please sign in to comment.