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(Group, ActiveSelection): regression, wrong bounding box position when activeSelection or Group has originX/originY that are not default left/top #9649

Merged
merged 36 commits into from
Mar 16, 2024

Conversation

asturur
Copy link
Member

@asturur asturur commented Feb 4, 2024

Description

close #9640

I can't find the exact commit because testing the old code is complicated especially when we go back to the first group patch.

It seems to me that the target origin is already taken in consideration in the method 'commitLayout' when setting top and left of the active selection, and that his one internal here is a duplicate of that operation.

When we do:

const center = bboxLeftTop.add(bboxSize.multiply(originFactor));

We need to consider that:
bboxLeftTop is already top/left independently of the origin of the objects, that has been already ammortized in the previous function. originFactor is 0,0 when the the target origin is set to 'center', so this is moving the center to bboxLeftTop.

The center of the bounding box, regardless of objects origin seems to be 'bboxCenter' as calculated in this same function, and so we can trust that.

I built a test case in the vanila template to quickly test different combinations, but i would need your help @ShaMan123 because i m not 100% confident of why every single operation is there

Intended behaviour

Actual behaviour

Copy link

codesandbox bot commented Feb 4, 2024

Review or Edit in CodeSandbox

Open the branch in Web EditorVS CodeInsiders

Open Preview

@asturur asturur requested a review from ShaMan123 February 4, 2024 23:53
Copy link
Contributor

github-actions bot commented Feb 4, 2024

Build Stats

file / KB (diff) bundled minified
fabric 910.254 (-0.134) 304.847 (-0.102)

.subtract(bboxSize)
.multiply(originFactor);
// translate the layout origin from left top to target's origin
const center = bboxLeftTop.add(bboxSize.multiply(originFactor));
Copy link
Member Author

Choose a reason for hiding this comment

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

Seems to me this is accounted for here:


and some line lower for the case of non initialization

@asturur
Copy link
Member Author

asturur commented Feb 5, 2024

Ok all layout visual tests are failing at least i have something to check why is failing

@asturur
Copy link
Member Author

asturur commented Feb 5, 2024

So far i think the visual snapshot are bad indeed:

This is a top,left no rotation
image

this a bottom right no rotation
image

When the group is created by the test code:

    function createObjectsForOriginTests(originX, originY, options) {
        var rect1 = new fabric.Rect({ left: 150, top: 100, width: 30, height: 10, strokeWidth: 0 }),
            rect2 = new fabric.Rect({ left: 200, top: 120, width: 10, height: 40, strokeWidth: 0 }),
            controlPoint = new fabric.Circle({ radius: 5, fill: 'blue', left: 150, top: 100, originX: 'center', originY: 'center' }),
            tlControlPoint = new fabric.Circle({ radius: 5, fill: 'red', left: 150, top: 100, strokeWidth: 0 });

        var g = new fabric.Group([rect1, rect2, tlControlPoint], Object.assign({}, options, {
            originX, originY, backgroundColor: 'pink'
        }));
        return [g, controlPoint];
    }

It applies the originX/originY to the group at creation.
When i create a group around 2 objects positioned in the canvas i expect the group to wrap them correctly, in the same position, and then have top and left adjust to respect the originX/Y that the group has.

I didn't check the cases with strategy different from fit-content yet.

@asturur
Copy link
Member Author

asturur commented Feb 5, 2024

I understand how this is not consistent with the other properties like angle or scaling, since if i create a group with those already set they taken in consideration during layout and so the group will be bigger than the objects or the objects will appear rotated.

But originX/originY are kind of worse because if you don't adapt for those every group that is not top/left will be always moved by an offset compared to the original objects.

@ShaMan123
Copy link
Contributor

I can try to help
The initial description sounds possible
The following comments are hard to understand quickly

@ShaMan123
Copy link
Contributor

I don't understand why the test snapshot you provided are wrong

@asturur
Copy link
Member Author

asturur commented Feb 8, 2024

I don't understand why the test snapshot you provided are wrong

@Shaman in the snapshot the end result of the group is moved on the canvas depending the group orginX/originY.
But when i create a group around N objects, the group shouldn't move the objects around. The initial position of the group should match the one of the objects

@asturur
Copy link
Member Author

asturur commented Feb 8, 2024

simplifed example, if i have 2 rects at 0,0 and 100,100 both with a 100 size,
I have a 2 rects starting from 0,0 and ending at 200,200 in the top left corner of my canvas.
When i wrap them with a group i expect the group to be in the top left corner of my canvas leaving the objects unmoved.
If i create the group with origin bottom right, the canvas group will be outside view pushed out the top left corner of the canvas into the non visible area of the screen.
I don't think that was the behaviour before the layout manager ( for sure not in version 5 ).
I can run the example with a commit before the layout manager

@asturur
Copy link
Member Author

asturur commented Feb 8, 2024

So those tests have been added 1.5 years ago.
So for sure this is like this since 1.5 years, i m strongly convinced is wrong and i ll need to convince myself is not, if i fail i ll have to change it

@asturur
Copy link
Member Author

asturur commented Feb 8, 2024

If i run this code in the old fabricJS:

canvas.clear();

const rect1 = new fabric.Rect({ width: 100, height: 100, originX:'left', originY: 'top' });

const rect2 = new fabric.Rect({ width: 100, height: 100, originX:'right', originY: 'center', left: 200, top: 150 });

const g = new fabric.Group([rect1, rect2], { originX: -3, originY: 3 });

canvas.add(g);

The group stays put when i add it

image

And this wasn't supposed to change imho.

@asturur
Copy link
Member Author

asturur commented Feb 8, 2024

While if i specify a position that overrides the result of my group and is calculated with the origin

canvas.clear();

const rect1 = new fabric.Rect({ width: 100, height: 100, originX:'left', originY: 'top' });

const rect2 = new fabric.Rect({ width: 100, height: 100, originX:'right', originY: 'center', left: 200, top: 150 });


const g = new fabric.Group([rect1, rect2], { originX: 0.5, originY: 0.5, top: 10, left: 10 });

canvas.add(g);
image

@asturur
Copy link
Member Author

asturur commented Feb 8, 2024

now if do the same with current master the second use case is working ( the one that specify the postion ) the other isn't.

@ShaMan123
Copy link
Contributor

This is a refinement of the LayoutStrategies.
And IMO needs a face to face.

@asturur
Copy link
Member Author

asturur commented Feb 12, 2024

This is a refinement of the LayoutStrategies. And IMO needs a face to face.

Please find a time you are comfortable with and make up a calendar event with a fallback option. I m usually free for meeting up to 2PM central europe time

@asturur asturur changed the title fix(LayoutManager): wrong bounding box position when activeSelection has originX/originY that are not default left/top fix(Group, ActiveSelection): regression, wrong bounding box position when activeSelection or Group has originX/originY that are not default left/top Feb 17, 2024
@asturur asturur marked this pull request as draft February 18, 2024 01:40
@asturur
Copy link
Member Author

asturur commented Feb 25, 2024

@ShaMan123 is useful to have some comment on this before tomorrow

@asturur
Copy link
Member Author

asturur commented Feb 27, 2024

@ShaMan123 remember to keep some time to gets your thougts on this. Mine so far are:

  • apply the fix
  • update the snapshots

WARNING needs fix:
The behaviour of this layout is currently broken if we want.
The center of the group is the center of the clipPath visually but the position of the clipPath compared to the object on the canvas is hard to predict as it is now

Copy link
Member Author

@asturur asturur Mar 3, 2024

Choose a reason for hiding this comment

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

@ShaMan123 I verified those behaviors in master and in the PR.

The differences are that now originX and originY do not count anymore for group layouting.
So for example in master with the fixed strategy the final group bounding box would be aligned with the top,left corner or the center or the bottom,right corner depending of the group origin.
Object displacement would happen in any case apart the topleft.

The clipPath has a similar behaviour in master with the clipPath ending not in the center if is not using top,left and object being displaced.

Now the final viewport of the group is always aligned with the center of the initial bounding box, but never displaces anything.
The Clippath has an added behaviour ( both here and in master ) that i do not understand, in particular that if you specify a position for the clippath is not clear how that relates with the objects. but this is out of scope for me to fix now, i m fine to know is known bug and move to other things

Copy link
Contributor

Choose a reason for hiding this comment

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

What you describe is correct and proves to me that this PR is wrong
And that is why I want to block it until you remove originX/Y

@asturur
Copy link
Member Author

asturur commented Mar 3, 2024

There isn't more to do in this PR from my sides.

  • bug is fixed
  • old tests that would fail because of this change have snapshot updated
  • new tests that behave differently ( old tests + fixed positions ) have been added
  • some readme has been written to put down what is the actual expected functionality of the feature
  • behaviour compared to beta is slightly changed for fixed layout
  • behaviour compared to beta is slightly changed for clipPath layout and both are a bit of an issue

@ShaMan123
Copy link
Contributor

The veto is NOT to merge this PR until you remove originX/Y because this PR is clearly related.
Why did you revert the change I made to group_layout.js? What value does that test have know? None.
So if you think it is useless (I think it is useful) remove it. What do you learn or understand from all those misplaced objects?

Copy link
Contributor

@ShaMan123 ShaMan123 left a comment

Choose a reason for hiding this comment

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

not approving this change

@@ -858,7 +858,7 @@ describe('Layout Manager', () => {
});
expect(group).toMatchObject({ width: 100, height: 300 });
expect(child.getCenterPoint()).toMatchObject({ x: 100, y: 100 });
expect(group.getCenterPoint()).toMatchObject({ x: 50, y: 150 });
expect(group.getCenterPoint()).toMatchObject({ x: 100, y: 100 });
Copy link
Contributor

Choose a reason for hiding this comment

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

this is wrong

Copy link
Contributor

@ShaMan123 ShaMan123 Mar 4, 2024

Choose a reason for hiding this comment

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

You pass width and height and a fixed layout and no left and top
So the group's tl should be positioned at 0, 0
Anything else is not fixed layout

Copy link
Member Author

Choose a reason for hiding this comment

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

i updated the readme since there was no explanation.
The group should not move the object that is wrapping unless a position is passed.
This is how it was before even the group rewrite.
If you artificially crafted a group that had smaller bbox than the objects, the bounding box would be centered around the group center cutting equally from all the sides.

The same issue here with origin, if you specify for this group center/center, it won't be positioned at 0,0 and also the object will be misplaced.

src/LayoutManager/README.md Outdated Show resolved Hide resolved
src/LayoutManager/README.md Outdated Show resolved Hide resolved
src/LayoutManager/README.md Outdated Show resolved Hide resolved
src/LayoutManager/README.md Outdated Show resolved Hide resolved
src/LayoutManager/README.md Show resolved Hide resolved
If the developer specifies both dimensions of the box, the bounding box is still calculated to obtain the center.
Once the group is initialized with a fixed layout, adding new objects is not changing the center anymore.
The layout is fixed, is cropped by the bounding box itself.
When larger or smaller than the actual boundingbox the group is centered on the initial center of the initial set of objects and the fixed bounding box extends from the center.
Copy link
Contributor

Choose a reason for hiding this comment

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

wrong
it used to position by the passed origin and that is what you missed

Copy link
Member Author

@asturur asturur Mar 4, 2024

Choose a reason for hiding this comment

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

that is not a feature. we don't do that.
originX and originY represent the which point of the object is located at the position described by the properties top and left. They don't represent anything else. They can't also be used to say that since a bounding box is smaller the bbox left/top corner will be aligned wit the top/left corner of the elements, or in another case bottom/right. That is not originX/originY.

Copy link
Contributor

Choose a reason for hiding this comment

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

I wrote group layout to fix v5 behavior not to organize it
Centering it makes no sense and again this is why this PR should be blocked until you remove originX/Y
If you do not agree with me go ahead
I don't approve this direction.

Copy link
Member Author

Choose a reason for hiding this comment

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

Well you didn't comunicate that clearly when you organize the group rewrite, at all.
Please try to explain what issue the centering causes apart solving the issue of shifting objects.

WARNING needs fix:
The behaviour of this layout is currently broken if we want.
The center of the group is the center of the clipPath visually but the position of the clipPath compared to the object on the canvas is hard to predict as it is now

Copy link
Contributor

Choose a reason for hiding this comment

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

What you describe is correct and proves to me that this PR is wrong
And that is why I want to block it until you remove originX/Y

@asturur
Copy link
Member Author

asturur commented Mar 4, 2024

What you describe is correct and proves to me that this PR is wrong
And that is why I want to block it until you remove originX/Y

That behaviour is broken in master and in this PR in the same way.

@asturur
Copy link
Member Author

asturur commented Mar 4, 2024

Your test has been moved and not reverted because is not correct to change the code and the test together.
The objects are misplaced, the snapshots show misplaced objects.
The code gets fixed the snapshot gets updated.
Then i took your will of having also a test with fixed position and i replicated the test few lines below, adding new snapshots.
So nothing has been deleted.

@asturur
Copy link
Member Author

asturur commented Mar 4, 2024

The proposal of removing originX and originY is still a proposal and won't be pushed in the middle of a process already started of closing a release and doing the website, it will have to wait and is not as related as you think.
If i just removed originX and originY from the objects and i would applied the result of a new default center/center to this code i will have indeed all misplaced objects as i have today when choosing center/center.
What this pr originated is the sensation that maybe originX and originY are too complicated and of little value given that all the functionalities can stay in place without those. But i m not defocusing to remove them now.

@ShaMan123
Copy link
Contributor

You say let's plan.
Now I look at this PR and think to myself "It is not planned".
I won't say more than I did only consider that you get to block any of my PRs.
I don't have such power or right. Now understand my frustration on both ends.
How it feels someone saying to you stop and how it feels not being able to say that.

@asturur
Copy link
Member Author

asturur commented Mar 4, 2024

You say let's plan. Now I look at this PR and think to myself "It is not planned". I won't say more than I did only consider that you get to block any of my PRs. I don't have such power or right. Now understand my frustration on both ends. How it feels someone saying to you stop and how it feels not being able to say that.

This is not planned no.
No one planned to break groups.
Groups as of now are broken if used without origin top/left and i attached the bug label because is a bug and not to circumvent any planning.
This is a regression from 5.x if you want.

Take your time to understand that or to prove the contrary, is not about frustration or anything.
The layout manager is broken for positioning and for nested active selections.
Nested active selections can be turned off but this no, this needs to be fixed.

@asturur
Copy link
Member Author

asturur commented Mar 4, 2024

Keep in mind my time for fabric today is probably finished, i used it to try to refine those PR.
Those 2 bugs of the groups are what stop us from moving forward post 6.0
If you have a different idea on how to solve this explain it.

The new bug that is discovered about multi selection in interactive groups and that can be considered an edge case and that is monitored by a jest test in the other pr for me can be fixed later, is not immediate to trigger compared to the generic activeselection in group not working at all.

@ritali4912
Copy link

@ShaMan123 @asturur
Sorry to put pressure on this PR.
We have based on beta 13 to develop our product and after upgrade to beta 18, we met this issue.
We will soon develop Group feature which in our context also with (orignX/orignY: 'center') in 2 weeks, which fabric version we should go ahead? Can we get the fix of this issue?

@asturur
Copy link
Member Author

asturur commented Mar 11, 2024

@ritali4912 this PR and the other marked as bug v6 are in theory the last 2 prs to draw a line and call master 6.0 ( or at least release candidate ).
@ShaMan123 has some concern about this change and while i don't understand why i asked him to try to make it explicit since there is a firmly request block on the PR both with the button and with the message.
Let's wait some more time but in a way or another the shifting behaviour of the objects should be fixed as our top priority.

@asturur asturur added this to the 6.0 milestone Mar 15, 2024
@asturur asturur self-assigned this Mar 16, 2024
@asturur
Copy link
Member Author

asturur commented Mar 16, 2024

@ShaMan123 Attaching to this thread again trying to clarify this.
The release of 6.0 is holding for those 2 bugs.
I want to be clear about some points that for me are very important.
Group rewrite has been mishandled.
Pr have been accepted without descriptions of intent and without proper understanding.
You didn't say what you wanted to achieve in a clear way or some parts didn't say at all, and i didn't understand them just by reading the code.
There was nothing in particular to fix in the group, there are just features you wanted to add.
Now we are here, group creation is broken and more importantly in your opinion originX and originY should represent both the anchor point of the group and its relative placement over the objects. That is not possible and we need to move forward.

If you don't have a better way to handle this bug or if you have been too buys to handle it in the last 2 weeks i will just have to move forward.

I do not think anyone will miss a feature that was never announced or described anywhere outside that comment i linked.
Are you using this particular feature in any way?

Copy link
Contributor

Coverage after merging activeseleciton-origin into master will be

82.71%

Coverage Report
FileStmtsBranchesFuncsLinesUncovered Lines
index.node.ts14.29%100%0%25%23, 26, 29, 41, 44, 47
src
   ClassRegistry.ts100%100%100%100%
   Collection.ts94.85%94.83%87.10%97.14%109, 112, 215–216, 241–242
   CommonMethods.ts96.55%87.50%100%100%9
   Intersection.ts100%100%100%100%
   Observable.ts87.76%85.29%87.50%89.58%134–135, 160–161, 32–33, 41, 50, 78, 89
   Point.ts100%100%100%100%
   Shadow.ts98.55%95.65%100%100%213
   cache.ts97.06%90%100%100%57
   config.ts74.14%65%66.67%82.76%131, 139, 139, 139, 139, 139–141, 152–154, 30
   constants.ts100%100%100%100%
src/LayoutManager
   LayoutManager.ts87.58%89.29%76.92%90.14%151–152, 154–155, 155, 155, 155, 155, 249, 310–311, 322, 51
   constants.ts100%100%100%100%
src/LayoutManager/LayoutStrategies
   ClipPathLayout.ts82.05%72.22%100%88.89%30–31, 42, 54, 57–58, 65
   FitContentLayout.ts100%100%100%100%
   FixedLayout.ts20%0%0%40%20–21, 23, 23, 23, 23, 23
   LayoutStrategy.ts85.11%64.71%100%95.65%35, 42, 42, 42, 50, 70–71
   utils.ts91.67%85.71%100%100%28, 34
src/Pattern
   Pattern.ts90.54%93.94%80%90.32%119, 130, 139, 32, 36
src/brushes
   BaseBrush.ts100%100%100%100%
   CircleBrush.ts0%0%0%0%108, 108, 108, 110, 112, 114–116, 118–121, 128–129, 13, 136, 138, 23–24, 32–36, 40–44, 51–54, 62–66, 68, 76, 76, 76, 76, 76–77, 79, 79, 79–82, 84, 92–93, 95, 97–99
   PatternBrush.ts97.06%87.50%100%100%21
   PencilBrush.ts91.06%82.35%100%93.81%122–123, 152, 152–154, 176, 176, 276, 280, 285–286, 68–69, 84–85
   SprayBrush.ts0%0%0%0%107, 107, 107, 107, 107–108, 110–111, 118–119, 121, 123–127, 136, 140–141, 141, 148, 148, 148–151, 153–156, 160–161, 163, 165–168, 17, 171, 178–179, 18, 181, 183–184, 186, 193–194, 196–197, 20, 200, 200, 207, 207, 21, 211, 22, 22, 22–24, 28, 32, 39, 46, 53, 60, 67, 84–86, 94–96, 98–99
src/canvas
   Canvas.ts78.66%77.04%82.14%79.33%1001–1003, 1006–1007, 1011–1012, 1123–1125, 1128–1129, 1202, 1314, 1435, 158, 183, 289, 289–294, 299, 322–323, 328–333, 353, 353, 353–354, 354, 354–355, 363, 368–369, 369, 369–370, 372, 381, 387–388, 388, 388, 42, 431, 439, 443, 443, 443–444, 446, 46, 528–529, 529, 529–530, 536, 536, 536–538, 558, 560, 560, 560–561, 561, 561, 564, 564, 564–565, 568, 577–578, 580–581, 583, 583–584, 586–587, 599–600, 600, 600–601, 603–608, 614, 621, 658, 658, 658, 660, 662–667, 673, 679, 679, 679–680, 682, 685, 690, 703, 731, 783–784, 784, 784, 784, 784, 784, 787–788, 791, 791–793, 796–797, 879, 886, 886, 886, 899, 928–929, 929, 929–931, 934–935, 935, 935, 937, 945, 945, 945–947, 947, 947, 954–955, 963–964, 964, 964–965, 971, 973
   CanvasOptions.ts100%100%100%100%
   SelectableCanvas.ts90.22%87.30%94.55%91.74%1004, 1012, 1123, 1125, 1127–1128, 1199, 1220–1221, 1239–1240, 460–461, 463–464, 464, 464, 513–514, 591, 596, 666, 671–672, 699–700, 724, 727–730, 730, 730–731, 731, 731, 737–738, 740, 760–761, 766–770, 772, 807–808, 811, 811, 811–812, 931, 931–932, 935, 955, 955
   StaticCanvas.ts96.44%92.72%98.91%98.27%1045, 1055, 1106–1108, 1111, 1146–1147, 1223, 1232, 1232, 1236, 1236, 1283–1284, 188–189, 205, 585, 597–598, 928–929, 929, 929–930
   StaticCanvasOptions.ts100%100%100%100%
   TextEditingManager.ts86%71.43%91.67%91.67%17, 17, 17–18, 18, 18
src/canvas/DOMManagers
   CanvasDOMManager.ts95.52%70%100%100%21–22, 29
   StaticCanvasDOMManager.ts97.50%88.89%100%100%33
   util.ts86.67%80.56%83.33%93.94%14, 26, 63–64, 67, 67, 74, 93–94
src/color
   Color.ts94.96%91.67%96.30%96.05%233, 258–259, 267–268, 48
   color_map.ts100%100%100%100%
   constants.ts100%100%100%100%
   util.ts85.71%76.92%100%89.74%55–56, 56, 58, 58, 58–59, 61–62, 89
src/controls
   Control.ts94.44%93.10%91.67%96.77%183, 249, 354
   changeWidth.ts100%100%100%100%
   commonControls.ts100%100%100%100%
   controlRendering.ts81.63%78%100%84.78%106, 111, 121, 121, 45, 50, 61, 61, 65–72, 81–82
   drag.ts100%100%100%100%
   fireEvent.ts88.89%75%100%100%13
   polyControl.ts10.87%0%0%16.13%114, 114, 114, 114, 114, 116–119, 119, 122, 129, 24–26, 50–52, 58–59, 61, 71, 77–79, 79, 81, 84, 86, 90–92, 94, 99
   rotate.ts19.57%12.50%50%21.43%41, 45, 51, 51, 51–52, 55–57, 59,

@ShaMan123
Copy link
Contributor

This is not a feature.
It was meant to mimic v5 but I got it wrong. I don't remember anyways.
It wasn't easy writing the layout manager and indeed it is not designed in a good manner. I regret a lot of it.
I don't care about originX/Y especially since you plan to remove them.
I wanted to reduce confusion because using fabric is too confusing to begin with and resulted in additional confusion.

Now we are here, group creation is broken and more importantly in your opinion originX and originY should represent both the anchor point of the group and its relative placement over the objects. That is not possible and we need to move forward.

Incorrect.

This PR seems fine but I do not understand why you are keeping the old tests, they are wrong as you pointed out and are useless. Keep them if that is important for you.

@asturur
Copy link
Member Author

asturur commented Mar 16, 2024

This is not a feature. It was meant to mimic v5 but I got it wrong. I don't remember anyways. It wasn't easy writing the layout manager and indeed it is not designed in a good manner. I regret a lot of it. I don't care about originX/Y especially since you plan to remove them. I wanted to reduce confusion because using fabric is too confusing to begin with and resulted in additional confusion.

Now we are here, group creation is broken and more importantly in your opinion originX and originY should represent both the anchor point of the group and its relative placement over the objects. That is not possible and we need to move forward.

Incorrect.

This PR seems fine but I do not understand why you are keeping the old tests, they are wrong as you pointed out and are useless. Keep them if that is important for you.

I m keeping old and new tests because in this situation only the combination of both cover the all possible combinations of properties of the group, only with both we an successfully catch an unwanted regression from a code change that seems safe.
I'm keeping originX and originY, while the only thing i planned is to present a proposal to remove them, because we said that the scope of the migration was TS and group and if i put that in the plans now another undefined effort starts.
Now 2 years are passed we may like or not like the Group code as it is today, this is what we were able to accomplish in 2 years and that's it, it will work in some way, and for future changes we will have to do better.

@asturur asturur merged commit 3c46a36 into master Mar 16, 2024
22 checks passed
@asturur asturur deleted the activeseleciton-origin branch March 16, 2024 12:26
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
4 participants