[feedback] Slate


Here comes a request by me, yay :smiley:

Its not really a (new) feature request, but more like a feedback with some request attached.
So instead of just making a santa wishlist one-liner, I would like to explain my expierience and what I would ask for from Epic.

After it finally clicked with me how I create some gameplay classes without the engine crashing on me, I now want to get some UI going.
I started out with UMG and it works nicely, as expected. No problems there.
However, I soon realized that, working strictly with the UMG designer and wiring logic, it would become a nightmare with what I have in mind.
Unfortunately, UMG widgets cannot inherit from another. So making base widgets from which descendants share layout and functionality is not possible (according to Nick Darnell).
Also values set in the details tab only show during gameplay, while the designer only displays the default values, which gets exponentially confusing for complex UIs.

Looking for an alternative:
So, those UMG widgets dont come from nowhere. They are made from Slate.
Ok. Then Slate it is. Lets see what we’ve got:

While this does indeed gives a glimpse on Slate, it does not really explains anything on how a proper Slate widget class is formed from begin to end.

And also things like:

This reads to me like “Sorry, no explanation, you have to reverse engineer and guesstimate that for yourself”.
That is not really helpful from a beginner perspective.


FString DefaultLayout =
                TEXT( " {" )
                TEXT( "     \"type\": \"tabstack\"," )
                TEXT( "     \"sizecoeff\": 1," )
                TEXT( "     \"children\":" )
                TEXT( "     " )
                TEXT( "         {" )
                TEXT( "             \"type\": \"tab\"," )
                TEXT( "             \"content\": \"Widget Inspector Tab\"" )
                TEXT( "         }," )
                TEXT( "         {" )
                TEXT( "             \"type\": \"tab\"," )
                TEXT( "             \"content\": \"Plugin Manager Tab\"" )
                TEXT( "         }," )
                TEXT( "         {" )
                TEXT( "             \"type\": \"tab\"," )
                TEXT( "             \"content\": \"Debug Tools\"" )
                TEXT( "         }" )
                TEXT( "     ]" )
                TEXT( " }" );

Why has “Debug Tools” the correct icon? Is “Debug Tools” a magic name? :confused:
What is the syntax of this “language”. Just wrapping my head around what pairs of quotes go together is somewhat irritating.
Why that single comma argument???

But hey, there are also tutorials from both, Epic and the UE community. :slight_smile: Lets see what we’ve got:,_Hello

Sadly, this tutorial is absolitely out of date. It even says so right in the beginning :frowning:,Loading_Styles%26_Resources

The same outdated warning. Well, with a tutorial thats three years old, its kind of to be expected.

Slate tutorial, yes, but also as aoutdated as the ones above. Inconsistent, irrelevant or confusing :frowning:,_How_to_Make_Fancy_Custom_SButtons

Here I dont know if its outdated, but since it again only shows snippets, I still dont know how I go about creating a widget from scratch.

And those tutorials above are (almost) everything I could find on Slate.
There seems to be no up to date (at least version 4.14) material around. Let alone stuff that would go a bit more into details.

So what I would wish for from Epic
Please create some learning material and some more detailed explanation (not mere documentation a la “See codebase for examples”) of the following:

  • How is a LeafWidget constructed from scratch? Where is the stuff actually drawn on the Canvas?
    Then add binding and event handlers.
    And how to wrap it into an UMG usable widget that is available in the designer.

  • How to build a CompundWidget from LeafWidgets. A step by step explanation what goes into the class where and why.

  • How to properly extend PanelWidgets to give them customized behavior and making own Panels with custom arrangement logic (like arranging the children in a circle).

Dont get me wrong. Im sure that all is done in the codebase and ready to see, but for a beginner, the codebase has too many bells and whistles to understand anything.
For example, I tried to look up where the STextBlock does the actual rendering/drawing of the text. All I could find in the OnPaint methods were calls to other objects which contained just calls to other objects and so forth.

I know you are really busy with a lot of things and this gears more towards “engine design” rather than “game design”, but for any serious game one needs to modify/extend the tools that came out of the box.
But if the workings of Slate would be a bit more digestable, a lot more people could contribute to the engine as well.
Im neither a rendering engineer nor a networking pro, but beyond my game UI I also have some nice ideas on how to improve the engine/editor in other ways.
Alas, I dont know Slate…

Sorry for the wall’o text. :slight_smile:


Absolutely agreed.
If it was actually possible to enter Slate without way too much effort, I’d jump right back into Unreal Engine.