UMG: how to make a grid with resizable width columns?

Never seen a tutorial for that (never looked for one, though) but I got it to work surprisingly quickly so it might be the right way to do it. It’s in a very crude state, you’d need to implement additional functionality and polish but here’s the idea behind it.

The three columns (vert 1,2,3) are separated by borders that act as dividers you can drag around (darker vertical strips). Those borders control the *Size Fill *(details panel on the right; currently each is set to .33 so they fill their horizontal box evenly). The borders have a bit of left-right padding so you have something to grab onto, and change cursor when the mouse is over them via Behavior->Cursor>Resize Left Right.

Clicking and holding a mouse button on the border enables drag mode:

Releasing the mouse anywhere in the widget or leaving the widget switches it off:

When the mouse is moving over the widget and the drag mode is enabled I capture the local position of the cursor in that widget, and store it in the variable LocalMousePosition:

*LocalMousePosition *is then map-ranged to the widget dimension and produces a 0-1 range that can be used to set the *SizeFill *value for every column:

Here’s how it looks like:

It’s kind of working as intended but you need to add a lot of stuff to make it behave like expected. Clamping regions, account for the number columns, adjust text clipping method.

Hope this can get you started.

6 Likes