Draw the editor's viewport shadow on top of the canvas

This commit is contained in:
Eevee (Evelyn Woods) 2021-04-24 14:32:26 -06:00
parent 167360f596
commit fd3e657387

View File

@ -1772,31 +1772,50 @@ body.--debug #player-debug {
grid-area: level; grid-area: level;
overflow: auto; overflow: auto;
position: relative; position: relative;
/* Flex layout to center the canvas and overlay together */
display: flex;
/* This isn't supported in Chrome (still!!), so use auto margins on the child instead
align-items: safe center;
justify-content: safe center;
*/
background: #101010; background: #101010;
border: 0.125em solid black; border: 0.125em solid black;
/* FIXME would love if this were above the canvas too, but can't figure out how to do that }
* easily in a scrolling element */ #editor .editor-canvas::before {
box-shadow: inset 0 0 3px black; /* Clever abuse of sticky positioning to draw a box shadow on top of the container and inside
* the scrollbars (thanks, leafo!) */
content: '';
display: block;
position: sticky;
top: 0;
left: 0;
height: 100%;
box-shadow: inset 0 0 0.5em black;
z-index: 1;
pointer-events: none;
} }
#editor .editor-canvas.--crispy { #editor .editor-canvas.--crispy {
image-rendering: crisp-edges; image-rendering: crisp-edges;
image-rendering: pixelated; image-rendering: pixelated;
} }
#editor .editor-canvas .-container { #editor .editor-canvas .-container {
position: relative; /* The shadow overlay is sticky-positioned, meaning it defaults to being in-flow, so this
* container needs to compensate by absolutely positioning itself back up top. It'll still
* create scrollbars, so this shouldn't cause any issues. */
position: absolute;
top: 0;
margin: auto; margin: auto;
/* Give the canvas/overlay a bit of a margin; it has to be a border because, due to some quirk /* Give the canvas/overlay a bit of a margin; it has to be a border because, due to some quirk
* of overflowing flexboxes I guess, padding and margins won't extend the scroll area on the * of overflowing flexboxes I guess, padding and margins won't extend the scroll area on the
* right and bottom. It's 75vmin because that /ROUGHLY/ allows panning the level to the edge of * right and bottom. It's 75vmin because that /ROUGHLY/ allows panning the level to the edge of
* the viewport but not completely off of it. */ * the viewport but not completely off of it. */
/* TODO probably a better way to measure this; i really want parent size minus a cell? */ /* NOTE: This MUST be large enough to guarantee being bigger than the viewport; we aren't in a
border: 75vmin solid transparent; * flex container, so if the canvas + border aren't sufficiently tall, we won't even fill the
* viewport and the canvas will be off-center. Also, with no border at all, a mysterious
* interaction with the sticky box-shadow causes the top of the canvas to go off the top of the
* viewport entirely! So, twiddle this with care. */
/* TODO probably a better way to measure this; i really want relative to parent size, but
* percentage padding and margins are specifically relative to our width */
border: 50vmax solid transparent;
/* This is necessary to force us to be as wide as the canvas; without it, we have an auto width,
* and there's technically no space left after our border, so we become zero width and the
* canvas is entirely overflow, which fucks up positioning of the SVG overlay */
width: -moz-fit-content;
width: fit-content;
} }
#editor .editor-canvas canvas { #editor .editor-canvas canvas {
display: block; display: block;