Skip to content

Commit 47baed3

Browse files
committed
[API] Add arithmetic ops to ImVec2 and ImVec4
- plus - minus - times
1 parent a2bacb2 commit 47baed3

File tree

4 files changed

+304
-28
lines changed

4 files changed

+304
-28
lines changed

imgui-binding/src/main/java/imgui/ImVec2.java

Lines changed: 40 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
import java.util.Objects;
44

55
/**
6-
* 2D vector (often used to store positions or sizes)
6+
* 2D vector (often used to store positions or sizes).
77
*/
88
public final class ImVec2 implements Cloneable {
99
public float x;
@@ -12,24 +12,52 @@ public final class ImVec2 implements Cloneable {
1212
public ImVec2() {
1313
}
1414

15-
public ImVec2(final ImVec2 imVec2) {
16-
this.x = imVec2.x;
17-
this.y = imVec2.y;
15+
public ImVec2(final float x, final float y) {
16+
set(x, y);
1817
}
1918

20-
public ImVec2(final float x, final float y) {
21-
this.x = x;
22-
this.y = y;
19+
public ImVec2(final ImVec2 value) {
20+
this(value.x, value.y);
2321
}
2422

25-
public void set(final float x, final float y) {
23+
public ImVec2 set(final float x, final float y) {
2624
this.x = x;
2725
this.y = y;
26+
return this;
27+
}
28+
29+
public ImVec2 set(final ImVec2 value) {
30+
return set(value.x, value.y);
31+
}
32+
33+
public ImVec2 plus(final float x, final float y) {
34+
this.x += x;
35+
this.y += y;
36+
return this;
37+
}
38+
39+
public ImVec2 plus(final ImVec2 value) {
40+
return plus(value.x, value.y);
41+
}
42+
43+
public ImVec2 minus(final float x, final float y) {
44+
this.x -= x;
45+
this.y -= y;
46+
return this;
47+
}
48+
49+
public ImVec2 minus(final ImVec2 value) {
50+
return minus(value.x, value.y);
51+
}
52+
53+
public ImVec2 times(final float x, final float y) {
54+
this.x *= x;
55+
this.y *= y;
56+
return this;
2857
}
2958

30-
public void set(final ImVec2 value) {
31-
this.x = value.x;
32-
this.y = value.y;
59+
public ImVec2 times(final ImVec2 value) {
60+
return times(value.x, value.y);
3361
}
3462

3563
@Override
@@ -58,6 +86,7 @@ public int hashCode() {
5886
}
5987

6088
@Override
89+
@SuppressWarnings("MethodDoesntCallSuperMethod")
6190
public ImVec2 clone() {
6291
return new ImVec2(this);
6392
}

imgui-binding/src/main/java/imgui/ImVec4.java

Lines changed: 46 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
import java.util.Objects;
44

55
/**
6-
* 4D vector (often used to store floating-point colors)
6+
* 4D vector (often used to store floating-point colors).
77
*/
88
public final class ImVec4 implements Cloneable {
99
public float x;
@@ -14,32 +14,60 @@ public final class ImVec4 implements Cloneable {
1414
public ImVec4() {
1515
}
1616

17-
public ImVec4(final ImVec4 imVec4) {
18-
this.x = imVec4.x;
19-
this.y = imVec4.y;
20-
this.z = imVec4.z;
21-
this.w = imVec4.w;
17+
public ImVec4(final float x, final float y, final float z, final float w) {
18+
set(x, y, z, w);
2219
}
2320

24-
public ImVec4(final float x, final float y, final float z, final float w) {
25-
this.x = x;
26-
this.y = y;
27-
this.z = z;
28-
this.w = w;
21+
public ImVec4(final ImVec4 value) {
22+
this(value.x, value.y, value.z, value.w);
2923
}
3024

31-
public void set(final float x, final float y, final float z, final float w) {
25+
public ImVec4 set(final float x, final float y, final float z, final float w) {
3226
this.x = x;
3327
this.y = y;
3428
this.z = z;
3529
this.w = w;
30+
return this;
31+
}
32+
33+
public ImVec4 set(final ImVec4 value) {
34+
return set(value.x, value.y, value.z, value.w);
35+
}
36+
37+
public ImVec4 plus(final float x, final float y, final float z, final float w) {
38+
this.x += x;
39+
this.y += y;
40+
this.z += z;
41+
this.w += w;
42+
return this;
43+
}
44+
45+
public ImVec4 plus(final ImVec4 value) {
46+
return plus(value.x, value.y, value.z, value.w);
47+
}
48+
49+
public ImVec4 minus(final float x, final float y, final float z, final float w) {
50+
this.x -= x;
51+
this.y -= y;
52+
this.z -= z;
53+
this.w -= w;
54+
return this;
55+
}
56+
57+
public ImVec4 minus(final ImVec4 value) {
58+
return minus(value.x, value.y, value.z, value.w);
59+
}
60+
61+
public ImVec4 times(final float x, final float y, final float z, final float w) {
62+
this.x *= x;
63+
this.y *= y;
64+
this.z *= z;
65+
this.w *= w;
66+
return this;
3667
}
3768

38-
public void set(final ImVec4 value) {
39-
this.x = value.x;
40-
this.y = value.y;
41-
this.z = value.z;
42-
this.w = value.w;
69+
public ImVec4 times(final ImVec4 value) {
70+
return times(value.x, value.y, value.z, value.w);
4371
}
4472

4573
@Override
@@ -70,6 +98,7 @@ public int hashCode() {
7098
}
7199

72100
@Override
101+
@SuppressWarnings("MethodDoesntCallSuperMethod")
73102
public ImVec4 clone() {
74103
return new ImVec4(this);
75104
}
Lines changed: 100 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,100 @@
1+
package imgui;
2+
3+
import org.junit.jupiter.api.Nested;
4+
import org.junit.jupiter.api.Test;
5+
6+
import static org.junit.jupiter.api.Assertions.*;
7+
8+
class ImVec2Test {
9+
@Nested
10+
class constructor {
11+
@Test
12+
void raw() {
13+
final ImVec2 value = new ImVec2();
14+
assertEquals(0, value.x);
15+
assertEquals(0, value.y);
16+
}
17+
18+
@Test
19+
void fromFloats() {
20+
final ImVec2 value = new ImVec2(1, 2);
21+
assertEquals(1, value.x);
22+
assertEquals(2, value.y);
23+
}
24+
25+
@Test
26+
void fromImVec2() {
27+
final ImVec2 value = new ImVec2(new ImVec2(1, 2));
28+
assertEquals(1, value.x);
29+
assertEquals(2, value.y);
30+
}
31+
}
32+
33+
@Nested
34+
class set {
35+
@Test
36+
void withFloats() {
37+
final ImVec2 value = new ImVec2().set(1, 2);
38+
assertEquals(1, value.x);
39+
assertEquals(2, value.y);
40+
}
41+
42+
@Test
43+
void withImVec2() {
44+
final ImVec2 value = new ImVec2().set(new ImVec2(1, 2));
45+
assertEquals(1, value.x);
46+
assertEquals(2, value.y);
47+
}
48+
}
49+
50+
@Nested
51+
class plus {
52+
@Test
53+
void withFloats() {
54+
final ImVec2 value = new ImVec2(5, 5).plus(1, 2);
55+
assertEquals(6, value.x);
56+
assertEquals(7, value.y);
57+
}
58+
59+
@Test
60+
void withImVec2() {
61+
final ImVec2 value = new ImVec2(5, 5).plus(new ImVec2(1, 2));
62+
assertEquals(6, value.x);
63+
assertEquals(7, value.y);
64+
}
65+
}
66+
67+
@Nested
68+
class minus {
69+
@Test
70+
void withFloats() {
71+
final ImVec2 value = new ImVec2(5, 5).minus(1, 2);
72+
assertEquals(4, value.x);
73+
assertEquals(3, value.y);
74+
}
75+
76+
@Test
77+
void withImVec2() {
78+
final ImVec2 value = new ImVec2(5, 5).minus(new ImVec2(1, 2));
79+
assertEquals(4, value.x);
80+
assertEquals(3, value.y);
81+
}
82+
}
83+
84+
@Nested
85+
class times {
86+
@Test
87+
void withFloats() {
88+
final ImVec2 value = new ImVec2(5, 5).times(1, 2);
89+
assertEquals(5, value.x);
90+
assertEquals(10, value.y);
91+
}
92+
93+
@Test
94+
void withImVec2() {
95+
final ImVec2 value = new ImVec2(5, 5).times(new ImVec2(1, 2));
96+
assertEquals(5, value.x);
97+
assertEquals(10, value.y);
98+
}
99+
}
100+
}
Lines changed: 118 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,118 @@
1+
package imgui;
2+
3+
import org.junit.jupiter.api.Nested;
4+
import org.junit.jupiter.api.Test;
5+
6+
import static org.junit.jupiter.api.Assertions.*;
7+
8+
class ImVec4Test {
9+
@Nested
10+
class constructor {
11+
@Test
12+
void raw() {
13+
final ImVec4 value = new ImVec4();
14+
assertEquals(0, value.x);
15+
assertEquals(0, value.y);
16+
assertEquals(0, value.z);
17+
assertEquals(0, value.w);
18+
}
19+
20+
@Test
21+
void fromFloats() {
22+
final ImVec4 value = new ImVec4(1, 2, 3, 4);
23+
assertEquals(1, value.x);
24+
assertEquals(2, value.y);
25+
assertEquals(3, value.z);
26+
assertEquals(4, value.w);
27+
}
28+
29+
@Test
30+
void fromImVec2() {
31+
final ImVec4 value = new ImVec4(new ImVec4(1, 2, 3, 4));
32+
assertEquals(1, value.x);
33+
assertEquals(2, value.y);
34+
assertEquals(3, value.z);
35+
assertEquals(4, value.w);
36+
}
37+
}
38+
39+
@Nested
40+
class set {
41+
@Test
42+
void withFloats() {
43+
final ImVec4 value = new ImVec4().set(1, 2, 3, 4);
44+
assertEquals(1, value.x);
45+
assertEquals(2, value.y);
46+
assertEquals(3, value.z);
47+
assertEquals(4, value.w);
48+
}
49+
50+
@Test
51+
void withImVec4() {
52+
final ImVec4 value = new ImVec4().set(new ImVec4(1, 2, 3, 4));
53+
assertEquals(1, value.x);
54+
assertEquals(2, value.y);
55+
assertEquals(3, value.z);
56+
assertEquals(4, value.w);
57+
}
58+
}
59+
60+
@Nested
61+
class plus {
62+
@Test
63+
void withFloats() {
64+
final ImVec4 value = new ImVec4(5, 5, 5, 5).plus(1, 2, 3, 4);
65+
assertEquals(6, value.x);
66+
assertEquals(7, value.y);
67+
}
68+
69+
@Test
70+
void withImVec4() {
71+
final ImVec4 value = new ImVec4(5, 5, 5, 5).plus(new ImVec4(1, 2, 3, 4));
72+
assertEquals(6, value.x);
73+
assertEquals(7, value.y);
74+
}
75+
}
76+
77+
@Nested
78+
class minus {
79+
@Test
80+
void withFloats() {
81+
final ImVec4 value = new ImVec4(5, 5, 5, 5).minus(1, 2, 3, 4);
82+
assertEquals(4, value.x);
83+
assertEquals(3, value.y);
84+
assertEquals(2, value.z);
85+
assertEquals(1, value.w);
86+
}
87+
88+
@Test
89+
void withImVec4() {
90+
final ImVec4 value = new ImVec4(5, 5, 5, 5).minus(new ImVec4(1, 2, 3, 4));
91+
assertEquals(4, value.x);
92+
assertEquals(3, value.y);
93+
assertEquals(2, value.z);
94+
assertEquals(1, value.w);
95+
}
96+
}
97+
98+
@Nested
99+
class times {
100+
@Test
101+
void withFloats() {
102+
final ImVec4 value = new ImVec4(5, 5, 5, 5).times(1, 2, 3, 4);
103+
assertEquals(5, value.x);
104+
assertEquals(10, value.y);
105+
assertEquals(15, value.z);
106+
assertEquals(20, value.w);
107+
}
108+
109+
@Test
110+
void withImVec4() {
111+
final ImVec4 value = new ImVec4(5, 5, 5, 5).times(new ImVec4(1, 2, 3, 4));
112+
assertEquals(5, value.x);
113+
assertEquals(10, value.y);
114+
assertEquals(15, value.z);
115+
assertEquals(20, value.w);
116+
}
117+
}
118+
}

0 commit comments

Comments
 (0)