Skip to content

Commit fb829aa

Browse files
committed
all scale handlers
1 parent 3a13d81 commit fb829aa

File tree

5 files changed

+46
-50
lines changed

5 files changed

+46
-50
lines changed

src/editor-view/selectors/gizmos/scale-gizmo.scss

+22-12
Original file line numberDiff line numberDiff line change
@@ -26,27 +26,37 @@ phred-scale-gizmo {
2626
padding: 0;
2727
}
2828

29-
&.top-left {
29+
&.top {
3030
top: 0;
31-
left: 0;
32-
cursor: nwse-resize;
3331
}
3432

35-
&.top-right {
36-
top: 0;
37-
right: 0;
38-
cursor: nesw-resize;
33+
&.left {
34+
left: 0;
3935
}
4036

41-
&.bottom-left {
37+
&.bottom {
4238
bottom: 0;
43-
left: 0;
44-
cursor: nesw-resize;
4539
}
4640

47-
&.bottom-right {
48-
bottom: 0;
41+
&.right {
4942
right: 0;
43+
}
44+
45+
&.middle {
46+
top: 50%;
47+
cursor: ew-resize;
48+
}
49+
50+
&.center {
51+
left: 50%;
52+
cursor: ns-resize;
53+
}
54+
55+
&.top.left, &.bottom.right {
5056
cursor: nwse-resize;
5157
}
58+
59+
&.top.right, &.bottom.left {
60+
cursor: nesw-resize;
61+
}
5262
}

src/editor-view/selectors/gizmos/scale-gizmo.ts

+3-17
Original file line numberDiff line numberDiff line change
@@ -20,23 +20,9 @@ export class ScaleGizmo extends HTMLElement implements Gizmo {
2020
public vside: VSide;
2121

2222
public init(vside: VSide, hside: HSide) {
23-
this.hside = hside ?? 0;
24-
this.vside = vside ?? 0;
25-
let clazz = '';
26-
27-
switch (vside) {
28-
case VSide.Top: clazz = 'top'; break;
29-
case VSide.Bottom: clazz += 'bottom'; break;
30-
default: clazz = 'middle'; break;
31-
}
32-
33-
switch (hside) {
34-
case HSide.Right: clazz += '-right'; break;
35-
case HSide.Left: clazz += '-left'; break;
36-
default: clazz = '-center'; break;
37-
}
38-
39-
this.classList.add(clazz);
23+
this.hside = hside = hside ?? 0;
24+
this.vside = vside = vside ?? 0;
25+
this.classList.add(VSide[vside].toLowerCase(), HSide[hside].toLowerCase());
4026
this.appendChild(document.createElement('div')).classList.add('handle');
4127
}
4228
}

src/editor-view/selectors/gizmos/selection-gizmo.ts

+12-17
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,8 @@
1-
import { HSide, VSide } from 'index';
21
import { Rect } from 'plugin.model';
32
import { Selection, SelectionChangedEvent } from '../selection';
43
import { SelectionUtil } from '../selection.util';
54
import { Gizmo, GIZMO_MOVE } from './gizmo';
6-
import { ScaleGizmo } from './scale-gizmo';
5+
import { HSide, ScaleGizmo, VSide } from './scale-gizmo';
76
import './selection-gizmo.scss';
87

98
// interface PropertiesCache {
@@ -40,21 +39,17 @@ export class SelectionGizmo extends HTMLElement implements Gizmo {
4039
}
4140

4241
private createResizeHandlers(handlers: HTMLElement[]) {
43-
const tl = this.appendChild(document.createElement(ScaleGizmo.tagName)) as ScaleGizmo;
44-
tl.init(VSide.Top, HSide.Left);
45-
handlers.push(tl);
46-
47-
const tr = this.appendChild(document.createElement(ScaleGizmo.tagName)) as ScaleGizmo;
48-
tr.init(VSide.Top, HSide.Right);
49-
handlers.push(tr);
50-
51-
const bl = this.appendChild(document.createElement(ScaleGizmo.tagName)) as ScaleGizmo;
52-
bl.init(VSide.Bottom, HSide.Left);
53-
handlers.push(bl);
54-
55-
const br = this.appendChild(document.createElement(ScaleGizmo.tagName)) as ScaleGizmo;
56-
br.init(VSide.Bottom, HSide.Right);
57-
handlers.push(br);
42+
const vsides = [VSide.Top, VSide.Middle, VSide.Bottom];
43+
const hsides = [HSide.Left, HSide.Center, HSide.Right];
44+
45+
vsides.forEach(v => {
46+
hsides.forEach(h => {
47+
if (v === VSide.Middle && h === HSide.Center) return;
48+
const el = this.appendChild(document.createElement(ScaleGizmo.tagName)) as ScaleGizmo;
49+
el.init(v, h);
50+
handlers.push(el);
51+
});
52+
});
5853
}
5954

6055
public redraw(object: PIXI.DisplayObject, checkCache = true) {

src/editor-view/selectors/handlers/scale.handler.ts

+8-4
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,6 @@ export class ScaleHandler implements DraggingHandler {
1717
const gizmo = e.target as ScaleGizmo;
1818
let hside = gizmo.hside;
1919
let vside = gizmo.vside;
20-
console.log(hside, object?.name)
2120

2221
if (hside === undefined || vside === undefined) {
2322
this._object = null;
@@ -52,16 +51,21 @@ export class ScaleHandler implements DraggingHandler {
5251
x = object.x - object.pivot.x * object.scale.x;
5352
} else if (hside === HSide.Left) {
5453
pivotx = Math.abs(object.width / object.scale.x);
55-
x = object.x + object.width - object.pivot.x * object.scale.x;
54+
x = object.x - object.pivot.x * object.scale.x + object.width;
55+
} else {
56+
pivotx = Math.abs(object.width / object.scale.x) * 0.5;
57+
x = object.x - object.pivot.x * object.scale.x + object.width * 0.5;
5658
}
5759

5860
if (vside === VSide.Bottom) {
5961
pivoty = 0;
6062
y = object.y - object.pivot.y * object.scale.y;
61-
6263
} else if (vside === VSide.Top) {
6364
pivoty = Math.abs(object.height / object.scale.y);
64-
y = object.y + object.height - object.pivot.y * object.scale.y;
65+
y = object.y - object.pivot.y * object.scale.y + object.height;
66+
} else {
67+
pivoty = Math.abs(object.height / object.scale.y) * 0.5;
68+
y = object.y - object.pivot.y * object.scale.y + object.height * 0.5;
6569
}
6670

6771
object.pivot.set(pivotx, pivoty);

src/editor-view/selectors/selection-area.ts

+1
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@ export class SelectionArea extends HTMLElement {
3838

3939
public enable(config: PluginConfig) {
4040
this.selectionHandler.enable(config.root);
41+
// TODO make it tied to the Phaser's update cycle
4142
this.interval = setInterval(this.update.bind(this), INTERVAL);
4243
}
4344

0 commit comments

Comments
 (0)