Skip to content

fix : Pen tool collinear constraint incorrectly modifying segment handles#3863

Open
Annonnymmousss wants to merge 1 commit intoGraphiteEditor:masterfrom
Annonnymmousss:fix/pen_collinear_constraint
Open

fix : Pen tool collinear constraint incorrectly modifying segment handles#3863
Annonnymmousss wants to merge 1 commit intoGraphiteEditor:masterfrom
Annonnymmousss:fix/pen_collinear_constraint

Conversation

@Annonnymmousss
Copy link
Contributor

discord : https://discord.com/channels/731730685944922173/731738914812854303/1478863567460634727

After fix clip :

Screen_Recording_2026-03-06_at_7.15.36_AM.mov

@gemini-code-assist
Copy link
Contributor

Summary of Changes

Hello, I'm Gemini Code Assist1! I'm currently reviewing this pull request and will post my feedback shortly. In the meantime, here's a summary to help you and other reviewers quickly get up to speed!

This pull request addresses a bug in the Pen tool where the collinear constraint was incorrectly modifying segment handles, particularly when creating new segments. The fix introduces a specific condition to prevent the constraint from being applied in scenarios where it would lead to unintended handle adjustments, ensuring smoother and more predictable behavior during path creation.

Highlights

  • Pen Tool Collinear Constraint Fix: Implemented a conditional skip for applying collinear constraints and adjusting handle lengths when the Pen tool is creating a new segment's out-handle, preventing incorrect modification of segment handles.
Changelog
  • editor/src/messages/tool/tool_messages/pen_tool.rs
    • Added a conditional check to prevent incorrect application of collinear constraints for the Pen tool.
Activity
  • No specific activity has been recorded for this pull request yet.
Using Gemini Code Assist

The full guide for Gemini Code Assist can be found on our documentation page, here are some quick tips.

Invoking Gemini

You can request assistance from Gemini at any point by creating a comment using either /gemini <command> or @gemini-code-assist <command>. Below is a summary of the supported commands on the current page.

Feature Command Description
Code Review /gemini review Performs a code review for the current pull request in its current state.
Pull Request Summary /gemini summary Provides a summary of the current pull request in its current state.
Comment @gemini-code-assist Responds in comments when explicitly tagged, both in pull request comments and review comments.
Help /gemini help Displays a list of available commands.

Customization

To customize Gemini Code Assist for GitHub experience, repository maintainers can create a configuration file and/or provide a custom code review style guide (such as PEP-8 for Python) by creating and adding files to a .gemini/ folder in the base of the repository. Detailed instructions can be found here.

Limitations & Feedback

Gemini Code Assist may make mistakes. Please leave feedback on any instances where its feedback is incorrect or counter productive. You can react with 👍 and 👎 on @gemini-code-assist comments. If you're interested in giving your feedback about your experience with Gemini Code Assist for Github and other Google products, sign up here.

You can also get AI-powered code generation, chat, as well as code reviews directly in the IDE at no cost with the Gemini Code Assist IDE Extension.

Footnotes

  1. Review the Privacy Notices, Generative AI Prohibited Use Policy, Terms of Service, and learn how to configure Gemini Code Assist in GitHub here. Gemini can make mistakes, so double check it and use code with caution.

Copy link
Contributor

@gemini-code-assist gemini-code-assist bot left a comment

Choose a reason for hiding this comment

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

Code Review

This pull request fixes an issue where the pen tool's collinear constraint was incorrectly modifying segment handles. The change introduces a condition to skip applying the collinear constraint when dragging a new handle from a junction point or the start of a path. The logic appears correct. I've suggested a small refactoring to improve the readability of the new condition.

Comment on lines +1034 to +1035
let should_skip =
self.handle_type == TargetHandle::FuturePreviewOutHandle && self.handle_end.is_none() && self.prior_segment_endpoint.map_or(true, |ep| vector.all_connected(ep).count() >= 2);
Copy link
Contributor

Choose a reason for hiding this comment

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

medium

The condition to determine should_skip is a bit complex to parse in a single line. Breaking it down into smaller, well-named variables would improve readability and make the intent clearer.

Suggested change
let should_skip =
self.handle_type == TargetHandle::FuturePreviewOutHandle && self.handle_end.is_none() && self.prior_segment_endpoint.map_or(true, |ep| vector.all_connected(ep).count() >= 2);
let is_creating_new_handle = self.handle_type == TargetHandle::FuturePreviewOutHandle && self.handle_end.is_none();
let is_at_junction_or_start = self.prior_segment_endpoint.map_or(true, |ep| vector.all_connected(ep).count() >= 2);
let should_skip = is_creating_new_handle && is_at_junction_or_start;

Copy link
Contributor Author

Choose a reason for hiding this comment

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

Is it required? I guess it is pretty clear.

Copy link

@cubic-dev-ai cubic-dev-ai bot left a comment

Choose a reason for hiding this comment

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

No issues found across 1 file

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