From 47baed3b42195ef966a6d864a8cd6490f47c04a9 Mon Sep 17 00:00:00 2001 From: SpaiR Date: Mon, 19 Dec 2022 11:30:51 +0200 Subject: [PATCH] [API] Add arithmetic ops to ImVec2 and ImVec4 - plus - minus - times --- imgui-binding/src/main/java/imgui/ImVec2.java | 51 ++++++-- imgui-binding/src/main/java/imgui/ImVec4.java | 63 +++++++--- .../src/test/java/imgui/ImVec2Test.java | 100 +++++++++++++++ .../src/test/java/imgui/ImVec4Test.java | 118 ++++++++++++++++++ 4 files changed, 304 insertions(+), 28 deletions(-) create mode 100644 imgui-binding/src/test/java/imgui/ImVec2Test.java create mode 100644 imgui-binding/src/test/java/imgui/ImVec4Test.java diff --git a/imgui-binding/src/main/java/imgui/ImVec2.java b/imgui-binding/src/main/java/imgui/ImVec2.java index 24cacb7c..c4af92d8 100644 --- a/imgui-binding/src/main/java/imgui/ImVec2.java +++ b/imgui-binding/src/main/java/imgui/ImVec2.java @@ -3,7 +3,7 @@ import java.util.Objects; /** - * 2D vector (often used to store positions or sizes) + * 2D vector (often used to store positions or sizes). */ public final class ImVec2 implements Cloneable { public float x; @@ -12,24 +12,52 @@ public final class ImVec2 implements Cloneable { public ImVec2() { } - public ImVec2(final ImVec2 imVec2) { - this.x = imVec2.x; - this.y = imVec2.y; + public ImVec2(final float x, final float y) { + set(x, y); } - public ImVec2(final float x, final float y) { - this.x = x; - this.y = y; + public ImVec2(final ImVec2 value) { + this(value.x, value.y); } - public void set(final float x, final float y) { + public ImVec2 set(final float x, final float y) { this.x = x; this.y = y; + return this; + } + + public ImVec2 set(final ImVec2 value) { + return set(value.x, value.y); + } + + public ImVec2 plus(final float x, final float y) { + this.x += x; + this.y += y; + return this; + } + + public ImVec2 plus(final ImVec2 value) { + return plus(value.x, value.y); + } + + public ImVec2 minus(final float x, final float y) { + this.x -= x; + this.y -= y; + return this; + } + + public ImVec2 minus(final ImVec2 value) { + return minus(value.x, value.y); + } + + public ImVec2 times(final float x, final float y) { + this.x *= x; + this.y *= y; + return this; } - public void set(final ImVec2 value) { - this.x = value.x; - this.y = value.y; + public ImVec2 times(final ImVec2 value) { + return times(value.x, value.y); } @Override @@ -58,6 +86,7 @@ public int hashCode() { } @Override + @SuppressWarnings("MethodDoesntCallSuperMethod") public ImVec2 clone() { return new ImVec2(this); } diff --git a/imgui-binding/src/main/java/imgui/ImVec4.java b/imgui-binding/src/main/java/imgui/ImVec4.java index ce37352d..fe8a74a3 100644 --- a/imgui-binding/src/main/java/imgui/ImVec4.java +++ b/imgui-binding/src/main/java/imgui/ImVec4.java @@ -3,7 +3,7 @@ import java.util.Objects; /** - * 4D vector (often used to store floating-point colors) + * 4D vector (often used to store floating-point colors). */ public final class ImVec4 implements Cloneable { public float x; @@ -14,32 +14,60 @@ public final class ImVec4 implements Cloneable { public ImVec4() { } - public ImVec4(final ImVec4 imVec4) { - this.x = imVec4.x; - this.y = imVec4.y; - this.z = imVec4.z; - this.w = imVec4.w; + public ImVec4(final float x, final float y, final float z, final float w) { + set(x, y, z, w); } - public ImVec4(final float x, final float y, final float z, final float w) { - this.x = x; - this.y = y; - this.z = z; - this.w = w; + public ImVec4(final ImVec4 value) { + this(value.x, value.y, value.z, value.w); } - public void set(final float x, final float y, final float z, final float w) { + public ImVec4 set(final float x, final float y, final float z, final float w) { this.x = x; this.y = y; this.z = z; this.w = w; + return this; + } + + public ImVec4 set(final ImVec4 value) { + return set(value.x, value.y, value.z, value.w); + } + + public ImVec4 plus(final float x, final float y, final float z, final float w) { + this.x += x; + this.y += y; + this.z += z; + this.w += w; + return this; + } + + public ImVec4 plus(final ImVec4 value) { + return plus(value.x, value.y, value.z, value.w); + } + + public ImVec4 minus(final float x, final float y, final float z, final float w) { + this.x -= x; + this.y -= y; + this.z -= z; + this.w -= w; + return this; + } + + public ImVec4 minus(final ImVec4 value) { + return minus(value.x, value.y, value.z, value.w); + } + + public ImVec4 times(final float x, final float y, final float z, final float w) { + this.x *= x; + this.y *= y; + this.z *= z; + this.w *= w; + return this; } - public void set(final ImVec4 value) { - this.x = value.x; - this.y = value.y; - this.z = value.z; - this.w = value.w; + public ImVec4 times(final ImVec4 value) { + return times(value.x, value.y, value.z, value.w); } @Override @@ -70,6 +98,7 @@ public int hashCode() { } @Override + @SuppressWarnings("MethodDoesntCallSuperMethod") public ImVec4 clone() { return new ImVec4(this); } diff --git a/imgui-binding/src/test/java/imgui/ImVec2Test.java b/imgui-binding/src/test/java/imgui/ImVec2Test.java new file mode 100644 index 00000000..8df01873 --- /dev/null +++ b/imgui-binding/src/test/java/imgui/ImVec2Test.java @@ -0,0 +1,100 @@ +package imgui; + +import org.junit.jupiter.api.Nested; +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.*; + +class ImVec2Test { + @Nested + class constructor { + @Test + void raw() { + final ImVec2 value = new ImVec2(); + assertEquals(0, value.x); + assertEquals(0, value.y); + } + + @Test + void fromFloats() { + final ImVec2 value = new ImVec2(1, 2); + assertEquals(1, value.x); + assertEquals(2, value.y); + } + + @Test + void fromImVec2() { + final ImVec2 value = new ImVec2(new ImVec2(1, 2)); + assertEquals(1, value.x); + assertEquals(2, value.y); + } + } + + @Nested + class set { + @Test + void withFloats() { + final ImVec2 value = new ImVec2().set(1, 2); + assertEquals(1, value.x); + assertEquals(2, value.y); + } + + @Test + void withImVec2() { + final ImVec2 value = new ImVec2().set(new ImVec2(1, 2)); + assertEquals(1, value.x); + assertEquals(2, value.y); + } + } + + @Nested + class plus { + @Test + void withFloats() { + final ImVec2 value = new ImVec2(5, 5).plus(1, 2); + assertEquals(6, value.x); + assertEquals(7, value.y); + } + + @Test + void withImVec2() { + final ImVec2 value = new ImVec2(5, 5).plus(new ImVec2(1, 2)); + assertEquals(6, value.x); + assertEquals(7, value.y); + } + } + + @Nested + class minus { + @Test + void withFloats() { + final ImVec2 value = new ImVec2(5, 5).minus(1, 2); + assertEquals(4, value.x); + assertEquals(3, value.y); + } + + @Test + void withImVec2() { + final ImVec2 value = new ImVec2(5, 5).minus(new ImVec2(1, 2)); + assertEquals(4, value.x); + assertEquals(3, value.y); + } + } + + @Nested + class times { + @Test + void withFloats() { + final ImVec2 value = new ImVec2(5, 5).times(1, 2); + assertEquals(5, value.x); + assertEquals(10, value.y); + } + + @Test + void withImVec2() { + final ImVec2 value = new ImVec2(5, 5).times(new ImVec2(1, 2)); + assertEquals(5, value.x); + assertEquals(10, value.y); + } + } +} diff --git a/imgui-binding/src/test/java/imgui/ImVec4Test.java b/imgui-binding/src/test/java/imgui/ImVec4Test.java new file mode 100644 index 00000000..fffc6ce7 --- /dev/null +++ b/imgui-binding/src/test/java/imgui/ImVec4Test.java @@ -0,0 +1,118 @@ +package imgui; + +import org.junit.jupiter.api.Nested; +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.*; + +class ImVec4Test { + @Nested + class constructor { + @Test + void raw() { + final ImVec4 value = new ImVec4(); + assertEquals(0, value.x); + assertEquals(0, value.y); + assertEquals(0, value.z); + assertEquals(0, value.w); + } + + @Test + void fromFloats() { + final ImVec4 value = new ImVec4(1, 2, 3, 4); + assertEquals(1, value.x); + assertEquals(2, value.y); + assertEquals(3, value.z); + assertEquals(4, value.w); + } + + @Test + void fromImVec2() { + final ImVec4 value = new ImVec4(new ImVec4(1, 2, 3, 4)); + assertEquals(1, value.x); + assertEquals(2, value.y); + assertEquals(3, value.z); + assertEquals(4, value.w); + } + } + + @Nested + class set { + @Test + void withFloats() { + final ImVec4 value = new ImVec4().set(1, 2, 3, 4); + assertEquals(1, value.x); + assertEquals(2, value.y); + assertEquals(3, value.z); + assertEquals(4, value.w); + } + + @Test + void withImVec4() { + final ImVec4 value = new ImVec4().set(new ImVec4(1, 2, 3, 4)); + assertEquals(1, value.x); + assertEquals(2, value.y); + assertEquals(3, value.z); + assertEquals(4, value.w); + } + } + + @Nested + class plus { + @Test + void withFloats() { + final ImVec4 value = new ImVec4(5, 5, 5, 5).plus(1, 2, 3, 4); + assertEquals(6, value.x); + assertEquals(7, value.y); + } + + @Test + void withImVec4() { + final ImVec4 value = new ImVec4(5, 5, 5, 5).plus(new ImVec4(1, 2, 3, 4)); + assertEquals(6, value.x); + assertEquals(7, value.y); + } + } + + @Nested + class minus { + @Test + void withFloats() { + final ImVec4 value = new ImVec4(5, 5, 5, 5).minus(1, 2, 3, 4); + assertEquals(4, value.x); + assertEquals(3, value.y); + assertEquals(2, value.z); + assertEquals(1, value.w); + } + + @Test + void withImVec4() { + final ImVec4 value = new ImVec4(5, 5, 5, 5).minus(new ImVec4(1, 2, 3, 4)); + assertEquals(4, value.x); + assertEquals(3, value.y); + assertEquals(2, value.z); + assertEquals(1, value.w); + } + } + + @Nested + class times { + @Test + void withFloats() { + final ImVec4 value = new ImVec4(5, 5, 5, 5).times(1, 2, 3, 4); + assertEquals(5, value.x); + assertEquals(10, value.y); + assertEquals(15, value.z); + assertEquals(20, value.w); + } + + @Test + void withImVec4() { + final ImVec4 value = new ImVec4(5, 5, 5, 5).times(new ImVec4(1, 2, 3, 4)); + assertEquals(5, value.x); + assertEquals(10, value.y); + assertEquals(15, value.z); + assertEquals(20, value.w); + } + } +}