BYOND Version:513
Operating System:Windows 10 Pro 64-bit
Web Browser:Chrome 87.0.4280.141
Applies to:Dream Seeker
Status: Open

Issue hasn't been assigned a status value.
Descriptive Problem Summary:
maptext outlines are getting cut when on vis_contents of atoms with the KEEP_TOGETHER appearance_flag.

Numbered Steps to Reproduce Problem:
1 - Put a long text in a maptext with outline
2 - Put the atom with the maptext inside the vis_contents of an atom with the KEEP_TOGETHER appearance_flag.
3 - See the outline getting cut at the border

Code Snippet (if applicable) to Reproduce Problem:
test case sent

Expected Results:
Outline doesn't get cut

Actual Results:
Outline gets cut

Does the problem occur:
Every time? Or how often? Yes
In other games? Yes
In other user accounts? Yes
On other computers? Yes

When does the problem NOT occur? Never

Workarounds: use KEEP_APART on the atom that has the maptext
All right, I'm laying down some thoughts for future me since I might punt on this a while. This problem turns out to be difficult to fix.

In the current code, the pre-render calculates the size of the temporary surface that will be required for KEEP_TOGETHER rendering. However, because maptext can contain outlines and shadows applied by CSS, maptext can grow beyond its expected bounds at the time of render. (Parsing the maptext CSS does not happen in the pre-render.)

There are two possible approaches that may work.

1) Keep a hashtable of known maptext in the pre-render, and what filters it might have, so it's known how much the maptext may need to expand to handle filter effects.

2) Have RenderAtomGroup() in the renderer loop through its children twice: once to grab their bounds, once to draw them after it's calculated the total bounds it will need.

#2 is probably the most robust option. This will mean additional work in the render stage, but it may completely obviate work currently done in the pre-render so it could be a wash.

Login to reply.