Skip to content
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

fix(Controls): allow for smooth scaling fo text at any zoom level #10186

Merged
merged 4 commits into from
Oct 3, 2024

Conversation

Soldier-B
Copy link
Contributor

Description

Removed a call to Math.ceil when calculating new width in the mr and ml control resize handlers.

Copy link

codesandbox bot commented Sep 27, 2024

Review or Edit in CodeSandbox

Open the branch in Web EditorVS CodeInsiders

Open Preview

@Soldier-B
Copy link
Contributor Author

fixes #10180

Math.abs((localPoint.x * multiplier) / target.scaleX) - strokePadding,
);
newWidth =
Math.abs((localPoint.x * multiplier) / target.scaleX) - strokePadding;
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Since this was avoiding newWidth to go under 1, could you change the line below to
target.set('width', Math.max(newWidth, 1)); ?

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Also please check if there is a test for changeWidth and extend it to cover this change.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@asturur Sure I can make that change but I just want to make sure it's necessary as versions before v6 didn't have that restriction.
Also, I'm not familiar with how the tests are set up but there doesn't appear to be any existing test that run against the changeWidth function. I did try making changes locally to the controls_handlers test script but it's unclear to me how I'm supposed to reference the changeWidth function there.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

if the previous code was using Math.ceil, it means that any float that was smaller than 1 was rounded to 1.
As a consequence newWidth was never smaller than 1.
Now your changes remove that to obtain smoothness at higher zoom levels but that 1 barrier should stay, and the line below is a perfect place to reimplement it.

A test i can add when the code changes are done

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I've just committed that change.

expect(target.width).toBe(199.2);
expect(target.left).toBe(0);
expect(target.top).toBe(0);
});
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@Soldier-B there were plenty of tests and adding a new one was trivial

@asturur asturur changed the title removed Math.ceil call when calculating new width in resize handler fix(Controls): allow for smooth scaling fo text at any zoom level Oct 3, 2024
@asturur asturur merged commit 557b146 into fabricjs:master Oct 3, 2024
18 of 21 checks passed
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.

2 participants