@Krux02, nimx was originally started as an experiment with fragment shaders used to draw vector graphics by means of distance fields. I was also thrilled by the idea to use one code for native and js, even though we later added emscripten support. So you can call it a hobby project just for fun. What makes it stand out? Obviously, it is written in Nim! :) And that really means a lot to me. The goal is to make a ui lib that you can just nimble install and use right away for all platforms (including js), with no dependency headache, compiler/linker configurations, etc. Also since Nim is much more productive than C++ I expect faster development rate in general. Also it is MIT. I guess there also should be some features which I can't imagine missing in other ui libraries ;)
@moigagoo, thank you! =)
@hcorion, thanks. Err.. Actually it is a game engine editor and not a video editor, but since our artists use AfterEffects a lot for our assets, and we intend to switch to our editor completely at some point, I'd say that your assumption is not that far from truth ;). There are some ideas to turn it into a more general-purpose IDE, but we'll see how it goes.
There are some tiny parts, that would be difficult with another language. Consider an autotest code. Normally ui tests are run in a separate process because the testing code needs to be synchronous. In nimx autotests may be written like:
uiTest generalUITest:
sendMouseDownEvent(mainWindow, newPoint(50, 60))
sendMouseUpEvent(mainWindow, newPoint(50, 60))
sendMouseDownEvent(mainWindow, newPoint(50, 90))
sendMouseUpEvent(mainWindow, newPoint(50, 90))
waitUntil(someCondition)
sendMouseDownEvent(mainWindow, newPoint(50, 120))
sendMouseUpEvent(mainWindow, newPoint(50, 120))
Under the hood every statement of a test block is executed by timer with some delay allowing the main loop to run for some time. This allows to write ui tests that run on all target platforms, including mobile and web. Can't wait until JS gets closure iters support so that async stuff is available. That would allow different crazy stuff like running animations "synchronously".