forked from ZestyRaraferu/OFS_Simulator3D
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathResizeHandle.cs
More file actions
88 lines (83 loc) · 1.94 KB
/
ResizeHandle.cs
File metadata and controls
88 lines (83 loc) · 1.94 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
using Godot;
using System;
public enum ResizeHandleType
{
Top,
Bottom,
Left,
Right
}
public class ResizeHandle : Control
{
[Export]
private ResizeHandleType handleType;
private bool isResizing = false;
private Vector2 resizePos = Vector2.Zero;
private Vector2 startSize = Vector2.Zero;
public override void _Ready()
{
switch(handleType)
{
case ResizeHandleType.Top:
case ResizeHandleType.Bottom:
MouseDefaultCursorShape = CursorShape.Vsize;
break;
case ResizeHandleType.Left:
case ResizeHandleType.Right:
MouseDefaultCursorShape = CursorShape.Hsize;
break;
}
}
public override void _GuiInput(InputEvent ev)
{
if(ev is InputEventMouseButton button)
{
if(button.ButtonIndex == (int)ButtonList.Left)
{
if(button.Pressed && !isResizing) {
isResizing = true;
startSize = OS.WindowSize;
resizePos = GetGlobalMousePosition();
}
else
isResizing = false;
}
}
}
public override void _Process(float delta)
{
if(isResizing)
{
var mousePos = GetGlobalMousePosition();
switch(handleType)
{
case ResizeHandleType.Top:
{
var newPos = OS.WindowPosition + mousePos - resizePos;
newPos.x = OS.WindowPosition.x;
var deltaPos = OS.WindowPosition - newPos;
startSize += new Vector2(0.0f, deltaPos.y);
OS.WindowPosition = newPos;
OS.WindowSize = startSize;
break;
}
case ResizeHandleType.Bottom:
OS.WindowSize = startSize + new Vector2(0.0f, mousePos.y - resizePos.y);
break;
case ResizeHandleType.Left:
{
var newPos = OS.WindowPosition + mousePos - resizePos;
newPos.y = OS.WindowPosition.y;
var deltaPos = OS.WindowPosition - newPos;
startSize += new Vector2(deltaPos.x, 0.0f);
OS.WindowPosition = newPos;
OS.WindowSize = startSize;
break;
}
case ResizeHandleType.Right:
OS.WindowSize = startSize + new Vector2(mousePos.x - resizePos.x, 0.0f);
break;
}
}
}
}