aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.gitlab-ci.yml79
-rw-r--r--README.md38
-rw-r--r--VERSION2
-rw-r--r--audio.pngbin0 -> 639 bytes
-rwxr-xr-xdocker_build.sh23
-rwxr-xr-xdocker_run.sh5
-rw-r--r--gitlab-ci/generic.yml106
-rw-r--r--manifest.ttl.in34
-rw-r--r--meson.build141
-rw-r--r--meson_options.txt7
-rw-r--r--midi.pngbin0 -> 1011 bytes
-rw-r--r--nuk.c168
-rw-r--r--nuk.h32
-rw-r--r--nuk.ttl371
-rw-r--r--nuk_ui.c724
-rw-r--r--nuk_ui.ttl32
-rw-r--r--subprojects/nk_pugl/.gitlab-ci.yml77
-rw-r--r--subprojects/nk_pugl/COPYING201
-rw-r--r--subprojects/nk_pugl/VERSION1
-rw-r--r--subprojects/nk_pugl/example/example.c (renamed from example/example.c)0
-rw-r--r--subprojects/nk_pugl/meson.build83
-rw-r--r--subprojects/nk_pugl/meson_options.txt4
-rw-r--r--subprojects/nk_pugl/nk_pugl/nk_pugl.h (renamed from nk_pugl/nk_pugl.h)0
-rw-r--r--subprojects/nk_pugl/nuklear/.gitattributes (renamed from nuklear/.gitattributes)0
-rw-r--r--subprojects/nk_pugl/nuklear/.gitignore (renamed from nuklear/.gitignore)0
-rw-r--r--subprojects/nk_pugl/nuklear/.gitmodules (renamed from nuklear/.gitmodules)0
-rw-r--r--subprojects/nk_pugl/nuklear/.travis.yml (renamed from nuklear/.travis.yml)0
-rw-r--r--subprojects/nk_pugl/nuklear/Readme.md (renamed from nuklear/Readme.md)0
-rw-r--r--subprojects/nk_pugl/nuklear/demo/allegro5/KeyboardHandleriOS.h (renamed from nuklear/demo/allegro5/KeyboardHandleriOS.h)0
-rw-r--r--subprojects/nk_pugl/nuklear/demo/allegro5/KeyboardHandleriOS.m (renamed from nuklear/demo/allegro5/KeyboardHandleriOS.m)0
-rw-r--r--subprojects/nk_pugl/nuklear/demo/allegro5/Makefile (renamed from nuklear/demo/allegro5/Makefile)0
-rw-r--r--subprojects/nk_pugl/nuklear/demo/allegro5/Readme.md (renamed from nuklear/demo/allegro5/Readme.md)0
-rw-r--r--subprojects/nk_pugl/nuklear/demo/allegro5/main.c (renamed from nuklear/demo/allegro5/main.c)0
-rw-r--r--subprojects/nk_pugl/nuklear/demo/allegro5/nuklear_allegro5.h (renamed from nuklear/demo/allegro5/nuklear_allegro5.h)0
-rw-r--r--subprojects/nk_pugl/nuklear/demo/calculator.c (renamed from nuklear/demo/calculator.c)0
-rw-r--r--subprojects/nk_pugl/nuklear/demo/d3d11/build.bat (renamed from nuklear/demo/d3d11/build.bat)0
-rw-r--r--subprojects/nk_pugl/nuklear/demo/d3d11/main.c (renamed from nuklear/demo/d3d11/main.c)0
-rw-r--r--subprojects/nk_pugl/nuklear/demo/d3d11/nuklear_d3d11.h (renamed from nuklear/demo/d3d11/nuklear_d3d11.h)0
-rw-r--r--subprojects/nk_pugl/nuklear/demo/d3d11/nuklear_d3d11.hlsl (renamed from nuklear/demo/d3d11/nuklear_d3d11.hlsl)0
-rw-r--r--subprojects/nk_pugl/nuklear/demo/d3d11/nuklear_d3d11_pixel_shader.h (renamed from nuklear/demo/d3d11/nuklear_d3d11_pixel_shader.h)0
-rw-r--r--subprojects/nk_pugl/nuklear/demo/d3d11/nuklear_d3d11_vertex_shader.h (renamed from nuklear/demo/d3d11/nuklear_d3d11_vertex_shader.h)0
-rw-r--r--subprojects/nk_pugl/nuklear/demo/d3d9/build.bat (renamed from nuklear/demo/d3d9/build.bat)0
-rw-r--r--subprojects/nk_pugl/nuklear/demo/d3d9/main.c (renamed from nuklear/demo/d3d9/main.c)0
-rw-r--r--subprojects/nk_pugl/nuklear/demo/d3d9/nuklear_d3d9.h (renamed from nuklear/demo/d3d9/nuklear_d3d9.h)0
-rw-r--r--subprojects/nk_pugl/nuklear/demo/gdi/build.bat (renamed from nuklear/demo/gdi/build.bat)0
-rw-r--r--subprojects/nk_pugl/nuklear/demo/gdi/main.c (renamed from nuklear/demo/gdi/main.c)0
-rw-r--r--subprojects/nk_pugl/nuklear/demo/gdi/nuklear_gdi.h (renamed from nuklear/demo/gdi/nuklear_gdi.h)0
-rw-r--r--subprojects/nk_pugl/nuklear/demo/gdip/build.bat (renamed from nuklear/demo/gdip/build.bat)0
-rw-r--r--subprojects/nk_pugl/nuklear/demo/gdip/main.c (renamed from nuklear/demo/gdip/main.c)0
-rw-r--r--subprojects/nk_pugl/nuklear/demo/gdip/nuklear_gdip.h (renamed from nuklear/demo/gdip/nuklear_gdip.h)0
-rw-r--r--subprojects/nk_pugl/nuklear/demo/glfw_opengl2/Makefile (renamed from nuklear/demo/glfw_opengl2/Makefile)0
-rw-r--r--subprojects/nk_pugl/nuklear/demo/glfw_opengl2/main.c (renamed from nuklear/demo/glfw_opengl2/main.c)0
-rw-r--r--subprojects/nk_pugl/nuklear/demo/glfw_opengl2/nuklear_glfw_gl2.h (renamed from nuklear/demo/glfw_opengl2/nuklear_glfw_gl2.h)0
-rw-r--r--subprojects/nk_pugl/nuklear/demo/glfw_opengl3/Makefile (renamed from nuklear/demo/glfw_opengl3/Makefile)0
-rw-r--r--subprojects/nk_pugl/nuklear/demo/glfw_opengl3/main.c (renamed from nuklear/demo/glfw_opengl3/main.c)0
-rw-r--r--subprojects/nk_pugl/nuklear/demo/glfw_opengl3/nuklear_glfw_gl3.h (renamed from nuklear/demo/glfw_opengl3/nuklear_glfw_gl3.h)0
-rw-r--r--subprojects/nk_pugl/nuklear/demo/node_editor.c (renamed from nuklear/demo/node_editor.c)0
-rw-r--r--subprojects/nk_pugl/nuklear/demo/overview.c (renamed from nuklear/demo/overview.c)0
-rw-r--r--subprojects/nk_pugl/nuklear/demo/sdl_opengl2/Makefile (renamed from nuklear/demo/sdl_opengl2/Makefile)0
-rw-r--r--subprojects/nk_pugl/nuklear/demo/sdl_opengl2/main.c (renamed from nuklear/demo/sdl_opengl2/main.c)0
-rw-r--r--subprojects/nk_pugl/nuklear/demo/sdl_opengl2/nuklear_sdl_gl2.h (renamed from nuklear/demo/sdl_opengl2/nuklear_sdl_gl2.h)0
-rw-r--r--subprojects/nk_pugl/nuklear/demo/sdl_opengl3/Makefile (renamed from nuklear/demo/sdl_opengl3/Makefile)0
-rw-r--r--subprojects/nk_pugl/nuklear/demo/sdl_opengl3/main.c (renamed from nuklear/demo/sdl_opengl3/main.c)0
-rw-r--r--subprojects/nk_pugl/nuklear/demo/sdl_opengl3/nuklear_sdl_gl3.h (renamed from nuklear/demo/sdl_opengl3/nuklear_sdl_gl3.h)0
-rw-r--r--subprojects/nk_pugl/nuklear/demo/sdl_opengles2/Makefile (renamed from nuklear/demo/sdl_opengles2/Makefile)0
-rw-r--r--subprojects/nk_pugl/nuklear/demo/sdl_opengles2/main.c (renamed from nuklear/demo/sdl_opengles2/main.c)0
-rw-r--r--subprojects/nk_pugl/nuklear/demo/sdl_opengles2/nuklear_sdl_gles2.h (renamed from nuklear/demo/sdl_opengles2/nuklear_sdl_gles2.h)0
-rw-r--r--subprojects/nk_pugl/nuklear/demo/sfml_opengl2/Makefile (renamed from nuklear/demo/sfml_opengl2/Makefile)0
-rw-r--r--subprojects/nk_pugl/nuklear/demo/sfml_opengl2/Readme.md (renamed from nuklear/demo/sfml_opengl2/Readme.md)0
-rw-r--r--subprojects/nk_pugl/nuklear/demo/sfml_opengl2/main.cpp (renamed from nuklear/demo/sfml_opengl2/main.cpp)0
-rw-r--r--subprojects/nk_pugl/nuklear/demo/sfml_opengl2/nuklear_sfml_gl2.h (renamed from nuklear/demo/sfml_opengl2/nuklear_sfml_gl2.h)0
-rw-r--r--subprojects/nk_pugl/nuklear/demo/sfml_opengl3/Makefile (renamed from nuklear/demo/sfml_opengl3/Makefile)0
-rw-r--r--subprojects/nk_pugl/nuklear/demo/sfml_opengl3/Readme.md (renamed from nuklear/demo/sfml_opengl3/Readme.md)0
-rw-r--r--subprojects/nk_pugl/nuklear/demo/sfml_opengl3/main.cpp (renamed from nuklear/demo/sfml_opengl3/main.cpp)0
-rw-r--r--subprojects/nk_pugl/nuklear/demo/sfml_opengl3/nuklear_sfml_gl3.h (renamed from nuklear/demo/sfml_opengl3/nuklear_sfml_gl3.h)0
-rw-r--r--subprojects/nk_pugl/nuklear/demo/style.c (renamed from nuklear/demo/style.c)0
-rw-r--r--subprojects/nk_pugl/nuklear/demo/x11/Makefile (renamed from nuklear/demo/x11/Makefile)0
-rw-r--r--subprojects/nk_pugl/nuklear/demo/x11/main.c (renamed from nuklear/demo/x11/main.c)0
-rw-r--r--subprojects/nk_pugl/nuklear/demo/x11/nuklear_xlib.h (renamed from nuklear/demo/x11/nuklear_xlib.h)0
-rw-r--r--subprojects/nk_pugl/nuklear/demo/x11_opengl2/Makefile (renamed from nuklear/demo/x11_opengl2/Makefile)0
-rw-r--r--subprojects/nk_pugl/nuklear/demo/x11_opengl2/main.c (renamed from nuklear/demo/x11_opengl2/main.c)0
-rw-r--r--subprojects/nk_pugl/nuklear/demo/x11_opengl2/nuklear_xlib_gl2.h (renamed from nuklear/demo/x11_opengl2/nuklear_xlib_gl2.h)0
-rw-r--r--subprojects/nk_pugl/nuklear/demo/x11_opengl3/Makefile (renamed from nuklear/demo/x11_opengl3/Makefile)0
-rw-r--r--subprojects/nk_pugl/nuklear/demo/x11_opengl3/main.c (renamed from nuklear/demo/x11_opengl3/main.c)0
-rw-r--r--subprojects/nk_pugl/nuklear/demo/x11_opengl3/nuklear_xlib_gl3.h (renamed from nuklear/demo/x11_opengl3/nuklear_xlib_gl3.h)0
-rw-r--r--subprojects/nk_pugl/nuklear/demo/x11_rawfb/Makefile (renamed from nuklear/demo/x11_rawfb/Makefile)0
-rw-r--r--subprojects/nk_pugl/nuklear/demo/x11_rawfb/main.c (renamed from nuklear/demo/x11_rawfb/main.c)0
-rw-r--r--subprojects/nk_pugl/nuklear/demo/x11_rawfb/nuklear_rawfb.h (renamed from nuklear/demo/x11_rawfb/nuklear_rawfb.h)0
-rw-r--r--subprojects/nk_pugl/nuklear/demo/x11_rawfb/nuklear_xlib.h (renamed from nuklear/demo/x11_rawfb/nuklear_xlib.h)0
-rw-r--r--subprojects/nk_pugl/nuklear/doc/Makefile (renamed from nuklear/doc/Makefile)0
-rwxr-xr-xsubprojects/nk_pugl/nuklear/doc/build.sh (renamed from nuklear/doc/build.sh)0
-rw-r--r--subprojects/nk_pugl/nuklear/doc/nuklear.html (renamed from nuklear/doc/nuklear.html)0
-rw-r--r--subprojects/nk_pugl/nuklear/doc/stddoc.c (renamed from nuklear/doc/stddoc.c)0
-rw-r--r--subprojects/nk_pugl/nuklear/example/Makefile (renamed from nuklear/example/Makefile)0
-rw-r--r--subprojects/nk_pugl/nuklear/example/canvas.c (renamed from nuklear/example/canvas.c)0
-rw-r--r--subprojects/nk_pugl/nuklear/example/extended.c (renamed from nuklear/example/extended.c)0
-rw-r--r--subprojects/nk_pugl/nuklear/example/file_browser.c (renamed from nuklear/example/file_browser.c)0
-rw-r--r--subprojects/nk_pugl/nuklear/example/icon/checked.png (renamed from nuklear/example/icon/checked.png)bin1813 -> 1813 bytes
-rw-r--r--subprojects/nk_pugl/nuklear/example/icon/cloud.png (renamed from nuklear/example/icon/cloud.png)bin7509 -> 7509 bytes
-rw-r--r--subprojects/nk_pugl/nuklear/example/icon/computer.png (renamed from nuklear/example/icon/computer.png)bin620 -> 620 bytes
-rw-r--r--subprojects/nk_pugl/nuklear/example/icon/copy.png (renamed from nuklear/example/icon/copy.png)bin655 -> 655 bytes
-rw-r--r--subprojects/nk_pugl/nuklear/example/icon/default.png (renamed from nuklear/example/icon/default.png)bin460 -> 460 bytes
-rw-r--r--subprojects/nk_pugl/nuklear/example/icon/delete.png (renamed from nuklear/example/icon/delete.png)bin11040 -> 11040 bytes
-rw-r--r--subprojects/nk_pugl/nuklear/example/icon/desktop.png (renamed from nuklear/example/icon/desktop.png)bin583 -> 583 bytes
-rw-r--r--subprojects/nk_pugl/nuklear/example/icon/directory.png (renamed from nuklear/example/icon/directory.png)bin533 -> 533 bytes
-rw-r--r--subprojects/nk_pugl/nuklear/example/icon/edit.png (renamed from nuklear/example/icon/edit.png)bin14998 -> 14998 bytes
-rw-r--r--subprojects/nk_pugl/nuklear/example/icon/export.png (renamed from nuklear/example/icon/export.png)bin13336 -> 13336 bytes
-rw-r--r--subprojects/nk_pugl/nuklear/example/icon/font.png (renamed from nuklear/example/icon/font.png)bin561 -> 561 bytes
-rw-r--r--subprojects/nk_pugl/nuklear/example/icon/home.png (renamed from nuklear/example/icon/home.png)bin819 -> 819 bytes
-rw-r--r--subprojects/nk_pugl/nuklear/example/icon/img.png (renamed from nuklear/example/icon/img.png)bin648 -> 648 bytes
-rw-r--r--subprojects/nk_pugl/nuklear/example/icon/movie.png (renamed from nuklear/example/icon/movie.png)bin626 -> 626 bytes
-rw-r--r--subprojects/nk_pugl/nuklear/example/icon/music.png (renamed from nuklear/example/icon/music.png)bin610 -> 610 bytes
-rw-r--r--subprojects/nk_pugl/nuklear/example/icon/next.png (renamed from nuklear/example/icon/next.png)bin703 -> 703 bytes
-rw-r--r--subprojects/nk_pugl/nuklear/example/icon/pause.png (renamed from nuklear/example/icon/pause.png)bin1338 -> 1338 bytes
-rw-r--r--subprojects/nk_pugl/nuklear/example/icon/pen.png (renamed from nuklear/example/icon/pen.png)bin5949 -> 5949 bytes
-rw-r--r--subprojects/nk_pugl/nuklear/example/icon/phone.png (renamed from nuklear/example/icon/phone.png)bin15778 -> 15778 bytes
-rw-r--r--subprojects/nk_pugl/nuklear/example/icon/plane.png (renamed from nuklear/example/icon/plane.png)bin13546 -> 13546 bytes
-rw-r--r--subprojects/nk_pugl/nuklear/example/icon/play.png (renamed from nuklear/example/icon/play.png)bin566 -> 566 bytes
-rw-r--r--subprojects/nk_pugl/nuklear/example/icon/prev.png (renamed from nuklear/example/icon/prev.png)bin701 -> 701 bytes
-rw-r--r--subprojects/nk_pugl/nuklear/example/icon/rocket.png (renamed from nuklear/example/icon/rocket.png)bin1121 -> 1121 bytes
-rw-r--r--subprojects/nk_pugl/nuklear/example/icon/settings.png (renamed from nuklear/example/icon/settings.png)bin15671 -> 15671 bytes
-rw-r--r--subprojects/nk_pugl/nuklear/example/icon/stop.png (renamed from nuklear/example/icon/stop.png)bin520 -> 520 bytes
-rw-r--r--subprojects/nk_pugl/nuklear/example/icon/text.png (renamed from nuklear/example/icon/text.png)bin601 -> 601 bytes
-rw-r--r--subprojects/nk_pugl/nuklear/example/icon/tools.png (renamed from nuklear/example/icon/tools.png)bin24483 -> 24483 bytes
-rw-r--r--subprojects/nk_pugl/nuklear/example/icon/unchecked.png (renamed from nuklear/example/icon/unchecked.png)bin1044 -> 1044 bytes
-rw-r--r--subprojects/nk_pugl/nuklear/example/icon/volume.png (renamed from nuklear/example/icon/volume.png)bin25438 -> 25438 bytes
-rw-r--r--subprojects/nk_pugl/nuklear/example/icon/wifi.png (renamed from nuklear/example/icon/wifi.png)bin18857 -> 18857 bytes
-rw-r--r--subprojects/nk_pugl/nuklear/example/images/image1.png (renamed from nuklear/example/images/image1.png)bin42882 -> 42882 bytes
-rw-r--r--subprojects/nk_pugl/nuklear/example/images/image2.png (renamed from nuklear/example/images/image2.png)bin5671 -> 5671 bytes
-rw-r--r--subprojects/nk_pugl/nuklear/example/images/image3.png (renamed from nuklear/example/images/image3.png)bin131502 -> 131502 bytes
-rw-r--r--subprojects/nk_pugl/nuklear/example/images/image4.png (renamed from nuklear/example/images/image4.png)bin185821 -> 185821 bytes
-rw-r--r--subprojects/nk_pugl/nuklear/example/images/image5.png (renamed from nuklear/example/images/image5.png)bin98475 -> 98475 bytes
-rw-r--r--subprojects/nk_pugl/nuklear/example/images/image6.png (renamed from nuklear/example/images/image6.png)bin35633 -> 35633 bytes
-rw-r--r--subprojects/nk_pugl/nuklear/example/images/image7.png (renamed from nuklear/example/images/image7.png)bin13960 -> 13960 bytes
-rw-r--r--subprojects/nk_pugl/nuklear/example/images/image8.png (renamed from nuklear/example/images/image8.png)bin45987 -> 45987 bytes
-rw-r--r--subprojects/nk_pugl/nuklear/example/images/image9.png (renamed from nuklear/example/images/image9.png)bin30759 -> 30759 bytes
-rw-r--r--subprojects/nk_pugl/nuklear/example/skinning.c (renamed from nuklear/example/skinning.c)0
-rw-r--r--subprojects/nk_pugl/nuklear/example/skins/gwen.png (renamed from nuklear/example/skins/gwen.png)bin24565 -> 24565 bytes
-rw-r--r--subprojects/nk_pugl/nuklear/example/stb_image.h (renamed from nuklear/example/stb_image.h)0
-rw-r--r--subprojects/nk_pugl/nuklear/extra_font/Cousine-Regular.ttf (renamed from nuklear/extra_font/Cousine-Regular.ttf)bin43912 -> 43912 bytes
-rw-r--r--subprojects/nk_pugl/nuklear/extra_font/DroidSans.ttf (renamed from nuklear/extra_font/DroidSans.ttf)bin190044 -> 190044 bytes
-rw-r--r--subprojects/nk_pugl/nuklear/extra_font/Karla-Regular.ttf (renamed from nuklear/extra_font/Karla-Regular.ttf)bin16848 -> 16848 bytes
-rw-r--r--subprojects/nk_pugl/nuklear/extra_font/ProggyClean.ttf (renamed from nuklear/extra_font/ProggyClean.ttf)bin41208 -> 41208 bytes
-rw-r--r--subprojects/nk_pugl/nuklear/extra_font/ProggyTiny.ttf (renamed from nuklear/extra_font/ProggyTiny.ttf)bin35656 -> 35656 bytes
-rw-r--r--subprojects/nk_pugl/nuklear/extra_font/Raleway-Bold.ttf (renamed from nuklear/extra_font/Raleway-Bold.ttf)bin176280 -> 176280 bytes
-rw-r--r--subprojects/nk_pugl/nuklear/extra_font/Roboto-Bold.ttf (renamed from nuklear/extra_font/Roboto-Bold.ttf)bin135820 -> 135820 bytes
-rw-r--r--subprojects/nk_pugl/nuklear/extra_font/Roboto-Light.ttf (renamed from nuklear/extra_font/Roboto-Light.ttf)bin140276 -> 140276 bytes
-rw-r--r--subprojects/nk_pugl/nuklear/extra_font/Roboto-Regular.ttf (renamed from nuklear/extra_font/Roboto-Regular.ttf)bin145348 -> 145348 bytes
-rw-r--r--subprojects/nk_pugl/nuklear/extra_font/kenvector_future.ttf (renamed from nuklear/extra_font/kenvector_future.ttf)bin34136 -> 34136 bytes
-rw-r--r--subprojects/nk_pugl/nuklear/extra_font/kenvector_future_thin.ttf (renamed from nuklear/extra_font/kenvector_future_thin.ttf)bin34100 -> 34100 bytes
-rw-r--r--subprojects/nk_pugl/nuklear/nuklear.h (renamed from nuklear/nuklear.h)0
-rw-r--r--subprojects/nk_pugl/nuklear/package.json (renamed from nuklear/package.json)0
-rw-r--r--subprojects/nk_pugl/pugl/.clang-format (renamed from pugl/.clang-format)0
-rw-r--r--subprojects/nk_pugl/pugl/.clang-tidy (renamed from pugl/.clang-tidy)0
-rw-r--r--subprojects/nk_pugl/pugl/.clant.json (renamed from pugl/.clant.json)0
-rw-r--r--subprojects/nk_pugl/pugl/.editorconfig (renamed from pugl/.editorconfig)0
-rw-r--r--subprojects/nk_pugl/pugl/.gitattributes (renamed from pugl/.gitattributes)0
-rw-r--r--subprojects/nk_pugl/pugl/.gitignore (renamed from pugl/.gitignore)0
-rw-r--r--subprojects/nk_pugl/pugl/.gitlab-ci.yml (renamed from pugl/.gitlab-ci.yml)0
-rw-r--r--subprojects/nk_pugl/pugl/.gitmodules (renamed from pugl/.gitmodules)0
-rw-r--r--subprojects/nk_pugl/pugl/.includes.imp (renamed from pugl/.includes.imp)0
-rw-r--r--subprojects/nk_pugl/pugl/AUTHORS (renamed from pugl/AUTHORS)0
-rw-r--r--subprojects/nk_pugl/pugl/COPYING (renamed from pugl/COPYING)0
-rw-r--r--subprojects/nk_pugl/pugl/README.md (renamed from pugl/README.md)0
-rw-r--r--subprojects/nk_pugl/pugl/bindings/cxx/include/.clang-tidy (renamed from pugl/bindings/cxx/include/.clang-tidy)0
-rw-r--r--subprojects/nk_pugl/pugl/bindings/cxx/include/pugl/cairo.hpp (renamed from pugl/bindings/cxx/include/pugl/cairo.hpp)0
-rw-r--r--subprojects/nk_pugl/pugl/bindings/cxx/include/pugl/gl.hpp (renamed from pugl/bindings/cxx/include/pugl/gl.hpp)0
-rw-r--r--subprojects/nk_pugl/pugl/bindings/cxx/include/pugl/pugl.hpp (renamed from pugl/bindings/cxx/include/pugl/pugl.hpp)0
-rw-r--r--subprojects/nk_pugl/pugl/bindings/cxx/include/pugl/stub.hpp (renamed from pugl/bindings/cxx/include/pugl/stub.hpp)0
-rw-r--r--subprojects/nk_pugl/pugl/bindings/cxx/include/pugl/vulkan.hpp (renamed from pugl/bindings/cxx/include/pugl/vulkan.hpp)0
-rw-r--r--subprojects/nk_pugl/pugl/doc/_static/custom.css (renamed from pugl/doc/_static/custom.css)0
-rw-r--r--subprojects/nk_pugl/pugl/doc/_templates/about.html (renamed from pugl/doc/_templates/about.html)0
-rw-r--r--subprojects/nk_pugl/pugl/doc/c/Doxyfile (renamed from pugl/doc/c/Doxyfile)0
-rw-r--r--subprojects/nk_pugl/pugl/doc/c/index.rst (renamed from pugl/doc/c/index.rst)0
-rw-r--r--subprojects/nk_pugl/pugl/doc/c/overview.rst (renamed from pugl/doc/c/overview.rst)0
-rw-r--r--subprojects/nk_pugl/pugl/doc/c/reference.rst (renamed from pugl/doc/c/reference.rst)0
-rw-r--r--subprojects/nk_pugl/pugl/doc/c/wscript (renamed from pugl/doc/c/wscript)0
-rw-r--r--subprojects/nk_pugl/pugl/doc/conf.py.in (renamed from pugl/doc/conf.py.in)0
-rw-r--r--subprojects/nk_pugl/pugl/doc/cpp/Doxyfile (renamed from pugl/doc/cpp/Doxyfile)0
-rw-r--r--subprojects/nk_pugl/pugl/doc/cpp/c-reference.rst (renamed from pugl/doc/cpp/c-reference.rst)0
-rw-r--r--subprojects/nk_pugl/pugl/doc/cpp/cpp-reference.rst (renamed from pugl/doc/cpp/cpp-reference.rst)0
-rw-r--r--subprojects/nk_pugl/pugl/doc/cpp/index.rst (renamed from pugl/doc/cpp/index.rst)0
-rw-r--r--subprojects/nk_pugl/pugl/doc/cpp/overview.rst (renamed from pugl/doc/cpp/overview.rst)0
-rw-r--r--subprojects/nk_pugl/pugl/doc/cpp/wscript (renamed from pugl/doc/cpp/wscript)0
-rw-r--r--subprojects/nk_pugl/pugl/doc/deployment.rst (renamed from pugl/doc/deployment.rst)0
-rw-r--r--subprojects/nk_pugl/pugl/doc/mainpage.md (renamed from pugl/doc/mainpage.md)0
-rw-r--r--subprojects/nk_pugl/pugl/doc/pugl.rst (renamed from pugl/doc/pugl.rst)0
-rw-r--r--subprojects/nk_pugl/pugl/examples/.clang-tidy (renamed from pugl/examples/.clang-tidy)0
-rw-r--r--subprojects/nk_pugl/pugl/examples/cube_view.h (renamed from pugl/examples/cube_view.h)0
-rw-r--r--subprojects/nk_pugl/pugl/examples/demo_utils.h (renamed from pugl/examples/demo_utils.h)0
-rw-r--r--subprojects/nk_pugl/pugl/examples/file_utils.c (renamed from pugl/examples/file_utils.c)0
-rw-r--r--subprojects/nk_pugl/pugl/examples/file_utils.h (renamed from pugl/examples/file_utils.h)0
-rw-r--r--subprojects/nk_pugl/pugl/examples/glad/glad.c (renamed from pugl/examples/glad/glad.c)0
-rw-r--r--subprojects/nk_pugl/pugl/examples/glad/glad.h (renamed from pugl/examples/glad/glad.h)0
-rw-r--r--subprojects/nk_pugl/pugl/examples/glad/khrplatform.h (renamed from pugl/examples/glad/khrplatform.h)0
-rw-r--r--subprojects/nk_pugl/pugl/examples/pugl_cairo_demo.c (renamed from pugl/examples/pugl_cairo_demo.c)0
-rw-r--r--subprojects/nk_pugl/pugl/examples/pugl_cursor_demo.c (renamed from pugl/examples/pugl_cursor_demo.c)0
-rw-r--r--subprojects/nk_pugl/pugl/examples/pugl_cxx_demo.cpp (renamed from pugl/examples/pugl_cxx_demo.cpp)0
-rw-r--r--subprojects/nk_pugl/pugl/examples/pugl_embed_demo.c (renamed from pugl/examples/pugl_embed_demo.c)0
-rw-r--r--subprojects/nk_pugl/pugl/examples/pugl_print_events.c (renamed from pugl/examples/pugl_print_events.c)0
-rw-r--r--subprojects/nk_pugl/pugl/examples/pugl_shader_demo.c (renamed from pugl/examples/pugl_shader_demo.c)0
-rw-r--r--subprojects/nk_pugl/pugl/examples/pugl_vulkan_cxx_demo.cpp (renamed from pugl/examples/pugl_vulkan_cxx_demo.cpp)0
-rw-r--r--subprojects/nk_pugl/pugl/examples/pugl_vulkan_demo.c (renamed from pugl/examples/pugl_vulkan_demo.c)0
-rw-r--r--subprojects/nk_pugl/pugl/examples/pugl_window_demo.c (renamed from pugl/examples/pugl_window_demo.c)0
-rw-r--r--subprojects/nk_pugl/pugl/examples/rects.h (renamed from pugl/examples/rects.h)0
-rw-r--r--subprojects/nk_pugl/pugl/examples/shader_utils.h (renamed from pugl/examples/shader_utils.h)0
-rw-r--r--subprojects/nk_pugl/pugl/examples/shaders/header_330.glsl (renamed from pugl/examples/shaders/header_330.glsl)0
-rw-r--r--subprojects/nk_pugl/pugl/examples/shaders/header_420.glsl (renamed from pugl/examples/shaders/header_420.glsl)0
-rw-r--r--subprojects/nk_pugl/pugl/examples/shaders/rect.frag (renamed from pugl/examples/shaders/rect.frag)0
-rw-r--r--subprojects/nk_pugl/pugl/examples/shaders/rect.vert (renamed from pugl/examples/shaders/rect.vert)0
-rw-r--r--subprojects/nk_pugl/pugl/examples/sybok.hpp (renamed from pugl/examples/sybok.hpp)0
-rw-r--r--subprojects/nk_pugl/pugl/include/.clang-tidy (renamed from pugl/include/.clang-tidy)0
-rw-r--r--subprojects/nk_pugl/pugl/include/pugl/cairo.h (renamed from pugl/include/pugl/cairo.h)0
-rw-r--r--subprojects/nk_pugl/pugl/include/pugl/gl.h (renamed from pugl/include/pugl/gl.h)0
-rw-r--r--subprojects/nk_pugl/pugl/include/pugl/pugl.h (renamed from pugl/include/pugl/pugl.h)0
-rw-r--r--subprojects/nk_pugl/pugl/include/pugl/stub.h (renamed from pugl/include/pugl/stub.h)0
-rw-r--r--subprojects/nk_pugl/pugl/include/pugl/vulkan.h (renamed from pugl/include/pugl/vulkan.h)0
-rw-r--r--subprojects/nk_pugl/pugl/pugl.pc.in (renamed from pugl/pugl.pc.in)0
-rw-r--r--subprojects/nk_pugl/pugl/resources/Info.plist.in (renamed from pugl/resources/Info.plist.in)0
-rw-r--r--subprojects/nk_pugl/pugl/resources/pugl.ipe (renamed from pugl/resources/pugl.ipe)0
-rw-r--r--subprojects/nk_pugl/pugl/resources/pugl.png (renamed from pugl/resources/pugl.png)bin2641 -> 2641 bytes
-rw-r--r--subprojects/nk_pugl/pugl/resources/pugl.svg (renamed from pugl/resources/pugl.svg)0
-rwxr-xr-xsubprojects/nk_pugl/pugl/scripts/dox_to_sphinx.py (renamed from pugl/scripts/dox_to_sphinx.py)0
-rw-r--r--subprojects/nk_pugl/pugl/src/.clang-tidy (renamed from pugl/src/.clang-tidy)0
-rw-r--r--subprojects/nk_pugl/pugl/src/implementation.c (renamed from pugl/src/implementation.c)0
-rw-r--r--subprojects/nk_pugl/pugl/src/implementation.h (renamed from pugl/src/implementation.h)0
-rw-r--r--subprojects/nk_pugl/pugl/src/mac.h (renamed from pugl/src/mac.h)0
-rw-r--r--subprojects/nk_pugl/pugl/src/mac.m (renamed from pugl/src/mac.m)0
-rw-r--r--subprojects/nk_pugl/pugl/src/mac_cairo.m (renamed from pugl/src/mac_cairo.m)0
-rw-r--r--subprojects/nk_pugl/pugl/src/mac_gl.m (renamed from pugl/src/mac_gl.m)0
-rw-r--r--subprojects/nk_pugl/pugl/src/mac_stub.m (renamed from pugl/src/mac_stub.m)0
-rw-r--r--subprojects/nk_pugl/pugl/src/mac_vulkan.m (renamed from pugl/src/mac_vulkan.m)0
-rw-r--r--subprojects/nk_pugl/pugl/src/stub.h (renamed from pugl/src/stub.h)0
-rw-r--r--subprojects/nk_pugl/pugl/src/types.h (renamed from pugl/src/types.h)0
-rw-r--r--subprojects/nk_pugl/pugl/src/win.c (renamed from pugl/src/win.c)0
-rw-r--r--subprojects/nk_pugl/pugl/src/win.h (renamed from pugl/src/win.h)0
-rw-r--r--subprojects/nk_pugl/pugl/src/win_cairo.c (renamed from pugl/src/win_cairo.c)0
-rw-r--r--subprojects/nk_pugl/pugl/src/win_gl.c (renamed from pugl/src/win_gl.c)0
-rw-r--r--subprojects/nk_pugl/pugl/src/win_stub.c (renamed from pugl/src/win_stub.c)0
-rw-r--r--subprojects/nk_pugl/pugl/src/win_vulkan.c (renamed from pugl/src/win_vulkan.c)0
-rw-r--r--subprojects/nk_pugl/pugl/src/x11.c (renamed from pugl/src/x11.c)0
-rw-r--r--subprojects/nk_pugl/pugl/src/x11.h (renamed from pugl/src/x11.h)0
-rw-r--r--subprojects/nk_pugl/pugl/src/x11_cairo.c (renamed from pugl/src/x11_cairo.c)0
-rw-r--r--subprojects/nk_pugl/pugl/src/x11_gl.c (renamed from pugl/src/x11_gl.c)0
-rw-r--r--subprojects/nk_pugl/pugl/src/x11_stub.c (renamed from pugl/src/x11_stub.c)0
-rw-r--r--subprojects/nk_pugl/pugl/src/x11_vulkan.c (renamed from pugl/src/x11_vulkan.c)0
-rw-r--r--subprojects/nk_pugl/pugl/test/.clang-tidy (renamed from pugl/test/.clang-tidy)0
-rw-r--r--subprojects/nk_pugl/pugl/test/test_build.c (renamed from pugl/test/test_build.c)0
-rw-r--r--subprojects/nk_pugl/pugl/test/test_build.cpp (renamed from pugl/test/test_build.cpp)0
-rw-r--r--subprojects/nk_pugl/pugl/test/test_clipboard.c (renamed from pugl/test/test_clipboard.c)0
-rw-r--r--subprojects/nk_pugl/pugl/test/test_gl_hints.c (renamed from pugl/test/test_gl_hints.c)0
-rw-r--r--subprojects/nk_pugl/pugl/test/test_realize.c (renamed from pugl/test/test_realize.c)0
-rw-r--r--subprojects/nk_pugl/pugl/test/test_redisplay.c (renamed from pugl/test/test_redisplay.c)0
-rw-r--r--subprojects/nk_pugl/pugl/test/test_show_hide.c (renamed from pugl/test/test_show_hide.c)0
-rw-r--r--subprojects/nk_pugl/pugl/test/test_stub_hints.c (renamed from pugl/test/test_stub_hints.c)0
-rw-r--r--subprojects/nk_pugl/pugl/test/test_timer.c (renamed from pugl/test/test_timer.c)0
-rw-r--r--subprojects/nk_pugl/pugl/test/test_update.c (renamed from pugl/test/test_update.c)0
-rw-r--r--subprojects/nk_pugl/pugl/test/test_utils.h (renamed from pugl/test/test_utils.h)0
-rwxr-xr-xsubprojects/nk_pugl/pugl/waf (renamed from pugl/waf)0
-rw-r--r--subprojects/nk_pugl/pugl/wscript (renamed from pugl/wscript)0
260 files changed, 1994 insertions, 134 deletions
diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 62aa6f8..979769c 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -1,77 +1,2 @@
-stages:
- - build
- - deploy
-
-.variables_template: &variables_definition
- variables:
- BASE_NAME: "nk_pugl"
- PKG_CONFIG_PATH: "/opt/lv2/lib/pkgconfig:/opt/${CI_BUILD_NAME}/lib/pkgconfig:/usr/lib/${CI_BUILD_NAME}/pkgconfig"
-
-.common_template: &common_definition
- <<: *variables_definition
- stage: build
- artifacts:
- name: "${BASE_NAME}-$(cat VERSION)-${CI_BUILD_NAME}"
- paths:
- - "${BASE_NAME}-$(cat VERSION)/"
-
-.build_template: &build_definition
- <<: *common_definition
- script:
- - meson -Dbuild-examples=true --prefix="/" --libdir="lib" --cross-file "${CI_BUILD_NAME}" build
- - sed -i -e '/framework/s/-Wl,-O1//g' -e '/framework/s/-Wl,--start-group//g' -e '/framework/s/-Wl,--end-group//g' build/build.ninja
- - ninja -C build
- - DESTDIR="${CI_PROJECT_DIR}/${BASE_NAME}-$(cat VERSION)/${CI_BUILD_NAME}" ninja -C build install
-
-.analyze_template: &analyze_definition
- <<: *common_definition
- script:
- - meson -Dbuild-examples=true --prefix="/" --libdir="lib" --cross-file "${CI_BUILD_NAME}" build
- - sed -i -e '/framework/s/-Wl,-O1//g' -e '/framework/s/-Wl,--start-group//g' -e '/framework/s/-Wl,--end-group//g' build/build.ninja
- - ninja -C build
- - DESTDIR="${CI_PROJECT_DIR}/${BASE_NAME}-$(cat VERSION)/${CI_BUILD_NAME}" ninja -C build install
-
- - CC=clang CXX=clang++ meson -Dbuild-examples=true --prefix="/" --libdir="lib" --cross-file "${CI_BUILD_NAME}" clang
- - ninja -C clang
-
- - scan-build --status-bugs meson -Dbuild-examples=true --prefix="/" --libdir="lib" --cross-file "${CI_BUILD_NAME}" scanbuild
- - scan-build --status-bugs ninja -C scanbuild
-
-.universal_linux_template: &universal_linux_definition
- image: ventosus/universal-linux-gnu
- <<: *analyze_definition
-
-.arm_linux_template: &arm_linux_definition
- image: ventosus/arm-linux-gnueabihf
- <<: *build_definition
-
-# building in docker
-x86_64-linux-gnu:
- before_script:
- - apt-get install -y libglu1-mesa-dev libevdev-dev
- <<: *universal_linux_definition
-
-i686-linux-gnu:
- before_script:
- - apt-get install -y libglu1-mesa-dev:i386 libevdev-dev:i386
- <<: *universal_linux_definition
-
-arm-linux-gnueabihf:
- before_script:
- - apt-get install -y libglu1-mesa-dev:armhf libevdev-dev:armhf
- <<: *arm_linux_definition
-
-aarch64-linux-gnu:
- before_script:
- - apt-get install -y libglu1-mesa-dev:arm64 libevdev-dev:arm64
- <<: *arm_linux_definition
-
-pack:
- <<: *variables_definition
- stage: deploy
- script:
- - echo 'packing up...'
- artifacts:
- name: "${BASE_NAME}-$(cat VERSION)"
- paths:
- - "${BASE_NAME}-$(cat VERSION)/"
+include:
+ - local: 'gitlab-ci/generic.yml'
diff --git a/README.md b/README.md
new file mode 100644
index 0000000..f3b2ee2
--- /dev/null
+++ b/README.md
@@ -0,0 +1,38 @@
+# nuk.lv2
+
+## Example LV2 plugin bundle for the nuklear GUI
+
+
+### Build status
+
+[![build status](https://gitlab.com/OpenMusicKontrollers/nuk.lv2/badges/master/build.svg)](https://gitlab.com/OpenMusicKontrollers/nuk.lv2/commits/master)
+
+### Dependencies
+
+* [LV2](http://lv2plug.in) (LV2 Plugin Standard)
+
+### Build / install
+
+ git clone https://git.open-music-kontrollers.ch/lv2//nuk.lv2.git
+ cd nuk.lv2
+ meson build
+ cd build
+ ninja -j4
+ sudo ninja install
+
+### License
+
+Copyright (c) 2016 Hanspeter Portner (dev@open-music-kontrollers.ch)
+
+This is free software: you can redistribute it and/or modify
+it under the terms of the Artistic License 2.0 as published by
+The Perl Foundation.
+
+This source is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+Artistic License 2.0 for more details.
+
+You should have received a copy of the Artistic License 2.0
+along the source as a COPYING file. If not, obtain it from
+<http://www.perlfoundation.org/artistic_license_2_0>.
diff --git a/VERSION b/VERSION
index d3bfa59..e19092c 100644
--- a/VERSION
+++ b/VERSION
@@ -1 +1 @@
-0.1.173
+0.1.3009
diff --git a/audio.png b/audio.png
new file mode 100644
index 0000000..c244fee
--- /dev/null
+++ b/audio.png
Binary files differ
diff --git a/docker_build.sh b/docker_build.sh
new file mode 100755
index 0000000..0078b21
--- /dev/null
+++ b/docker_build.sh
@@ -0,0 +1,23 @@
+#!/bin/bash
+
+BASE_NAME="nuk.lv2"
+CI_BUILD_NAME=$1
+CI_BUILD_DIR="build-${CI_BUILD_NAME}"
+
+PKG_CONFIG_PATH="/opt/lv2/lib/pkgconfig:/opt/${CI_BUILD_NAME}/lib/pkgconfig:/usr/lib/${CI_BUILD_NAME}/pkgconfig"
+
+rm -rf ${CI_BUILD_DIR}
+PKG_CONFIG_PATH=${PKG_CONFIG_PATH} meson \
+ --prefix="/opt/${CI_BUILD_NAME}" \
+ --libdir="lib" \
+ --cross-file ${CI_BUILD_NAME} ${CI_BUILD_DIR} \
+ -Db_lto=false -Db_lundef=true -Db_asneeded=true
+
+sed -i \
+ -e '/framework/s/-Wl,-O1//g' \
+ -e '/framework/s/-Wl,--start-group//g' \
+ -e '/framework/s/-Wl,--end-group//g' \
+ -e '/framework/s/-Wl,-soname,.*dylib//g' \
+ ${CI_BUILD_DIR}/build.ninja
+
+ninja -C ${CI_BUILD_DIR}
diff --git a/docker_run.sh b/docker_run.sh
new file mode 100755
index 0000000..b79ca0d
--- /dev/null
+++ b/docker_run.sh
@@ -0,0 +1,5 @@
+#!/usr/bin/bash
+
+TARGET=$1
+
+docker run --rm -it -v $(pwd):/workdir/nuk.lv2 ventosus/${TARGET}
diff --git a/gitlab-ci/generic.yml b/gitlab-ci/generic.yml
new file mode 100644
index 0000000..5cd2abc
--- /dev/null
+++ b/gitlab-ci/generic.yml
@@ -0,0 +1,106 @@
+stages:
+ - build
+ - deploy
+
+variables:
+ PKG_CONFIG_PATH: "/opt/lv2/lib/pkgconfig:/opt/${CI_BUILD_NAME}/lib/pkgconfig:/usr/lib/${CI_BUILD_NAME}/pkgconfig"
+ BUILD_OPTS : ""
+
+.native_template: &native_definition
+ stage: build
+ script:
+ - meson --prefix="${CI_PROJECT_DIR}/${CI_PROJECT_NAME}-$(cat VERSION)/${CI_BUILD_NAME}" -Dlv2libdir="" --cross-file "${CI_BUILD_NAME}" ${BUILD_OPTS} build
+ - ninja -C build
+ - ninja -C build test
+ - ninja -C build install
+
+ - scan-build --status-bugs meson --prefix="${CI_PROJECT_DIR}/${CI_PROJECT_NAME}-$(cat VERSION)/${CI_BUILD_NAME}" -Dlv2libdir="" --cross-file "${CI_BUILD_NAME}" ${BUILD_OPTS} scanbuild
+ - scan-build --status-bugs ninja -C scanbuild
+ - scan-build --status-bugs ninja -C scanbuild test
+ artifacts:
+ name: "${CI_PROJECT_NAME}-$(cat VERSION)-${CI_BUILD_NAME}"
+ paths:
+ - "${CI_PROJECT_NAME}-$(cat VERSION)/${CI_BUILD_NAME}/"
+
+.cross_template: &cross_definition
+ stage: build
+ script:
+ - meson --prefix="${CI_PROJECT_DIR}/${CI_PROJECT_NAME}-$(cat VERSION)/${CI_BUILD_NAME}" -Dlv2libdir="" --cross-file "${CI_BUILD_NAME}" ${BUILD_OPTS} build
+ - ninja -C build
+ - ninja -C build test
+ - ninja -C build install
+ artifacts:
+ name: "${CI_PROJECT_NAME}-$(cat VERSION)-${CI_BUILD_NAME}"
+ paths:
+ - "${CI_PROJECT_NAME}-$(cat VERSION)/${CI_BUILD_NAME}/"
+
+# build
+.universal_linux_template_stretch: &universal_linux_definition_stretch
+ image: ventosus/universal-linux-gnu:stretch
+ <<: *cross_definition
+
+.universal_linux_template_buster: &universal_linux_definition_buster
+ image: ventosus/universal-linux-gnu:buster
+ <<: *native_definition
+
+.universal_linux_template_bullseye: &universal_linux_definition_bullseye
+ image: ventosus/universal-linux-gnu:bullseye
+ <<: *native_definition
+
+.arm_linux_template_stretch: &arm_linux_definition_stretch
+ image: ventosus/arm-linux-gnueabihf:stretch
+ <<: *cross_definition
+
+.arm_linux_template_buster: &arm_linux_definition_buster
+ image: ventosus/arm-linux-gnueabihf:buster
+ <<: *cross_definition
+
+.arm_linux_template_bullseye: &arm_linux_definition_bullseye
+ image: ventosus/arm-linux-gnueabihf:bullseye
+ <<: *cross_definition
+
+# build
+x86_64-linux-gnu-stretch:
+ <<: *universal_linux_definition_stretch
+
+x86_64-linux-gnu-buster:
+ <<: *universal_linux_definition_buster
+
+x86_64-linux-gnu-bullseye:
+ <<: *universal_linux_definition_bullseye
+
+i686-linux-gnu-stretch:
+ <<: *universal_linux_definition_stretch
+
+i686-linux-gnu-buster:
+ <<: *universal_linux_definition_buster
+
+i686-linux-gnu-bullseye:
+ <<: *universal_linux_definition_bullseye
+
+arm-linux-gnueabihf-stretch:
+ <<: *arm_linux_definition_stretch
+
+arm-linux-gnueabihf-buster:
+ <<: *arm_linux_definition_buster
+
+arm-linux-gnueabihf-bullseye:
+ <<: *arm_linux_definition_bullseye
+
+aarch64-linux-gnu-stretch:
+ <<: *arm_linux_definition_stretch
+
+aarch64-linux-gnu-buster:
+ <<: *arm_linux_definition_buster
+
+aarch64-linux-gnu-bullseye:
+ <<: *arm_linux_definition_bullseye
+
+pack:
+ stage: deploy
+ script:
+ - echo 'packing up'
+ artifacts:
+ name: "${CI_PROJECT_NAME}-$(cat VERSION)"
+ paths:
+ - "${CI_PROJECT_NAME}-$(cat VERSION)/"
diff --git a/manifest.ttl.in b/manifest.ttl.in
new file mode 100644
index 0000000..4f50e95
--- /dev/null
+++ b/manifest.ttl.in
@@ -0,0 +1,34 @@
+# Copyright (c) 2016 Hanspeter Portner (dev@open-music-kontrollers.ch)
+#
+# This is free software: you can redistribute it and/or modify
+# it under the terms of the Artistic License 2.0 as published by
+# The Perl Foundation.
+#
+# This source is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# Artistic License 2.0 for more details.
+#
+# You should have received a copy of the Artistic License 2.0
+# along the source as a COPYING file. If not, obtain it from
+# http://www.perlfoundation.org/artistic_license_2_0.
+
+@prefix lv2: <http://lv2plug.in/ns/lv2core#> .
+@prefix owl: <http://www.w3.org/2002/07/owl#> .
+@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
+@prefix ui: <http://lv2plug.in/ns/extensions/ui#> .
+
+@prefix nuk: <http://open-music-kontrollers.ch/lv2/nuk#> .
+
+nuk:nuk
+ a lv2:Plugin ;
+ lv2:minorVersion @MINOR_VERSION@ ;
+ lv2:microVersion @MICRO_VERSION@ ;
+ lv2:binary <nuk@MODULE_SUFFIX@> ;
+ ui:ui nuk:nuk_ui ;
+ rdfs:seeAlso <nuk.ttl> .
+
+nuk:nuk_ui
+ a ui:@UI_TYPE@ ;
+ ui:binary <nuk_ui@MODULE_SUFFIX@> ;
+ rdfs:seeAlso <nuk_ui.ttl> .
diff --git a/meson.build b/meson.build
index 19b855f..9c0ebaa 100644
--- a/meson.build
+++ b/meson.build
@@ -1,83 +1,120 @@
-project('nk_pugl', 'c', default_options : [
+project('nuk.lv2', 'c', default_options : [
'buildtype=release',
'warning_level=3',
'werror=false',
'b_lto=false',
'c_std=gnu11'])
-build_examples = get_option('build-examples')
+nk_pugl = subproject('nk_pugl')
-static_link = false #meson.is_cross_build()
+lv2libdir = get_option('lv2libdir')
+
+inst_dir = join_paths(lv2libdir, meson.project_name())
+
+nk_pugl_dep = nk_pugl.get_variable('nk_pugl_gl')
+cousine_regular_ttf = nk_pugl.get_variable('cousine_regular_ttf')
+
+source_root = meson.source_root()
+build_root = meson.build_root()
+
+static_link = meson.is_cross_build()
cc = meson.get_compiler('c')
m_dep = cc.find_library('m')
-lv2_dep = dependency('lv2',
- version : '>=1.14.0')
-glew_dep = dependency('glew',
- version : '>=2.0.0',
- static : static_link)
-glu_dep = dependency('glu',
- version : '>=9.0.0',
- static : static_link)
+lv2_dep = dependency('lv2', version : '>=1.14.0')
-deps = [m_dep, lv2_dep, glu_dep, glew_dep]
-links = []
+dsp_deps = [m_dep, lv2_dep]
+ui_deps = [m_dep, lv2_dep, nk_pugl_dep]
-pugl_inc = include_directories(join_paths('pugl', 'include'))
-inc_dir = [pugl_inc]
+nk_pugl_inc = include_directories(join_paths('subprojects', 'nk_pugl'))
+inc_dir = [nk_pugl_inc]
+rawvers = run_command('cat', 'VERSION').stdout().strip()
+version = rawvers.split('.')
+
+conf_data = configuration_data()
+conf_data.set('MAJOR_VERSION', version[0])
+conf_data.set('MINOR_VERSION', version[1])
+conf_data.set('MICRO_VERSION', version[2])
+
+add_project_arguments('-DNUK_VERSION="'+rawvers+'"', language : 'c')
add_project_arguments('-D_GNU_SOURCE', language : 'c')
-bin_srcs = [
- join_paths('example', 'example.c')
-]
+lv2_validate = find_program('lv2_validate', native : true, required : false)
+sord_validate = find_program('sord_validate', native : true, required : false)
+lv2lint = find_program('lv2lint', required : false)
-lib_srcs = [
- join_paths('pugl', 'src', 'implementation.c')
-]
+dsp_srcs = ['nuk.c']
-c_args = ['-fvisibility=hidden',
- '-ffast-math']
+ui_srcs = ['nuk_ui.c']
+
+c_args = [
+ '-fvisibility=hidden']
if host_machine.system() == 'windows'
- deps += cc.find_library('opengl32')
- deps += cc.find_library('gdi32')
- deps += cc.find_library('ws2_32')
- lib_srcs += join_paths('pugl', 'src', 'win.c')
- lib_srcs += join_paths('pugl', 'src', 'win_gl.c')
+ conf_data.set('UI_TYPE', 'WindowsUI')
elif host_machine.system() == 'darwin'
- add_languages('objc')
- links += ['-framework', 'OpenGL']
- links += ['-framework', 'Cocoa']
- lib_srcs += join_paths('pugl', 'src', 'mac.m')
- lib_srcs += join_paths('pugl', 'src', 'mac_gl.m')
+ conf_data.set('UI_TYPE', 'CocoaUI')
else
- deps += dependency('gl')
- deps += dependency('x11', version : '>=1.6.0')
- deps += dependency('xext', version : '>=1.3.0')
- lib_srcs += join_paths('pugl', 'src', 'x11.c')
- lib_srcs += join_paths('pugl', 'src', 'x11_gl.c')
+ conf_data.set('UI_TYPE', 'X11UI')
endif
-nk_pugl_gl = declare_dependency(
- compile_args : ['-DPUGL_STATIC'],
+mod = shared_module('nuk', dsp_srcs,
+ c_args : c_args,
+ include_directories : inc_dir,
+ name_prefix : '',
+ dependencies : dsp_deps,
+ install : true,
+ install_dir : inst_dir)
+
+ui = shared_module('nuk_ui', ui_srcs,
+ c_args : c_args,
include_directories : inc_dir,
- dependencies : deps,
- link_args : links,
- sources : lib_srcs)
+ name_prefix : '',
+ dependencies : ui_deps,
+ install : true,
+ install_dir : inst_dir)
+
+suffix = mod.full_path().strip().split('.')[-1]
+conf_data.set('MODULE_SUFFIX', '.' + suffix)
+
+manifest_ttl = configure_file(
+ input : 'manifest.ttl.in',
+ output : 'manifest.ttl',
+ configuration : conf_data,
+ install : true,
+ install_dir : inst_dir)
+
+dsp_ttl = configure_file(
+ input : 'nuk.ttl',
+ output : 'nuk.ttl',
+ copy : true,
+ install : true,
+ install_dir : inst_dir)
+
+ui_ttl = configure_file(
+ input : 'nuk_ui.ttl',
+ output : 'nuk_ui.ttl',
+ copy : true,
+ install : true,
+ install_dir : inst_dir)
-cousine_regular_ttf = configure_file(
- input : join_paths('nuklear', 'extra_font', 'Cousine-Regular.ttf'),
+configure_file(
+ input : cousine_regular_ttf,
output : 'Cousine-Regular.ttf',
copy : true,
- install : false)
+ install : true,
+ install_dir : inst_dir)
-if build_examples
+if lv2_validate.found() and sord_validate.found()
+ test('LV2 validate', lv2_validate,
+ args : [manifest_ttl, dsp_ttl, ui_ttl])
+endif
- executable('nk_pugl.gl', [bin_srcs],
- c_args : c_args,
- include_directories : inc_dir,
- dependencies: nk_pugl_gl,
- install : false)
+if lv2lint.found()
+ test('LV2 lint', lv2lint,
+ args : ['-I', join_paths(build_root, ''),
+ '-Ewarn',
+ 'http://open-music-kontrollers.ch/lv2/nuk#nuk'])
endif
diff --git a/meson_options.txt b/meson_options.txt
index 0a4a2a9..8a007bd 100644
--- a/meson_options.txt
+++ b/meson_options.txt
@@ -1,4 +1,3 @@
-option('build-examples',
- type : 'boolean',
- value : false,
- yield : true)
+option('lv2libdir',
+ type : 'string',
+ value : 'lib/lv2')
diff --git a/midi.png b/midi.png
new file mode 100644
index 0000000..57d188c
--- /dev/null
+++ b/midi.png
Binary files differ
diff --git a/nuk.c b/nuk.c
new file mode 100644
index 0000000..ff7d9a0
--- /dev/null
+++ b/nuk.c
@@ -0,0 +1,168 @@
+/*
+ * Copyright (c) 2016 Hanspeter Portner (dev@open-music-kontrollers.ch)
+ *
+ * This is free software: you can redistribute it and/or modify
+ * it under the terms of the Artistic License 2.0 as published by
+ * The Perl Foundation.
+ *
+ * This source is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * Artistic License 2.0 for more details.
+ *
+ * You should have received a copy of the Artistic License 2.0
+ * along the source as a COPYING file. If not, obtain it from
+ * http://www.perlfoundation.org/artistic_license_2_0.
+ */
+
+#include <stdlib.h>
+#include <math.h>
+
+#include <nuk.h>
+
+#define CONTROL_N 16
+
+typedef struct _plughandle_t plughandle_t;
+
+struct _plughandle_t {
+ LV2_URID_Map *map;
+ LV2_Atom_Forge forge;
+
+ LV2_Log_Log *log;
+ LV2_Log_Logger logger;
+
+ const LV2_Atom_Sequence *control;
+ LV2_Atom_Sequence *notify;
+
+ int32_t *toggle [CONTROL_N];
+ float *cntrl [CONTROL_N];
+ int32_t *radio;
+};
+
+static LV2_Handle
+instantiate(const LV2_Descriptor* descriptor, double rate __attribute__((unused)),
+ const char *bundle_path __attribute__((unused)),
+ const LV2_Feature *const *features)
+{
+ plughandle_t *handle = calloc(1, sizeof(plughandle_t));
+ if(!handle)
+ return NULL;
+
+ for(unsigned i=0; features[i]; i++)
+ {
+ if(!strcmp(features[i]->URI, LV2_URID__map))
+ handle->map = features[i]->data;
+ else if(!strcmp(features[i]->URI, LV2_LOG__log))
+ handle->log = features[i]->data;
+ }
+
+ if(!handle->map)
+ {
+ fprintf(stderr,
+ "%s: Host does not support urid:map\n", descriptor->URI);
+ free(handle);
+ return NULL;
+ }
+
+ if(handle->log)
+ lv2_log_logger_init(&handle->logger, handle->map, handle->log);
+
+ lv2_atom_forge_init(&handle->forge, handle->map);
+
+ return handle;
+}
+
+static void
+connect_port(LV2_Handle instance, uint32_t port, void *data)
+{
+ plughandle_t *handle = instance;
+
+ switch(port)
+ {
+ case 0:
+ handle->control = data;
+ break;
+ case 1:
+ handle->notify = data;
+ break;
+ case 2:
+ case 3:
+ case 4:
+ case 5:
+ case 6:
+ case 7:
+ case 8:
+ case 9:
+ case 10:
+ case 11:
+ case 12:
+ case 13:
+ case 14:
+ case 15:
+ case 16:
+ case 17:
+ handle->toggle[port - 2] = data;
+ break;
+ case 18:
+ case 19:
+ case 20:
+ case 21:
+ case 22:
+ case 23:
+ case 24:
+ case 25:
+ case 26:
+ case 27:
+ case 28:
+ case 29:
+ case 30:
+ case 31:
+ case 32:
+ case 33:
+ handle->cntrl[port - CONTROL_N - 2] = data;
+ break;
+ case 34:
+ handle->radio = data;
+ break;
+ }
+}
+
+static void
+run(LV2_Handle instance, uint32_t nsamples __attribute__((unused)))
+{
+ plughandle_t *handle = instance;
+
+ const uint32_t sz = lv2_atom_total_size(&handle->control->atom);
+ memcpy(handle->notify, handle->control, sz);
+}
+
+static void
+cleanup(LV2_Handle instance)
+{
+ plughandle_t *handle = instance;
+
+ free(handle);
+}
+
+static const LV2_Descriptor nuk_nuk = {
+ .URI = NUK_PREFIX"nuk",
+ .instantiate = instantiate,
+ .connect_port = connect_port,
+ .activate = NULL,
+ .run = run,
+ .deactivate = NULL,
+ .cleanup = cleanup,
+ .extension_data = NULL
+};
+
+LV2_SYMBOL_EXPORT const LV2_Descriptor*
+lv2_descriptor(uint32_t index)
+{
+ switch(index)
+ {
+ case 0:
+ return &nuk_nuk;
+ default:
+ return NULL;
+ }
+}
diff --git a/nuk.h b/nuk.h
new file mode 100644
index 0000000..f2c31d5
--- /dev/null
+++ b/nuk.h
@@ -0,0 +1,32 @@
+/*
+ * Copyright (c) 2016 Hanspeter Portner (dev@open-music-kontrollers.ch)
+ *
+ * This is free software: you can redistribute it and/or modify
+ * it under the terms of the Artistic License 2.0 as published by
+ * The Perl Foundation.
+ *
+ * This source is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * Artistic License 2.0 for more details.
+ *
+ * You should have received a copy of the Artistic License 2.0
+ * along the source as a COPYING file. If not, obtain it from
+ * http://www.perlfoundation.org/artistic_license_2_0.
+ */
+
+#ifndef _NUK_LV2_H
+#define _NUK_LV2_H
+
+#include "lv2/lv2plug.in/ns/ext/atom/atom.h"
+#include "lv2/lv2plug.in/ns/ext/atom/forge.h"
+#include "lv2/lv2plug.in/ns/ext/log/log.h"
+#include "lv2/lv2plug.in/ns/ext/log/logger.h"
+#include "lv2/lv2plug.in/ns/ext/patch/patch.h"
+#include "lv2/lv2plug.in/ns/extensions/ui/ui.h"
+#include "lv2/lv2plug.in/ns/lv2core/lv2.h"
+
+#define NUK_URI "http://open-music-kontrollers.ch/lv2/nuk"
+#define NUK_PREFIX NUK_URI"#"
+
+#endif // _NUK_LV2_H
diff --git a/nuk.ttl b/nuk.ttl
new file mode 100644
index 0000000..58d643d
--- /dev/null
+++ b/nuk.ttl
@@ -0,0 +1,371 @@
+# Copyright (c) 2016 Hanspeter Portner (dev@open-music-kontrollers.ch)
+#
+# This is free software: you can redistribute it and/or modify
+# it under the terms of the Artistic License 2.0 as published by
+# The Perl Foundation.
+#
+# This source is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# Artistic License 2.0 for more details.
+#
+# You should have received a copy of the Artistic License 2.0
+# along the source as a COPYING file. If not, obtain it from
+# http://www.perlfoundation.org/artistic_license_2_0.
+
+@prefix foaf: <http://xmlns.com/foaf/0.1/> .
+@prefix doap: <http://usefulinc.com/ns/doap#> .
+@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
+@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
+@prefix lv2: <http://lv2plug.in/ns/lv2core#> .
+@prefix atom: <http://lv2plug.in/ns/ext/atom#> .
+@prefix urid: <http://lv2plug.in/ns/ext/urid#> .
+@prefix log: <http://lv2plug.in/ns/ext/log#> .
+@prefix midi: <http://lv2plug.in/ns/ext/midi#> .
+
+@prefix omk: <http://open-music-kontrollers.ch/ventosus#> .
+@prefix proj: <http://open-music-kontrollers.ch/lv2/> .
+@prefix nuk: <http://open-music-kontrollers.ch/lv2/nuk#> .
+
+# Maintainer
+omk:me
+ a foaf:Person ;
+ foaf:name "Hanspeter Portner" ;
+ foaf:mbox <mailto:dev@open-music-kontrollers.ch> ;
+ foaf:homepage <http://open-music-kontrollers.ch> .
+
+# Project
+proj:nuk
+ a doap:Project ;
+ doap:maintainer omk:me ;
+ doap:name "Nuk Bundle" .
+
+# Plugin
+nuk:nuk
+ a lv2:Plugin,
+ lv2:AnalyserPlugin ;
+ doap:name "Nuk" ;
+ doap:license <https://spdx.org/licenses/Artistic-2.0> ;
+ lv2:project proj:nuk ;
+ lv2:requiredFeature urid:map ;
+ lv2:optionalFeature lv2:isLive, lv2:hardRTCapable, log:log ;
+
+ lv2:port [
+ a lv2:InputPort ,
+ atom:AtomPort ;
+ atom:bufferType atom:Sequence ;
+ atom:supports midi:MidiEvent ;
+ lv2:index 0 ;
+ lv2:symbol "control" ;
+ lv2:name "Control" ;
+ lv2:designation lv2:control ;
+ ] , [
+ a lv2:OutputPort ,
+ atom:AtomPort ;
+ atom:bufferType atom:Sequence ;
+ atom:supports midi:MidiEvent ;
+ lv2:index 1 ;
+ lv2:symbol "notify" ;
+ lv2:name "Notify" ;
+ lv2:default 0 ;
+ lv2:designation lv2:control ;
+ ] , [
+ a lv2:InputPort ,
+ lv2:ControlPort ;
+ lv2:index 2 ;
+ lv2:symbol "toggled_1" ;
+ lv2:name "Toggle 1" ;
+ lv2:default 0 ;
+ lv2:portProperty lv2:toggled ;
+ ] , [
+ a lv2:InputPort ,
+ lv2:ControlPort ;
+ lv2:index 3 ;
+ lv2:symbol "toggled_2" ;
+ lv2:name "Toggle 2" ;
+ lv2:default 0 ;
+ lv2:portProperty lv2:toggled ;
+ ] , [
+ a lv2:InputPort ,
+ lv2:ControlPort ;
+ lv2:index 4 ;
+ lv2:symbol "toggled_3" ;
+ lv2:name "Toggle 3" ;
+ lv2:default 0 ;
+ lv2:portProperty lv2:toggled ;
+ ] , [
+ a lv2:InputPort ,
+ lv2:ControlPort ;
+ lv2:index 5 ;
+ lv2:symbol "toggled_4" ;
+ lv2:name "Toggle 4" ;
+ lv2:default 0 ;
+ lv2:portProperty lv2:toggled ;
+ ] , [
+ a lv2:InputPort ,
+ lv2:ControlPort ;
+ lv2:index 6 ;
+ lv2:symbol "toggled_5" ;
+ lv2:name "Toggle 5" ;
+ lv2:default 0 ;
+ lv2:portProperty lv2:toggled ;
+ ] , [
+ a lv2:InputPort ,
+ lv2:ControlPort ;
+ lv2:index 7 ;
+ lv2:symbol "toggled_6" ;
+ lv2:name "Toggle 6" ;
+ lv2:default 0 ;
+ lv2:portProperty lv2:toggled ;
+ ] , [
+ a lv2:InputPort ,
+ lv2:ControlPort ;
+ lv2:index 8 ;
+ lv2:symbol "toggled_7" ;
+ lv2:name "Toggle 7" ;
+ lv2:default 0 ;
+ lv2:portProperty lv2:toggled ;
+ ] , [
+ a lv2:InputPort ,
+ lv2:ControlPort ;
+ lv2:index 9 ;
+ lv2:symbol "toggled_8" ;
+ lv2:name "Toggle 8" ;
+ lv2:default 0 ;
+ lv2:portProperty lv2:toggled ;
+ ] , [
+ a lv2:InputPort ,
+ lv2:ControlPort ;
+ lv2:index 10 ;
+ lv2:symbol "toggled_9" ;
+ lv2:name "Toggle 9" ;
+ lv2:default 1 ;
+ lv2:portProperty lv2:toggled ;
+ ] , [
+ a lv2:InputPort ,
+ lv2:ControlPort ;
+ lv2:index 11 ;
+ lv2:symbol "toggled_10" ;
+ lv2:name "Toggle 10" ;
+ lv2:default 1 ;
+ lv2:portProperty lv2:toggled ;
+ ] , [
+ a lv2:InputPort ,
+ lv2:ControlPort ;
+ lv2:index 12 ;
+ lv2:symbol "toggled_11" ;
+ lv2:name "Toggle 11" ;
+ lv2:default 1 ;
+ lv2:portProperty lv2:toggled ;
+ ] , [
+ a lv2:InputPort ,
+ lv2:ControlPort ;
+ lv2:index 13 ;
+ lv2:symbol "toggled_12" ;
+ lv2:name "Toggle 12" ;
+ lv2:default 1 ;
+ lv2:portProperty lv2:toggled ;
+ ] , [
+ a lv2:InputPort ,
+ lv2:ControlPort ;
+ lv2:index 14 ;
+ lv2:symbol "toggled_13" ;
+ lv2:name "Toggle 13" ;
+ lv2:default 1 ;
+ lv2:portProperty lv2:toggled ;
+ ] , [
+ a lv2:InputPort ,
+ lv2:ControlPort ;
+ lv2:index 15 ;
+ lv2:symbol "toggled_14" ;
+ lv2:name "Toggle 14" ;
+ lv2:default 1 ;
+ lv2:portProperty lv2:toggled ;
+ ] , [
+ a lv2:InputPort ,
+ lv2:ControlPort ;
+ lv2:index 16 ;
+ lv2:symbol "toggled_15" ;
+ lv2:name "Toggle 15" ;
+ lv2:default 1 ;
+ lv2:portProperty lv2:toggled ;
+ ] , [
+ a lv2:InputPort ,
+ lv2:ControlPort ;
+ lv2:index 17 ;
+ lv2:symbol "toggled_16" ;
+ lv2:name "Toggle 16" ;
+ lv2:default 1 ;
+ lv2:portProperty lv2:toggled ;
+ ] , [
+ a lv2:InputPort ,
+ lv2:ControlPort ;
+ lv2:index 18 ;
+ lv2:symbol "control_1" ;
+ lv2:name "Control 1" ;
+ lv2:default 0.0 ;
+ lv2:minimum 0.0 ;
+ lv2:maximum 100.0 ;
+ ] , [
+ a lv2:InputPort ,
+ lv2:ControlPort ;
+ lv2:index 19 ;
+ lv2:symbol "control_2" ;
+ lv2:name "Control 2" ;
+ lv2:default 25.0 ;
+ lv2:minimum 0.0 ;
+ lv2:maximum 100.0 ;
+ ] , [
+ a lv2:InputPort ,
+ lv2:ControlPort ;
+ lv2:index 20 ;
+ lv2:symbol "control_3" ;
+ lv2:name "Control 3" ;
+ lv2:default 36.0 ;
+ lv2:minimum 0.0 ;
+ lv2:maximum 100.0 ;
+ ] , [
+ a lv2:InputPort ,
+ lv2:ControlPort ;
+ lv2:index 21 ;
+ lv2:symbol "control_4" ;
+ lv2:name "Control 4" ;
+ lv2:default 44.0 ;
+ lv2:minimum 0.0 ;
+ lv2:maximum 100.0 ;
+ ] , [
+ a lv2:InputPort ,
+ lv2:ControlPort ;
+ lv2:index 22 ;
+ lv2:symbol "control_5" ;
+ lv2:name "Control 5" ;
+ lv2:default 51.0 ;
+ lv2:minimum 0.0 ;
+ lv2:maximum 100.0 ;
+ ] , [
+ a lv2:InputPort ,
+ lv2:ControlPort ;
+ lv2:index 23 ;
+ lv2:symbol "control_6" ;
+ lv2:name "Control 6" ;
+ lv2:default 57.0 ;
+ lv2:minimum 0.0 ;
+ lv2:maximum 100.0 ;
+ ] , [
+ a lv2:InputPort ,
+ lv2:ControlPort ;
+ lv2:index 24 ;
+ lv2:symbol "control_7" ;
+ lv2:name "Control 7" ;
+ lv2:default 63.0 ;
+ lv2:minimum 0.0 ;
+ lv2:maximum 100.0 ;
+ ] , [
+ a lv2:InputPort ,
+ lv2:ControlPort ;
+ lv2:index 25 ;
+ lv2:symbol "control_8" ;
+ lv2:name "Control 8" ;
+ lv2:default 68.0 ;
+ lv2:minimum 0.0 ;
+ lv2:maximum 100.0 ;
+ ] , [
+ a lv2:InputPort ,
+ lv2:ControlPort ;
+ lv2:index 26 ;
+ lv2:symbol "control_9" ;
+ lv2:name "Control 9" ;
+ lv2:default 73.0 ;
+ lv2:minimum 0.0 ;
+ lv2:maximum 100.0 ;
+ ] , [
+ a lv2:InputPort ,
+ lv2:ControlPort ;
+ lv2:index 27 ;
+ lv2:symbol "control_10" ;
+ lv2:name "Control 10" ;
+ lv2:default 77.0 ;
+ lv2:minimum 0.0 ;
+ lv2:maximum 100.0 ;
+ ] , [
+ a lv2:InputPort ,
+ lv2:ControlPort ;
+ lv2:index 28 ;
+ lv2:symbol "control_11" ;
+ lv2:name "Control 11" ;
+ lv2:default 81.0 ;
+ lv2:minimum 0.0 ;
+ lv2:maximum 100.0 ;
+ ] , [
+ a lv2:InputPort ,
+ lv2:ControlPort ;
+ lv2:index 29 ;
+ lv2:symbol "control_12" ;
+ lv2:name "Control 12" ;
+ lv2:default 85.0 ;
+ lv2:minimum 0.0 ;
+ lv2:maximum 100.0 ;
+ ] , [
+ a lv2:InputPort ,
+ lv2:ControlPort ;
+ lv2:index 30 ;
+ lv2:symbol "control_13" ;
+ lv2:name "Control 13" ;
+ lv2:default 89.0 ;
+ lv2:minimum 0.0 ;
+ lv2:maximum 100.0 ;
+ ] , [
+ a lv2:InputPort ,
+ lv2:ControlPort ;
+ lv2:index 31 ;
+ lv2:symbol "control_14" ;
+ lv2:name "Control 14" ;
+ lv2:default 93.0 ;
+ lv2:minimum 0.0 ;
+ lv2:maximum 100.0 ;
+ ] , [
+ a lv2:InputPort ,
+ lv2:ControlPort ;
+ lv2:index 32 ;
+ lv2:symbol "control_15" ;
+ lv2:name "Control 15" ;
+ lv2:default 96.0 ;
+ lv2:minimum 0.0 ;
+ lv2:maximum 100.0 ;
+ ] , [
+ a lv2:InputPort ,
+ lv2:ControlPort ;
+ lv2:index 33 ;
+ lv2:symbol "control_16" ;
+ lv2:name "Control 16" ;
+ lv2:default 100.0 ;
+ lv2:minimum 0.0 ;
+ lv2:maximum 100.0 ;
+ ] , [
+ a lv2:InputPort ,
+ lv2:ControlPort ;
+ lv2:index 34 ;
+ lv2:symbol "radio" ;
+ lv2:name "Radio" ;
+ lv2:default 0 ;
+ lv2:minimum 0 ;
+ lv2:maximum 16 ;
+ lv2:portProperty lv2:integer, lv2:enumeration ;
+ lv2:scalePoint
+ [ rdfs:label "*1*" ; rdf:value 0 ] ,
+ [ rdfs:label "*2*" ; rdf:value 1 ] ,
+ [ rdfs:label "*3*" ; rdf:value 2 ] ,
+ [ rdfs:label "*4*" ; rdf:value 3 ] ,
+ [ rdfs:label "*5*" ; rdf:value 4 ] ,
+ [ rdfs:label "*6*" ; rdf:value 5 ] ,
+ [ rdfs:label "*7*" ; rdf:value 6 ] ,
+ [ rdfs:label "*8*" ; rdf:value 7 ] ,
+ [ rdfs:label "*9*" ; rdf:value 8 ] ,
+ [ rdfs:label "*10*" ; rdf:value 9 ] ,
+ [ rdfs:label "*11*" ; rdf:value 10 ] ,
+ [ rdfs:label "*12*" ; rdf:value 11 ] ,
+ [ rdfs:label "*13*" ; rdf:value 12 ] ,
+ [ rdfs:label "*14*" ; rdf:value 13 ] ,
+ [ rdfs:label "*15*" ; rdf:value 14 ] ,
+ [ rdfs:label "*16*" ; rdf:value 15 ] ;
+ ] .
diff --git a/nuk_ui.c b/nuk_ui.c
new file mode 100644
index 0000000..0adb0f3
--- /dev/null
+++ b/nuk_ui.c
@@ -0,0 +1,724 @@
+/*
+ * Copyright (c) 2016 Hanspeter Portner (dev@open-music-kontrollers.ch)
+ *
+ * This is free software: you can redistribute it and/or modify
+ * it under the terms of the Artistic License 2.0 as published by
+ * The Perl Foundation.
+ *
+ * This source is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * Artistic License 2.0 for more details.
+ *
+ * You should have received a copy of the Artistic License 2.0
+ * along the source as a COPYING file. If not, obtain it from
+ * http://www.perlfoundation.org/artistic_license_2_0.
+ */
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <math.h>
+#include <time.h>
+#include <limits.h>
+
+#include <nuk.h>
+
+#define NK_PUGL_IMPLEMENTATION
+#include "nk_pugl/nk_pugl.h"
+
+//#define SHOW_OVERVIEW
+#ifdef SHOW_OVERVIEW
+# define MIN(a,b) ((a) < (b) ? (a) : (b))
+# define MAX(a,b) ((a) < (b) ? (b) : (a))
+# define LEN(a) (sizeof(a)/sizeof(a)[0])
+# include "nuklear/demo/overview.c"
+#endif
+
+#define CONTROL_N 16
+
+typedef struct _plughandle_t plughandle_t;
+
+struct _plughandle_t {
+ LV2_URID_Map *map;
+ LV2_Atom_Forge forge;
+
+ LV2_Log_Log *log;
+ LV2_Log_Logger logger;
+
+ nk_pugl_window_t win;
+ struct {
+ struct nk_image audio;
+ struct nk_image midi;
+ } icon;
+
+ LV2UI_Controller *controller;
+ LV2UI_Write_Function writer;
+
+ int toggle [CONTROL_N];
+ float cntrl [CONTROL_N];
+ unsigned radio;
+};
+
+static const char *combo_labels [2] = {
+ "off",
+ "on"
+};
+
+static inline void
+_write_int(plughandle_t *handle, uint32_t port, int i)
+{
+ const float f = i;
+ handle->writer(handle->controller, port, sizeof(float), 0, &f);
+}
+
+static inline void
+_write_flt(plughandle_t *handle, uint32_t port, float f)
+{
+ handle->writer(handle->controller, port, sizeof(float), 0, &f);
+}
+
+static float
+_dial_numeric_behavior(struct nk_rect bounds,
+ enum nk_widget_states *states, int *divider, struct nk_input *in)
+{
+ const struct nk_mouse_button *btn = &in->mouse.buttons[NK_BUTTON_LEFT];;
+ const bool left_mouse_down = btn->down;
+ const bool left_mouse_click_in_cursor = nk_input_has_mouse_click_down_in_rect(in,
+ NK_BUTTON_LEFT, bounds, nk_true);
+
+ float dd = 0.f;
+ if(left_mouse_down && left_mouse_click_in_cursor)
+ {
+ const float dx = in->mouse.delta.x;
+ const float dy = in->mouse.delta.y;
+ dd = fabs(dx) > fabs(dy) ? dx : -dy;
+
+ *states = NK_WIDGET_STATE_ACTIVED;
+ }
+ else if(nk_input_is_mouse_hovering_rect(in, bounds))
+ {
+ if(in->mouse.scroll_delta.y != 0.f) // has scrolling
+ {
+ dd = in->mouse.scroll_delta.y;
+ in->mouse.scroll_delta.y = 0.f;
+ }
+
+ *states = NK_WIDGET_STATE_HOVER;
+ }
+
+ if(nk_input_is_key_down(in, NK_KEY_CTRL))
+ *divider *= 4;
+ if(nk_input_is_key_down(in, NK_KEY_SHIFT))
+ *divider *= 4;
+
+ return dd;
+}
+
+static void
+_dial_numeric_draw(struct nk_context *ctx, struct nk_rect bounds,
+ enum nk_widget_states states, float perc, struct nk_color color)
+{
+ struct nk_command_buffer *canv= nk_window_get_canvas(ctx);
+ const struct nk_style_item *bg = NULL;
+ const struct nk_style_item *fg = NULL;
+
+ switch(states)
+ {
+ case NK_WIDGET_STATE_HOVER:
+ {
+ bg = &ctx->style.progress.hover;
+ fg = &ctx->style.progress.cursor_hover;
+ } break;
+ case NK_WIDGET_STATE_ACTIVED:
+ {
+ bg = &ctx->style.progress.active;
+ fg = &ctx->style.progress.cursor_active;
+ } break;
+ default:
+ {
+ bg = &ctx->style.progress.normal;
+ fg = &ctx->style.progress.cursor_normal;
+ } break;
+ }
+
+ const struct nk_color bg_color = bg->data.color;
+ struct nk_color fg_color = fg->data.color;
+
+ fg_color.r = (int)fg_color.r * color.r / 0xff;
+ fg_color.g = (int)fg_color.g * color.g / 0xff;
+ fg_color.b = (int)fg_color.b * color.b / 0xff;
+ fg_color.a = (int)fg_color.a * color.a / 0xff;
+
+ const float w2 = bounds.w/2;
+ const float h2 = bounds.h/2;
+ const float r1 = NK_MIN(w2, h2);
+ const float r2 = r1 / 2;
+ const float cx = bounds.x + w2;
+ const float cy = bounds.y + h2;
+ const float aa = M_PI/6;
+ const float a1 = M_PI/2 + aa;
+ const float a2 = 2*M_PI + M_PI/2 - aa;
+ const float a3 = a1 + (a2 - a1)*perc;
+
+ nk_stroke_arc(canv, cx, cy, (r1+r2)/2, a1, a2, r1-r2, bg_color);
+ nk_stroke_arc(canv, cx, cy, (r1+r2)/2, a1, a3, r1-r2, fg_color);
+}
+
+static int
+_dial_double(struct nk_context *ctx, double min, double *val, double max, float mul,
+ struct nk_color color, bool editable)
+{
+ const double tmp = *val;
+ struct nk_rect bounds = nk_layout_space_bounds(ctx);
+ const enum nk_widget_layout_states layout_states = nk_widget(&bounds, ctx);
+
+ if(layout_states != NK_WIDGET_INVALID)
+ {
+ enum nk_widget_states states = NK_WIDGET_STATE_INACTIVE;
+ const double range = max - min;
+ struct nk_input *in = (ctx->current->layout->flags & NK_WINDOW_ROM) ? 0 : &ctx->input;
+
+ if(in && editable)
+ {
+ int divider = 1;
+ const float dd = _dial_numeric_behavior(bounds, &states, &divider, in);
+
+ if(dd != 0.f) // update value
+ {
+ const double per_pixel_inc = mul * range / bounds.w / divider;
+
+ *val += dd * per_pixel_inc;
+ *val = NK_CLAMP(min, *val, max);
+ }
+ }
+
+ const float perc = (*val - min) / range;
+ _dial_numeric_draw(ctx, bounds, states, perc, color);
+ }
+
+ return tmp != *val;
+}
+
+static int
+_dial_float(struct nk_context *ctx, float min, float *val, float max, float mul)
+{
+ double tmp = *val;
+ const int res = _dial_double(ctx, min, &tmp, max, mul, nk_white, true);
+ *val = tmp;
+
+ return res;
+}
+
+static void
+_expose(struct nk_context *ctx, struct nk_rect wbounds, void *data)
+{
+ plughandle_t *handle = data;
+
+#ifdef SHOW_OVERVIEW
+ overview(ctx);
+#else
+ const float widget_h = 20 * nk_pugl_get_scale(&handle->win);
+
+ const char *window_name = "Nuk";
+ if(nk_begin(ctx, window_name, wbounds, NK_WINDOW_CLOSABLE | NK_WINDOW_NO_SCROLLBAR))
+ {
+ const struct nk_panel *root = nk_window_get_panel(ctx);
+
+ const nk_flags nuk_f = NK_WINDOW_BORDER | NK_WINDOW_TITLE;
+ const float nuk_h = root->bounds.h - root->footer_height;
+ nk_layout_row_dynamic(ctx, nuk_h/2, 1);
+
+ if(nk_group_begin(ctx, "Controls", nuk_f))
+ {
+ const struct nk_panel *panel = nk_window_get_panel(ctx);
+ const nk_flags group_f = NK_WINDOW_BORDER | NK_WINDOW_TITLE;
+ const float group_h = panel->bounds.h - panel->footer_height;
+ nk_layout_row_dynamic(ctx, group_h, 9);
+
+ if(nk_group_begin(ctx, "Buttons", group_f))
+ {
+ nk_layout_row_dynamic(ctx, widget_h, 1);
+ for(unsigned i=0; i<CONTROL_N; i++)
+ {
+ char label [12];
+ snprintf(label, 12, "Button %i", i + 1);
+ if(nk_button_symbol_label(ctx,
+ handle->toggle[i] ? NK_SYMBOL_CIRCLE_OUTLINE : NK_SYMBOL_CIRCLE_SOLID,
+ label, NK_TEXT_ALIGN_LEFT))
+ {
+ handle->toggle[i] = !handle->toggle[i];
+ _write_int(handle, i + 2, handle->toggle[i]);
+ }
+ }
+ nk_group_end(ctx);
+ }
+
+ if(nk_group_begin(ctx, "Toggles", group_f))
+ {
+ nk_layout_row_dynamic(ctx, widget_h, 1);
+ for(unsigned i=0; i<CONTROL_N; i++)
+ {
+ char label [12];
+ snprintf(label, 12, "Toggle %i", i + 1);
+ if(nk_checkbox_label(ctx, label, &handle->toggle[i]))
+ {
+ _write_int(handle, i + 2, handle->toggle[i]);
+ }
+ }
+ nk_group_end(ctx);
+ }
+
+ if(nk_group_begin(ctx, "Selectables", group_f))
+ {
+ nk_layout_row_dynamic(ctx, widget_h, 1);
+ for(unsigned i=0; i<CONTROL_N; i++)
+ {
+ char label [16];
+ snprintf(label, 16, "Selectable %i", i + 1);
+ if(nk_selectable_image_label(ctx,
+ handle->toggle[i] ? handle->icon.midi: handle->icon.audio,
+ label, NK_TEXT_ALIGN_LEFT, &handle->toggle[i]))
+ {
+ _write_int(handle, i + 2, handle->toggle[i]);
+ }
+ }
+ nk_group_end(ctx);
+ }
+
+ if(nk_group_begin(ctx, "Comboboxes", group_f))
+ {
+ nk_layout_row_dynamic(ctx, widget_h, 1);
+ for(unsigned i=0; i<CONTROL_N; i++)
+ {
+ const struct nk_panel *panel2 = nk_window_get_panel(ctx);
+ const int tmp = handle->toggle[i];
+ nk_combobox(ctx, combo_labels, 2, &handle->toggle[i], widget_h,
+ nk_vec2(panel2->bounds.w, 3*widget_h));
+ if(tmp != handle->toggle[i])
+ {
+ _write_int(handle, i + 2, handle->toggle[i]);
+ }
+ }
+ nk_group_end(ctx);
+ }
+
+ if(nk_group_begin(ctx, "Radiobuttons", group_f))
+ {
+ nk_layout_row_dynamic(ctx, widget_h, 1);
+ for(unsigned i=0; i<CONTROL_N; i++)
+ {
+ char label [12];
+ snprintf(label, 12, "Radio %i", i + 1);
+ if(nk_option_label(ctx, label, handle->radio == i))
+ {
+ handle->radio = i;
+ _write_int(handle, 2 + 2*CONTROL_N, handle->radio);
+ }
+ }
+ nk_group_end(ctx);
+ }
+
+ if(nk_group_begin(ctx, "Properties", group_f))
+ {
+ nk_layout_row_dynamic(ctx, widget_h, 1);
+ for(unsigned i=0; i<CONTROL_N; i++)
+ {
+ char label [12];
+ snprintf(label, 12, "No. %i", i + 1);
+ const float tmp = handle->cntrl[i];
+ nk_property_float(ctx, label, 0.f, &handle->cntrl[i], 100.f, 1.f, 1.f);
+ if(tmp != handle->cntrl[i])
+ {
+ _write_flt(handle, i + 2 + CONTROL_N, handle->cntrl[i]);
+ }
+ }
+ nk_group_end(ctx);
+ }
+
+ if(nk_group_begin(ctx, "Sliders", group_f))
+ {
+ nk_layout_row_dynamic(ctx, widget_h, 1);
+ for(unsigned i=0; i<CONTROL_N; i++)
+ {
+ if(nk_slider_float(ctx, 0.f, &handle->cntrl[i], 100.f, 1.f))
+ {
+ _write_flt(handle, i + 2 + CONTROL_N, handle->cntrl[i]);
+ }
+ }
+ nk_group_end(ctx);
+ }
+
+ if(nk_group_begin(ctx, "Progressbars", group_f))
+ {
+ nk_layout_row_dynamic(ctx, widget_h, 1);
+ for(unsigned i=0; i<CONTROL_N; i++)
+ {
+ nk_prog(ctx, handle->cntrl[i], 100, 0);
+ }
+ nk_group_end(ctx);
+ }
+
+ if(nk_group_begin(ctx, "Values", group_f))
+ {
+ nk_layout_row_dynamic(ctx, widget_h, 1);
+ for(unsigned i=0; i<CONTROL_N; i++)
+ {
+ char label [12];
+ snprintf(label, 12, "Value %i", i + 1);
+ nk_value_float(ctx, label, handle->cntrl[i]);
+ }
+ nk_group_end(ctx);
+ }
+ nk_group_end(ctx);
+ }
+
+ nk_layout_row_dynamic(ctx, nuk_h/2, 3);
+
+ if(nk_group_begin(ctx, "Graphs", nuk_f))
+ {
+ const struct nk_panel *panel = nk_window_get_panel(ctx);
+ const float group_h = panel->bounds.h - panel->footer_height;
+ nk_layout_row_dynamic(ctx, group_h, 2);
+
+ // barplot
+ nk_chart_begin(ctx, NK_CHART_COLUMN, CONTROL_N, 0.f, 100.f);
+ for(unsigned i=0; i<CONTROL_N; i++)
+ nk_chart_push(ctx, handle->cntrl[i]);
+ nk_chart_end(ctx);
+
+ // lineplot
+ nk_chart_begin(ctx, NK_CHART_LINES, CONTROL_N, 0.f, 100.f);
+ for(unsigned i=0; i<CONTROL_N; i++)
+ nk_chart_push(ctx, handle->cntrl[i]);
+ nk_chart_end(ctx);
+
+ nk_group_end(ctx);
+ }
+
+ if(nk_group_begin(ctx, "Canvas", nuk_f))
+ {
+ const struct nk_panel *panel = nk_window_get_panel(ctx);
+ const float group_h = panel->bounds.h - panel->footer_height;
+ nk_layout_row_dynamic(ctx, group_h, 1);
+
+ const struct nk_vec2 group_padding = nk_panel_get_padding(&ctx->style, NK_PANEL_GROUP);
+ struct nk_rect bounds = panel->bounds;
+ bounds.x += group_padding.x;
+ bounds.y += group_padding.y;
+ bounds.w -= 2*group_padding.x;
+ bounds.h -= 2*group_padding.y;
+
+ struct nk_command_buffer *canv= nk_window_get_canvas(ctx);
+ nk_widget(&bounds, ctx);
+ {
+ const unsigned r = 10;
+ const unsigned d = r*2;
+ const float dx = (bounds.w - d) / 15.f;
+ const float dy = (bounds.h - d) / 15.f;
+
+ for(unsigned i=0; i<16; i++)
+ {
+ const unsigned x0 = bounds.x + i*dx;
+ const unsigned y0 = bounds.y + i*dy;
+ const unsigned cx = x0 + r;
+ const unsigned cy = y0 + r;
+
+ if(i == handle->radio)
+ {
+ nk_stroke_curve(canv,
+ bounds.x, bounds.y + bounds.h,
+ cx, cy,
+ cx, cy,
+ bounds.x + bounds.w, bounds.y,
+ 2.f, nk_red);
+ }
+
+ nk_fill_circle(canv, nk_rect(x0, y0, d, d),
+ i == handle->radio ? nk_white : nk_black);
+ }
+
+ nk_stroke_rect(canv, bounds, 0.f, 1.0, nk_white);
+ }
+
+ nk_group_end(ctx);
+ }
+
+ if(nk_group_begin(ctx, "Dials", nuk_f))
+ {
+ for(unsigned j=0; j<CONTROL_N; j+=4)
+ {
+ nk_layout_row_dynamic(ctx, nk_layout_space_bounds(ctx).w/8, 4);
+ for(unsigned k=0; k<4; k++)
+ {
+ const unsigned i = j + k;
+
+ if(_dial_float(ctx, 0.f, &handle->cntrl[i], 100.f, 1.f))
+ {
+ _write_flt(handle, i + 2 + CONTROL_N, handle->cntrl[i]);
+ }
+ }
+
+ nk_layout_row_dynamic(ctx, widget_h, 4);
+ for(unsigned k=0; k<4; k++)
+ {
+ const unsigned i = j + k;
+
+ char label [12];
+ snprintf(label, 12, "%02i:", i + 1);
+ const float tmp = handle->cntrl[i];
+
+ nk_property_float(ctx, label, 0.f, &handle->cntrl[i], 100.f, 1.f, 1.f);
+ if(tmp != handle->cntrl[i])
+ {
+ _write_flt(handle, i + 2 + CONTROL_N, handle->cntrl[i]);
+ }
+ }
+ }
+
+ nk_group_end(ctx);
+ }
+ }
+ nk_end(ctx);
+
+ if(nk_window_is_closed(ctx, "Nuk"))
+ {
+ nk_pugl_quit(&handle->win);
+ }
+#endif
+}
+
+static LV2UI_Handle
+instantiate(const LV2UI_Descriptor *descriptor,
+ const char *plugin_uri __attribute__((unused)),
+ const char *bundle_path, LV2UI_Write_Function write_function,
+ LV2UI_Controller controller, LV2UI_Widget *widget,
+ const LV2_Feature *const *features)
+{
+ plughandle_t *handle = calloc(1, sizeof(plughandle_t));
+ if(!handle)
+ return NULL;
+
+ void *parent = NULL;
+ LV2UI_Resize *host_resize = NULL;
+ for(int i=0; features[i]; i++)
+ {
+ if(!strcmp(features[i]->URI, LV2_UI__parent))
+ parent = features[i]->data;
+ else if(!strcmp(features[i]->URI, LV2_UI__resize))
+ host_resize = features[i]->data;
+ else if(!strcmp(features[i]->URI, LV2_URID__map))
+ handle->map = features[i]->data;
+ else if(!strcmp(features[i]->URI, LV2_LOG__log))
+ handle->log = features[i]->data;
+ }
+
+ if(!parent)
+ {
+ fprintf(stderr,
+ "%s: Host does not support ui:parent\n", descriptor->URI);
+ free(handle);
+ return NULL;
+ }
+ if(!handle->map)
+ {
+ fprintf(stderr,
+ "%s: Host does not support urid:map\n", descriptor->URI);
+ free(handle);
+ return NULL;
+ }
+
+ if(handle->log)
+ lv2_log_logger_init(&handle->logger, handle->map, handle->log);
+
+ lv2_atom_forge_init(&handle->forge, handle->map);
+
+ handle->controller = controller;
+ handle->writer = write_function;
+
+ nk_pugl_config_t *cfg = &handle->win.cfg;
+#ifdef SHOW_OVERVIEW
+ cfg->width = 800;
+ cfg->height = 800;
+#else
+ cfg->width = 1440;
+ cfg->height = 720;
+#endif
+ cfg->resizable = true;
+ cfg->ignore = false;
+ cfg->class = "nuklear";
+ cfg->title = "Nuklear";
+ cfg->parent = (intptr_t)parent;
+ cfg->host_resize = host_resize;
+ cfg->data = handle;
+ cfg->expose = _expose;
+
+ if(asprintf(&cfg->font.face, "%sCousine-Regular.ttf", bundle_path) == -1)
+ cfg->font.face = NULL;
+ cfg->font.size = 16;
+
+ *(intptr_t *)widget = nk_pugl_init(&handle->win);
+ nk_pugl_show(&handle->win);
+
+ char *path;
+ if(asprintf(&path, "%saudio.png", bundle_path) != -1)
+ {
+ handle->icon.audio = nk_pugl_icon_load(&handle->win, path);
+ free(path);
+ }
+
+ if(asprintf(&path, "%smidi.png", bundle_path) != -1)
+ {
+ handle->icon.midi = nk_pugl_icon_load(&handle->win, path);
+ free(path);
+ }
+
+ return handle;
+}
+
+static void
+cleanup(LV2UI_Handle instance)
+{
+ plughandle_t *handle = instance;
+
+ if(handle->win.cfg.font.face)
+ free(handle->win.cfg.font.face);
+ nk_pugl_icon_unload(&handle->win, handle->icon.audio);
+ nk_pugl_icon_unload(&handle->win, handle->icon.midi);
+ nk_pugl_hide(&handle->win);
+ nk_pugl_shutdown(&handle->win);
+
+ free(handle);
+}
+
+static void
+port_event(LV2UI_Handle instance, uint32_t index, uint32_t size,
+ uint32_t protocol, const void *buf)
+{
+ plughandle_t *handle = instance;
+
+ if( (size == sizeof(float)) && (protocol == 0) )
+ {
+ const float *flt = buf;
+
+ switch(index)
+ {
+ case 2:
+ case 3:
+ case 4:
+ case 5:
+ case 6:
+ case 7:
+ case 8:
+ case 9:
+ case 10:
+ case 11:
+ case 12:
+ case 13:
+ case 14:
+ case 15:
+ case 16:
+ case 17:
+ {
+ const unsigned idx = index - 2;
+ const int32_t val = *flt != 0.f ? 1 : 0;
+ if(val != handle->toggle[idx])
+ {
+ handle->toggle[idx] =val;
+ nk_pugl_post_redisplay(&handle->win);
+ }
+ break;
+ }
+ case 18:
+ case 19:
+ case 20:
+ case 21:
+ case 22:
+ case 23:
+ case 24:
+ case 25:
+ case 26:
+ case 27:
+ case 28:
+ case 29:
+ case 30:
+ case 31:
+ case 32:
+ case 33:
+ {
+ const unsigned idx = index - CONTROL_N - 2;
+ const float val = *flt;
+ if(val != handle->cntrl[idx])
+ {
+ handle->cntrl[idx] = val;
+ nk_pugl_post_redisplay(&handle->win);
+ }
+ break;
+ }
+ case 34:
+ {
+ const unsigned val = floor(*flt);
+ if(val != handle->radio)
+ {
+ handle->radio = val;
+ nk_pugl_post_redisplay(&handle->win);
+ }
+ break;
+ }
+ }
+ }
+}
+
+static int
+_idle(LV2UI_Handle instance)
+{
+ plughandle_t *handle = instance;
+
+ return nk_pugl_process_events(&handle->win);
+}
+
+static const LV2UI_Idle_Interface idle_ext = {
+ .idle = _idle
+};
+
+static int
+_resize(LV2UI_Handle instance, int width, int height)
+{
+ plughandle_t *handle = instance;
+
+ return nk_pugl_resize(&handle->win, width, height);
+}
+
+static const LV2UI_Resize resize_ext = {
+ .ui_resize = _resize
+};
+
+static const void *
+extension_data(const char *uri)
+{
+ if(!strcmp(uri, LV2_UI__idleInterface))
+ return &idle_ext;
+ else if(!strcmp(uri, LV2_UI__resize))
+ return &resize_ext;
+
+ return NULL;
+}
+
+static const LV2UI_Descriptor nuk_nuk_ui = {
+ .URI = NUK_PREFIX"nuk_ui",
+ .instantiate = instantiate,
+ .cleanup = cleanup,
+ .port_event = port_event,
+ .extension_data = extension_data
+};
+
+LV2_SYMBOL_EXPORT const LV2UI_Descriptor*
+lv2ui_descriptor(uint32_t index)
+{
+ switch(index)
+ {
+ case 0:
+ return &nuk_nuk_ui;
+ default:
+ return NULL;
+ }
+}
diff --git a/nuk_ui.ttl b/nuk_ui.ttl
new file mode 100644
index 0000000..b0945cf
--- /dev/null
+++ b/nuk_ui.ttl
@@ -0,0 +1,32 @@
+# Copyright (c) 2016 Hanspeter Portner (dev@open-music-kontrollers.ch)
+#
+# This is free software: you can redistribute it and/or modify
+# it under the terms of the Artistic License 2.0 as published by
+# The Perl Foundation.
+#
+# This source is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# Artistic License 2.0 for more details.
+#
+# You should have received a copy of the Artistic License 2.0
+# along the source as a COPYING file. If not, obtain it from
+# http://www.perlfoundation.org/artistic_license_2_0.
+
+@prefix lv2: <http://lv2plug.in/ns/lv2core#> .
+@prefix ui: <http://lv2plug.in/ns/extensions/ui#> .
+@prefix atom: <http://lv2plug.in/ns/ext/atom#> .
+@prefix urid: <http://lv2plug.in/ns/ext/urid#> .
+@prefix log: <http://lv2plug.in/ns/ext/log#> .
+
+@prefix nuk: <http://open-music-kontrollers.ch/lv2/nuk#> .
+
+nuk:nuk_ui
+ ui:portNotification [
+ ui:plugin nuk:nuk ;
+ lv2:symbol "notify" ;
+ ui:protocol atom:eventTransfer
+ ] ;
+ lv2:requiredFeature ui:idleInterface, urid:map, ui:parent ;
+ lv2:optionalFeature log:log, ui:resize ;
+ lv2:extensionData ui:idleInterface, ui:resize .
diff --git a/subprojects/nk_pugl/.gitlab-ci.yml b/subprojects/nk_pugl/.gitlab-ci.yml
new file mode 100644
index 0000000..62aa6f8
--- /dev/null
+++ b/subprojects/nk_pugl/.gitlab-ci.yml
@@ -0,0 +1,77 @@
+stages:
+ - build
+ - deploy
+
+.variables_template: &variables_definition
+ variables:
+ BASE_NAME: "nk_pugl"
+ PKG_CONFIG_PATH: "/opt/lv2/lib/pkgconfig:/opt/${CI_BUILD_NAME}/lib/pkgconfig:/usr/lib/${CI_BUILD_NAME}/pkgconfig"
+
+.common_template: &common_definition
+ <<: *variables_definition
+ stage: build
+ artifacts:
+ name: "${BASE_NAME}-$(cat VERSION)-${CI_BUILD_NAME}"
+ paths:
+ - "${BASE_NAME}-$(cat VERSION)/"
+
+.build_template: &build_definition
+ <<: *common_definition
+ script:
+ - meson -Dbuild-examples=true --prefix="/" --libdir="lib" --cross-file "${CI_BUILD_NAME}" build
+ - sed -i -e '/framework/s/-Wl,-O1//g' -e '/framework/s/-Wl,--start-group//g' -e '/framework/s/-Wl,--end-group//g' build/build.ninja
+ - ninja -C build
+ - DESTDIR="${CI_PROJECT_DIR}/${BASE_NAME}-$(cat VERSION)/${CI_BUILD_NAME}" ninja -C build install
+
+.analyze_template: &analyze_definition
+ <<: *common_definition
+ script:
+ - meson -Dbuild-examples=true --prefix="/" --libdir="lib" --cross-file "${CI_BUILD_NAME}" build
+ - sed -i -e '/framework/s/-Wl,-O1//g' -e '/framework/s/-Wl,--start-group//g' -e '/framework/s/-Wl,--end-group//g' build/build.ninja
+ - ninja -C build
+ - DESTDIR="${CI_PROJECT_DIR}/${BASE_NAME}-$(cat VERSION)/${CI_BUILD_NAME}" ninja -C build install
+
+ - CC=clang CXX=clang++ meson -Dbuild-examples=true --prefix="/" --libdir="lib" --cross-file "${CI_BUILD_NAME}" clang
+ - ninja -C clang
+
+ - scan-build --status-bugs meson -Dbuild-examples=true --prefix="/" --libdir="lib" --cross-file "${CI_BUILD_NAME}" scanbuild
+ - scan-build --status-bugs ninja -C scanbuild
+
+.universal_linux_template: &universal_linux_definition
+ image: ventosus/universal-linux-gnu
+ <<: *analyze_definition
+
+.arm_linux_template: &arm_linux_definition
+ image: ventosus/arm-linux-gnueabihf
+ <<: *build_definition
+
+# building in docker
+x86_64-linux-gnu:
+ before_script:
+ - apt-get install -y libglu1-mesa-dev libevdev-dev
+ <<: *universal_linux_definition
+
+i686-linux-gnu:
+ before_script:
+ - apt-get install -y libglu1-mesa-dev:i386 libevdev-dev:i386
+ <<: *universal_linux_definition
+
+arm-linux-gnueabihf:
+ before_script:
+ - apt-get install -y libglu1-mesa-dev:armhf libevdev-dev:armhf
+ <<: *arm_linux_definition
+
+aarch64-linux-gnu:
+ before_script:
+ - apt-get install -y libglu1-mesa-dev:arm64 libevdev-dev:arm64
+ <<: *arm_linux_definition
+
+pack:
+ <<: *variables_definition
+ stage: deploy
+ script:
+ - echo 'packing up...'
+ artifacts:
+ name: "${BASE_NAME}-$(cat VERSION)"
+ paths:
+ - "${BASE_NAME}-$(cat VERSION)/"
diff --git a/subprojects/nk_pugl/COPYING b/subprojects/nk_pugl/COPYING
new file mode 100644
index 0000000..ddb9a46
--- /dev/null
+++ b/subprojects/nk_pugl/COPYING
@@ -0,0 +1,201 @@
+ The Artistic License 2.0
+
+ Copyright (c) 2000-2006, The Perl Foundation.
+
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+Preamble
+
+This license establishes the terms under which a given free software
+Package may be copied, modified, distributed, and/or redistributed.
+The intent is that the Copyright Holder maintains some artistic
+control over the development of that Package while still keeping the
+Package available as open source and free software.
+
+You are always permitted to make arrangements wholly outside of this
+license directly with the Copyright Holder of a given Package. If the
+terms of this license do not permit the full use that you propose to
+make of the Package, you should contact the Copyright Holder and seek
+a different licensing arrangement.
+
+Definitions
+
+ "Copyright Holder" means the individual(s) or organization(s)
+ named in the copyright notice for the entire Package.
+
+ "Contributor" means any party that has contributed code or other
+ material to the Package, in accordance with the Copyright Holder's
+ procedures.
+
+ "You" and "your" means any person who would like to copy,
+ distribute, or modify the Package.
+
+ "Package" means the collection of files distributed by the
+ Copyright Holder, and derivatives of that collection and/or of
+ those files. A given Package may consist of either the Standard
+ Version, or a Modified Version.
+
+ "Distribute" means providing a copy of the Package or making it
+ accessible to anyone else, or in the case of a company or
+ organization, to others outside of your company or organization.
+
+ "Distributor Fee" means any fee that you charge for Distributing
+ this Package or providing support for this Package to another
+ party. It does not mean licensing fees.
+
+ "Standard Version" refers to the Package if it has not been
+ modified, or has been modified only in ways explicitly requested
+ by the Copyright Holder.
+
+ "Modified Version" means the Package, if it has been changed, and
+ such changes were not explicitly requested by the Copyright
+ Holder.
+
+ "Original License" means this Artistic License as Distributed with
+ the Standard Version of the Package, in its current version or as
+ it may be modified by The Perl Foundation in the future.
+
+ "Source" form means the source code, documentation source, and
+ configuration files for the Package.
+
+ "Compiled" form means the compiled bytecode, object code, binary,
+ or any other form resulting from mechanical transformation or
+ translation of the Source form.
+
+
+Permission for Use and Modification Without Distribution
+
+(1) You are permitted to use the Standard Version and create and use
+Modified Versions for any purpose without restriction, provided that
+you do not Distribute the Modified Version.
+
+
+Permissions for Redistribution of the Standard Version
+
+(2) You may Distribute verbatim copies of the Source form of the
+Standard Version of this Package in any medium without restriction,
+either gratis or for a Distributor Fee, provided that you duplicate
+all of the original copyright notices and associated disclaimers. At
+your discretion, such verbatim copies may or may not include a
+Compiled form of the Package.
+
+(3) You may apply any bug fixes, portability changes, and other
+modifications made available from the Copyright Holder. The resulting
+Package will still be considered the Standard Version, and as such
+will be subject to the Original License.
+
+
+Distribution of Modified Versions of the Package as Source
+
+(4) You may Distribute your Modified Version as Source (either gratis
+or for a Distributor Fee, and with or without a Compiled form of the
+Modified Version) provided that you clearly document how it differs
+from the Standard Version, including, but not limited to, documenting
+any non-standard features, executables, or modules, and provided that
+you do at least ONE of the following:
+
+ (a) make the Modified Version available to the Copyright Holder
+ of the Standard Version, under the Original License, so that the
+ Copyright Holder may include your modifications in the Standard
+ Version.
+
+ (b) ensure that installation of your Modified Version does not
+ prevent the user installing or running the Standard Version. In
+ addition, the Modified Version must bear a name that is different
+ from the name of the Standard Version.
+
+ (c) allow anyone who receives a copy of the Modified Version to
+ make the Source form of the Modified Version available to others
+ under
+
+ (i) the Original License or
+
+ (ii) a license that permits the licensee to freely copy,
+ modify and redistribute the Modified Version using the same
+ licensing terms that apply to the copy that the licensee
+ received, and requires that the Source form of the Modified
+ Version, and of any works derived from it, be made freely
+ available in that license fees are prohibited but Distributor
+ Fees are allowed.
+
+
+Distribution of Compiled Forms of the Standard Version
+or Modified Versions without the Source
+
+(5) You may Distribute Compiled forms of the Standard Version without
+the Source, provided that you include complete instructions on how to
+get the Source of the Standard Version. Such instructions must be
+valid at the time of your distribution. If these instructions, at any
+time while you are carrying out such distribution, become invalid, you
+must provide new instructions on demand or cease further distribution.
+If you provide valid instructions or cease distribution within thirty
+days after you become aware that the instructions are invalid, then
+you do not forfeit any of your rights under this license.
+
+(6) You may Distribute a Modified Version in Compiled form without
+the Source, provided that you comply with Section 4 with respect to
+the Source of the Modified Version.
+
+
+Aggregating or Linking the Package
+
+(7) You may aggregate the Package (either the Standard Version or
+Modified Version) with other packages and Distribute the resulting
+aggregation provided that you do not charge a licensing fee for the
+Package. Distributor Fees are permitted, and licensing fees for other
+components in the aggregation are permitted. The terms of this license
+apply to the use and Distribution of the Standard or Modified Versions
+as included in the aggregation.
+
+(8) You are permitted to link Modified and Standard Versions with
+other works, to embed the Package in a larger work of your own, or to
+build stand-alone binary or bytecode versions of applications that
+include the Package, and Distribute the result without restriction,
+provided the result does not expose a direct interface to the Package.
+
+
+Items That are Not Considered Part of a Modified Version
+
+(9) Works (including, but not limited to, modules and scripts) that
+merely extend or make use of the Package, do not, by themselves, cause
+the Package to be a Modified Version. In addition, such works are not
+considered parts of the Package itself, and are not subject to the
+terms of this license.
+
+
+General Provisions
+
+(10) Any use, modification, and distribution of the Standard or
+Modified Versions is governed by this Artistic License. By using,
+modifying or distributing the Package, you accept this license. Do not
+use, modify, or distribute the Package, if you do not accept this
+license.
+
+(11) If your Modified Version has been derived from a Modified
+Version made by someone other than you, you are nevertheless required
+to ensure that your Modified Version complies with the requirements of
+this license.
+
+(12) This license does not grant you the right to use any trademark,
+service mark, tradename, or logo of the Copyright Holder.
+
+(13) This license includes the non-exclusive, worldwide,
+free-of-charge patent license to make, have made, use, offer to sell,
+sell, import and otherwise transfer the Package with respect to any
+patent claims licensable by the Copyright Holder that are necessarily
+infringed by the Package. If you institute patent litigation
+(including a cross-claim or counterclaim) against any party alleging
+that the Package constitutes direct or contributory patent
+infringement, then this Artistic License to you shall terminate on the
+date that such litigation is filed.
+
+(14) Disclaimer of Warranty:
+THE PACKAGE IS PROVIDED BY THE COPYRIGHT HOLDER AND CONTRIBUTORS "AS
+IS' AND WITHOUT ANY EXPRESS OR IMPLIED WARRANTIES. THE IMPLIED
+WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, OR
+NON-INFRINGEMENT ARE DISCLAIMED TO THE EXTENT PERMITTED BY YOUR LOCAL
+LAW. UNLESS REQUIRED BY LAW, NO COPYRIGHT HOLDER OR CONTRIBUTOR WILL
+BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL
+DAMAGES ARISING IN ANY WAY OUT OF THE USE OF THE PACKAGE, EVEN IF
+ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
diff --git a/subprojects/nk_pugl/VERSION b/subprojects/nk_pugl/VERSION
new file mode 100644
index 0000000..d3bfa59
--- /dev/null
+++ b/subprojects/nk_pugl/VERSION
@@ -0,0 +1 @@
+0.1.173
diff --git a/example/example.c b/subprojects/nk_pugl/example/example.c
index c55a2ca..c55a2ca 100644
--- a/example/example.c
+++ b/subprojects/nk_pugl/example/example.c
diff --git a/subprojects/nk_pugl/meson.build b/subprojects/nk_pugl/meson.build
new file mode 100644
index 0000000..19b855f
--- /dev/null
+++ b/subprojects/nk_pugl/meson.build
@@ -0,0 +1,83 @@
+project('nk_pugl', 'c', default_options : [
+ 'buildtype=release',
+ 'warning_level=3',
+ 'werror=false',
+ 'b_lto=false',
+ 'c_std=gnu11'])
+
+build_examples = get_option('build-examples')
+
+static_link = false #meson.is_cross_build()
+
+cc = meson.get_compiler('c')
+
+m_dep = cc.find_library('m')
+lv2_dep = dependency('lv2',
+ version : '>=1.14.0')
+glew_dep = dependency('glew',
+ version : '>=2.0.0',
+ static : static_link)
+glu_dep = dependency('glu',
+ version : '>=9.0.0',
+ static : static_link)
+
+deps = [m_dep, lv2_dep, glu_dep, glew_dep]
+links = []
+
+pugl_inc = include_directories(join_paths('pugl', 'include'))
+inc_dir = [pugl_inc]
+
+add_project_arguments('-D_GNU_SOURCE', language : 'c')
+
+bin_srcs = [
+ join_paths('example', 'example.c')
+]
+
+lib_srcs = [
+ join_paths('pugl', 'src', 'implementation.c')
+]
+
+c_args = ['-fvisibility=hidden',
+ '-ffast-math']
+
+if host_machine.system() == 'windows'
+ deps += cc.find_library('opengl32')
+ deps += cc.find_library('gdi32')
+ deps += cc.find_library('ws2_32')
+ lib_srcs += join_paths('pugl', 'src', 'win.c')
+ lib_srcs += join_paths('pugl', 'src', 'win_gl.c')
+elif host_machine.system() == 'darwin'
+ add_languages('objc')
+ links += ['-framework', 'OpenGL']
+ links += ['-framework', 'Cocoa']
+ lib_srcs += join_paths('pugl', 'src', 'mac.m')
+ lib_srcs += join_paths('pugl', 'src', 'mac_gl.m')
+else
+ deps += dependency('gl')
+ deps += dependency('x11', version : '>=1.6.0')
+ deps += dependency('xext', version : '>=1.3.0')
+ lib_srcs += join_paths('pugl', 'src', 'x11.c')
+ lib_srcs += join_paths('pugl', 'src', 'x11_gl.c')
+endif
+
+nk_pugl_gl = declare_dependency(
+ compile_args : ['-DPUGL_STATIC'],
+ include_directories : inc_dir,
+ dependencies : deps,
+ link_args : links,
+ sources : lib_srcs)
+
+cousine_regular_ttf = configure_file(
+ input : join_paths('nuklear', 'extra_font', 'Cousine-Regular.ttf'),
+ output : 'Cousine-Regular.ttf',
+ copy : true,
+ install : false)
+
+if build_examples
+
+ executable('nk_pugl.gl', [bin_srcs],
+ c_args : c_args,
+ include_directories : inc_dir,
+ dependencies: nk_pugl_gl,
+ install : false)
+endif
diff --git a/subprojects/nk_pugl/meson_options.txt b/subprojects/nk_pugl/meson_options.txt
new file mode 100644
index 0000000..0a4a2a9
--- /dev/null
+++ b/subprojects/nk_pugl/meson_options.txt
@@ -0,0 +1,4 @@
+option('build-examples',
+ type : 'boolean',
+ value : false,
+ yield : true)
diff --git a/nk_pugl/nk_pugl.h b/subprojects/nk_pugl/nk_pugl/nk_pugl.h
index 58fce93..58fce93 100644
--- a/nk_pugl/nk_pugl.h
+++ b/subprojects/nk_pugl/nk_pugl/nk_pugl.h
diff --git a/nuklear/.gitattributes b/subprojects/nk_pugl/nuklear/.gitattributes
index 5a5328c..5a5328c 100644
--- a/nuklear/.gitattributes
+++ b/subprojects/nk_pugl/nuklear/.gitattributes
diff --git a/nuklear/.gitignore b/subprojects/nk_pugl/nuklear/.gitignore
index 6b06b55..6b06b55 100644
--- a/nuklear/.gitignore
+++ b/subprojects/nk_pugl/nuklear/.gitignore
diff --git a/nuklear/.gitmodules b/subprojects/nk_pugl/nuklear/.gitmodules
index e69de29..e69de29 100644
--- a/nuklear/.gitmodules
+++ b/subprojects/nk_pugl/nuklear/.gitmodules
diff --git a/nuklear/.travis.yml b/subprojects/nk_pugl/nuklear/.travis.yml
index 80a5ad5..80a5ad5 100644
--- a/nuklear/.travis.yml
+++ b/subprojects/nk_pugl/nuklear/.travis.yml
diff --git a/nuklear/Readme.md b/subprojects/nk_pugl/nuklear/Readme.md
index d097e35..d097e35 100644
--- a/nuklear/Readme.md
+++ b/subprojects/nk_pugl/nuklear/Readme.md
diff --git a/nuklear/demo/allegro5/KeyboardHandleriOS.h b/subprojects/nk_pugl/nuklear/demo/allegro5/KeyboardHandleriOS.h
index 2664d2e..2664d2e 100644
--- a/nuklear/demo/allegro5/KeyboardHandleriOS.h
+++ b/subprojects/nk_pugl/nuklear/demo/allegro5/KeyboardHandleriOS.h
diff --git a/nuklear/demo/allegro5/KeyboardHandleriOS.m b/subprojects/nk_pugl/nuklear/demo/allegro5/KeyboardHandleriOS.m
index 206f9e4..206f9e4 100644
--- a/nuklear/demo/allegro5/KeyboardHandleriOS.m
+++ b/subprojects/nk_pugl/nuklear/demo/allegro5/KeyboardHandleriOS.m
diff --git a/nuklear/demo/allegro5/Makefile b/subprojects/nk_pugl/nuklear/demo/allegro5/Makefile
index 090a126..090a126 100644
--- a/nuklear/demo/allegro5/Makefile
+++ b/subprojects/nk_pugl/nuklear/demo/allegro5/Makefile
diff --git a/nuklear/demo/allegro5/Readme.md b/subprojects/nk_pugl/nuklear/demo/allegro5/Readme.md
index 71a4840..71a4840 100644
--- a/nuklear/demo/allegro5/Readme.md
+++ b/subprojects/nk_pugl/nuklear/demo/allegro5/Readme.md
diff --git a/nuklear/demo/allegro5/main.c b/subprojects/nk_pugl/nuklear/demo/allegro5/main.c
index 624e7c9..624e7c9 100644
--- a/nuklear/demo/allegro5/main.c
+++ b/subprojects/nk_pugl/nuklear/demo/allegro5/main.c
diff --git a/nuklear/demo/allegro5/nuklear_allegro5.h b/subprojects/nk_pugl/nuklear/demo/allegro5/nuklear_allegro5.h
index f396600..f396600 100644
--- a/nuklear/demo/allegro5/nuklear_allegro5.h
+++ b/subprojects/nk_pugl/nuklear/demo/allegro5/nuklear_allegro5.h
diff --git a/nuklear/demo/calculator.c b/subprojects/nk_pugl/nuklear/demo/calculator.c
index b871301..b871301 100644
--- a/nuklear/demo/calculator.c
+++ b/subprojects/nk_pugl/nuklear/demo/calculator.c
diff --git a/nuklear/demo/d3d11/build.bat b/subprojects/nk_pugl/nuklear/demo/d3d11/build.bat
index 31bd0e0..31bd0e0 100644
--- a/nuklear/demo/d3d11/build.bat
+++ b/subprojects/nk_pugl/nuklear/demo/d3d11/build.bat
diff --git a/nuklear/demo/d3d11/main.c b/subprojects/nk_pugl/nuklear/demo/d3d11/main.c
index a7abf1d..a7abf1d 100644
--- a/nuklear/demo/d3d11/main.c
+++ b/subprojects/nk_pugl/nuklear/demo/d3d11/main.c
diff --git a/nuklear/demo/d3d11/nuklear_d3d11.h b/subprojects/nk_pugl/nuklear/demo/d3d11/nuklear_d3d11.h
index 7097d98..7097d98 100644
--- a/nuklear/demo/d3d11/nuklear_d3d11.h
+++ b/subprojects/nk_pugl/nuklear/demo/d3d11/nuklear_d3d11.h
diff --git a/nuklear/demo/d3d11/nuklear_d3d11.hlsl b/subprojects/nk_pugl/nuklear/demo/d3d11/nuklear_d3d11.hlsl
index a932dca..a932dca 100644
--- a/nuklear/demo/d3d11/nuklear_d3d11.hlsl
+++ b/subprojects/nk_pugl/nuklear/demo/d3d11/nuklear_d3d11.hlsl
diff --git a/nuklear/demo/d3d11/nuklear_d3d11_pixel_shader.h b/subprojects/nk_pugl/nuklear/demo/d3d11/nuklear_d3d11_pixel_shader.h
index 1447559..1447559 100644
--- a/nuklear/demo/d3d11/nuklear_d3d11_pixel_shader.h
+++ b/subprojects/nk_pugl/nuklear/demo/d3d11/nuklear_d3d11_pixel_shader.h
diff --git a/nuklear/demo/d3d11/nuklear_d3d11_vertex_shader.h b/subprojects/nk_pugl/nuklear/demo/d3d11/nuklear_d3d11_vertex_shader.h
index 770d2dd..770d2dd 100644
--- a/nuklear/demo/d3d11/nuklear_d3d11_vertex_shader.h
+++ b/subprojects/nk_pugl/nuklear/demo/d3d11/nuklear_d3d11_vertex_shader.h
diff --git a/nuklear/demo/d3d9/build.bat b/subprojects/nk_pugl/nuklear/demo/d3d9/build.bat
index 726b6f6..726b6f6 100644
--- a/nuklear/demo/d3d9/build.bat
+++ b/subprojects/nk_pugl/nuklear/demo/d3d9/build.bat
diff --git a/nuklear/demo/d3d9/main.c b/subprojects/nk_pugl/nuklear/demo/d3d9/main.c
index b329e2b..b329e2b 100644
--- a/nuklear/demo/d3d9/main.c
+++ b/subprojects/nk_pugl/nuklear/demo/d3d9/main.c
diff --git a/nuklear/demo/d3d9/nuklear_d3d9.h b/subprojects/nk_pugl/nuklear/demo/d3d9/nuklear_d3d9.h
index fd8d176..fd8d176 100644
--- a/nuklear/demo/d3d9/nuklear_d3d9.h
+++ b/subprojects/nk_pugl/nuklear/demo/d3d9/nuklear_d3d9.h
diff --git a/nuklear/demo/gdi/build.bat b/subprojects/nk_pugl/nuklear/demo/gdi/build.bat
index 3884317..3884317 100644
--- a/nuklear/demo/gdi/build.bat
+++ b/subprojects/nk_pugl/nuklear/demo/gdi/build.bat
diff --git a/nuklear/demo/gdi/main.c b/subprojects/nk_pugl/nuklear/demo/gdi/main.c
index 1755b9c..1755b9c 100644
--- a/nuklear/demo/gdi/main.c
+++ b/subprojects/nk_pugl/nuklear/demo/gdi/main.c
diff --git a/nuklear/demo/gdi/nuklear_gdi.h b/subprojects/nk_pugl/nuklear/demo/gdi/nuklear_gdi.h
index c875de1..c875de1 100644
--- a/nuklear/demo/gdi/nuklear_gdi.h
+++ b/subprojects/nk_pugl/nuklear/demo/gdi/nuklear_gdi.h
diff --git a/nuklear/demo/gdip/build.bat b/subprojects/nk_pugl/nuklear/demo/gdip/build.bat
index 0f24655..0f24655 100644
--- a/nuklear/demo/gdip/build.bat
+++ b/subprojects/nk_pugl/nuklear/demo/gdip/build.bat
diff --git a/nuklear/demo/gdip/main.c b/subprojects/nk_pugl/nuklear/demo/gdip/main.c
index a90a0cf..a90a0cf 100644
--- a/nuklear/demo/gdip/main.c
+++ b/subprojects/nk_pugl/nuklear/demo/gdip/main.c
diff --git a/nuklear/demo/gdip/nuklear_gdip.h b/subprojects/nk_pugl/nuklear/demo/gdip/nuklear_gdip.h
index 8a6c8d4..8a6c8d4 100644
--- a/nuklear/demo/gdip/nuklear_gdip.h
+++ b/subprojects/nk_pugl/nuklear/demo/gdip/nuklear_gdip.h
diff --git a/nuklear/demo/glfw_opengl2/Makefile b/subprojects/nk_pugl/nuklear/demo/glfw_opengl2/Makefile
index c08d65f..c08d65f 100644
--- a/nuklear/demo/glfw_opengl2/Makefile
+++ b/subprojects/nk_pugl/nuklear/demo/glfw_opengl2/Makefile
diff --git a/nuklear/demo/glfw_opengl2/main.c b/subprojects/nk_pugl/nuklear/demo/glfw_opengl2/main.c
index 5d68bb9..5d68bb9 100644
--- a/nuklear/demo/glfw_opengl2/main.c
+++ b/subprojects/nk_pugl/nuklear/demo/glfw_opengl2/main.c
diff --git a/nuklear/demo/glfw_opengl2/nuklear_glfw_gl2.h b/subprojects/nk_pugl/nuklear/demo/glfw_opengl2/nuklear_glfw_gl2.h
index 7724b25..7724b25 100644
--- a/nuklear/demo/glfw_opengl2/nuklear_glfw_gl2.h
+++ b/subprojects/nk_pugl/nuklear/demo/glfw_opengl2/nuklear_glfw_gl2.h
diff --git a/nuklear/demo/glfw_opengl3/Makefile b/subprojects/nk_pugl/nuklear/demo/glfw_opengl3/Makefile
index da95261..da95261 100644
--- a/nuklear/demo/glfw_opengl3/Makefile
+++ b/subprojects/nk_pugl/nuklear/demo/glfw_opengl3/Makefile
diff --git a/nuklear/demo/glfw_opengl3/main.c b/subprojects/nk_pugl/nuklear/demo/glfw_opengl3/main.c
index 529e88c..529e88c 100644
--- a/nuklear/demo/glfw_opengl3/main.c
+++ b/subprojects/nk_pugl/nuklear/demo/glfw_opengl3/main.c
diff --git a/nuklear/demo/glfw_opengl3/nuklear_glfw_gl3.h b/subprojects/nk_pugl/nuklear/demo/glfw_opengl3/nuklear_glfw_gl3.h
index 8fe98fc..8fe98fc 100644
--- a/nuklear/demo/glfw_opengl3/nuklear_glfw_gl3.h
+++ b/subprojects/nk_pugl/nuklear/demo/glfw_opengl3/nuklear_glfw_gl3.h
diff --git a/nuklear/demo/node_editor.c b/subprojects/nk_pugl/nuklear/demo/node_editor.c
index d4f34c3..d4f34c3 100644
--- a/nuklear/demo/node_editor.c
+++ b/subprojects/nk_pugl/nuklear/demo/node_editor.c
diff --git a/nuklear/demo/overview.c b/subprojects/nk_pugl/nuklear/demo/overview.c
index 3c3f381..3c3f381 100644
--- a/nuklear/demo/overview.c
+++ b/subprojects/nk_pugl/nuklear/demo/overview.c
diff --git a/nuklear/demo/sdl_opengl2/Makefile b/subprojects/nk_pugl/nuklear/demo/sdl_opengl2/Makefile
index b73174a..b73174a 100644
--- a/nuklear/demo/sdl_opengl2/Makefile
+++ b/subprojects/nk_pugl/nuklear/demo/sdl_opengl2/Makefile
diff --git a/nuklear/demo/sdl_opengl2/main.c b/subprojects/nk_pugl/nuklear/demo/sdl_opengl2/main.c
index 0fbf3ff..0fbf3ff 100644
--- a/nuklear/demo/sdl_opengl2/main.c
+++ b/subprojects/nk_pugl/nuklear/demo/sdl_opengl2/main.c
diff --git a/nuklear/demo/sdl_opengl2/nuklear_sdl_gl2.h b/subprojects/nk_pugl/nuklear/demo/sdl_opengl2/nuklear_sdl_gl2.h
index 62dc64e..62dc64e 100644
--- a/nuklear/demo/sdl_opengl2/nuklear_sdl_gl2.h
+++ b/subprojects/nk_pugl/nuklear/demo/sdl_opengl2/nuklear_sdl_gl2.h
diff --git a/nuklear/demo/sdl_opengl3/Makefile b/subprojects/nk_pugl/nuklear/demo/sdl_opengl3/Makefile
index c6fcb45..c6fcb45 100644
--- a/nuklear/demo/sdl_opengl3/Makefile
+++ b/subprojects/nk_pugl/nuklear/demo/sdl_opengl3/Makefile
diff --git a/nuklear/demo/sdl_opengl3/main.c b/subprojects/nk_pugl/nuklear/demo/sdl_opengl3/main.c
index 9959d8a..9959d8a 100644
--- a/nuklear/demo/sdl_opengl3/main.c
+++ b/subprojects/nk_pugl/nuklear/demo/sdl_opengl3/main.c
diff --git a/nuklear/demo/sdl_opengl3/nuklear_sdl_gl3.h b/subprojects/nk_pugl/nuklear/demo/sdl_opengl3/nuklear_sdl_gl3.h
index eb53ebb..eb53ebb 100644
--- a/nuklear/demo/sdl_opengl3/nuklear_sdl_gl3.h
+++ b/subprojects/nk_pugl/nuklear/demo/sdl_opengl3/nuklear_sdl_gl3.h
diff --git a/nuklear/demo/sdl_opengles2/Makefile b/subprojects/nk_pugl/nuklear/demo/sdl_opengles2/Makefile
index 7385305..7385305 100644
--- a/nuklear/demo/sdl_opengles2/Makefile
+++ b/subprojects/nk_pugl/nuklear/demo/sdl_opengles2/Makefile
diff --git a/nuklear/demo/sdl_opengles2/main.c b/subprojects/nk_pugl/nuklear/demo/sdl_opengles2/main.c
index 16a271a..16a271a 100644
--- a/nuklear/demo/sdl_opengles2/main.c
+++ b/subprojects/nk_pugl/nuklear/demo/sdl_opengles2/main.c
diff --git a/nuklear/demo/sdl_opengles2/nuklear_sdl_gles2.h b/subprojects/nk_pugl/nuklear/demo/sdl_opengles2/nuklear_sdl_gles2.h
index f96e610..f96e610 100644
--- a/nuklear/demo/sdl_opengles2/nuklear_sdl_gles2.h
+++ b/subprojects/nk_pugl/nuklear/demo/sdl_opengles2/nuklear_sdl_gles2.h
diff --git a/nuklear/demo/sfml_opengl2/Makefile b/subprojects/nk_pugl/nuklear/demo/sfml_opengl2/Makefile
index 28848a4..28848a4 100644
--- a/nuklear/demo/sfml_opengl2/Makefile
+++ b/subprojects/nk_pugl/nuklear/demo/sfml_opengl2/Makefile
diff --git a/nuklear/demo/sfml_opengl2/Readme.md b/subprojects/nk_pugl/nuklear/demo/sfml_opengl2/Readme.md
index e3879c0..e3879c0 100644
--- a/nuklear/demo/sfml_opengl2/Readme.md
+++ b/subprojects/nk_pugl/nuklear/demo/sfml_opengl2/Readme.md
diff --git a/nuklear/demo/sfml_opengl2/main.cpp b/subprojects/nk_pugl/nuklear/demo/sfml_opengl2/main.cpp
index 805c1f8..805c1f8 100644
--- a/nuklear/demo/sfml_opengl2/main.cpp
+++ b/subprojects/nk_pugl/nuklear/demo/sfml_opengl2/main.cpp
diff --git a/nuklear/demo/sfml_opengl2/nuklear_sfml_gl2.h b/subprojects/nk_pugl/nuklear/demo/sfml_opengl2/nuklear_sfml_gl2.h
index 9649ec0..9649ec0 100644
--- a/nuklear/demo/sfml_opengl2/nuklear_sfml_gl2.h
+++ b/subprojects/nk_pugl/nuklear/demo/sfml_opengl2/nuklear_sfml_gl2.h
diff --git a/nuklear/demo/sfml_opengl3/Makefile b/subprojects/nk_pugl/nuklear/demo/sfml_opengl3/Makefile
index b30bf28..b30bf28 100644
--- a/nuklear/demo/sfml_opengl3/Makefile
+++ b/subprojects/nk_pugl/nuklear/demo/sfml_opengl3/Makefile
diff --git a/nuklear/demo/sfml_opengl3/Readme.md b/subprojects/nk_pugl/nuklear/demo/sfml_opengl3/Readme.md
index ac03e75..ac03e75 100644
--- a/nuklear/demo/sfml_opengl3/Readme.md
+++ b/subprojects/nk_pugl/nuklear/demo/sfml_opengl3/Readme.md
diff --git a/nuklear/demo/sfml_opengl3/main.cpp b/subprojects/nk_pugl/nuklear/demo/sfml_opengl3/main.cpp
index 5dc2a6e..5dc2a6e 100644
--- a/nuklear/demo/sfml_opengl3/main.cpp
+++ b/subprojects/nk_pugl/nuklear/demo/sfml_opengl3/main.cpp
diff --git a/nuklear/demo/sfml_opengl3/nuklear_sfml_gl3.h b/subprojects/nk_pugl/nuklear/demo/sfml_opengl3/nuklear_sfml_gl3.h
index 40b390e..40b390e 100644
--- a/nuklear/demo/sfml_opengl3/nuklear_sfml_gl3.h
+++ b/subprojects/nk_pugl/nuklear/demo/sfml_opengl3/nuklear_sfml_gl3.h
diff --git a/nuklear/demo/style.c b/subprojects/nk_pugl/nuklear/demo/style.c
index 17c48fe..17c48fe 100644
--- a/nuklear/demo/style.c
+++ b/subprojects/nk_pugl/nuklear/demo/style.c
diff --git a/nuklear/demo/x11/Makefile b/subprojects/nk_pugl/nuklear/demo/x11/Makefile
index 9057c7b..9057c7b 100644
--- a/nuklear/demo/x11/Makefile
+++ b/subprojects/nk_pugl/nuklear/demo/x11/Makefile
diff --git a/nuklear/demo/x11/main.c b/subprojects/nk_pugl/nuklear/demo/x11/main.c
index 791653d..791653d 100644
--- a/nuklear/demo/x11/main.c
+++ b/subprojects/nk_pugl/nuklear/demo/x11/main.c
diff --git a/nuklear/demo/x11/nuklear_xlib.h b/subprojects/nk_pugl/nuklear/demo/x11/nuklear_xlib.h
index 8b6b4ff..8b6b4ff 100644
--- a/nuklear/demo/x11/nuklear_xlib.h
+++ b/subprojects/nk_pugl/nuklear/demo/x11/nuklear_xlib.h
diff --git a/nuklear/demo/x11_opengl2/Makefile b/subprojects/nk_pugl/nuklear/demo/x11_opengl2/Makefile
index a3d6d32..a3d6d32 100644
--- a/nuklear/demo/x11_opengl2/Makefile
+++ b/subprojects/nk_pugl/nuklear/demo/x11_opengl2/Makefile
diff --git a/nuklear/demo/x11_opengl2/main.c b/subprojects/nk_pugl/nuklear/demo/x11_opengl2/main.c
index 12cbed1..12cbed1 100644
--- a/nuklear/demo/x11_opengl2/main.c
+++ b/subprojects/nk_pugl/nuklear/demo/x11_opengl2/main.c
diff --git a/nuklear/demo/x11_opengl2/nuklear_xlib_gl2.h b/subprojects/nk_pugl/nuklear/demo/x11_opengl2/nuklear_xlib_gl2.h
index ab36eb6..ab36eb6 100644
--- a/nuklear/demo/x11_opengl2/nuklear_xlib_gl2.h
+++ b/subprojects/nk_pugl/nuklear/demo/x11_opengl2/nuklear_xlib_gl2.h
diff --git a/nuklear/demo/x11_opengl3/Makefile b/subprojects/nk_pugl/nuklear/demo/x11_opengl3/Makefile
index a3d6d32..a3d6d32 100644
--- a/nuklear/demo/x11_opengl3/Makefile
+++ b/subprojects/nk_pugl/nuklear/demo/x11_opengl3/Makefile
diff --git a/nuklear/demo/x11_opengl3/main.c b/subprojects/nk_pugl/nuklear/demo/x11_opengl3/main.c
index 0191f98..0191f98 100644
--- a/nuklear/demo/x11_opengl3/main.c
+++ b/subprojects/nk_pugl/nuklear/demo/x11_opengl3/main.c
diff --git a/nuklear/demo/x11_opengl3/nuklear_xlib_gl3.h b/subprojects/nk_pugl/nuklear/demo/x11_opengl3/nuklear_xlib_gl3.h
index 487dbc7..487dbc7 100644
--- a/nuklear/demo/x11_opengl3/nuklear_xlib_gl3.h
+++ b/subprojects/nk_pugl/nuklear/demo/x11_opengl3/nuklear_xlib_gl3.h
diff --git a/nuklear/demo/x11_rawfb/Makefile b/subprojects/nk_pugl/nuklear/demo/x11_rawfb/Makefile
index c1a178a..c1a178a 100644
--- a/nuklear/demo/x11_rawfb/Makefile
+++ b/subprojects/nk_pugl/nuklear/demo/x11_rawfb/Makefile
diff --git a/nuklear/demo/x11_rawfb/main.c b/subprojects/nk_pugl/nuklear/demo/x11_rawfb/main.c
index c70b024..c70b024 100644
--- a/nuklear/demo/x11_rawfb/main.c
+++ b/subprojects/nk_pugl/nuklear/demo/x11_rawfb/main.c
diff --git a/nuklear/demo/x11_rawfb/nuklear_rawfb.h b/subprojects/nk_pugl/nuklear/demo/x11_rawfb/nuklear_rawfb.h
index e518780..e518780 100644
--- a/nuklear/demo/x11_rawfb/nuklear_rawfb.h
+++ b/subprojects/nk_pugl/nuklear/demo/x11_rawfb/nuklear_rawfb.h
diff --git a/nuklear/demo/x11_rawfb/nuklear_xlib.h b/subprojects/nk_pugl/nuklear/demo/x11_rawfb/nuklear_xlib.h
index 068112f..068112f 100644
--- a/nuklear/demo/x11_rawfb/nuklear_xlib.h
+++ b/subprojects/nk_pugl/nuklear/demo/x11_rawfb/nuklear_xlib.h
diff --git a/nuklear/doc/Makefile b/subprojects/nk_pugl/nuklear/doc/Makefile
index 72a598b..72a598b 100644
--- a/nuklear/doc/Makefile
+++ b/subprojects/nk_pugl/nuklear/doc/Makefile
diff --git a/nuklear/doc/build.sh b/subprojects/nk_pugl/nuklear/doc/build.sh
index 560dd59..560dd59 100755
--- a/nuklear/doc/build.sh
+++ b/subprojects/nk_pugl/nuklear/doc/build.sh
diff --git a/nuklear/doc/nuklear.html b/subprojects/nk_pugl/nuklear/doc/nuklear.html
index ad0d63b..ad0d63b 100644
--- a/nuklear/doc/nuklear.html
+++ b/subprojects/nk_pugl/nuklear/doc/nuklear.html
diff --git a/nuklear/doc/stddoc.c b/subprojects/nk_pugl/nuklear/doc/stddoc.c
index 461ddc1..461ddc1 100644
--- a/nuklear/doc/stddoc.c
+++ b/subprojects/nk_pugl/nuklear/doc/stddoc.c
diff --git a/nuklear/example/Makefile b/subprojects/nk_pugl/nuklear/example/Makefile
index a3ae6f0..a3ae6f0 100644
--- a/nuklear/example/Makefile
+++ b/subprojects/nk_pugl/nuklear/example/Makefile
diff --git a/nuklear/example/canvas.c b/subprojects/nk_pugl/nuklear/example/canvas.c
index 2a7f7a2..2a7f7a2 100644
--- a/nuklear/example/canvas.c
+++ b/subprojects/nk_pugl/nuklear/example/canvas.c
diff --git a/nuklear/example/extended.c b/subprojects/nk_pugl/nuklear/example/extended.c
index 003adf3..003adf3 100644
--- a/nuklear/example/extended.c
+++ b/subprojects/nk_pugl/nuklear/example/extended.c
diff --git a/nuklear/example/file_browser.c b/subprojects/nk_pugl/nuklear/example/file_browser.c
index 1945ff5..1945ff5 100644
--- a/nuklear/example/file_browser.c
+++ b/subprojects/nk_pugl/nuklear/example/file_browser.c
diff --git a/nuklear/example/icon/checked.png b/subprojects/nk_pugl/nuklear/example/icon/checked.png
index e4e05b2..e4e05b2 100644
--- a/nuklear/example/icon/checked.png
+++ b/subprojects/nk_pugl/nuklear/example/icon/checked.png
Binary files differ
diff --git a/nuklear/example/icon/cloud.png b/subprojects/nk_pugl/nuklear/example/icon/cloud.png
index ecc5791..ecc5791 100644
--- a/nuklear/example/icon/cloud.png
+++ b/subprojects/nk_pugl/nuklear/example/icon/cloud.png
Binary files differ
diff --git a/nuklear/example/icon/computer.png b/subprojects/nk_pugl/nuklear/example/icon/computer.png
index 29db8fc..29db8fc 100644
--- a/nuklear/example/icon/computer.png
+++ b/subprojects/nk_pugl/nuklear/example/icon/computer.png
Binary files differ
diff --git a/nuklear/example/icon/copy.png b/subprojects/nk_pugl/nuklear/example/icon/copy.png
index 0a6e979..0a6e979 100644
--- a/nuklear/example/icon/copy.png
+++ b/subprojects/nk_pugl/nuklear/example/icon/copy.png
Binary files differ
diff --git a/nuklear/example/icon/default.png b/subprojects/nk_pugl/nuklear/example/icon/default.png
index c11145a..c11145a 100644
--- a/nuklear/example/icon/default.png
+++ b/subprojects/nk_pugl/nuklear/example/icon/default.png
Binary files differ
diff --git a/nuklear/example/icon/delete.png b/subprojects/nk_pugl/nuklear/example/icon/delete.png
index 7bc6dde..7bc6dde 100644
--- a/nuklear/example/icon/delete.png
+++ b/subprojects/nk_pugl/nuklear/example/icon/delete.png
Binary files differ
diff --git a/nuklear/example/icon/desktop.png b/subprojects/nk_pugl/nuklear/example/icon/desktop.png
index b4abcfd..b4abcfd 100644
--- a/nuklear/example/icon/desktop.png
+++ b/subprojects/nk_pugl/nuklear/example/icon/desktop.png
Binary files differ
diff --git a/nuklear/example/icon/directory.png b/subprojects/nk_pugl/nuklear/example/icon/directory.png
index 4c73d37..4c73d37 100644
--- a/nuklear/example/icon/directory.png
+++ b/subprojects/nk_pugl/nuklear/example/icon/directory.png
Binary files differ
diff --git a/nuklear/example/icon/edit.png b/subprojects/nk_pugl/nuklear/example/icon/edit.png
index 62ce0b4..62ce0b4 100644
--- a/nuklear/example/icon/edit.png
+++ b/subprojects/nk_pugl/nuklear/example/icon/edit.png
Binary files differ
diff --git a/nuklear/example/icon/export.png b/subprojects/nk_pugl/nuklear/example/icon/export.png
index ff6b5aa..ff6b5aa 100644
--- a/nuklear/example/icon/export.png
+++ b/subprojects/nk_pugl/nuklear/example/icon/export.png
Binary files differ
diff --git a/nuklear/example/icon/font.png b/subprojects/nk_pugl/nuklear/example/icon/font.png
index 918e9bf..918e9bf 100644
--- a/nuklear/example/icon/font.png
+++ b/subprojects/nk_pugl/nuklear/example/icon/font.png
Binary files differ
diff --git a/nuklear/example/icon/home.png b/subprojects/nk_pugl/nuklear/example/icon/home.png
index 8560626..8560626 100644
--- a/nuklear/example/icon/home.png
+++ b/subprojects/nk_pugl/nuklear/example/icon/home.png
Binary files differ
diff --git a/nuklear/example/icon/img.png b/subprojects/nk_pugl/nuklear/example/icon/img.png
index 1985957..1985957 100644
--- a/nuklear/example/icon/img.png
+++ b/subprojects/nk_pugl/nuklear/example/icon/img.png
Binary files differ
diff --git a/nuklear/example/icon/movie.png b/subprojects/nk_pugl/nuklear/example/icon/movie.png
index 5227883..5227883 100644
--- a/nuklear/example/icon/movie.png
+++ b/subprojects/nk_pugl/nuklear/example/icon/movie.png
Binary files differ
diff --git a/nuklear/example/icon/music.png b/subprojects/nk_pugl/nuklear/example/icon/music.png
index 0f1415c..0f1415c 100644
--- a/nuklear/example/icon/music.png
+++ b/subprojects/nk_pugl/nuklear/example/icon/music.png
Binary files differ
diff --git a/nuklear/example/icon/next.png b/subprojects/nk_pugl/nuklear/example/icon/next.png
index af0b98d..af0b98d 100644
--- a/nuklear/example/icon/next.png
+++ b/subprojects/nk_pugl/nuklear/example/icon/next.png
Binary files differ
diff --git a/nuklear/example/icon/pause.png b/subprojects/nk_pugl/nuklear/example/icon/pause.png
index 7d6367e..7d6367e 100644
--- a/nuklear/example/icon/pause.png
+++ b/subprojects/nk_pugl/nuklear/example/icon/pause.png
Binary files differ
diff --git a/nuklear/example/icon/pen.png b/subprojects/nk_pugl/nuklear/example/icon/pen.png
index 10c851c..10c851c 100644
--- a/nuklear/example/icon/pen.png
+++ b/subprojects/nk_pugl/nuklear/example/icon/pen.png
Binary files differ
diff --git a/nuklear/example/icon/phone.png b/subprojects/nk_pugl/nuklear/example/icon/phone.png
index 5e6f613..5e6f613 100644
--- a/nuklear/example/icon/phone.png
+++ b/subprojects/nk_pugl/nuklear/example/icon/phone.png
Binary files differ
diff --git a/nuklear/example/icon/plane.png b/subprojects/nk_pugl/nuklear/example/icon/plane.png
index 3a98489..3a98489 100644
--- a/nuklear/example/icon/plane.png
+++ b/subprojects/nk_pugl/nuklear/example/icon/plane.png
Binary files differ
diff --git a/nuklear/example/icon/play.png b/subprojects/nk_pugl/nuklear/example/icon/play.png
index 9c9e8f0..9c9e8f0 100644
--- a/nuklear/example/icon/play.png
+++ b/subprojects/nk_pugl/nuklear/example/icon/play.png
Binary files differ
diff --git a/nuklear/example/icon/prev.png b/subprojects/nk_pugl/nuklear/example/icon/prev.png
index 0eecc2e..0eecc2e 100644
--- a/nuklear/example/icon/prev.png
+++ b/subprojects/nk_pugl/nuklear/example/icon/prev.png
Binary files differ
diff --git a/nuklear/example/icon/rocket.png b/subprojects/nk_pugl/nuklear/example/icon/rocket.png
index ea8e187..ea8e187 100644
--- a/nuklear/example/icon/rocket.png
+++ b/subprojects/nk_pugl/nuklear/example/icon/rocket.png
Binary files differ
diff --git a/nuklear/example/icon/settings.png b/subprojects/nk_pugl/nuklear/example/icon/settings.png
index e6e13f8..e6e13f8 100644
--- a/nuklear/example/icon/settings.png
+++ b/subprojects/nk_pugl/nuklear/example/icon/settings.png
Binary files differ
diff --git a/nuklear/example/icon/stop.png b/subprojects/nk_pugl/nuklear/example/icon/stop.png
index 6742baf..6742baf 100644
--- a/nuklear/example/icon/stop.png
+++ b/subprojects/nk_pugl/nuklear/example/icon/stop.png
Binary files differ
diff --git a/nuklear/example/icon/text.png b/subprojects/nk_pugl/nuklear/example/icon/text.png
index 136e534..136e534 100644
--- a/nuklear/example/icon/text.png
+++ b/subprojects/nk_pugl/nuklear/example/icon/text.png
Binary files differ
diff --git a/nuklear/example/icon/tools.png b/subprojects/nk_pugl/nuklear/example/icon/tools.png
index 412ff85..412ff85 100644
--- a/nuklear/example/icon/tools.png
+++ b/subprojects/nk_pugl/nuklear/example/icon/tools.png
Binary files differ
diff --git a/nuklear/example/icon/unchecked.png b/subprojects/nk_pugl/nuklear/example/icon/unchecked.png
index fca94d2..fca94d2 100644
--- a/nuklear/example/icon/unchecked.png
+++ b/subprojects/nk_pugl/nuklear/example/icon/unchecked.png
Binary files differ
diff --git a/nuklear/example/icon/volume.png b/subprojects/nk_pugl/nuklear/example/icon/volume.png
index 8e86fa9..8e86fa9 100644
--- a/nuklear/example/icon/volume.png
+++ b/subprojects/nk_pugl/nuklear/example/icon/volume.png
Binary files differ
diff --git a/nuklear/example/icon/wifi.png b/subprojects/nk_pugl/nuklear/example/icon/wifi.png
index 270d55d..270d55d 100644
--- a/nuklear/example/icon/wifi.png
+++ b/subprojects/nk_pugl/nuklear/example/icon/wifi.png
Binary files differ
diff --git a/nuklear/example/images/image1.png b/subprojects/nk_pugl/nuklear/example/images/image1.png
index 66a2b63..66a2b63 100644
--- a/nuklear/example/images/image1.png
+++ b/subprojects/nk_pugl/nuklear/example/images/image1.png
Binary files differ
diff --git a/nuklear/example/images/image2.png b/subprojects/nk_pugl/nuklear/example/images/image2.png
index 4acafe5..4acafe5 100644
--- a/nuklear/example/images/image2.png
+++ b/subprojects/nk_pugl/nuklear/example/images/image2.png
Binary files differ
diff --git a/nuklear/example/images/image3.png b/subprojects/nk_pugl/nuklear/example/images/image3.png
index 4dfe664..4dfe664 100644
--- a/nuklear/example/images/image3.png
+++ b/subprojects/nk_pugl/nuklear/example/images/image3.png
Binary files differ
diff --git a/nuklear/example/images/image4.png b/subprojects/nk_pugl/nuklear/example/images/image4.png
index d2f16d0..d2f16d0 100644
--- a/nuklear/example/images/image4.png
+++ b/subprojects/nk_pugl/nuklear/example/images/image4.png
Binary files differ
diff --git a/nuklear/example/images/image5.png b/subprojects/nk_pugl/nuklear/example/images/image5.png
index 852fd70..852fd70 100644
--- a/nuklear/example/images/image5.png
+++ b/subprojects/nk_pugl/nuklear/example/images/image5.png
Binary files differ
diff --git a/nuklear/example/images/image6.png b/subprojects/nk_pugl/nuklear/example/images/image6.png
index 0e261cb..0e261cb 100644
--- a/nuklear/example/images/image6.png
+++ b/subprojects/nk_pugl/nuklear/example/images/image6.png
Binary files differ
diff --git a/nuklear/example/images/image7.png b/subprojects/nk_pugl/nuklear/example/images/image7.png
index f61325b..f61325b 100644
--- a/nuklear/example/images/image7.png
+++ b/subprojects/nk_pugl/nuklear/example/images/image7.png
Binary files differ
diff --git a/nuklear/example/images/image8.png b/subprojects/nk_pugl/nuklear/example/images/image8.png
index 6b27cb8..6b27cb8 100644
--- a/nuklear/example/images/image8.png
+++ b/subprojects/nk_pugl/nuklear/example/images/image8.png
Binary files differ
diff --git a/nuklear/example/images/image9.png b/subprojects/nk_pugl/nuklear/example/images/image9.png
index 516929e..516929e 100644
--- a/nuklear/example/images/image9.png
+++ b/subprojects/nk_pugl/nuklear/example/images/image9.png
Binary files differ
diff --git a/nuklear/example/skinning.c b/subprojects/nk_pugl/nuklear/example/skinning.c
index 4020aec..4020aec 100644
--- a/nuklear/example/skinning.c
+++ b/subprojects/nk_pugl/nuklear/example/skinning.c
diff --git a/nuklear/example/skins/gwen.png b/subprojects/nk_pugl/nuklear/example/skins/gwen.png
index 40956c9..40956c9 100644
--- a/nuklear/example/skins/gwen.png
+++ b/subprojects/nk_pugl/nuklear/example/skins/gwen.png
Binary files differ
diff --git a/nuklear/example/stb_image.h b/subprojects/nk_pugl/nuklear/example/stb_image.h
index 0a9de39..0a9de39 100644
--- a/nuklear/example/stb_image.h
+++ b/subprojects/nk_pugl/nuklear/example/stb_image.h
diff --git a/nuklear/extra_font/Cousine-Regular.ttf b/subprojects/nk_pugl/nuklear/extra_font/Cousine-Regular.ttf
index 70a0bf9..70a0bf9 100644
--- a/nuklear/extra_font/Cousine-Regular.ttf
+++ b/subprojects/nk_pugl/nuklear/extra_font/Cousine-Regular.ttf
Binary files differ
diff --git a/nuklear/extra_font/DroidSans.ttf b/subprojects/nk_pugl/nuklear/extra_font/DroidSans.ttf
index 767c63a..767c63a 100644
--- a/nuklear/extra_font/DroidSans.ttf
+++ b/subprojects/nk_pugl/nuklear/extra_font/DroidSans.ttf
Binary files differ
diff --git a/nuklear/extra_font/Karla-Regular.ttf b/subprojects/nk_pugl/nuklear/extra_font/Karla-Regular.ttf
index 81b3de6..81b3de6 100644
--- a/nuklear/extra_font/Karla-Regular.ttf
+++ b/subprojects/nk_pugl/nuklear/extra_font/Karla-Regular.ttf
Binary files differ
diff --git a/nuklear/extra_font/ProggyClean.ttf b/subprojects/nk_pugl/nuklear/extra_font/ProggyClean.ttf
index 0270cdf..0270cdf 100644
--- a/nuklear/extra_font/ProggyClean.ttf
+++ b/subprojects/nk_pugl/nuklear/extra_font/ProggyClean.ttf
Binary files differ
diff --git a/nuklear/extra_font/ProggyTiny.ttf b/subprojects/nk_pugl/nuklear/extra_font/ProggyTiny.ttf
index 1c4312c..1c4312c 100644
--- a/nuklear/extra_font/ProggyTiny.ttf
+++ b/subprojects/nk_pugl/nuklear/extra_font/ProggyTiny.ttf
Binary files differ
diff --git a/nuklear/extra_font/Raleway-Bold.ttf b/subprojects/nk_pugl/nuklear/extra_font/Raleway-Bold.ttf
index 7aa37f0..7aa37f0 100644
--- a/nuklear/extra_font/Raleway-Bold.ttf
+++ b/subprojects/nk_pugl/nuklear/extra_font/Raleway-Bold.ttf
Binary files differ
diff --git a/nuklear/extra_font/Roboto-Bold.ttf b/subprojects/nk_pugl/nuklear/extra_font/Roboto-Bold.ttf
index aaf374d..aaf374d 100644
--- a/nuklear/extra_font/Roboto-Bold.ttf
+++ b/subprojects/nk_pugl/nuklear/extra_font/Roboto-Bold.ttf
Binary files differ
diff --git a/nuklear/extra_font/Roboto-Light.ttf b/subprojects/nk_pugl/nuklear/extra_font/Roboto-Light.ttf
index 664e1b2..664e1b2 100644
--- a/nuklear/extra_font/Roboto-Light.ttf
+++ b/subprojects/nk_pugl/nuklear/extra_font/Roboto-Light.ttf
Binary files differ
diff --git a/nuklear/extra_font/Roboto-Regular.ttf b/subprojects/nk_pugl/nuklear/extra_font/Roboto-Regular.ttf
index 3e6e2e7..3e6e2e7 100644
--- a/nuklear/extra_font/Roboto-Regular.ttf
+++ b/subprojects/nk_pugl/nuklear/extra_font/Roboto-Regular.ttf
Binary files differ
diff --git a/nuklear/extra_font/kenvector_future.ttf b/subprojects/nk_pugl/nuklear/extra_font/kenvector_future.ttf
index 39ebdfa..39ebdfa 100644
--- a/nuklear/extra_font/kenvector_future.ttf
+++ b/subprojects/nk_pugl/nuklear/extra_font/kenvector_future.ttf
Binary files differ
diff --git a/nuklear/extra_font/kenvector_future_thin.ttf b/subprojects/nk_pugl/nuklear/extra_font/kenvector_future_thin.ttf
index 9f4b4fa..9f4b4fa 100644
--- a/nuklear/extra_font/kenvector_future_thin.ttf
+++ b/subprojects/nk_pugl/nuklear/extra_font/kenvector_future_thin.ttf
Binary files differ
diff --git a/nuklear/nuklear.h b/subprojects/nk_pugl/nuklear/nuklear.h
index dd423b9..dd423b9 100644
--- a/nuklear/nuklear.h
+++ b/subprojects/nk_pugl/nuklear/nuklear.h
diff --git a/nuklear/package.json b/subprojects/nk_pugl/nuklear/package.json
index edff924..edff924 100644
--- a/nuklear/package.json
+++ b/subprojects/nk_pugl/nuklear/package.json
diff --git a/pugl/.clang-format b/subprojects/nk_pugl/pugl/.clang-format
index 7b30bd2..7b30bd2 100644
--- a/pugl/.clang-format
+++ b/subprojects/nk_pugl/pugl/.clang-format
diff --git a/pugl/.clang-tidy b/subprojects/nk_pugl/pugl/.clang-tidy
index 1e40901..1e40901 100644
--- a/pugl/.clang-tidy
+++ b/subprojects/nk_pugl/pugl/.clang-tidy
diff --git a/pugl/.clant.json b/subprojects/nk_pugl/pugl/.clant.json
index 6f48901..6f48901 100644
--- a/pugl/.clant.json
+++ b/subprojects/nk_pugl/pugl/.clant.json
diff --git a/pugl/.editorconfig b/subprojects/nk_pugl/pugl/.editorconfig
index c2d35dd..c2d35dd 100644
--- a/pugl/.editorconfig
+++ b/subprojects/nk_pugl/pugl/.editorconfig
diff --git a/pugl/.gitattributes b/subprojects/nk_pugl/pugl/.gitattributes
index 32967c1..32967c1 100644
--- a/pugl/.gitattributes
+++ b/subprojects/nk_pugl/pugl/.gitattributes
diff --git a/pugl/.gitignore b/subprojects/nk_pugl/pugl/.gitignore
index dad71c3..dad71c3 100644
--- a/pugl/.gitignore
+++ b/subprojects/nk_pugl/pugl/.gitignore
diff --git a/pugl/.gitlab-ci.yml b/subprojects/nk_pugl/pugl/.gitlab-ci.yml
index c0d0330..c0d0330 100644
--- a/pugl/.gitlab-ci.yml
+++ b/subprojects/nk_pugl/pugl/.gitlab-ci.yml
diff --git a/pugl/.gitmodules b/subprojects/nk_pugl/pugl/.gitmodules
index cc8b569..cc8b569 100644
--- a/pugl/.gitmodules
+++ b/subprojects/nk_pugl/pugl/.gitmodules
diff --git a/pugl/.includes.imp b/subprojects/nk_pugl/pugl/.includes.imp
index 74a3105..74a3105 100644
--- a/pugl/.includes.imp
+++ b/subprojects/nk_pugl/pugl/.includes.imp
diff --git a/pugl/AUTHORS b/subprojects/nk_pugl/pugl/AUTHORS
index 99f6dac..99f6dac 100644
--- a/pugl/AUTHORS
+++ b/subprojects/nk_pugl/pugl/AUTHORS
diff --git a/pugl/COPYING b/subprojects/nk_pugl/pugl/COPYING
index 63e6829..63e6829 100644
--- a/pugl/COPYING
+++ b/subprojects/nk_pugl/pugl/COPYING
diff --git a/pugl/README.md b/subprojects/nk_pugl/pugl/README.md
index 97906a8..97906a8 100644
--- a/pugl/README.md
+++ b/subprojects/nk_pugl/pugl/README.md
diff --git a/pugl/bindings/cxx/include/.clang-tidy b/subprojects/nk_pugl/pugl/bindings/cxx/include/.clang-tidy
index 816223d..816223d 100644
--- a/pugl/bindings/cxx/include/.clang-tidy
+++ b/subprojects/nk_pugl/pugl/bindings/cxx/include/.clang-tidy
diff --git a/pugl/bindings/cxx/include/pugl/cairo.hpp b/subprojects/nk_pugl/pugl/bindings/cxx/include/pugl/cairo.hpp
index 126bfe3..126bfe3 100644
--- a/pugl/bindings/cxx/include/pugl/cairo.hpp
+++ b/subprojects/nk_pugl/pugl/bindings/cxx/include/pugl/cairo.hpp
diff --git a/pugl/bindings/cxx/include/pugl/gl.hpp b/subprojects/nk_pugl/pugl/bindings/cxx/include/pugl/gl.hpp
index c845d80..c845d80 100644
--- a/pugl/bindings/cxx/include/pugl/gl.hpp
+++ b/subprojects/nk_pugl/pugl/bindings/cxx/include/pugl/gl.hpp
diff --git a/pugl/bindings/cxx/include/pugl/pugl.hpp b/subprojects/nk_pugl/pugl/bindings/cxx/include/pugl/pugl.hpp
index 9e65589..9e65589 100644
--- a/pugl/bindings/cxx/include/pugl/pugl.hpp
+++ b/subprojects/nk_pugl/pugl/bindings/cxx/include/pugl/pugl.hpp
diff --git a/pugl/bindings/cxx/include/pugl/stub.hpp b/subprojects/nk_pugl/pugl/bindings/cxx/include/pugl/stub.hpp
index 6946fe0..6946fe0 100644
--- a/pugl/bindings/cxx/include/pugl/stub.hpp
+++ b/subprojects/nk_pugl/pugl/bindings/cxx/include/pugl/stub.hpp
diff --git a/pugl/bindings/cxx/include/pugl/vulkan.hpp b/subprojects/nk_pugl/pugl/bindings/cxx/include/pugl/vulkan.hpp
index 2612578..2612578 100644
--- a/pugl/bindings/cxx/include/pugl/vulkan.hpp
+++ b/subprojects/nk_pugl/pugl/bindings/cxx/include/pugl/vulkan.hpp
diff --git a/pugl/doc/_static/custom.css b/subprojects/nk_pugl/pugl/doc/_static/custom.css
index 60aa759..60aa759 100644
--- a/pugl/doc/_static/custom.css
+++ b/subprojects/nk_pugl/pugl/doc/_static/custom.css
diff --git a/pugl/doc/_templates/about.html b/subprojects/nk_pugl/pugl/doc/_templates/about.html
index 5bbadbe..5bbadbe 100644
--- a/pugl/doc/_templates/about.html
+++ b/subprojects/nk_pugl/pugl/doc/_templates/about.html
diff --git a/pugl/doc/c/Doxyfile b/subprojects/nk_pugl/pugl/doc/c/Doxyfile
index bdc3a46..bdc3a46 100644
--- a/pugl/doc/c/Doxyfile
+++ b/subprojects/nk_pugl/pugl/doc/c/Doxyfile
diff --git a/pugl/doc/c/index.rst b/subprojects/nk_pugl/pugl/doc/c/index.rst
index 6f046de..6f046de 100644
--- a/pugl/doc/c/index.rst
+++ b/subprojects/nk_pugl/pugl/doc/c/index.rst
diff --git a/pugl/doc/c/overview.rst b/subprojects/nk_pugl/pugl/doc/c/overview.rst
index 3ebe21e..3ebe21e 100644
--- a/pugl/doc/c/overview.rst
+++ b/subprojects/nk_pugl/pugl/doc/c/overview.rst
diff --git a/pugl/doc/c/reference.rst b/subprojects/nk_pugl/pugl/doc/c/reference.rst
index 21a187f..21a187f 100644
--- a/pugl/doc/c/reference.rst
+++ b/subprojects/nk_pugl/pugl/doc/c/reference.rst
diff --git a/pugl/doc/c/wscript b/subprojects/nk_pugl/pugl/doc/c/wscript
index 4e0fbc9..4e0fbc9 100644
--- a/pugl/doc/c/wscript
+++ b/subprojects/nk_pugl/pugl/doc/c/wscript
diff --git a/pugl/doc/conf.py.in b/subprojects/nk_pugl/pugl/doc/conf.py.in
index 9ca7bfa..9ca7bfa 100644
--- a/pugl/doc/conf.py.in
+++ b/subprojects/nk_pugl/pugl/doc/conf.py.in
diff --git a/pugl/doc/cpp/Doxyfile b/subprojects/nk_pugl/pugl/doc/cpp/Doxyfile
index 0f5f636..0f5f636 100644
--- a/pugl/doc/cpp/Doxyfile
+++ b/subprojects/nk_pugl/pugl/doc/cpp/Doxyfile
diff --git a/pugl/doc/cpp/c-reference.rst b/subprojects/nk_pugl/pugl/doc/cpp/c-reference.rst
index 546e4d3..546e4d3 100644
--- a/pugl/doc/cpp/c-reference.rst
+++ b/subprojects/nk_pugl/pugl/doc/cpp/c-reference.rst
diff --git a/pugl/doc/cpp/cpp-reference.rst b/subprojects/nk_pugl/pugl/doc/cpp/cpp-reference.rst
index 96c523c..96c523c 100644
--- a/pugl/doc/cpp/cpp-reference.rst
+++ b/subprojects/nk_pugl/pugl/doc/cpp/cpp-reference.rst
diff --git a/pugl/doc/cpp/index.rst b/subprojects/nk_pugl/pugl/doc/cpp/index.rst
index c3d330e..c3d330e 100644
--- a/pugl/doc/cpp/index.rst
+++ b/subprojects/nk_pugl/pugl/doc/cpp/index.rst
diff --git a/pugl/doc/cpp/overview.rst b/subprojects/nk_pugl/pugl/doc/cpp/overview.rst
index 5fffe37..5fffe37 100644
--- a/pugl/doc/cpp/overview.rst
+++ b/subprojects/nk_pugl/pugl/doc/cpp/overview.rst
diff --git a/pugl/doc/cpp/wscript b/subprojects/nk_pugl/pugl/doc/cpp/wscript
index a7aefc1..a7aefc1 100644
--- a/pugl/doc/cpp/wscript
+++ b/subprojects/nk_pugl/pugl/doc/cpp/wscript
diff --git a/pugl/doc/deployment.rst b/subprojects/nk_pugl/pugl/doc/deployment.rst
index ffbeae9..ffbeae9 100644
--- a/pugl/doc/deployment.rst
+++ b/subprojects/nk_pugl/pugl/doc/deployment.rst
diff --git a/pugl/doc/mainpage.md b/subprojects/nk_pugl/pugl/doc/mainpage.md
index 92f7409..92f7409 100644
--- a/pugl/doc/mainpage.md
+++ b/subprojects/nk_pugl/pugl/doc/mainpage.md
diff --git a/pugl/doc/pugl.rst b/subprojects/nk_pugl/pugl/doc/pugl.rst
index c48021b..c48021b 100644
--- a/pugl/doc/pugl.rst
+++ b/subprojects/nk_pugl/pugl/doc/pugl.rst
diff --git a/pugl/examples/.clang-tidy b/subprojects/nk_pugl/pugl/examples/.clang-tidy
index fdfa4ea..fdfa4ea 100644
--- a/pugl/examples/.clang-tidy
+++ b/subprojects/nk_pugl/pugl/examples/.clang-tidy
diff --git a/pugl/examples/cube_view.h b/subprojects/nk_pugl/pugl/examples/cube_view.h
index 71ae88d..71ae88d 100644
--- a/pugl/examples/cube_view.h
+++ b/subprojects/nk_pugl/pugl/examples/cube_view.h
diff --git a/pugl/examples/demo_utils.h b/subprojects/nk_pugl/pugl/examples/demo_utils.h
index 2dda756..2dda756 100644
--- a/pugl/examples/demo_utils.h
+++ b/subprojects/nk_pugl/pugl/examples/demo_utils.h
diff --git a/pugl/examples/file_utils.c b/subprojects/nk_pugl/pugl/examples/file_utils.c
index 8ecbca4..8ecbca4 100644
--- a/pugl/examples/file_utils.c
+++ b/subprojects/nk_pugl/pugl/examples/file_utils.c
diff --git a/pugl/examples/file_utils.h b/subprojects/nk_pugl/pugl/examples/file_utils.h
index 1530157..1530157 100644
--- a/pugl/examples/file_utils.h
+++ b/subprojects/nk_pugl/pugl/examples/file_utils.h
diff --git a/pugl/examples/glad/glad.c b/subprojects/nk_pugl/pugl/examples/glad/glad.c
index 38f442c..38f442c 100644
--- a/pugl/examples/glad/glad.c
+++ b/subprojects/nk_pugl/pugl/examples/glad/glad.c
diff --git a/pugl/examples/glad/glad.h b/subprojects/nk_pugl/pugl/examples/glad/glad.h
index 9efb229..9efb229 100644
--- a/pugl/examples/glad/glad.h
+++ b/subprojects/nk_pugl/pugl/examples/glad/glad.h
diff --git a/pugl/examples/glad/khrplatform.h b/subprojects/nk_pugl/pugl/examples/glad/khrplatform.h
index 5b55ea2..5b55ea2 100644
--- a/pugl/examples/glad/khrplatform.h
+++ b/subprojects/nk_pugl/pugl/examples/glad/khrplatform.h
diff --git a/pugl/examples/pugl_cairo_demo.c b/subprojects/nk_pugl/pugl/examples/pugl_cairo_demo.c
index 4da0caf..4da0caf 100644
--- a/pugl/examples/pugl_cairo_demo.c
+++ b/subprojects/nk_pugl/pugl/examples/pugl_cairo_demo.c
diff --git a/pugl/examples/pugl_cursor_demo.c b/subprojects/nk_pugl/pugl/examples/pugl_cursor_demo.c
index 60ec3d3..60ec3d3 100644
--- a/pugl/examples/pugl_cursor_demo.c
+++ b/subprojects/nk_pugl/pugl/examples/pugl_cursor_demo.c
diff --git a/pugl/examples/pugl_cxx_demo.cpp b/subprojects/nk_pugl/pugl/examples/pugl_cxx_demo.cpp
index 4914724..4914724 100644
--- a/pugl/examples/pugl_cxx_demo.cpp
+++ b/subprojects/nk_pugl/pugl/examples/pugl_cxx_demo.cpp
diff --git a/pugl/examples/pugl_embed_demo.c b/subprojects/nk_pugl/pugl/examples/pugl_embed_demo.c
index 0e12ddb..0e12ddb 100644
--- a/pugl/examples/pugl_embed_demo.c
+++ b/subprojects/nk_pugl/pugl/examples/pugl_embed_demo.c
diff --git a/pugl/examples/pugl_print_events.c b/subprojects/nk_pugl/pugl/examples/pugl_print_events.c
index dfa217e..dfa217e 100644
--- a/pugl/examples/pugl_print_events.c
+++ b/subprojects/nk_pugl/pugl/examples/pugl_print_events.c
diff --git a/pugl/examples/pugl_shader_demo.c b/subprojects/nk_pugl/pugl/examples/pugl_shader_demo.c
index 087afc5..087afc5 100644
--- a/pugl/examples/pugl_shader_demo.c
+++ b/subprojects/nk_pugl/pugl/examples/pugl_shader_demo.c
diff --git a/pugl/examples/pugl_vulkan_cxx_demo.cpp b/subprojects/nk_pugl/pugl/examples/pugl_vulkan_cxx_demo.cpp
index e816091..e816091 100644
--- a/pugl/examples/pugl_vulkan_cxx_demo.cpp
+++ b/subprojects/nk_pugl/pugl/examples/pugl_vulkan_cxx_demo.cpp
diff --git a/pugl/examples/pugl_vulkan_demo.c b/subprojects/nk_pugl/pugl/examples/pugl_vulkan_demo.c
index 0dfbadd..0dfbadd 100644
--- a/pugl/examples/pugl_vulkan_demo.c
+++ b/subprojects/nk_pugl/pugl/examples/pugl_vulkan_demo.c
diff --git a/pugl/examples/pugl_window_demo.c b/subprojects/nk_pugl/pugl/examples/pugl_window_demo.c
index be320dd..be320dd 100644
--- a/pugl/examples/pugl_window_demo.c
+++ b/subprojects/nk_pugl/pugl/examples/pugl_window_demo.c
diff --git a/pugl/examples/rects.h b/subprojects/nk_pugl/pugl/examples/rects.h
index b99d9f0..b99d9f0 100644
--- a/pugl/examples/rects.h
+++ b/subprojects/nk_pugl/pugl/examples/rects.h
diff --git a/pugl/examples/shader_utils.h b/subprojects/nk_pugl/pugl/examples/shader_utils.h
index 2575f47..2575f47 100644
--- a/pugl/examples/shader_utils.h
+++ b/subprojects/nk_pugl/pugl/examples/shader_utils.h
diff --git a/pugl/examples/shaders/header_330.glsl b/subprojects/nk_pugl/pugl/examples/shaders/header_330.glsl
index 59d5f6f..59d5f6f 100644
--- a/pugl/examples/shaders/header_330.glsl
+++ b/subprojects/nk_pugl/pugl/examples/shaders/header_330.glsl
diff --git a/pugl/examples/shaders/header_420.glsl b/subprojects/nk_pugl/pugl/examples/shaders/header_420.glsl
index 2beaad0..2beaad0 100644
--- a/pugl/examples/shaders/header_420.glsl
+++ b/subprojects/nk_pugl/pugl/examples/shaders/header_420.glsl
diff --git a/pugl/examples/shaders/rect.frag b/subprojects/nk_pugl/pugl/examples/shaders/rect.frag
index 33bfbb2..33bfbb2 100644
--- a/pugl/examples/shaders/rect.frag
+++ b/subprojects/nk_pugl/pugl/examples/shaders/rect.frag
diff --git a/pugl/examples/shaders/rect.vert b/subprojects/nk_pugl/pugl/examples/shaders/rect.vert
index 2c7b5f1..2c7b5f1 100644
--- a/pugl/examples/shaders/rect.vert
+++ b/subprojects/nk_pugl/pugl/examples/shaders/rect.vert
diff --git a/pugl/examples/sybok.hpp b/subprojects/nk_pugl/pugl/examples/sybok.hpp
index 7740824..7740824 100644
--- a/pugl/examples/sybok.hpp
+++ b/subprojects/nk_pugl/pugl/examples/sybok.hpp
diff --git a/pugl/include/.clang-tidy b/subprojects/nk_pugl/pugl/include/.clang-tidy
index dd2fd47..dd2fd47 100644
--- a/pugl/include/.clang-tidy
+++ b/subprojects/nk_pugl/pugl/include/.clang-tidy
diff --git a/pugl/include/pugl/cairo.h b/subprojects/nk_pugl/pugl/include/pugl/cairo.h
index 48e868e..48e868e 100644
--- a/pugl/include/pugl/cairo.h
+++ b/subprojects/nk_pugl/pugl/include/pugl/cairo.h
diff --git a/pugl/include/pugl/gl.h b/subprojects/nk_pugl/pugl/include/pugl/gl.h
index 51c4a7d..51c4a7d 100644
--- a/pugl/include/pugl/gl.h
+++ b/subprojects/nk_pugl/pugl/include/pugl/gl.h
diff --git a/pugl/include/pugl/pugl.h b/subprojects/nk_pugl/pugl/include/pugl/pugl.h
index 8a261c7..8a261c7 100644
--- a/pugl/include/pugl/pugl.h
+++ b/subprojects/nk_pugl/pugl/include/pugl/pugl.h
diff --git a/pugl/include/pugl/stub.h b/subprojects/nk_pugl/pugl/include/pugl/stub.h
index d1a699a..d1a699a 100644
--- a/pugl/include/pugl/stub.h
+++ b/subprojects/nk_pugl/pugl/include/pugl/stub.h
diff --git a/pugl/include/pugl/vulkan.h b/subprojects/nk_pugl/pugl/include/pugl/vulkan.h
index f12ad97..f12ad97 100644
--- a/pugl/include/pugl/vulkan.h
+++ b/subprojects/nk_pugl/pugl/include/pugl/vulkan.h
diff --git a/pugl/pugl.pc.in b/subprojects/nk_pugl/pugl/pugl.pc.in
index 2cfa644..2cfa644 100644
--- a/pugl/pugl.pc.in
+++ b/subprojects/nk_pugl/pugl/pugl.pc.in
diff --git a/pugl/resources/Info.plist.in b/subprojects/nk_pugl/pugl/resources/Info.plist.in
index a08dbd0..a08dbd0 100644
--- a/pugl/resources/Info.plist.in
+++ b/subprojects/nk_pugl/pugl/resources/Info.plist.in
diff --git a/pugl/resources/pugl.ipe b/subprojects/nk_pugl/pugl/resources/pugl.ipe
index 238c09c..238c09c 100644
--- a/pugl/resources/pugl.ipe
+++ b/subprojects/nk_pugl/pugl/resources/pugl.ipe
diff --git a/pugl/resources/pugl.png b/subprojects/nk_pugl/pugl/resources/pugl.png
index 4641660..4641660 100644
--- a/pugl/resources/pugl.png
+++ b/subprojects/nk_pugl/pugl/resources/pugl.png
Binary files differ
diff --git a/pugl/resources/pugl.svg b/subprojects/nk_pugl/pugl/resources/pugl.svg
index 93189f4..93189f4 100644
--- a/pugl/resources/pugl.svg
+++ b/subprojects/nk_pugl/pugl/resources/pugl.svg
diff --git a/pugl/scripts/dox_to_sphinx.py b/subprojects/nk_pugl/pugl/scripts/dox_to_sphinx.py
index b4eee9f..b4eee9f 100755
--- a/pugl/scripts/dox_to_sphinx.py
+++ b/subprojects/nk_pugl/pugl/scripts/dox_to_sphinx.py
diff --git a/pugl/src/.clang-tidy b/subprojects/nk_pugl/pugl/src/.clang-tidy
index 11b620e..11b620e 100644
--- a/pugl/src/.clang-tidy
+++ b/subprojects/nk_pugl/pugl/src/.clang-tidy
diff --git a/pugl/src/implementation.c b/subprojects/nk_pugl/pugl/src/implementation.c
index 47b52b8..47b52b8 100644
--- a/pugl/src/implementation.c
+++ b/subprojects/nk_pugl/pugl/src/implementation.c
diff --git a/pugl/src/implementation.h b/subprojects/nk_pugl/pugl/src/implementation.h
index 8c5398c..8c5398c 100644
--- a/pugl/src/implementation.h
+++ b/subprojects/nk_pugl/pugl/src/implementation.h
diff --git a/pugl/src/mac.h b/subprojects/nk_pugl/pugl/src/mac.h
index 35e6e0d..35e6e0d 100644
--- a/pugl/src/mac.h
+++ b/subprojects/nk_pugl/pugl/src/mac.h
diff --git a/pugl/src/mac.m b/subprojects/nk_pugl/pugl/src/mac.m
index 58f16c7..58f16c7 100644
--- a/pugl/src/mac.m
+++ b/subprojects/nk_pugl/pugl/src/mac.m
diff --git a/pugl/src/mac_cairo.m b/subprojects/nk_pugl/pugl/src/mac_cairo.m
index 1c564a0..1c564a0 100644
--- a/pugl/src/mac_cairo.m
+++ b/subprojects/nk_pugl/pugl/src/mac_cairo.m
diff --git a/pugl/src/mac_gl.m b/subprojects/nk_pugl/pugl/src/mac_gl.m
index dd06cc0..dd06cc0 100644
--- a/pugl/src/mac_gl.m
+++ b/subprojects/nk_pugl/pugl/src/mac_gl.m
diff --git a/pugl/src/mac_stub.m b/subprojects/nk_pugl/pugl/src/mac_stub.m
index ac7bfcc..ac7bfcc 100644
--- a/pugl/src/mac_stub.m
+++ b/subprojects/nk_pugl/pugl/src/mac_stub.m
diff --git a/pugl/src/mac_vulkan.m b/subprojects/nk_pugl/pugl/src/mac_vulkan.m
index 22fff10..22fff10 100644
--- a/pugl/src/mac_vulkan.m
+++ b/subprojects/nk_pugl/pugl/src/mac_vulkan.m
diff --git a/pugl/src/stub.h b/subprojects/nk_pugl/pugl/src/stub.h
index c816679..c816679 100644
--- a/pugl/src/stub.h
+++ b/subprojects/nk_pugl/pugl/src/stub.h
diff --git a/pugl/src/types.h b/subprojects/nk_pugl/pugl/src/types.h
index 6fa658f..6fa658f 100644
--- a/pugl/src/types.h
+++ b/subprojects/nk_pugl/pugl/src/types.h
diff --git a/pugl/src/win.c b/subprojects/nk_pugl/pugl/src/win.c
index 1e11520..1e11520 100644
--- a/pugl/src/win.c
+++ b/subprojects/nk_pugl/pugl/src/win.c
diff --git a/pugl/src/win.h b/subprojects/nk_pugl/pugl/src/win.h
index ccab36a..ccab36a 100644
--- a/pugl/src/win.h
+++ b/subprojects/nk_pugl/pugl/src/win.h
diff --git a/pugl/src/win_cairo.c b/subprojects/nk_pugl/pugl/src/win_cairo.c
index 9dc5ce0..9dc5ce0 100644
--- a/pugl/src/win_cairo.c
+++ b/subprojects/nk_pugl/pugl/src/win_cairo.c
diff --git a/pugl/src/win_gl.c b/subprojects/nk_pugl/pugl/src/win_gl.c
index 4abd5ab..4abd5ab 100644
--- a/pugl/src/win_gl.c
+++ b/subprojects/nk_pugl/pugl/src/win_gl.c
diff --git a/pugl/src/win_stub.c b/subprojects/nk_pugl/pugl/src/win_stub.c
index cf86390..cf86390 100644
--- a/pugl/src/win_stub.c
+++ b/subprojects/nk_pugl/pugl/src/win_stub.c
diff --git a/pugl/src/win_vulkan.c b/subprojects/nk_pugl/pugl/src/win_vulkan.c
index a892a16..a892a16 100644
--- a/pugl/src/win_vulkan.c
+++ b/subprojects/nk_pugl/pugl/src/win_vulkan.c
diff --git a/pugl/src/x11.c b/subprojects/nk_pugl/pugl/src/x11.c
index 24054f9..24054f9 100644
--- a/pugl/src/x11.c
+++ b/subprojects/nk_pugl/pugl/src/x11.c
diff --git a/pugl/src/x11.h b/subprojects/nk_pugl/pugl/src/x11.h
index 778e5ec..778e5ec 100644
--- a/pugl/src/x11.h
+++ b/subprojects/nk_pugl/pugl/src/x11.h
diff --git a/pugl/src/x11_cairo.c b/subprojects/nk_pugl/pugl/src/x11_cairo.c
index a0e7d08..a0e7d08 100644
--- a/pugl/src/x11_cairo.c
+++ b/subprojects/nk_pugl/pugl/src/x11_cairo.c
diff --git a/pugl/src/x11_gl.c b/subprojects/nk_pugl/pugl/src/x11_gl.c
index 34152de..34152de 100644
--- a/pugl/src/x11_gl.c
+++ b/subprojects/nk_pugl/pugl/src/x11_gl.c
diff --git a/pugl/src/x11_stub.c b/subprojects/nk_pugl/pugl/src/x11_stub.c
index de89a86..de89a86 100644
--- a/pugl/src/x11_stub.c
+++ b/subprojects/nk_pugl/pugl/src/x11_stub.c
diff --git a/pugl/src/x11_vulkan.c b/subprojects/nk_pugl/pugl/src/x11_vulkan.c
index 1ff5759..1ff5759 100644
--- a/pugl/src/x11_vulkan.c
+++ b/subprojects/nk_pugl/pugl/src/x11_vulkan.c
diff --git a/pugl/test/.clang-tidy b/subprojects/nk_pugl/pugl/test/.clang-tidy
index 8014e6a..8014e6a 100644
--- a/pugl/test/.clang-tidy
+++ b/subprojects/nk_pugl/pugl/test/.clang-tidy
diff --git a/pugl/test/test_build.c b/subprojects/nk_pugl/pugl/test/test_build.c
index 957e0bd..957e0bd 100644
--- a/pugl/test/test_build.c
+++ b/subprojects/nk_pugl/pugl/test/test_build.c
diff --git a/pugl/test/test_build.cpp b/subprojects/nk_pugl/pugl/test/test_build.cpp
index 20235e8..20235e8 100644
--- a/pugl/test/test_build.cpp
+++ b/subprojects/nk_pugl/pugl/test/test_build.cpp
diff --git a/pugl/test/test_clipboard.c b/subprojects/nk_pugl/pugl/test/test_clipboard.c
index a458d00..a458d00 100644
--- a/pugl/test/test_clipboard.c
+++ b/subprojects/nk_pugl/pugl/test/test_clipboard.c
diff --git a/pugl/test/test_gl_hints.c b/subprojects/nk_pugl/pugl/test/test_gl_hints.c
index 3be3651..3be3651 100644
--- a/pugl/test/test_gl_hints.c
+++ b/subprojects/nk_pugl/pugl/test/test_gl_hints.c
diff --git a/pugl/test/test_realize.c b/subprojects/nk_pugl/pugl/test/test_realize.c
index 3c4e09a..3c4e09a 100644
--- a/pugl/test/test_realize.c
+++ b/subprojects/nk_pugl/pugl/test/test_realize.c
diff --git a/pugl/test/test_redisplay.c b/subprojects/nk_pugl/pugl/test/test_redisplay.c
index c5b9887..c5b9887 100644
--- a/pugl/test/test_redisplay.c
+++ b/subprojects/nk_pugl/pugl/test/test_redisplay.c
diff --git a/pugl/test/test_show_hide.c b/subprojects/nk_pugl/pugl/test/test_show_hide.c
index 584448c..584448c 100644
--- a/pugl/test/test_show_hide.c
+++ b/subprojects/nk_pugl/pugl/test/test_show_hide.c
diff --git a/pugl/test/test_stub_hints.c b/subprojects/nk_pugl/pugl/test/test_stub_hints.c
index 1cc1180..1cc1180 100644
--- a/pugl/test/test_stub_hints.c
+++ b/subprojects/nk_pugl/pugl/test/test_stub_hints.c
diff --git a/pugl/test/test_timer.c b/subprojects/nk_pugl/pugl/test/test_timer.c
index 18518ec..18518ec 100644
--- a/pugl/test/test_timer.c
+++ b/subprojects/nk_pugl/pugl/test/test_timer.c
diff --git a/pugl/test/test_update.c b/subprojects/nk_pugl/pugl/test/test_update.c
index 89de0b6..89de0b6 100644
--- a/pugl/test/test_update.c
+++ b/subprojects/nk_pugl/pugl/test/test_update.c
diff --git a/pugl/test/test_utils.h b/subprojects/nk_pugl/pugl/test/test_utils.h
index 2464737..2464737 100644
--- a/pugl/test/test_utils.h
+++ b/subprojects/nk_pugl/pugl/test/test_utils.h
diff --git a/pugl/waf b/subprojects/nk_pugl/pugl/waf
index 58d14c3..58d14c3 100755
--- a/pugl/waf
+++ b/subprojects/nk_pugl/pugl/waf
diff --git a/pugl/wscript b/subprojects/nk_pugl/pugl/wscript
index 1dc95c1..1dc95c1 100644
--- a/pugl/wscript
+++ b/subprojects/nk_pugl/pugl/wscript