diff --git a/buildSrc/src/main/groovy/imgui/generate/GenerateLibs.groovy b/buildSrc/src/main/groovy/imgui/generate/GenerateLibs.groovy index e934916..a01e1c3 100644 --- a/buildSrc/src/main/groovy/imgui/generate/GenerateLibs.groovy +++ b/buildSrc/src/main/groovy/imgui/generate/GenerateLibs.groovy @@ -39,11 +39,9 @@ class GenerateLibs extends DefaultTask { // Copy ImGui h/cpp files project.copy { CopySpec spec -> - spec.from(project.rootProject.file('imgui')) { CopySpec it -> it.include('*.h', '*.cpp') } - - spec.from(project.rootProject.file('imnodes')) { CopySpec it -> it.include('*.h', '*.cpp') } - - spec.from(project.rootProject.file('imgui-node-editor')) { CopySpec it -> it.include('*.h', '*.cpp', '*.inl') } + ['imgui', 'imnodes', 'imgui-node-editor'].each { + spec.from(project.rootProject.file(it)) { CopySpec s -> s.include('*.h', '*.cpp', '*.inl') } + } if (withFreeType) { spec.from(project.rootProject.file('imgui/misc/freetype')) { CopySpec it -> it.include('*.h', '*.cpp') } diff --git a/imgui-binding/src/main/java/imgui/imnodes/ImNodes.java b/imgui-binding/src/main/java/imgui/imnodes/ImNodes.java index c4762e6..7fa1a6d 100644 --- a/imgui-binding/src/main/java/imgui/imnodes/ImNodes.java +++ b/imgui-binding/src/main/java/imgui/imnodes/ImNodes.java @@ -7,19 +7,20 @@ import imgui.type.ImInt; /** * Bindings for Imnodes (https://github.com/Nelarius/imnodes/) * Original library author - Johann Muszynski (https://github.com/Nelarius) - * + *

* Refer to the library's Github page for examples and support */ public final class ImNodes { + private static ImNodesStyle style; - private ImNodes() { } + private ImNodes() { + } /*JNI #include #include #include #include "jni_common.h" - #include "jni_binding_struct.h" */ // An editor context corresponds to a set of nodes in a single workspace (created with a single @@ -55,14 +56,30 @@ public final class ImNodes { imnodes::Shutdown(); */ + /** + * Returns the global style struct. See the struct declaration for default values. + */ + public static ImNodesStyle getStyle() { + if (style == null) { + style = new ImNodesStyle(nGetStyle()); + } + return style; + } + + private static native long nGetStyle(); /* + return (intptr_t)&imnodes::GetStyle(); + */ + // Style presets matching the dear imgui styles of the same name. public static native void styleColorsDark(); /* imnodes::StyleColorsDark(); */ + public static native void styleColorsClassic(); /* imnodes::StyleColorsClassic(); */ + public static native void styleColorsLight(); /* imnodes::StyleColorsLight(); */ @@ -137,7 +154,6 @@ public final class ImNodes { // // Each attribute id must be unique. - /** * Create a static attribute block. A static attribute has no pin, and therefore can't be linked to * anything. However, you can still use IsAttributeActive() and IsAnyAttributeActive() to check for @@ -196,25 +212,32 @@ public final class ImNodes { return imnodes::IsEditorHovered(); */ - /** - * Binding notice: getHoveredNode(), getHoveredLink() and getHoveredPin() - * return id of the hovered object. If there is no such object -1 will be returned. - * Use these functions after endNodeEditor() has been called. - * - * These methods implemented instead of the original bool imnodes::IsNodeHovered(int* node_id), - * bool imnodes::IsLinkHovered(int* link_id) and bool imnodes::IsPinHovered(int* attribute_id) for convenience. - */ + // Binding notice: getHoveredNode(), getHoveredLink() and getHoveredPin() + // return id of the hovered object. If there is no such object -1 will be returned. + // Use these functions after endNodeEditor() has been called. + // + // These methods implemented instead of the original bool imnodes::IsNodeHovered(int* node_id), + // bool imnodes::IsLinkHovered(int* link_id) and bool imnodes::IsPinHovered(int* attribute_id) for convenience. + /** + * @return id of the hovered node or -1 if there is no such object + */ public static native int getHoveredNode(); /* int i; return imnodes::IsNodeHovered(&i) ? i : -1; */ + /** + * @return id of the hovered link or -1 if there is no such object + */ public static native int getHoveredLink(); /* int i; return imnodes::IsLinkHovered(&i) ? i : -1; */ + /** + * @return id of the hovered pin or -1 if there is no such object + */ public static native int getHoveredPin(); /* int i; return imnodes::IsPinHovered(&i) ? i : -1; @@ -222,7 +245,7 @@ public final class ImNodes { /** * Binding notice: getActiveAttribute() returns id the active attribute. If there is no active attribute -1 will be returned. - * + *

* This method implemented instead of the original bool imnodes::IsAnyAttributeActive(int* attribute_id) for convenience. */ public static native int getActiveAttribute(); /* @@ -337,7 +360,6 @@ public final class ImNodes { imnodes::ClearLinkSelection(); */ - /** * Enable or disable the ability to click and drag a specific node. */ @@ -476,5 +498,4 @@ public final class ImNodes { private static native void nLoadEditorStateFromIniFile(long context, String fileName); /* imnodes::LoadEditorStateFromIniFile((imnodes::EditorContext*)context, fileName); */ - } diff --git a/imgui-binding/src/main/java/imgui/imnodes/ImNodesAttributeFlags.java b/imgui-binding/src/main/java/imgui/imnodes/ImNodesAttributeFlags.java index bb6d01b..16a464a 100644 --- a/imgui-binding/src/main/java/imgui/imnodes/ImNodesAttributeFlags.java +++ b/imgui-binding/src/main/java/imgui/imnodes/ImNodesAttributeFlags.java @@ -15,7 +15,7 @@ public final class ImNodesAttributeFlags { * NOTE: the user has to actually delete the link for this to work. A deleted link can be * detected by calling IsLinkDestroyed() after EndNodeEditor(). */ - public static final int EnableLinkDetachWithDragClick = 1 << 0; + public static final int EnableLinkDetachWithDragClick = 1; /** * Visual snapping of an in progress link will trigger IsLink Created/Destroyed events. Allows diff --git a/imgui-binding/src/main/java/imgui/imnodes/ImNodesColorStyle.java b/imgui-binding/src/main/java/imgui/imnodes/ImNodesColorStyle.java index 56612fa..dc05874 100644 --- a/imgui-binding/src/main/java/imgui/imnodes/ImNodesColorStyle.java +++ b/imgui-binding/src/main/java/imgui/imnodes/ImNodesColorStyle.java @@ -1,7 +1,6 @@ package imgui.imnodes; public final class ImNodesColorStyle { - private ImNodesColorStyle() { } @@ -21,5 +20,4 @@ public final class ImNodesColorStyle { public static final int BoxSelectorOutline = 13; public static final int GridBackground = 14; public static final int GridLine = 15; - } diff --git a/imgui-binding/src/main/java/imgui/imnodes/ImNodesContext.java b/imgui-binding/src/main/java/imgui/imnodes/ImNodesContext.java index e4616c7..cc7dece 100644 --- a/imgui-binding/src/main/java/imgui/imnodes/ImNodesContext.java +++ b/imgui-binding/src/main/java/imgui/imnodes/ImNodesContext.java @@ -4,6 +4,13 @@ import imgui.binding.ImGuiStructDestroyable; public final class ImNodesContext extends ImGuiStructDestroyable { + public ImNodesContext() { + } + + public ImNodesContext(final long ptr) { + super(ptr); + } + /*JNI #include #include @@ -14,14 +21,6 @@ public final class ImNodesContext extends ImGuiStructDestroyable { #define IMNODES_CONTEXT ((imnodes::EditorContext*)STRUCT_PTR) */ - public ImNodesContext() { - super(); - } - - public ImNodesContext(final long ptr) { - super(ptr); - } - @Override protected long create() { return nCreate(); @@ -33,11 +32,10 @@ public final class ImNodesContext extends ImGuiStructDestroyable { } private native long nCreate(); /* - return (jlong)imnodes::EditorContextCreate(); + return (intptr_t)imnodes::EditorContextCreate(); */ private native void nDestroy(); /* imnodes::EditorContextFree(IMNODES_CONTEXT); */ - } diff --git a/imgui-binding/src/main/java/imgui/imnodes/ImNodesPinShape.java b/imgui-binding/src/main/java/imgui/imnodes/ImNodesPinShape.java index 1f08e41..38def36 100644 --- a/imgui-binding/src/main/java/imgui/imnodes/ImNodesPinShape.java +++ b/imgui-binding/src/main/java/imgui/imnodes/ImNodesPinShape.java @@ -4,7 +4,6 @@ package imgui.imnodes; * This enum controls the way attribute pins look. */ public final class ImNodesPinShape { - private ImNodesPinShape() { } diff --git a/imgui-binding/src/main/java/imgui/imnodes/ImNodesStyle.java b/imgui-binding/src/main/java/imgui/imnodes/ImNodesStyle.java new file mode 100644 index 0000000..b5e94ef --- /dev/null +++ b/imgui-binding/src/main/java/imgui/imnodes/ImNodesStyle.java @@ -0,0 +1,175 @@ +package imgui.imnodes; + +import imgui.binding.ImGuiStruct; + +public final class ImNodesStyle extends ImGuiStruct { + public ImNodesStyle(final long ptr) { + super(ptr); + } + + /*JNI + #include + #include + #include + #include "jni_common.h" + #include "jni_binding_struct.h" + + #define IMNODES_STYLE ((imnodes::Style*)STRUCT_PTR) + */ + + public native float getGridSpacing(); /* + return IMNODES_STYLE->grid_spacing; + */ + + public native void setGridSpacing(float gridSpacing); /* + IMNODES_STYLE->grid_spacing = gridSpacing; + */ + + public native float getNodeCornerRounding(); /* + return IMNODES_STYLE->node_corner_rounding; + */ + + public native void setNodeCornerRounding(float nodeCornerRounding); /* + IMNODES_STYLE->node_corner_rounding = nodeCornerRounding; + */ + + public native float getNodePaddingHorizontal(); /* + return IMNODES_STYLE->node_padding_horizontal; + */ + + public native void setNodePaddingHorizontal(float nodePaddingHorizontal); /* + IMNODES_STYLE->node_padding_horizontal = nodePaddingHorizontal; + */ + + public native float getNodePaddingVertical(); /* + return IMNODES_STYLE->node_padding_vertical; + */ + + public native void setNodePaddingVertical(float nodePaddingVertical); /* + IMNODES_STYLE->node_padding_vertical = nodePaddingVertical; + */ + + public native float getNodeBorderThickness(); /* + return IMNODES_STYLE->node_border_thickness; + */ + + public native void setNodeBorderThickness(float nodeBorderThickness); /* + IMNODES_STYLE->node_border_thickness = nodeBorderThickness; + */ + + public native float getLinkThickness(); /* + return IMNODES_STYLE->link_thickness; + */ + + public native void setLinkThickness(float linkThickness); /* + IMNODES_STYLE->link_thickness = linkThickness; + */ + + public native float getLinkLineSegmentsPerLength(); /* + return IMNODES_STYLE->link_line_segments_per_length; + */ + + public native void setLinkLineSegmentsPerLength(float linkLineSegmentsPerLength); /* + IMNODES_STYLE->link_line_segments_per_length = linkLineSegmentsPerLength; + */ + + public native float getLinkHoverDistance(); /* + return IMNODES_STYLE->link_hover_distance; + */ + + public native void setLinkHoverDistance(float linkHoverDistance); /* + IMNODES_STYLE->link_hover_distance = linkHoverDistance; + */ + + /** + * The circle radius used when the pin shape is either PinShape_Circle or PinShape_CircleFilled. + */ + public native float getPinCircleRadius(); /* + return IMNODES_STYLE->pin_circle_radius; + */ + + /** + * The circle radius used when the pin shape is either PinShape_Circle or PinShape_CircleFilled. + */ + public native void setPinCircleRadius(float pinCircleRadius); /* + IMNODES_STYLE->pin_circle_radius = pinCircleRadius; + */ + + /** + * The quad side length used when the shape is either PinShape_Quad or PinShape_QuadFilled. + */ + public native float getPinQuadSideLength(); /* + return IMNODES_STYLE->pin_quad_side_length; + */ + + /** + * The quad side length used when the shape is either PinShape_Quad or PinShape_QuadFilled. + */ + public native void setPinQuadSideLength(float pinQuadSideLength); /* + IMNODES_STYLE->pin_quad_side_length = pinQuadSideLength; + */ + + /** + * The equilateral triangle side length used when the pin shape is either PinShape_Triangle or PinShape_TriangleFilled. + */ + public native float getPinTriangleSideLength(); /* + return IMNODES_STYLE->pin_triangle_side_length; + */ + + /** + * The equilateral triangle side length used when the pin shape is either PinShape_Triangle or PinShape_TriangleFilled. + */ + public native void setPinTriangleSideLength(float pinTriangleSideLength); /* + IMNODES_STYLE->pin_triangle_side_length = pinTriangleSideLength; + */ + + /** + * The thickness of the line used when the pin shape is not filled. + */ + public native float getPinLineThickness(); /* + return IMNODES_STYLE->pin_line_thickness; + */ + + /** + * The thickness of the line used when the pin shape is not filled. + */ + public native void setPinLineThickness(float pinLineThickness); /* + IMNODES_STYLE->pin_line_thickness = pinLineThickness; + */ + + /** + * The radius from the pin's center position inside of which it is detected as being hovered over. + */ + public native float getPinHoverRadius(); /* + return IMNODES_STYLE->pin_hover_radius; + */ + + /** + * The radius from the pin's center position inside of which it is detected as being hovered over. + */ + public native void setPinHoverRadius(float pinHoverRadius); /* + IMNODES_STYLE->pin_hover_radius = pinHoverRadius; + */ + + /** + * Offsets the pins' positions from the edge of the node to the outside of the node. + */ + public native float getPinOffset(); /* + return IMNODES_STYLE->pin_offset; + */ + + /** + * Offsets the pins' positions from the edge of the node to the outside of the node. + */ + public native void setPinOffset(float pinOffset); /* + IMNODES_STYLE->pin_offset = pinOffset; + */ + + public native int getFlags(); /* + return IMNODES_STYLE->flags; + */ + + public native void setFlags(int imNodesStyleFlags); /* + IMNODES_STYLE->flags = (imnodes::StyleFlags)imNodesStyleFlags; + */ +} diff --git a/imgui-binding/src/main/java/imgui/imnodes/ImNodesStyleFlags.java b/imgui-binding/src/main/java/imgui/imnodes/ImNodesStyleFlags.java new file mode 100644 index 0000000..e3a9809 --- /dev/null +++ b/imgui-binding/src/main/java/imgui/imnodes/ImNodesStyleFlags.java @@ -0,0 +1,10 @@ +package imgui.imnodes; + +public final class ImNodesStyleFlags { + private ImNodesStyleFlags() { + } + + public static final int None = 0; + public static final int NodeOutline = 1; + public static final int GridLines = 1 << 2; +} diff --git a/imgui-binding/src/main/java/imgui/imnodes/ImNodesStyleVar.java b/imgui-binding/src/main/java/imgui/imnodes/ImNodesStyleVar.java index c454270..19bfbac 100644 --- a/imgui-binding/src/main/java/imgui/imnodes/ImNodesStyleVar.java +++ b/imgui-binding/src/main/java/imgui/imnodes/ImNodesStyleVar.java @@ -1,7 +1,6 @@ package imgui.imnodes; public final class ImNodesStyleVar { - private ImNodesStyleVar() { } diff --git a/imgui-lwjgl3/src/test/java/ExampleUi.java b/imgui-lwjgl3/src/test/java/ExampleUi.java index 486b9d8..d3580d0 100644 --- a/imgui-lwjgl3/src/test/java/ExampleUi.java +++ b/imgui-lwjgl3/src/test/java/ExampleUi.java @@ -246,7 +246,6 @@ final class ExampleUi { ImGui.text("This a demo graph editor for ImNodes"); - ImNodes.editorContextSet(imNodesContext); ImNodes.beginNodeEditor(); @@ -507,6 +506,4 @@ final class ExampleUi { } } } - - }