@@ -2187,37 +2187,41 @@ test.describe("Workspace Manager V2 bootstrap", () => {
21872187 await expect(page.locator("#objectVectorStudioV2ObjectTransform .object-vector-studio-v2__transform-summary")).toHaveText("x 0, y 0, rot 0, scale 1");
21882188 await expect(page.locator("#objectVectorStudioV2ObjectTransform #objectVectorStudioV2MoveShapeButton")).toHaveCount(1);
21892189 const transformSummaryLayout = await page.locator("#objectVectorStudioV2ObjectTransform").evaluate((panel) => {
2190+ const originRow = panel.querySelector(".object-vector-studio-v2__transform-control-row--origin");
2191+ const rotateRow = panel.querySelector(".object-vector-studio-v2__transform-control-row--rotate");
21902192 const scaleRow = panel.querySelector(".object-vector-studio-v2__scale-control-row");
2191- const autoCenterRow = panel.querySelector(".object-vector-studio-v2__transform-control-row--auto-center ");
2192- const autoCenterButton = panel.querySelector("#objectVectorStudioV2AutoCenterButton ");
2193+ const autoOriginRow = panel.querySelector(".object-vector-studio-v2__transform-control-row--auto-origin ");
2194+ const autoOriginButton = panel.querySelector("#objectVectorStudioV2AutoOriginButton ");
21932195 const summary = panel.querySelector(".object-vector-studio-v2__transform-summary");
21942196 const summaryStyle = getComputedStyle(summary);
21952197 return {
2196- autoCenterAfterScale: Boolean(scaleRow && autoCenterRow && (scaleRow.compareDocumentPosition(autoCenterRow) & Node.DOCUMENT_POSITION_FOLLOWING)),
2197- autoCenterButtonText: autoCenterButton?.textContent.trim() || "",
2198- autoCenterTitle: autoCenterButton?.title || "",
2199- summaryAfterAutoCenter: Boolean(autoCenterRow && summary && (autoCenterRow.compareDocumentPosition(summary) & Node.DOCUMENT_POSITION_FOLLOWING)),
2198+ autoOriginAfterOrigin: Boolean(originRow && autoOriginRow && (originRow.compareDocumentPosition(autoOriginRow) & Node.DOCUMENT_POSITION_FOLLOWING)),
2199+ autoOriginBeforeRotate: Boolean(autoOriginRow && rotateRow && (autoOriginRow.compareDocumentPosition(rotateRow) & Node.DOCUMENT_POSITION_FOLLOWING)),
2200+ autoOriginButtonText: autoOriginButton?.textContent.trim() || "",
2201+ autoOriginTitle: autoOriginButton?.title || "",
2202+ autoOriginUsesCenterWord: Boolean(autoOriginRow?.textContent.includes("Center") || autoOriginButton?.title.includes("Center")),
22002203 summaryAfterScale: Boolean(scaleRow && summary && (scaleRow.compareDocumentPosition(summary) & Node.DOCUMENT_POSITION_FOLLOWING)),
22012204 summaryCentered: summaryStyle.textAlign === "center",
22022205 summaryStartsWithoutTransform: !summary.textContent.trim().startsWith("Transform"),
2203- summaryTopAtBottom: summary.getBoundingClientRect().top >= autoCenterRow .getBoundingClientRect().bottom
2206+ summaryTopAtBottom: summary.getBoundingClientRect().top >= scaleRow .getBoundingClientRect().bottom
22042207 };
22052208 });
22062209 expect(transformSummaryLayout).toEqual({
2207- autoCenterAfterScale: true,
2208- autoCenterButtonText: "Auto Center",
2209- autoCenterTitle: "Balance Center",
2210- summaryAfterAutoCenter: true,
2210+ autoOriginAfterOrigin: true,
2211+ autoOriginBeforeRotate: true,
2212+ autoOriginButtonText: "Auto Origin",
2213+ autoOriginTitle: "Auto Origin",
2214+ autoOriginUsesCenterWord: false,
22112215 summaryAfterScale: true,
22122216 summaryCentered: true,
22132217 summaryStartsWithoutTransform: true,
22142218 summaryTopAtBottom: true
22152219 });
22162220 const transformIconState = await page.locator("#objectVectorStudioV2ObjectTransform").evaluate((panel) => ({
2217- autoCenter : {
2218- iconKey: panel.querySelector("#objectVectorStudioV2AutoCenterButton ").dataset.ovsIconKey,
2219- iconName: panel.querySelector("#objectVectorStudioV2AutoCenterButton ").dataset.ovsIconName,
2220- title: panel.querySelector("#objectVectorStudioV2AutoCenterButton ").title
2221+ autoOrigin : {
2222+ iconKey: panel.querySelector("#objectVectorStudioV2AutoOriginButton ").dataset.ovsIconKey,
2223+ iconName: panel.querySelector("#objectVectorStudioV2AutoOriginButton ").dataset.ovsIconName,
2224+ title: panel.querySelector("#objectVectorStudioV2AutoOriginButton ").title
22212225 },
22222226 resize: {
22232227 iconKey: panel.querySelector("#objectVectorStudioV2ResizeShapeButton").dataset.ovsIconKey,
@@ -2227,7 +2231,7 @@ test.describe("Workspace Manager V2 bootstrap", () => {
22272231 scaleActionRemoved: panel.querySelector("#objectVectorStudioV2ScaleShapeButton") === null
22282232 }));
22292233 expect(transformIconState).toEqual({
2230- autoCenter : { iconKey: "center", iconName: "nf-fa-dot_circle_o", title: "Balance Center " },
2234+ autoOrigin : { iconKey: "center", iconName: "nf-fa-dot_circle_o", title: "Auto Origin " },
22312235 resize: { iconKey: "resize", iconName: "nf-md-resize", title: "Resize Geometry" },
22322236 scaleActionRemoved: true
22332237 });
@@ -2371,6 +2375,19 @@ test.describe("Workspace Manager V2 bootstrap", () => {
23712375 visibleInputIds: ["objectVectorStudioV2OriginXInput", "objectVectorStudioV2OriginYInput"],
23722376 visibleSelectIds: []
23732377 },
2378+ {
2379+ allOneLine: true,
2380+ axisLabels: [],
2381+ buttonId: "objectVectorStudioV2AutoOriginButton",
2382+ buttonText: "Auto Origin",
2383+ buttonTitle: "Auto Origin",
2384+ inputIds: [],
2385+ label: "Origin",
2386+ rowType: "auto-origin",
2387+ selectIds: [],
2388+ visibleInputIds: [],
2389+ visibleSelectIds: []
2390+ },
23742391 {
23752392 allOneLine: true,
23762393 axisLabels: [],
@@ -2383,19 +2400,6 @@ test.describe("Workspace Manager V2 bootstrap", () => {
23832400 selectIds: ["objectVectorStudioV2RotateSnapSelect", "objectVectorStudioV2SnapAngleStepSelect"],
23842401 visibleInputIds: ["objectVectorStudioV2RotateInput"],
23852402 visibleSelectIds: []
2386- },
2387- {
2388- allOneLine: true,
2389- axisLabels: [],
2390- buttonId: "objectVectorStudioV2AutoCenterButton",
2391- buttonText: "Auto Center",
2392- buttonTitle: "Balance Center",
2393- inputIds: [],
2394- label: "Center",
2395- rowType: "auto-center",
2396- selectIds: [],
2397- visibleInputIds: [],
2398- visibleSelectIds: []
23992403 }
24002404 ]);
24012405 await expect(page.locator("#objectVectorStudioV2RotateInput")).toHaveAttribute("min", "-359");
@@ -10074,11 +10078,11 @@ test.describe("Workspace Manager V2 bootstrap", () => {
1007410078 await page.locator("#objectVectorStudioV2MoveYInput").fill("-5");
1007510079 await page.locator("#objectVectorStudioV2MoveShapeButton").click();
1007610080 });
10077- await expectObjectVectorDirtyAfter("object auto center edit", async () => {
10081+ await expectObjectVectorDirtyAfter("object auto origin edit", async () => {
1007810082 await page.evaluate(() => {
1007910083 const app = window.__objectVectorStudioV2App;
10080- app.selectObject("object.asteroids.ship", "auto center dirty test");
10081- app.selectShape(0, "auto center dirty test");
10084+ app.selectObject("object.asteroids.ship", "auto origin dirty test");
10085+ app.selectShape(0, "auto origin dirty test");
1008210086 const shape = app.selectedShape();
1008310087 const frame = app.activeFrame();
1008410088 const override = frame?.shapeOverrides?.find((entry) => entry.shapeIndex === app.selectedShapeIndex) || null;
@@ -10087,7 +10091,7 @@ test.describe("Workspace Manager V2 bootstrap", () => {
1008710091 target.transform.origin = { x: 123, y: -45 };
1008810092 app.renderPayload({ syncPaletteSelection: false });
1008910093 });
10090- const autoCenterBefore = await page.evaluate(() => {
10094+ const autoOriginBefore = await page.evaluate(() => {
1009110095 const app = window.__objectVectorStudioV2App;
1009210096 const shape = app.selectedShape();
1009310097 const effectiveShape = app.effectiveShape(shape);
@@ -10103,9 +10107,9 @@ test.describe("Workspace Manager V2 bootstrap", () => {
1010310107 pivot: app.transformedPoint(transform.origin, transform)
1010410108 };
1010510109 });
10106- await page.locator("#objectVectorStudioV2AutoCenterButton ").click();
10107- await expect(page.locator("#statusLog")).toHaveValue(/OK Auto Center balanced shape row \d+ origin\/pivot to visible object center /);
10108- const autoCenterAfter = await page.evaluate(() => {
10110+ await page.locator("#objectVectorStudioV2AutoOriginButton ").click();
10111+ await expect(page.locator("#statusLog")).toHaveValue(/OK Auto Origin updated shape row \d+ origin\/pivot from visible object bounds /);
10112+ const autoOriginAfter = await page.evaluate(() => {
1010910113 const app = window.__objectVectorStudioV2App;
1011010114 const shape = app.selectedShape();
1011110115 const effectiveShape = app.effectiveShape(shape);
@@ -10116,13 +10120,13 @@ test.describe("Workspace Manager V2 bootstrap", () => {
1011610120 pivot: app.transformedPoint(transform.origin, transform)
1011710121 };
1011810122 });
10119- expect(autoCenterAfter .geometryText).toBe(autoCenterBefore .geometryText);
10123+ expect(autoOriginAfter .geometryText).toBe(autoOriginBefore .geometryText);
1012010124 ["x", "y", "width", "height"].forEach((key) => {
10121- expect(autoCenterAfter .bounds[key]).toBeCloseTo(autoCenterBefore .bounds[key], 3);
10125+ expect(autoOriginAfter .bounds[key]).toBeCloseTo(autoOriginBefore .bounds[key], 3);
1012210126 });
10123- expect(autoCenterAfter .pivot.x).toBeCloseTo(autoCenterBefore .center.x, 3);
10124- expect(autoCenterAfter .pivot.y).toBeCloseTo(autoCenterBefore .center.y, 3);
10125- expect(autoCenterAfter .pivot.x).not.toBeCloseTo(autoCenterBefore .pivot.x, 3);
10127+ expect(autoOriginAfter .pivot.x).toBeCloseTo(autoOriginBefore .center.x, 3);
10128+ expect(autoOriginAfter .pivot.y).toBeCloseTo(autoOriginBefore .center.y, 3);
10129+ expect(autoOriginAfter .pivot.x).not.toBeCloseTo(autoOriginBefore .pivot.x, 3);
1012610130 });
1012710131 await expectObjectVectorDirtyAfter("palette color edit", async () => {
1012810132 await page.locator("#objectVectorStudioV2PaintModeButton").click();
0 commit comments