about
₪iv
Notui is a UI behavior package written entirely in C# providing a robust skeleton for your UI elements. The intention here was to keep VVVV's vast drawing capabilities while eliminating the cobweb of doom usually present while patching UI logic. The result is a mostly dataflow friendly system which separates structure, stateful-logic and rendering. Note also that Notui is a C# library first and Notuiv is its VVVV implementation. This again means all the features of Notui theoretically can be accessed in VL and simply fetched from Nuget.org. This also means that you can patch your own element types and behavior delegates in VL. This is untested yet though.
But get vpm first
if you hate vpm though you have github releases: https://github.com/meso-unimpressed/Notuiv/releases :P
And also it doesn't depend on either mp.essentials nor mp.dx. Yay I guess :P
But it requires vvvv beta36+ and vux's DX11 1.1+ but 1.2+ is recommended from github. It doesn't work with beta35.8 or older because how AllowFeedback is changed to a much smarter interface in beta36. But you don't have to think about these if you use vpm ;)
.NET 4.7 is required. Make sure your Windows 7+ is updated properly or install it from https://www.microsoft.com/en-US/download/details.aspx?id=56116
Notui is available through Nuget for Visual Studio (Code) and VL.
PM> Install-Package Notui
Example:
The above thing is a girlpower patch demoing a simple application structure with Notuiv inside. This is the patch behind it:
And expanded:
As you can see it's relatively simple to set up this 2 draggable windows with stateful content and animated declarative transitions patched 100% in VVVV with Notuiv.
Features
- Separate semantics describing UI structure and its stateful realization
- Element Prototypes and their Instances
- Elements are nestable
- which means you can organize them into parents/children hierarchy and children will inherit their parent's space
- Hit-testing touches and other pointers are happening in full 3D
- with arbitrary View and Projection matrices, but it won't make your life harder in 2D
- Separate events for hovering, interacting and the beginning/ending of both.
- You also have full control over how elements are receiving touches, or blocking touches from elements beneath them.
- Special events for mouse interactions
- Notui also provides you with a Mouse wrapper (same as we're all used to in vvvv)
- Touch Intersections provide you with both world space and element space coordinates
- Intersections also have their own space which are also provided with Transforms. So you can easily create 3D content on the place of the interaction. With this you can also get the tangential space of the surface of 3D elements at the point of interaction.
- Interaction Behavior delegate classes written for CLR (C# or VL) attached to elements
- which are executed on them each frame. Currently Notui comes with few but it has an easy API to implement your own, and I also have plans for waay more:
- advanced (picture) stack sliding with inertia in 3D
- value sliders
- mouse wheel scrolling with inertia
- moving to the top on touch (only makes sense in 2D)
- and more to come...
- Several shapes for hit-testing
- Currently available:
- infinite plane and rectangle
- circle and segment
- planar arbitrary polygon,
- box and sphere
- and more to come...
- Effortless Fading in and Fading out effects even with Staggering and Declarative transform transitions
- You just feed the present list of your element prototypes into a Notui Context and it'll take care of keeping element instances for fading out which are no longer present among your prototypes. If set then Notui can also automatically apply a Damper transition for the transforms changed from the Prototype.
- Notui considers touch force
- It uses that to determine if a touch is hovering over an element or actually touching it. This way mouse interaction and touches from windows are dealt with the same semantics, but you can also supply your own touches from any other device which might actually support real force or pointer-screen distance. (like Intous tablets) Also you can do anything else with it yourself ;)
- Both Prototype elements and element Instances can hold any number of arbitrary attached objects and values
- which can be modified on Instances to keep the side-effects of your behaviors OR interact with external data represented by a Notui element. You can also attach DX11 resources.
- Multiple and nestable Notui Contexts
- which are the core of this package, managing everything including hit-testing, instantiating and organizing instances. You can have as many of them as you like, you can even attach one to any element and make it act like either "overflow: hidden" in CSS or for multiple viewports. Contextception.
- Elements are dealt with asynchronously and in parallel
- Running at least 2 times faster on modern Intel i7 CPU's than it would synchronously. Interaction Behavior delegates are also run in this parallel threads.
- In VVVV prototypes are created in a similar fashion as layers in DX11
- And fed to Context nodes which are just like Renderer nodes in DX11
- Opaq (Object Path Query) implementation on nested elements
- In a nutshell it allows nested object query on anything with couple of delegate functions (like XPath for XML) coming with md.stdl. You can also have Regex instead of regular absolute path steps. See help patch of Sift (Notui.Context Opaq) for more info.
- Notui has XML docs for all of its classes and public API's
- Notuiv in VVVV has helpful girlpower and help patches for every node*
Roadmap:
- next minor version
- Hittesting arbitrary DX11 geometry
- (De)Serialization of element instances via XML or MessagePack
- More basic interaction behaviors like Toggle buttons, radio buttons
- Maybe VL girlpower. Maybe.
- plans
- Camera movement with multitouch
- Context Behaviors
- Raymarching distance fields (maybe)
Repos:
https://github.com/meso-unimpressed/Notui
https://github.com/meso-unimpressed/Notuiv
The name comes from the fact that this library only handles structural definitions, behavioral patterns, and state-ful element management, but it's not providing ways of drawing those elements. This decision made it possible to use it in a graphics backend agnostic way and maintain complete user experience and artistic freedom.
Side note: Now for those who want to use Notui outside of VVVV don't get fooled or intimidated by the lines of code count of Notuiv implementation, that amount of boilerplate code is not a Notui specific phenomena . It's an inherent structural issue with how VVVV works. It's a general rule of thumb that if you want to implement a large library solving a big set of problems in a very modular way with lot's of information on their building blocks, VVVV's plugin interfaces requires thousands if not ten-thousands of lines boilerplate to deal with all the conditions a plugin can have. This is 100% solved in VL though.
Disclaimer on the logo: Notui have nothing to do with Israel's new shequel. That symbol just looks great and resembles an 'n' and a 'u' interlocked, throw in an 'i' and you'll get Notui \o/. But if anybody feels offended by this for any serious reason (like if an Israeli person really feel like their national currency symbol is being abused by random UI libraries for simply aesthetic reasons which has nothing to do with it, or with Israel) I'll immediately change it.
Massive!! and very stylish demo video too!
Thanks a lot and congrats ¡¡
great one Microdee!! thanks
side note : on windows 8.1 seems you need to install Microsoft .NET Framework 4.7.1 https://www.microsoft.com/en-US/download/details.aspx?id=56116
otherwise you get a System.ValueTuple´3´ error probably related to this AllowFeedback thing since tty ask for a framedelay!
@circuitb: nope I use ValueTuples so Notui requires .NET 4.7. I thought it's coming with windows updates for windows 7+. But good note, I'll add it to the requirements
Looks great guys, can't wait to test it.
I tried installing Notuiv as suggested via vpm but getting one red node though (which is Context (Notui) ). The exception dialog tells me:
System.IO.FileLoadException: Could not load file or assembly 'System.Interactive, Version=3.0.1000.0, Culture=neutral, PublicKeyToken=94bc3704cddfc263' or one of its dependencies. The located assembly's manifest definition does not match the assembly reference. (Exception from HRESULT: 0x80131040)
System : Windows 8 Home Edition, Version: 6.2, Build: 23F0, ""
Processor: Intel, Intel(R) Core(TM) i5-6200U CPU @ 2.30GHz, 2400 MHz MMX SSE SSE2 SSE3 SSSE3 64 bits DEP
Memory: 8049; free 3701
Display : 1920x1080 pixels, 32 bpp
I don't wanna spam the comments with stacks and loaded modules, so the full log is here:https://apostrophstoph.de/stuph/vvvv.exe-exception-2018-10-10.log
After a little bit of searchengining I might have an idea of what's going on, but really no idea of what to do about it.
I installed and deleted 50beta37_x64 plus the whole vpm-Notui-routine several times and let ccleaner fix the registry in between, but things didn't change :(
Same error here. Gave up after a while.
hmm I never encountered this exception, ccleaner and registry isn't likely to do anything good for this. Try deleting all *.dll.config files in md.core and in Notuiv and see if that helps.
unable to get it running :(
beta37 + dx11 1.3
github release pack in packs folder - all nodes red
vpm throws error:
Compilation error:
(7,15): error CS0246: The type or namespace name 'Newtonsoft' could not be found (are you missing a using directive or an assembly reference?)
(33,28): error CS0103: The name 'JObject' does not exist in the current context
Press any key to exit...
might be just unziping vpm with 7zip, like mentioned here vpm
Hm, deleted all (==two) *.dll.config files in md.core, but that didn't help. Actually I didn't find any in packs/Notuiv, there's only the nodes folder (and girlpower) and inside that there's the plugins folder, but no *.dll.config files in there..?
I've tried to install Notuiv (via vpm) on two other systems now: one is win7, the other is a fresh installation of win10 with all win updates. I get the same error on all three systems. So either there's something broke these days because of win-updates / .NET 4.7.1+ or I've missed something pretty basic, which seems to be the more plausible explanation, I must admit. But what?
Btw, I used 7zip.
extracted vpm with 7zip - same error.
notuiv works for ne now on beta36 with the github release!
whoa... this is beautiful
massive thanks!
@stophl: unfortunately I know as much as you do in this regard. it would be nice to look at your computer via a teamviewer session if possible to see what could cause this.
please track this issue here: https://github.com/meso-unimpressed/Notuiv/issues/1
micodee You're vvvvery welcome to do so. I'm gonna send you an email in a minute. Thanks!
would love to try the new release but v4 won't start with any version above 0.23
tried with vvvv 36, 37 and 38 on two different w10 machines, one with clean install.
in case "vvvv won't start", "vvvv crashes without error message" check the Event Viewer of Windows and in "Windows Logs/Application" see all errors. If one of them mentioning vvvv even better if its source column says ".NET Runtime" see if it says anything about Notui(v). then I can help
@microdee Same here. Windows logs two errors:
1. by ".NET Runtime"
2. it's bubbled up "Application Error":
Hope it helps you since the pack looks really promising, man!
what's after "Stapel"? according to google translate that seems to be the most important part of the message.
Nothing, sadly...
There's some WER report following.
Starting vvvv /logstartup generates a .log containing this line:
Which basically means
hmmm, just a hunch, can you go to vvvv/packs/Notuiv and delete the "factories" folder, see if it works
Hello,
same problems here with not VVVV not starting up anymore. Any leads on how to fix this? When I delete the factories folder VVVV indeed does start up. But Notui of course ain't working. Reported this on Github too, see there for details.
@systray27: answered to your issue, tl;dr: unzip vpm with 7zip.
@microdee: Thanks, I did get it running now. Curse to windows explorer unzipper!