You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Inspired by windowing systems like Xmonad and the GUIs of the Yampa arcade, a robust, extensible, and dynamic windowing system would be a great addition to Yampa's capabilities.
I came up with a rough plan of capabilities a window must have along with a number of hurdles.
Capabilities:
A window responds to inputs and passes that to its children
A window can be focused or unfocused to allow for routing input correctly
Windows may be arbitrarily nested and have arbitrarily many children (that are also windows)
A window may output events to the parent (like destruction and creation of self and siblings respectively) or for more complex behavior
A window may have zero children (e.g. a button or a text box) and can hold data relevant to its function
A window must have a Picture element (yampa-gloss) that describes its appearance
When I was thinking it over, windows reminded me of dpSwitch. The hurdle I came across was routing and the nested nature of windows; how do we nest dpSwitches (child windows) inside another dpSwitch (the parent window)?
Another conceptual challenge i came across was data relevant to specific children. Here's a contrived but salient example:
In this example, the count is shared by all of the children of window (and all of its children too). When clicking the buttons, the count would be incremented or decremented, despite being nested so deeply in a child window. But parentWindow may not care about the state window holds. And what if winCount counted some other value alongside count that neither win_l nor win_r needed to manage? What type would these windows have? How should the events of the children be routed in a clean and comprehensible (not to mention extensible and modifiable) manner?
Once these issues related to the structure of the core systems are ironed out, a minimal working implementation could be written and features could be added from there (which all sounds like a lot of fun!).
I think Yampa has the capability to create an excellent interactive GUI system. yampa-gloss provides a great base to build this library off of.
The text was updated successfully, but these errors were encountered:
It would be really cool to make this happen. Now, implementing a full GUI library is a big undertaking! There are some prior work that I think would be important to take into account. Some of it may offer insights of where pitfalls and opportunities may lie. Other may present tradeoffs:
I have long believed that Fudgets could be implemented completely on top of dunai (a Fudget is just an MSF with a side effect in the GUI): https://www.altocumulus.org/Fudgets/dist.html
Finally, there are traditional GUI libraries. I wonder if it might make sense, and be possible, to design this new yampa-gui such that it could have backends that leverage existing UI libraries like GTK+, Qt, wx, and other native UI APIs.
I'm turning this into a discussion for now. I think it's a better place to explore and propose ideas. Once we have a more concrete plan, we can create the issue or issues that will address the proposed change.
Repository owner
locked and limited conversation to collaborators
Apr 24, 2023
Inspired by windowing systems like Xmonad and the GUIs of the Yampa arcade, a robust, extensible, and dynamic windowing system would be a great addition to Yampa's capabilities.
I came up with a rough plan of capabilities a window must have along with a number of hurdles.
Capabilities:
When I was thinking it over, windows reminded me of dpSwitch. The hurdle I came across was routing and the nested nature of windows; how do we nest dpSwitches (child windows) inside another dpSwitch (the parent window)?
Another conceptual challenge i came across was data relevant to specific children. Here's a contrived but salient example:
This window can be described by the following tree:
In this example, the count is shared by all of the children of
window
(and all of its children too). When clicking the buttons, the count would be incremented or decremented, despite being nested so deeply in a child window. ButparentWindow
may not care about the statewindow
holds. And what ifwinCount
counted some other value alongsidecount
that neitherwin_l
norwin_r
needed to manage? What type would these windows have? How should the events of the children be routed in a clean and comprehensible (not to mention extensible and modifiable) manner?Once these issues related to the structure of the core systems are ironed out, a minimal working implementation could be written and features could be added from there (which all sounds like a lot of fun!).
I think Yampa has the capability to create an excellent interactive GUI system.
yampa-gloss
provides a great base to build this library off of.The text was updated successfully, but these errors were encountered: