-
-
Notifications
You must be signed in to change notification settings - Fork 4.4k
Minimal FontSize support
#22614
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Open
ickshonpe
wants to merge
27
commits into
bevyengine:main
Choose a base branch
from
ickshonpe:font-size
base: main
Could not load branches
Branch not found: {{ refName }}
Loading
Could not load tags
Nothing to show
Loading
Are you sure you want to change the base?
Some commits from the old base branch may be removed from the timeline,
and old review comments may become outdated.
Open
Minimal FontSize support
#22614
+509
−348
Conversation
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
…the new `RemSize` resource.
Implemented Mul<f32> for FontSize
Member
|
Wondering if this PR supersedes #9524? |
Contributor
Author
Yeah got a bunch of open PRs that I need to clean up. Closed it. |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Labels
A-Text
Rendering and layout for characters
A-UI
Graphical user interfaces, styles, layouts, and widgets
C-Feature
A new feature, making something new possible
D-Modest
A "normal" level of difficulty; suitable for simple features or challenging fixes
M-Deliberate-Rendering-Change
An intentional change to how tests and examples are rendered
M-Release-Note
Work that should be called out in the blog due to impact
S-Needs-Review
Needs reviewer attention (from anyone!) to move forward
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.
Objective
Add responsive font sizes supporting rem and viewport units to
bevy_textwith minimal changes to the APIs and systems.Solution
Introduce a new
FontSizeenum:This replaces the
f32value ofTextFont'sfont_sizefield.The viewport variants work the same way as their respective
Valcounterparts.Remvalues are multiplied by the value of theRemSizeresource (which newtypes anf32).FontSizeprovides anevalmethod that takes a logical viewport size and rem base size and returns anf32logical font size. The resolved logical font size is then written into theAttributespassed to Cosmic Text byTextPipeline::update_buffer.Any text implementation using
bevy_textmust now provide viewport and rem base values when callingTextPipeline::update_bufferorcreate_measure.Text2duses the size of the primary window to resolve viewport values (orVec2::splat(1000)if no primary window is found). This is a deliberate compromise, a singleText2dcan be rendered to multiple viewports usingRenderLayers, so it's difficult to find a rule for which viewport size should be chosen.Limitations
There are some limitations because we don't have any sort of font style inheritance yet:
FontSizevalues are only reevaluated on changes toTextFontatm, not when viewport or rem base values change. This can be observed with thetextexample. Its "hello bevy" message has font sizeVh(20.), but this is only based on the window's initial size. The size of the message is not updated when you change the size of the window. Complete change detection could be implemented without inheritance, but would significantly complicate this PR and the changes would need to rewritten once inheritance is introduced.Notes
This PR is quite small and not very technical. Reviewers don't need to be especially familiar with
bevy_text. Most of the changes are to the examples.We could consider using
Valinstead ofFontSize, that would be more ergonomic but some variants might not have sensible interpretations in both UI and Text2d contexts. Also we'd have to makeValaccessible tobevy_text.Testing
The changes to the text systems are relatively trivial and easy to understand. I already added a minor change to the
textexample to useVhfont size for the "hello bevy" text in the bottom right corner.Most of the example migrations were automated using regular expressions, and there are bound to be mistakes in those changes. It's infeasible to check every single example thoroughly, but it's early enough in the release cycle that I don't think we should be too worried if a few bugs slip in.