MCPcopy Index your code
hub / github.com/SpinyOwl/legui

github.com/SpinyOwl/legui @3.3.1

Chat with this repo
repository ↗ · DeepWiki ↗ · release 3.3.1 ↗ · + Follow
2,176 symbols 8,027 edges 339 files 1,145 documented · 53%
What it actually does AI analysis from the code graph — generated when you open this
loading…
README

REPO SIZE CODE SIZE Sonar Quality Gate License Discord

Build and publish STABLE SNAPSHOT VERSION


legui_api preview


TOC

LEGUI - What is it?

GUI implementation for using with LWJGL3.

This gui library made for using with OpenGL port (LWJGL) to allow programmers fast and easy integrate user interface to their OpenGL apps written in Java or Kotlin.
API is close to Swing API.

Examples

Radio button and text input Widgets TextArea
Button, togglebutton, checkbox, selectbox Sliders ScrollPanel

Contribution to LEGUI

See the contribution guide for more information.

System requirements

LEGUI requires Java 11+.

OpenGL state touched by the backend

Default renderer made on top of NanoVG which touches following states:

When textures are uploaded or updated, the following pixel store is set to defaults: GL_UNPACK_ALIGNMENT, GL_UNPACK_ROW_LENGTH, GL_UNPACK_SKIP_PIXELS, GL_UNPACK_SKIP_ROWS. Texture binding is also affected. Texture updates can happen when the user loads images, or when new font glyphs are added. Glyphs are added as needed start and end of render() method.

The data for the whole frame is buffered and flushed in end of rendering. The following code illustrates the OpenGL state touched by the rendering code:

    glUseProgram(prog);
    glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
    glEnable(GL_CULL_FACE);
    glCullFace(GL_BACK);
    glFrontFace(GL_CCW);
    glEnable(GL_BLEND);
    glDisable(GL_DEPTH_TEST);
    glDisable(GL_SCISSOR_TEST);
    glColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE);
    glStencilMask(0xffffffff);
    glStencilOp(GL_KEEP, GL_KEEP, GL_KEEP);
    glStencilFunc(GL_ALWAYS, 0, 0xffffffff);
    glActiveTexture(GL_TEXTURE0);
    glBindBuffer(GL_UNIFORM_BUFFER, buf);
    glBindVertexArray(arr);
    glBindBuffer(GL_ARRAY_BUFFER, buf);
    glBindTexture(GL_TEXTURE_2D, tex);
    glUniformBlockBinding(... , GLNVG_FRAG_BINDING);

Usage

Dependencies

Add dependency repo

For using this library you should add these urls as repositories:
For LWJGL and JOML dependencies
https://oss.sonatype.org/content/repositories/snapshots/ - for snapshots
https://oss.sonatype.org/content/repositories/releases/ - for releases
Also you can add your own versions of these libraries using LWJGL form.

For LEGUI and CBCHAIN dependency
https://raw.github.com/SpinyOwl/repo/releases

And add this dependency to your build script:

Add dependency (Maven):

```xml

org.liquidengine legui ${legui_version} ```

Add dependency (Gradle):

groovy // LEGUI - https://github.com/SpinyOwl/legui compile group: 'org.liquidengine', name: 'legui', version: "${legui_version}";

Demos:

All examples located under demo package.

Projects using LEGUI:

Modeler by Cout970

Open 3D Modeling Tool (Cout970/Modeler)
This tool is written in Kotlin, using LWJGL3 for rendering and Legui to build user interfaces

FMT by Fexcraft

Fex's Modelling Toolbox (Fexcraft/FMT)
A Tool to create Models basing on the "TMT" (updated and maintained version of Fex/FCL) Library.

Links

LWJGL - Lightweight Java Game Library 3
JOML – Java OpenGL Math Library
CBCHAIN - Callback Chain for LWJGL3
NanoVG -Small antialiased vector graphics rendering library for OpenGL.

Extension points exported contracts — how you extend this code

TooltipTextSizeChangeEventListener (Interface)
@author ShchAlexander. [45 implementers]
src/main/java/org/liquidengine/legui/component/event/tooltip/TooltipTextSizeChangeEventListener.java
CheckBoxChangeValueEventListener (Interface)
@author ShchAlexander. [45 implementers]
src/main/java/org/liquidengine/legui/component/event/checkbox/CheckBoxChangeValueEventListener.java
CheckBoxWidthChangeEventListener (Interface)
@author ShchAlexander. [45 implementers]
src/main/java/org/liquidengine/legui/component/event/checkbox/CheckBoxWidthChangeEventListener.java
WidgetCloseEventListener (Interface)
@author ShchAlexander. [45 implementers]
src/main/java/org/liquidengine/legui/component/event/widget/WidgetCloseEventListener.java
LabelWidthChangeEventListener (Interface)
@author ShchAlexander. [45 implementers]
src/main/java/org/liquidengine/legui/component/event/label/LabelWidthChangeEventListener.java

Core symbols most depended-on inside this repo

getStyle
called by 522
src/main/java/org/liquidengine/legui/component/Component.java
add
called by 228
src/main/java/org/liquidengine/legui/component/Component.java
getListenerMap
called by 124
src/main/java/org/liquidengine/legui/component/Component.java
getBackground
called by 105
src/main/java/org/liquidengine/legui/style/Style.java
addListener
called by 105
src/main/java/org/liquidengine/legui/listener/ListenerMap.java
get
called by 99
src/main/java/org/liquidengine/legui/style/length/Length.java
setColor
called by 87
src/main/java/org/liquidengine/legui/icon/CharIcon.java
getTextState
called by 78
src/main/java/org/liquidengine/legui/component/TextComponent.java

Shape

Method 1,804
Class 306
Interface 47
Enum 19

Languages

Java100%

Modules by API surface

src/main/java/org/liquidengine/legui/style/Style.java77 symbols
src/main/java/org/liquidengine/legui/component/Component.java62 symbols
src/main/java/org/liquidengine/legui/component/Widget.java47 symbols
src/main/java/org/liquidengine/legui/component/SelectBox.java46 symbols
src/main/java/org/liquidengine/legui/demo/ExampleGui.java37 symbols
src/main/java/org/liquidengine/legui/component/TextArea.java37 symbols
src/main/java/org/liquidengine/legui/component/ScrollablePanel.java36 symbols
src/main/java/org/liquidengine/legui/component/ScrollBar.java35 symbols
src/main/java/org/liquidengine/legui/system/context/DefaultCallbackKeeper.java32 symbols
src/main/java/org/liquidengine/legui/component/optional/TextState.java31 symbols
src/main/java/org/liquidengine/legui/demo/layout/MenuLayerDemo.java30 symbols
src/main/java/org/liquidengine/legui/style/flex/FlexStyle.java28 symbols

For agents

$ claude mcp add legui \
  -- python -m otcore.mcp_server <graph>

⬇ download graph artifact