feat: zoom-bucket text sharpness + remove fontSize toolbar controls
Add TextSharpnessManager for crisp text rendering at all zoom levels: - Discrete zoom buckets (0.5–3x) avoid texture churn on small zoom changes - Initial bucket applied to all items on setup and newly created items via SceneManager.onItemCreated callback (fixes blurry-on-load) - Visibility check uses getItemWorldBounds for correct grouped item coords - TextSprite/StickySprite gain setZoomBucket() for resolution control Remove fontSize +/- controls from contextual toolbar — font size is now controlled purely through direct manipulation (resize → bake).
This commit is contained in:
@@ -23,6 +23,7 @@ export class TextSprite extends Container {
|
||||
private _lastFontSize = 24;
|
||||
private _lastFontFamily = 'sans-serif';
|
||||
private _lastFill = '#ffffff';
|
||||
private _zoomBucket = 1;
|
||||
|
||||
/** Measured width after last text change. */
|
||||
get measuredWidth(): number {
|
||||
@@ -39,6 +40,16 @@ export class TextSprite extends Container {
|
||||
this._text.visible = visible;
|
||||
}
|
||||
|
||||
/**
|
||||
* Update text rasterization resolution for zoom-bucket crisp rendering.
|
||||
* Only re-rasterizes when the bucket actually changes.
|
||||
*/
|
||||
setZoomBucket(bucket: number): void {
|
||||
if (bucket === this._zoomBucket) return;
|
||||
this._zoomBucket = bucket;
|
||||
this._text.resolution = bucket;
|
||||
}
|
||||
|
||||
constructor(data: TextObject) {
|
||||
super();
|
||||
|
||||
|
||||
Reference in New Issue
Block a user