Skip to content

Add angle to TextArea to control text rotation#1

Closed
jonmmease wants to merge 6 commits intomainfrom
jonmmease/text_rotation
Closed

Add angle to TextArea to control text rotation#1
jonmmease wants to merge 6 commits intomainfrom
jonmmease/text_rotation

Conversation

@jonmmease
Copy link
Copy Markdown
Owner

This PR adds an angle: f32 property to TextArea to control the rotation of the text in text area. This angle is routed through to GlyphToRender and to the shader where it's used to construct a 2d rotation matrix which is applied to the vertex positions.

To make the text look smooth when rotated, the sampler mode was changed from FilterMode::Nearest to FilterMode::Linear.

When text is rotated, linear interpolation can cause artifacts on glyph borders due to interpolation against neighboring glyphs in the texture atlas. To fix this, a one pixel buffer was added to the glyph width and height when positioning the glyph in the text atlas.

@jonmmease
Copy link
Copy Markdown
Owner Author

I published this branch as avenger-glyphon: https://crates.io/crates/avenger-glyphon

@jonmmease jonmmease closed this Apr 29, 2024
tomelliot added a commit to tomelliot/glyphon that referenced this pull request Mar 30, 2026
Add `angle` (degrees) and `rotation_origin` fields to TextArea, enabling
text rotation in the vertex shader via a 2D rotation matrix applied in
screen space before NDC conversion.

Changes:
- TextArea: new `angle: f32` and `rotation_origin: Option<[f32; 2]>` fields
- GlyphToRender: new `angle` and `rotation_origin` per-instance vertex data
- Shader: rotation matrix applied around rotation_origin before NDC transform
- Cache: sampler switched to Linear filtering for smooth rotated glyphs
- Atlas: 1px padding on glyph allocations to prevent linear filter bleed
- Bounds clipping skipped for rotated text (axis-aligned clips are incorrect)

Based on the approach from jonmmease#1, adapted for glyphon 0.9.0.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant