Fix WebGL text alignment + add tests #7481
Merged
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Resolves #7480
Changes:
_renderText
always draws text left-aligned, unlike 2D mode, which has native canvas text alignment to fall back on, so it has a custom implementation of text alignment. This wasn't correctly accounting for all combinations of alignments / provided bounding boxes, so this has since been updated.textBounds
were broken previously because they assume 2D mode alignment, but were calling internal text alignment methods that are overridden in WebGL mode. They now explicitly call the 2D mode methods, although this should probably be refactored more in the future.Screenshots of the change:
WebGL text, correctly centered in a box:
![004](https://private-user-images.githubusercontent.com/5315059/404557041-41bcfee2-103a-4b49-b34f-84f46a15ec73.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3Mzg5MzU4ODIsIm5iZiI6MTczODkzNTU4MiwicGF0aCI6Ii81MzE1MDU5LzQwNDU1NzA0MS00MWJjZmVlMi0xMDNhLTRiNDktYjM0Zi04NGY0NmExNWVjNzMucG5nP1gtQW16LUFsZ29yaXRobT1BV1M0LUhNQUMtU0hBMjU2JlgtQW16LUNyZWRlbnRpYWw9QUtJQVZDT0RZTFNBNTNQUUs0WkElMkYyMDI1MDIwNyUyRnVzLWVhc3QtMSUyRnMzJTJGYXdzNF9yZXF1ZXN0JlgtQW16LURhdGU9MjAyNTAyMDdUMTMzOTQyWiZYLUFtei1FeHBpcmVzPTMwMCZYLUFtei1TaWduYXR1cmU9NzEwNjdkMmYzMzVmYjE1Mzk3NmM5ZjI1NTY4NTE3MWI3ZjhmOTU4NWIxNGNiMzFhMjgyYTNkZjFiY2YxN2I2ZiZYLUFtei1TaWduZWRIZWFkZXJzPWhvc3QifQ.SF4EDuXmRkmn2rIVpsxvw01hG_WrrRDa2NcV7cuwlP4)
PR Checklist
npm run lint
passes