Search in sources :

Example 1 with CallbackKeeper

use of com.spinyowl.legui.system.context.CallbackKeeper in project legui by SpinyOwl.

the class MultipleWindowsExample method main.

public static void main(String[] args) {
    System.setProperty("joml.nounsafe", Boolean.TRUE.toString());
    System.setProperty("java.awt.headless", Boolean.TRUE.toString());
    if (!GLFW.glfwInit()) {
        throw new RuntimeException("Can't initialize GLFW");
    }
    glfwSetErrorCallback(GLFWErrorCallback.createPrint(System.err));
    int N = 3;
    long[] windows = new long[N];
    Renderer[] renderers = new NvgRenderer[N];
    Context[] contexts = new Context[N];
    Frame[] frames = new Frame[N];
    CallbackKeeper[] keepers = new DefaultCallbackKeeper[N];
    SystemEventProcessor[] systemEventProcessors = new SystemEventProcessor[N];
    GLFWKeyCallbackI glfwKeyCallbackI = (w1, key, code, action, mods) -> running = !(key == GLFW_KEY_ESCAPE && action != GLFW_RELEASE);
    GLFWWindowCloseCallbackI glfwWindowCloseCallbackI = w -> running = false;
    for (int i = 0; i < N; i++) {
        windows[i] = glfwCreateWindow(WIDTH, HEIGHT, "Multiple Windows Example " + (i + 1), NULL, NULL);
        glfwShowWindow(windows[i]);
        glfwMakeContextCurrent(windows[i]);
        GL.createCapabilities();
        glfwSwapInterval(0);
        glfwSetWindowPos(windows[i], 50, 50 + (HEIGHT + 50) * i);
        // Renderer which will render our ui components.
        renderers[i] = new NvgRenderer();
        renderers[i].initialize();
        createGuiElements(frames[i] = new Frame(WIDTH, HEIGHT));
        contexts[i] = new Context(windows[i]);
        keepers[i] = new DefaultCallbackKeeper();
        CallbackKeeper.registerCallbacks(windows[i], keepers[i]);
        keepers[i].getChainKeyCallback().add(glfwKeyCallbackI);
        keepers[i].getChainWindowCloseCallback().add(glfwWindowCloseCallbackI);
        systemEventProcessors[i] = new SystemEventProcessorImpl();
        SystemEventProcessor.addDefaultCallbacks(keepers[i], systemEventProcessors[i]);
    }
    running = true;
    while (running) {
        for (int i = 0; i < N; i++) {
            glfwMakeContextCurrent(windows[i]);
            GL.getCapabilities();
            glfwSwapInterval(0);
            contexts[i].updateGlfwWindow();
            Vector2i windowSize = contexts[i].getFramebufferSize();
            glClearColor(1, 1, 1, 1);
            glViewport(0, 0, windowSize.x, windowSize.y);
            glClear(GL_COLOR_BUFFER_BIT | GL_STENCIL_BUFFER_BIT);
            renderers[i].render(frames[i], contexts[i]);
            glfwPollEvents();
            glfwSwapBuffers(windows[i]);
            systemEventProcessors[i].processEvents(frames[i], contexts[i]);
            EventProcessorProvider.getInstance().processEvents();
            // When everything done we need to relayout components.
            LayoutManager.getInstance().layout(frames[i]);
        }
    }
    for (int i = 0; i < N; i++) {
        renderers[i].destroy();
        glfwDestroyWindow(windows[i]);
    }
    glfwTerminate();
}
Also used : Context(com.spinyowl.legui.system.context.Context) GLFW.glfwDestroyWindow(org.lwjgl.glfw.GLFW.glfwDestroyWindow) GLFW.glfwSwapBuffers(org.lwjgl.glfw.GLFW.glfwSwapBuffers) GLFW_RELEASE(org.lwjgl.glfw.GLFW.GLFW_RELEASE) Component(com.spinyowl.legui.component.Component) MouseClickEventListener(com.spinyowl.legui.listener.MouseClickEventListener) Button(com.spinyowl.legui.component.Button) GLFW.glfwCreateWindow(org.lwjgl.glfw.GLFW.glfwCreateWindow) GLFW.glfwPollEvents(org.lwjgl.glfw.GLFW.glfwPollEvents) GLFWErrorCallback(org.lwjgl.glfw.GLFWErrorCallback) GLFW.glfwSwapInterval(org.lwjgl.glfw.GLFW.glfwSwapInterval) RadioButton(com.spinyowl.legui.component.RadioButton) GL11.glViewport(org.lwjgl.opengl.GL11.glViewport) NULL(org.lwjgl.system.MemoryUtil.NULL) ArrayList(java.util.ArrayList) GL_COLOR_BUFFER_BIT(org.lwjgl.opengl.GL11.GL_COLOR_BUFFER_BIT) Renderer(com.spinyowl.legui.system.renderer.Renderer) GLFW.glfwSetErrorCallback(org.lwjgl.glfw.GLFW.glfwSetErrorCallback) GLFWWindowCloseCallbackI(org.lwjgl.glfw.GLFWWindowCloseCallbackI) CallbackKeeper(com.spinyowl.legui.system.context.CallbackKeeper) GL11.glClear(org.lwjgl.opengl.GL11.glClear) GLFW.glfwShowWindow(org.lwjgl.glfw.GLFW.glfwShowWindow) LayoutManager(com.spinyowl.legui.system.layout.LayoutManager) CursorEnterEventListener(com.spinyowl.legui.listener.CursorEnterEventListener) NvgRenderer(com.spinyowl.legui.system.renderer.nvg.NvgRenderer) GL_STENCIL_BUFFER_BIT(org.lwjgl.opengl.GL11.GL_STENCIL_BUFFER_BIT) CursorEnterEvent(com.spinyowl.legui.event.CursorEnterEvent) Context(com.spinyowl.legui.system.context.Context) ColorConstants(com.spinyowl.legui.style.color.ColorConstants) Frame(com.spinyowl.legui.component.Frame) SystemEventProcessorImpl(com.spinyowl.legui.system.handler.processor.SystemEventProcessorImpl) RadioButtonGroup(com.spinyowl.legui.component.RadioButtonGroup) GLFW.glfwTerminate(org.lwjgl.glfw.GLFW.glfwTerminate) GLFWKeyCallbackI(org.lwjgl.glfw.GLFWKeyCallbackI) GL11.glClearColor(org.lwjgl.opengl.GL11.glClearColor) DefaultCallbackKeeper(com.spinyowl.legui.system.context.DefaultCallbackKeeper) Label(com.spinyowl.legui.component.Label) GLFW.glfwSetWindowPos(org.lwjgl.glfw.GLFW.glfwSetWindowPos) GLFW(org.lwjgl.glfw.GLFW) GLFW.glfwMakeContextCurrent(org.lwjgl.glfw.GLFW.glfwMakeContextCurrent) MouseClickEvent(com.spinyowl.legui.event.MouseClickEvent) SystemEventProcessor(com.spinyowl.legui.system.handler.processor.SystemEventProcessor) EventProcessorProvider(com.spinyowl.legui.listener.processor.EventProcessorProvider) List(java.util.List) Vector2i(org.joml.Vector2i) SimpleLineBorder(com.spinyowl.legui.style.border.SimpleLineBorder) GLFW_KEY_ESCAPE(org.lwjgl.glfw.GLFW.GLFW_KEY_ESCAPE) GL(org.lwjgl.opengl.GL) GLFWKeyCallbackI(org.lwjgl.glfw.GLFWKeyCallbackI) Frame(com.spinyowl.legui.component.Frame) CallbackKeeper(com.spinyowl.legui.system.context.CallbackKeeper) DefaultCallbackKeeper(com.spinyowl.legui.system.context.DefaultCallbackKeeper) NvgRenderer(com.spinyowl.legui.system.renderer.nvg.NvgRenderer) GLFWWindowCloseCallbackI(org.lwjgl.glfw.GLFWWindowCloseCallbackI) DefaultCallbackKeeper(com.spinyowl.legui.system.context.DefaultCallbackKeeper) SystemEventProcessorImpl(com.spinyowl.legui.system.handler.processor.SystemEventProcessorImpl) Renderer(com.spinyowl.legui.system.renderer.Renderer) NvgRenderer(com.spinyowl.legui.system.renderer.nvg.NvgRenderer) Vector2i(org.joml.Vector2i) SystemEventProcessor(com.spinyowl.legui.system.handler.processor.SystemEventProcessor)

Example 2 with CallbackKeeper

use of com.spinyowl.legui.system.context.CallbackKeeper in project legui by SpinyOwl.

the class SingleClassExample2 method main.

public static void main(String[] args) throws IOException {
    System.setProperty("joml.nounsafe", Boolean.TRUE.toString());
    System.setProperty("java.awt.headless", Boolean.TRUE.toString());
    if (!GLFW.glfwInit()) {
        throw new RuntimeException("Can't initialize GLFW");
    }
    long window = glfwCreateWindow(WIDTH, HEIGHT, "Legui", NULL, NULL);
    glfwShowWindow(window);
    glfwMakeContextCurrent(window);
    GL.createCapabilities();
    glfwSwapInterval(0);
    // Firstly we need to create frame component for window.
    Frame frame = new Frame(WIDTH, HEIGHT);
    // we can add elements here or on the fly
    // We need to create legui context which shared by renderer and event processor.
    // Also we need to pass event processor for ui events such as click on component, key typing and
    // etc.
    Context context = new Context(window);
    // We need to create callback keeper which will hold all of callbacks.
    // These callbacks will be used in initialization of system event processor
    // (will be added callbacks which will push system events to event queue and after that
    // processed by SystemEventProcessor)
    CallbackKeeper keeper = new DefaultCallbackKeeper();
    // register callbacks for window. Note: all previously binded callbacks will be unbinded.
    CallbackKeeper.registerCallbacks(window, keeper);
    GLFWKeyCallbackI glfwKeyCallbackI = (w1, key, code, action, mods) -> running = !(key == GLFW_KEY_ESCAPE && action != GLFW_RELEASE);
    GLFWWindowCloseCallbackI glfwWindowCloseCallbackI = w -> running = false;
    // if we want to create some callbacks for system events you should create and put them to
    // keeper
    // 
    // Wrong:
    // glfwSetKeyCallback(window, glfwKeyCallbackI);
    // glfwSetWindowCloseCallback(window, glfwWindowCloseCallbackI);
    // 
    // Right:
    keeper.getChainKeyCallback().add(glfwKeyCallbackI);
    keeper.getChainWindowCloseCallback().add(glfwWindowCloseCallbackI);
    // Event processor for system events. System events should be processed and translated to gui
    // events.
    SystemEventProcessor systemEventProcessor = new SystemEventProcessorImpl();
    SystemEventProcessor.addDefaultCallbacks(keeper, systemEventProcessor);
    // Also we need to create renderer provider
    // and create renderer which will render our ui components.
    Renderer renderer = new NvgRenderer();
    // Initialization finished, so we can start render loop.
    running = true;
    // Everything can be done in one thread as well as in separated threads.
    // Here is one-thread example.
    // before render loop we need to initialize renderer
    renderer.initialize();
    AtomicBoolean needToUpdate = new AtomicBoolean(true);
    keeper.getChainKeyCallback().add((w, key, scancode, action, mods) -> {
        if (key == GLFW_KEY_F1 && action == GLFW_RELEASE)
            needToUpdate.set(true);
    });
    // createUI(frame);
    while (running) {
        if (needToUpdate.getAndSet(false))
            createUI(frame);
        // Before rendering we need to update context with window size and window framebuffer size
        // {
        // int[] windowWidth = {0}, windowHeight = {0};
        // GLFW.glfwGetWindowSize(window, windowWidth, windowHeight);
        // int[] frameBufferWidth = {0}, frameBufferHeight = {0};
        // GLFW.glfwGetFramebufferSize(window, frameBufferWidth, frameBufferHeight);
        // int[] xpos = {0}, ypos = {0};
        // GLFW.glfwGetWindowPos(window, xpos, ypos);
        // double[] mx = {0}, my = {0};
        // GLFW.glfwGetCursorPos(window, mx, my);
        // 
        // context.update(windowWidth[0], windowHeight[0],
        // frameBufferWidth[0], frameBufferHeight[0],
        // xpos[0], ypos[0],
        // mx[0], my[0]
        // );
        // }
        // Also we can do it in one line
        context.updateGlfwWindow();
        Vector2i windowSize = context.getFramebufferSize();
        glClearColor(1, 1, 1, 1);
        // Set viewport size
        glViewport(0, 0, windowSize.x, windowSize.y);
        // Clear screen
        glClear(GL_COLOR_BUFFER_BIT | GL_STENCIL_BUFFER_BIT);
        // render frame
        renderer.render(frame, context);
        // poll events to callbacks
        glfwPollEvents();
        glfwSwapBuffers(window);
        // Now we need to process events. Firstly we need to process system events.
        systemEventProcessor.processEvents(frame, context);
        // When system events are translated to GUI events we need to process them.
        // This event processor calls listeners added to ui components
        EventProcessorProvider.getInstance().processEvents();
        // When everything done we need to relayout components.
        LayoutManager.getInstance().layout(frame);
        // Run animations. Should be also called cause some components use animations for updating
        // state.
        AnimatorProvider.getAnimator().runAnimations();
    }
    // And when rendering is ended we need to destroy renderer
    renderer.destroy();
    glfwDestroyWindow(window);
    glfwTerminate();
}
Also used : Context(com.spinyowl.legui.system.context.Context) COLUMN(com.spinyowl.legui.style.flex.FlexStyle.FlexDirection.COLUMN) GLFW.glfwDestroyWindow(org.lwjgl.glfw.GLFW.glfwDestroyWindow) GLFW_RELEASE(org.lwjgl.glfw.GLFW.GLFW_RELEASE) Button(com.spinyowl.legui.component.Button) GLFW.glfwCreateWindow(org.lwjgl.glfw.GLFW.glfwCreateWindow) GLFW.glfwPollEvents(org.lwjgl.glfw.GLFW.glfwPollEvents) GLFW.glfwSwapInterval(org.lwjgl.glfw.GLFW.glfwSwapInterval) ROW(com.spinyowl.legui.style.flex.FlexStyle.FlexDirection.ROW) GL11.glViewport(org.lwjgl.opengl.GL11.glViewport) NULL(org.lwjgl.system.MemoryUtil.NULL) ABSOLUTE(com.spinyowl.legui.style.Style.PositionType.ABSOLUTE) Renderer(com.spinyowl.legui.system.renderer.Renderer) CallbackKeeper(com.spinyowl.legui.system.context.CallbackKeeper) GLFW.glfwShowWindow(org.lwjgl.glfw.GLFW.glfwShowWindow) LayoutManager(com.spinyowl.legui.system.layout.LayoutManager) GL_STENCIL_BUFFER_BIT(org.lwjgl.opengl.GL11.GL_STENCIL_BUFFER_BIT) ColorUtil(com.spinyowl.legui.style.color.ColorUtil) FLEX(com.spinyowl.legui.style.Style.DisplayType.FLEX) ColorConstants(com.spinyowl.legui.style.color.ColorConstants) Frame(com.spinyowl.legui.component.Frame) GLFW.glfwTerminate(org.lwjgl.glfw.GLFW.glfwTerminate) GLFWKeyCallbackI(org.lwjgl.glfw.GLFWKeyCallbackI) JustifyContent(com.spinyowl.legui.style.flex.FlexStyle.JustifyContent) DefaultCallbackKeeper(com.spinyowl.legui.system.context.DefaultCallbackKeeper) Label(com.spinyowl.legui.component.Label) GLFW(org.lwjgl.glfw.GLFW) GLFW.glfwMakeContextCurrent(org.lwjgl.glfw.GLFW.glfwMakeContextCurrent) EventProcessorProvider(com.spinyowl.legui.listener.processor.EventProcessorProvider) Vector2i(org.joml.Vector2i) Vector2f(org.joml.Vector2f) AlignContent(com.spinyowl.legui.style.flex.FlexStyle.AlignContent) GLFW.glfwSwapBuffers(org.lwjgl.glfw.GLFW.glfwSwapBuffers) Component(com.spinyowl.legui.component.Component) Intersector(com.spinyowl.legui.intersection.Intersector) AtomicBoolean(java.util.concurrent.atomic.AtomicBoolean) GL_COLOR_BUFFER_BIT(org.lwjgl.opengl.GL11.GL_COLOR_BUFFER_BIT) RELATIVE(com.spinyowl.legui.style.Style.PositionType.RELATIVE) GLFWWindowCloseCallbackI(org.lwjgl.glfw.GLFWWindowCloseCallbackI) GL11.glClear(org.lwjgl.opengl.GL11.glClear) NvgRenderer(com.spinyowl.legui.system.renderer.nvg.NvgRenderer) Context(com.spinyowl.legui.system.context.Context) SystemEventProcessorImpl(com.spinyowl.legui.system.handler.processor.SystemEventProcessorImpl) FontRegistry(com.spinyowl.legui.style.font.FontRegistry) GL11.glClearColor(org.lwjgl.opengl.GL11.glClearColor) GLFW_KEY_F1(org.lwjgl.glfw.GLFW.GLFW_KEY_F1) IOException(java.io.IOException) AlignItems(com.spinyowl.legui.style.flex.FlexStyle.AlignItems) AnimatorProvider(com.spinyowl.legui.animation.AnimatorProvider) Panel(com.spinyowl.legui.component.Panel) SystemEventProcessor(com.spinyowl.legui.system.handler.processor.SystemEventProcessor) SimpleLineBorder(com.spinyowl.legui.style.border.SimpleLineBorder) Widget(com.spinyowl.legui.component.Widget) GLFW_KEY_ESCAPE(org.lwjgl.glfw.GLFW.GLFW_KEY_ESCAPE) GL(org.lwjgl.opengl.GL) GLFWKeyCallbackI(org.lwjgl.glfw.GLFWKeyCallbackI) Frame(com.spinyowl.legui.component.Frame) CallbackKeeper(com.spinyowl.legui.system.context.CallbackKeeper) DefaultCallbackKeeper(com.spinyowl.legui.system.context.DefaultCallbackKeeper) NvgRenderer(com.spinyowl.legui.system.renderer.nvg.NvgRenderer) AtomicBoolean(java.util.concurrent.atomic.AtomicBoolean) GLFWWindowCloseCallbackI(org.lwjgl.glfw.GLFWWindowCloseCallbackI) DefaultCallbackKeeper(com.spinyowl.legui.system.context.DefaultCallbackKeeper) SystemEventProcessorImpl(com.spinyowl.legui.system.handler.processor.SystemEventProcessorImpl) Renderer(com.spinyowl.legui.system.renderer.Renderer) NvgRenderer(com.spinyowl.legui.system.renderer.nvg.NvgRenderer) Vector2i(org.joml.Vector2i) SystemEventProcessor(com.spinyowl.legui.system.handler.processor.SystemEventProcessor)

Example 3 with CallbackKeeper

use of com.spinyowl.legui.system.context.CallbackKeeper in project legui by SpinyOwl.

the class SingleClassExample method main.

public static void main(String[] args) throws IOException {
    System.setProperty("joml.nounsafe", Boolean.TRUE.toString());
    System.setProperty("java.awt.headless", Boolean.TRUE.toString());
    if (!GLFW.glfwInit()) {
        throw new RuntimeException("Can't initialize GLFW");
    }
    long window = glfwCreateWindow(WIDTH, HEIGHT, "Single Class Example", NULL, NULL);
    glfwShowWindow(window);
    glfwMakeContextCurrent(window);
    GL.createCapabilities();
    glfwSwapInterval(0);
    // Firstly we need to create frame component for window.
    Frame frame = new Frame(WIDTH, HEIGHT);
    // we can add elements here or on the fly
    createGuiElements(frame);
    // We need to create legui context which shared by renderer and event processor.
    // Also we need to pass event processor for ui events such as click on component, key typing and
    // etc.
    Context context = new Context(window);
    // We need to create callback keeper which will hold all of callbacks.
    // These callbacks will be used in initialization of system event processor
    // (will be added callbacks which will push system events to event queue and after that
    // processed by SystemEventProcessor)
    CallbackKeeper keeper = new DefaultCallbackKeeper();
    // register callbacks for window. Note: all previously binded callbacks will be unbinded.
    CallbackKeeper.registerCallbacks(window, keeper);
    GLFWKeyCallbackI glfwKeyCallbackI = (w1, key, code, action, mods) -> running = !(key == GLFW_KEY_ESCAPE && action != GLFW_RELEASE);
    GLFWWindowCloseCallbackI glfwWindowCloseCallbackI = w -> running = false;
    // if we want to create some callbacks for system events you should create and put them to
    // keeper
    // 
    // Wrong:
    // glfwSetKeyCallback(window, glfwKeyCallbackI);
    // glfwSetWindowCloseCallback(window, glfwWindowCloseCallbackI);
    // 
    // Right:
    keeper.getChainKeyCallback().add(glfwKeyCallbackI);
    keeper.getChainWindowCloseCallback().add(glfwWindowCloseCallbackI);
    // Event processor for system events. System events should be processed and translated to gui
    // events.
    SystemEventProcessor systemEventProcessor = new SystemEventProcessorImpl();
    SystemEventProcessor.addDefaultCallbacks(keeper, systemEventProcessor);
    // Also we need to create renderer provider
    // and create renderer which will render our ui components.
    Renderer renderer = new NvgRenderer();
    // Initialization finished, so we can start render loop.
    running = true;
    // Everything can be done in one thread as well as in separated threads.
    // Here is one-thread example.
    // before render loop we need to initialize renderer
    renderer.initialize();
    while (running) {
        // Before rendering we need to update context with window size and window framebuffer size
        // {
        // int[] windowWidth = {0}, windowHeight = {0};
        // GLFW.glfwGetWindowSize(window, windowWidth, windowHeight);
        // int[] frameBufferWidth = {0}, frameBufferHeight = {0};
        // GLFW.glfwGetFramebufferSize(window, frameBufferWidth, frameBufferHeight);
        // int[] xpos = {0}, ypos = {0};
        // GLFW.glfwGetWindowPos(window, xpos, ypos);
        // double[] mx = {0}, my = {0};
        // GLFW.glfwGetCursorPos(window, mx, my);
        // 
        // context.update(windowWidth[0], windowHeight[0],
        // frameBufferWidth[0], frameBufferHeight[0],
        // xpos[0], ypos[0],
        // mx[0], my[0]
        // );
        // }
        // Also we can do it in one line
        context.updateGlfwWindow();
        Vector2i windowSize = context.getFramebufferSize();
        glClearColor(1, 1, 1, 1);
        // Set viewport size
        glViewport(0, 0, windowSize.x, windowSize.y);
        // Clear screen
        glClear(GL_COLOR_BUFFER_BIT | GL_STENCIL_BUFFER_BIT);
        // render frame
        renderer.render(frame, context);
        // poll events to callbacks
        glfwPollEvents();
        glfwSwapBuffers(window);
        // Now we need to process events. Firstly we need to process system events.
        systemEventProcessor.processEvents(frame, context);
        // When system events are translated to GUI events we need to process them.
        // This event processor calls listeners added to ui components
        EventProcessorProvider.getInstance().processEvents();
        // When everything done we need to relayout components.
        LayoutManager.getInstance().layout(frame);
        // Run animations. Should be also called cause some components use animations for updating
        // state.
        AnimatorProvider.getAnimator().runAnimations();
        update(context);
    }
    // And when rendering is ended we need to destroy renderer
    renderer.destroy();
    glfwDestroyWindow(window);
    glfwTerminate();
}
Also used : Context(com.spinyowl.legui.system.context.Context) TOP(com.spinyowl.legui.component.TabbedPanel.TabStripPosition.TOP) GLFW.glfwDestroyWindow(org.lwjgl.glfw.GLFW.glfwDestroyWindow) GLFW_RELEASE(org.lwjgl.glfw.GLFW.GLFW_RELEASE) Button(com.spinyowl.legui.component.Button) RIGHT(com.spinyowl.legui.component.TabbedPanel.TabStripPosition.RIGHT) GLFW.glfwCreateWindow(org.lwjgl.glfw.GLFW.glfwCreateWindow) GLFW.glfwPollEvents(org.lwjgl.glfw.GLFW.glfwPollEvents) GLFW.glfwSwapInterval(org.lwjgl.glfw.GLFW.glfwSwapInterval) GL11.glViewport(org.lwjgl.opengl.GL11.glViewport) NULL(org.lwjgl.system.MemoryUtil.NULL) KeyEvent(com.spinyowl.legui.event.KeyEvent) Renderer(com.spinyowl.legui.system.renderer.Renderer) FlexDirection(com.spinyowl.legui.style.flex.FlexStyle.FlexDirection) MouseClickAction(com.spinyowl.legui.event.MouseClickEvent.MouseClickAction) AtomicInteger(java.util.concurrent.atomic.AtomicInteger) CallbackKeeper(com.spinyowl.legui.system.context.CallbackKeeper) GLFW.glfwShowWindow(org.lwjgl.glfw.GLFW.glfwShowWindow) LayoutManager(com.spinyowl.legui.system.layout.LayoutManager) CursorEnterEventListener(com.spinyowl.legui.listener.CursorEnterEventListener) GL_STENCIL_BUFFER_BIT(org.lwjgl.opengl.GL11.GL_STENCIL_BUFFER_BIT) CursorEnterEvent(com.spinyowl.legui.event.CursorEnterEvent) PositionType(com.spinyowl.legui.style.Style.PositionType) ColorUtil(com.spinyowl.legui.style.color.ColorUtil) LEFT(com.spinyowl.legui.component.TabbedPanel.TabStripPosition.LEFT) FLEX(com.spinyowl.legui.style.Style.DisplayType.FLEX) ColorConstants(com.spinyowl.legui.style.color.ColorConstants) Frame(com.spinyowl.legui.component.Frame) GLFW.glfwTerminate(org.lwjgl.glfw.GLFW.glfwTerminate) GLFW_KEY_5(org.lwjgl.glfw.GLFW.GLFW_KEY_5) GLFWKeyCallbackI(org.lwjgl.glfw.GLFWKeyCallbackI) GLFW_KEY_6(org.lwjgl.glfw.GLFW.GLFW_KEY_6) DefaultCallbackKeeper(com.spinyowl.legui.system.context.DefaultCallbackKeeper) Label(com.spinyowl.legui.component.Label) GLFW(org.lwjgl.glfw.GLFW) GLFW.glfwMakeContextCurrent(org.lwjgl.glfw.GLFW.glfwMakeContextCurrent) EventProcessorProvider(com.spinyowl.legui.listener.processor.EventProcessorProvider) List(java.util.List) Vector2i(org.joml.Vector2i) TabStripPosition(com.spinyowl.legui.component.TabbedPanel.TabStripPosition) NotNull(org.jetbrains.annotations.NotNull) GLFW.glfwSwapBuffers(org.lwjgl.glfw.GLFW.glfwSwapBuffers) Component(com.spinyowl.legui.component.Component) TabbedPanel(com.spinyowl.legui.component.TabbedPanel) MouseClickEventListener(com.spinyowl.legui.listener.MouseClickEventListener) BOTTOM(com.spinyowl.legui.component.TabbedPanel.TabStripPosition.BOTTOM) AtomicBoolean(java.util.concurrent.atomic.AtomicBoolean) ArrayList(java.util.ArrayList) GL_COLOR_BUFFER_BIT(org.lwjgl.opengl.GL11.GL_COLOR_BUFFER_BIT) GLFWWindowCloseCallbackI(org.lwjgl.glfw.GLFWWindowCloseCallbackI) GLFW_KEY_3(org.lwjgl.glfw.GLFW.GLFW_KEY_3) GL11.glClear(org.lwjgl.opengl.GL11.glClear) GLFW_KEY_4(org.lwjgl.glfw.GLFW.GLFW_KEY_4) GLFW_KEY_1(org.lwjgl.glfw.GLFW.GLFW_KEY_1) GLFW_KEY_2(org.lwjgl.glfw.GLFW.GLFW_KEY_2) NvgRenderer(com.spinyowl.legui.system.renderer.nvg.NvgRenderer) Context(com.spinyowl.legui.system.context.Context) SystemEventProcessorImpl(com.spinyowl.legui.system.handler.processor.SystemEventProcessorImpl) GL11.glClearColor(org.lwjgl.opengl.GL11.glClearColor) IOException(java.io.IOException) AnimatorProvider(com.spinyowl.legui.animation.AnimatorProvider) Panel(com.spinyowl.legui.component.Panel) MouseClickEvent(com.spinyowl.legui.event.MouseClickEvent) SystemEventProcessor(com.spinyowl.legui.system.handler.processor.SystemEventProcessor) SimpleLineBorder(com.spinyowl.legui.style.border.SimpleLineBorder) Widget(com.spinyowl.legui.component.Widget) GLFW_KEY_ESCAPE(org.lwjgl.glfw.GLFW.GLFW_KEY_ESCAPE) Tab(com.spinyowl.legui.component.TabbedPanel.Tab) Vector4f(org.joml.Vector4f) GL(org.lwjgl.opengl.GL) GLFWKeyCallbackI(org.lwjgl.glfw.GLFWKeyCallbackI) Frame(com.spinyowl.legui.component.Frame) CallbackKeeper(com.spinyowl.legui.system.context.CallbackKeeper) DefaultCallbackKeeper(com.spinyowl.legui.system.context.DefaultCallbackKeeper) NvgRenderer(com.spinyowl.legui.system.renderer.nvg.NvgRenderer) GLFWWindowCloseCallbackI(org.lwjgl.glfw.GLFWWindowCloseCallbackI) DefaultCallbackKeeper(com.spinyowl.legui.system.context.DefaultCallbackKeeper) SystemEventProcessorImpl(com.spinyowl.legui.system.handler.processor.SystemEventProcessorImpl) Renderer(com.spinyowl.legui.system.renderer.Renderer) NvgRenderer(com.spinyowl.legui.system.renderer.nvg.NvgRenderer) Vector2i(org.joml.Vector2i) SystemEventProcessor(com.spinyowl.legui.system.handler.processor.SystemEventProcessor)

Example 4 with CallbackKeeper

use of com.spinyowl.legui.system.context.CallbackKeeper in project legui by SpinyOwl.

the class ShaderProgram method initializeGuiWithCallbacks.

private void initializeGuiWithCallbacks() {
    GLFWKeyCallbackI escapeCallback = (w1, key, code, action, mods) -> running = !(key == GLFW_KEY_ESCAPE && action != GLFW_RELEASE);
    // used to skip gui rendering
    GLFWKeyCallbackI hideCallback = (w1, key, code, action, mods) -> {
        if (key == GLFW_KEY_H && action == GLFW_RELEASE) {
            hiding = !hiding;
        }
    };
    GLFWWindowCloseCallbackI windowCloseCallback = w -> running = false;
    CallbackKeeper keeper = initializer.getCallbackKeeper();
    keeper.getChainKeyCallback().add(escapeCallback);
    keeper.getChainKeyCallback().add(hideCallback);
    keeper.getChainWindowCloseCallback().add(windowCloseCallback);
    Renderer renderer = initializer.getRenderer();
    renderer.initialize();
}
Also used : GLFW.glfwDestroyWindow(org.lwjgl.glfw.GLFW.glfwDestroyWindow) GL15.glBufferData(org.lwjgl.opengl.GL15.glBufferData) GLFW_RELEASE(org.lwjgl.glfw.GLFW.GLFW_RELEASE) GL_COMPILE_STATUS(org.lwjgl.opengl.GL20.GL_COMPILE_STATUS) GL30.glDeleteVertexArrays(org.lwjgl.opengl.GL30.glDeleteVertexArrays) GL20.glCompileShader(org.lwjgl.opengl.GL20.glCompileShader) Button(com.spinyowl.legui.component.Button) FloatBuffer(java.nio.FloatBuffer) GLFW.glfwCreateWindow(org.lwjgl.glfw.GLFW.glfwCreateWindow) GLFW.glfwPollEvents(org.lwjgl.glfw.GLFW.glfwPollEvents) GL_INFO_LOG_LENGTH(org.lwjgl.opengl.GL20.GL_INFO_LOG_LENGTH) GLFW.glfwSwapInterval(org.lwjgl.glfw.GLFW.glfwSwapInterval) GL20.glCreateShader(org.lwjgl.opengl.GL20.glCreateShader) GL11.glDisable(org.lwjgl.opengl.GL11.glDisable) GL11.glViewport(org.lwjgl.opengl.GL11.glViewport) GL20.glAttachShader(org.lwjgl.opengl.GL20.glAttachShader) NULL(org.lwjgl.system.MemoryUtil.NULL) Renderer(com.spinyowl.legui.system.renderer.Renderer) GL20.glGetShaderInfoLog(org.lwjgl.opengl.GL20.glGetShaderInfoLog) CallbackKeeper(com.spinyowl.legui.system.context.CallbackKeeper) GLFW.glfwShowWindow(org.lwjgl.glfw.GLFW.glfwShowWindow) GL30.glGenVertexArrays(org.lwjgl.opengl.GL30.glGenVertexArrays) LayoutManager(com.spinyowl.legui.system.layout.LayoutManager) GL15.glDeleteBuffers(org.lwjgl.opengl.GL15.glDeleteBuffers) CursorEnterEventListener(com.spinyowl.legui.listener.CursorEnterEventListener) GL_STENCIL_BUFFER_BIT(org.lwjgl.opengl.GL11.GL_STENCIL_BUFFER_BIT) CursorEnterEvent(com.spinyowl.legui.event.CursorEnterEvent) GL_TRIANGLES(org.lwjgl.opengl.GL11.GL_TRIANGLES) ColorConstants(com.spinyowl.legui.style.color.ColorConstants) Frame(com.spinyowl.legui.component.Frame) RadioButtonGroup(com.spinyowl.legui.component.RadioButtonGroup) GLFW.glfwTerminate(org.lwjgl.glfw.GLFW.glfwTerminate) GL_DEPTH_TEST(org.lwjgl.opengl.GL11.GL_DEPTH_TEST) GLFWKeyCallbackI(org.lwjgl.glfw.GLFWKeyCallbackI) Label(com.spinyowl.legui.component.Label) GL20.glShaderSource(org.lwjgl.opengl.GL20.glShaderSource) GL20.glLinkProgram(org.lwjgl.opengl.GL20.glLinkProgram) GL_VERTEX_SHADER(org.lwjgl.opengl.GL20.GL_VERTEX_SHADER) GLFW(org.lwjgl.glfw.GLFW) GLFW.glfwMakeContextCurrent(org.lwjgl.glfw.GLFW.glfwMakeContextCurrent) BufferUtils(org.lwjgl.BufferUtils) GL_STATIC_DRAW(org.lwjgl.opengl.GL15.GL_STATIC_DRAW) EventProcessorProvider(com.spinyowl.legui.listener.processor.EventProcessorProvider) List(java.util.List) Vector2i(org.joml.Vector2i) GLFW_KEY_H(org.lwjgl.glfw.GLFW.GLFW_KEY_H) GL_FLOAT(org.lwjgl.opengl.GL11.GL_FLOAT) GL20.glDeleteProgram(org.lwjgl.opengl.GL20.glDeleteProgram) GL11.glDrawArrays(org.lwjgl.opengl.GL11.glDrawArrays) GL20.glGetProgrami(org.lwjgl.opengl.GL20.glGetProgrami) GLFW.glfwSwapBuffers(org.lwjgl.glfw.GLFW.glfwSwapBuffers) GL20.glUseProgram(org.lwjgl.opengl.GL20.glUseProgram) DefaultInitializer(com.spinyowl.legui.DefaultInitializer) GL20.glDeleteShader(org.lwjgl.opengl.GL20.glDeleteShader) Component(com.spinyowl.legui.component.Component) MouseClickEventListener(com.spinyowl.legui.listener.MouseClickEventListener) GL20.glEnableVertexAttribArray(org.lwjgl.opengl.GL20.glEnableVertexAttribArray) GL_LINK_STATUS(org.lwjgl.opengl.GL20.GL_LINK_STATUS) RadioButton(com.spinyowl.legui.component.RadioButton) GL15.glBindBuffer(org.lwjgl.opengl.GL15.glBindBuffer) GL15.glGenBuffers(org.lwjgl.opengl.GL15.glGenBuffers) ArrayList(java.util.ArrayList) GL_COLOR_BUFFER_BIT(org.lwjgl.opengl.GL11.GL_COLOR_BUFFER_BIT) GLFWWindowCloseCallbackI(org.lwjgl.glfw.GLFWWindowCloseCallbackI) GL11.glClear(org.lwjgl.opengl.GL11.glClear) Context(com.spinyowl.legui.system.context.Context) GL11.glEnable(org.lwjgl.opengl.GL11.glEnable) GL30.glBindVertexArray(org.lwjgl.opengl.GL30.glBindVertexArray) GL20.glVertexAttribPointer(org.lwjgl.opengl.GL20.glVertexAttribPointer) GL11.glClearColor(org.lwjgl.opengl.GL11.glClearColor) GL_FRAGMENT_SHADER(org.lwjgl.opengl.GL20.GL_FRAGMENT_SHADER) GL20.glCreateProgram(org.lwjgl.opengl.GL20.glCreateProgram) IOException(java.io.IOException) AnimatorProvider(com.spinyowl.legui.animation.AnimatorProvider) GL_ARRAY_BUFFER(org.lwjgl.opengl.GL15.GL_ARRAY_BUFFER) MouseClickEvent(com.spinyowl.legui.event.MouseClickEvent) GL_FALSE(org.lwjgl.opengl.GL11.GL_FALSE) GL20.glDetachShader(org.lwjgl.opengl.GL20.glDetachShader) GL_BLEND(org.lwjgl.opengl.GL11.GL_BLEND) GL20.glDisableVertexAttribArray(org.lwjgl.opengl.GL20.glDisableVertexAttribArray) SimpleLineBorder(com.spinyowl.legui.style.border.SimpleLineBorder) GLFW_KEY_ESCAPE(org.lwjgl.glfw.GLFW.GLFW_KEY_ESCAPE) GL20.glGetShaderi(org.lwjgl.opengl.GL20.glGetShaderi) GL(org.lwjgl.opengl.GL) GLFWKeyCallbackI(org.lwjgl.glfw.GLFWKeyCallbackI) CallbackKeeper(com.spinyowl.legui.system.context.CallbackKeeper) GLFWWindowCloseCallbackI(org.lwjgl.glfw.GLFWWindowCloseCallbackI) Renderer(com.spinyowl.legui.system.renderer.Renderer)

Example 5 with CallbackKeeper

use of com.spinyowl.legui.system.context.CallbackKeeper in project legui by SpinyOwl.

the class FBOImageExample method main.

public static void main(String[] args) throws IOException {
    System.setProperty("joml.nounsafe", Boolean.TRUE.toString());
    System.setProperty("java.awt.headless", Boolean.TRUE.toString());
    if (!GLFW.glfwInit()) {
        throw new RuntimeException("Can't initialize GLFW");
    }
    long window = glfwCreateWindow(WIDTH, HEIGHT, "FBO Image example", NULL, NULL);
    glfwShowWindow(window);
    glfwMakeContextCurrent(window);
    GL.createCapabilities();
    glfwSwapInterval(0);
    // Firstly we need to create frame component for window.
    Frame frame = new Frame(WIDTH, HEIGHT);
    // We need to create legui context which shared by renderer and event processor.
    // Also we need to pass event processor for ui events such as click on component, key typing and etc.
    Context context = new Context(window);
    // We need to create callback keeper which will hold all of callbacks.
    // These callbacks will be used in initialization of system event processor
    // (will be added callbacks which will push system events to event queue and after that processed by SystemEventProcessor)
    CallbackKeeper keeper = new DefaultCallbackKeeper();
    // register callbacks for window. Note: all previously binded callbacks will be unbinded.
    CallbackKeeper.registerCallbacks(window, keeper);
    GLFWKeyCallbackI glfwKeyCallbackI = (w1, key, code, action, mods) -> running = !(key == GLFW_KEY_ESCAPE && action != GLFW_RELEASE);
    GLFWWindowCloseCallbackI glfwWindowCloseCallbackI = w -> running = false;
    // if we want to create some callbacks for system events you should create and put them to keeper
    // 
    // Wrong:
    // glfwSetKeyCallback(window, glfwKeyCallbackI);
    // glfwSetWindowCloseCallback(window, glfwWindowCloseCallbackI);
    // 
    // Right:
    keeper.getChainKeyCallback().add(glfwKeyCallbackI);
    keeper.getChainWindowCloseCallback().add(glfwWindowCloseCallbackI);
    // Event processor for system events. System events should be processed and translated to gui events.
    SystemEventProcessor systemEventProcessor = new SystemEventProcessorImpl();
    SystemEventProcessor.addDefaultCallbacks(keeper, systemEventProcessor);
    // Also we need to create renderer provider
    // and create renderer which will render our ui components.
    Renderer renderer = new NvgRenderer();
    // Initialization finished, so we can start render loop.
    running = true;
    // Everything can be done in one thread as well as in separated threads.
    // Here is one-thread example.
    // before render loop we need to initialize renderer
    renderer.initialize();
    // //// rendering to texture and use this texture as image
    long nvgContext = 0;
    FBOImage fboTexture = null;
    boolean isVersionNew = (glGetInteger(GL_MAJOR_VERSION) > 3) || (glGetInteger(GL_MAJOR_VERSION) == 3 && glGetInteger(GL_MINOR_VERSION) >= 2);
    if (isVersionNew) {
        int flags = NanoVGGL3.NVG_STENCIL_STROKES | NanoVGGL3.NVG_ANTIALIAS;
        nvgContext = NanoVGGL3.nvgCreate(flags);
    } else {
        int flags = NanoVGGL2.NVG_STENCIL_STROKES | NanoVGGL2.NVG_ANTIALIAS;
        nvgContext = NanoVGGL2.nvgCreate(flags);
    }
    if (nvgContext != 0) {
        fboTexture = createFBOTexture(textureWidth, textureHeight);
        Widget widget = new Widget(10, 10, 100, 100);
        widget.setCloseable(false);
        widget.setMinimizable(false);
        widget.setResizable(true);
        widget.getContainer().getStyle().setDisplay(DisplayType.FLEX);
        ImageView imageView = new ImageView(fboTexture);
        imageView.setPosition(10, 10);
        imageView.getStyle().setPosition(PositionType.RELATIVE);
        imageView.getStyle().getFlexStyle().setFlexGrow(1);
        imageView.getStyle().setMargin(10f);
        imageView.getStyle().setMinimumSize(50, 50);
        widget.getContainer().add(imageView);
        frame.getContainer().add(widget);
    }
    while (running) {
        if (fboTexture != null) {
            renderToFBO(nvgContext);
        }
        // Before rendering we need to update context with window size and window framebuffer size
        // {
        // int[] windowWidth = {0}, windowHeight = {0};
        // GLFW.glfwGetWindowSize(window, windowWidth, windowHeight);
        // int[] frameBufferWidth = {0}, frameBufferHeight = {0};
        // GLFW.glfwGetFramebufferSize(window, frameBufferWidth, frameBufferHeight);
        // int[] xpos = {0}, ypos = {0};
        // GLFW.glfwGetWindowPos(window, xpos, ypos);
        // double[] mx = {0}, my = {0};
        // GLFW.glfwGetCursorPos(window, mx, my);
        // 
        // context.update(windowWidth[0], windowHeight[0],
        // frameBufferWidth[0], frameBufferHeight[0],
        // xpos[0], ypos[0],
        // mx[0], my[0]
        // );
        // }
        // Also we can do it in one line
        context.updateGlfwWindow();
        Vector2i windowSize = context.getFramebufferSize();
        glClearColor(1, 1, 1, 1);
        // Set viewport size
        glViewport(0, 0, windowSize.x, windowSize.y);
        // Clear screen
        glClear(GL_COLOR_BUFFER_BIT | GL_STENCIL_BUFFER_BIT);
        // render frame
        renderer.render(frame, context);
        // poll events to callbacks
        glfwPollEvents();
        glfwSwapBuffers(window);
        // Now we need to process events. Firstly we need to process system events.
        systemEventProcessor.processEvents(frame, context);
        // When system events are translated to GUI events we need to process them.
        // This event processor calls listeners added to ui components
        EventProcessorProvider.getInstance().processEvents();
        // When everything done we need to relayout components.
        LayoutManager.getInstance().layout(frame);
        // Run animations. Should be also called cause some components use animations for updating state.
        AnimatorProvider.getAnimator().runAnimations();
    }
    if (nvgContext != 0) {
        glDeleteRenderbuffers(renderBufferID);
        glDeleteTextures(textureID);
        glDeleteFramebuffers(frameBufferID);
        if (isVersionNew) {
            NanoVGGL3.nnvgDelete(nvgContext);
        } else {
            NanoVGGL2.nnvgDelete(nvgContext);
        }
    }
    // And when rendering is ended we need to destroy renderer
    renderer.destroy();
    glfwDestroyWindow(window);
    glfwTerminate();
}
Also used : Context(com.spinyowl.legui.system.context.Context) GLFW.glfwDestroyWindow(org.lwjgl.glfw.GLFW.glfwDestroyWindow) GLFW_RELEASE(org.lwjgl.glfw.GLFW.GLFW_RELEASE) NanoVG.nvgEndFrame(org.lwjgl.nanovg.NanoVG.nvgEndFrame) GLFW.glfwCreateWindow(org.lwjgl.glfw.GLFW.glfwCreateWindow) GLFW.glfwPollEvents(org.lwjgl.glfw.GLFW.glfwPollEvents) GLFW.glfwSwapInterval(org.lwjgl.glfw.GLFW.glfwSwapInterval) GL30.glDisable(org.lwjgl.opengl.GL30.glDisable) GL_COLOR_BUFFER_BIT(org.lwjgl.opengl.GL30.GL_COLOR_BUFFER_BIT) NanoVG.nvgStroke(org.lwjgl.nanovg.NanoVG.nvgStroke) GL_ONE_MINUS_SRC_ALPHA(org.lwjgl.opengl.GL30.GL_ONE_MINUS_SRC_ALPHA) NULL(org.lwjgl.system.MemoryUtil.NULL) GL_COLOR_ATTACHMENT0(org.lwjgl.opengl.GL30.GL_COLOR_ATTACHMENT0) GL_RGBA(org.lwjgl.opengl.GL30.GL_RGBA) Renderer(com.spinyowl.legui.system.renderer.Renderer) GL30.glBindFramebuffer(org.lwjgl.opengl.GL30.glBindFramebuffer) GL_SRC_ALPHA(org.lwjgl.opengl.GL30.GL_SRC_ALPHA) CallbackKeeper(com.spinyowl.legui.system.context.CallbackKeeper) GLFW.glfwShowWindow(org.lwjgl.glfw.GLFW.glfwShowWindow) GL30.glDeleteTextures(org.lwjgl.opengl.GL30.glDeleteTextures) LayoutManager(com.spinyowl.legui.system.layout.LayoutManager) GL30.glRenderbufferStorage(org.lwjgl.opengl.GL30.glRenderbufferStorage) GL30.glDrawBuffer(org.lwjgl.opengl.GL30.glDrawBuffer) PositionType(com.spinyowl.legui.style.Style.PositionType) NVGColor(org.lwjgl.nanovg.NVGColor) Frame(com.spinyowl.legui.component.Frame) GL30.glDeleteFramebuffers(org.lwjgl.opengl.GL30.glDeleteFramebuffers) GLFW.glfwTerminate(org.lwjgl.glfw.GLFW.glfwTerminate) GLFWKeyCallbackI(org.lwjgl.glfw.GLFWKeyCallbackI) DefaultCallbackKeeper(com.spinyowl.legui.system.context.DefaultCallbackKeeper) GL_UNSIGNED_BYTE(org.lwjgl.opengl.GL30.GL_UNSIGNED_BYTE) GL_STENCIL_BUFFER_BIT(org.lwjgl.opengl.GL30.GL_STENCIL_BUFFER_BIT) GL30.glClearColor(org.lwjgl.opengl.GL30.glClearColor) GL_DEPTH_COMPONENT(org.lwjgl.opengl.GL30.GL_DEPTH_COMPONENT) GLFW(org.lwjgl.glfw.GLFW) GLFW.glfwMakeContextCurrent(org.lwjgl.glfw.GLFW.glfwMakeContextCurrent) EventProcessorProvider(com.spinyowl.legui.listener.processor.EventProcessorProvider) GL30.glGenRenderbuffers(org.lwjgl.opengl.GL30.glGenRenderbuffers) GL30.glGenTextures(org.lwjgl.opengl.GL30.glGenTextures) FBOImage(com.spinyowl.legui.image.FBOImage) Vector2i(org.joml.Vector2i) GL_TEXTURE_MIN_FILTER(org.lwjgl.opengl.GL30.GL_TEXTURE_MIN_FILTER) GL30.glTexImage2D(org.lwjgl.opengl.GL30.glTexImage2D) NanoVGGL2(org.lwjgl.nanovg.NanoVGGL2) GLFW.glfwSwapBuffers(org.lwjgl.glfw.GLFW.glfwSwapBuffers) GL30.glBindTexture(org.lwjgl.opengl.GL30.glBindTexture) GL_MINOR_VERSION(org.lwjgl.opengl.GL30.GL_MINOR_VERSION) GL32.glFramebufferTexture(org.lwjgl.opengl.GL32.glFramebufferTexture) NanoVG.nvgFill(org.lwjgl.nanovg.NanoVG.nvgFill) GL30(org.lwjgl.opengl.GL30) ImageView(com.spinyowl.legui.component.ImageView) NanoVGGL3(org.lwjgl.nanovg.NanoVGGL3) NanoVG.nvgStrokeColor(org.lwjgl.nanovg.NanoVG.nvgStrokeColor) GL_TEXTURE_MAG_FILTER(org.lwjgl.opengl.GL30.GL_TEXTURE_MAG_FILTER) GL30.glEnable(org.lwjgl.opengl.GL30.glEnable) GLFWWindowCloseCallbackI(org.lwjgl.glfw.GLFWWindowCloseCallbackI) GL_RENDERBUFFER(org.lwjgl.opengl.GL30.GL_RENDERBUFFER) GL_BLEND(org.lwjgl.opengl.GL30.GL_BLEND) GL30.glFramebufferRenderbuffer(org.lwjgl.opengl.GL30.glFramebufferRenderbuffer) NvgRenderer(com.spinyowl.legui.system.renderer.nvg.NvgRenderer) Context(com.spinyowl.legui.system.context.Context) SystemEventProcessorImpl(com.spinyowl.legui.system.handler.processor.SystemEventProcessorImpl) GL30.glClear(org.lwjgl.opengl.GL30.glClear) GL_TEXTURE_2D(org.lwjgl.opengl.GL30.GL_TEXTURE_2D) IOException(java.io.IOException) NanoVG.nvgBeginPath(org.lwjgl.nanovg.NanoVG.nvgBeginPath) NanoVG.nvgBeginFrame(org.lwjgl.nanovg.NanoVG.nvgBeginFrame) GL_MAJOR_VERSION(org.lwjgl.opengl.GL30.GL_MAJOR_VERSION) AnimatorProvider(com.spinyowl.legui.animation.AnimatorProvider) SystemEventProcessor(com.spinyowl.legui.system.handler.processor.SystemEventProcessor) DisplayType(com.spinyowl.legui.style.Style.DisplayType) GL30.glDeleteRenderbuffers(org.lwjgl.opengl.GL30.glDeleteRenderbuffers) NanoVG.nvgRotate(org.lwjgl.nanovg.NanoVG.nvgRotate) GL30.glViewport(org.lwjgl.opengl.GL30.glViewport) GL30.glBindRenderbuffer(org.lwjgl.opengl.GL30.glBindRenderbuffer) GL30.glBlendFunc(org.lwjgl.opengl.GL30.glBlendFunc) GL_FRAMEBUFFER(org.lwjgl.opengl.GL30.GL_FRAMEBUFFER) GL_NEAREST(org.lwjgl.opengl.GL30.GL_NEAREST) NanoVG.nvgFillColor(org.lwjgl.nanovg.NanoVG.nvgFillColor) GL30.glTexParameteri(org.lwjgl.opengl.GL30.glTexParameteri) Widget(com.spinyowl.legui.component.Widget) GLFW_KEY_ESCAPE(org.lwjgl.glfw.GLFW.GLFW_KEY_ESCAPE) GL_DEPTH_ATTACHMENT(org.lwjgl.opengl.GL30.GL_DEPTH_ATTACHMENT) GL30.glGetInteger(org.lwjgl.opengl.GL30.glGetInteger) NanoVG.nvgRect(org.lwjgl.nanovg.NanoVG.nvgRect) NanoVG.nvgTranslate(org.lwjgl.nanovg.NanoVG.nvgTranslate) GL(org.lwjgl.opengl.GL) GLFWKeyCallbackI(org.lwjgl.glfw.GLFWKeyCallbackI) NanoVG.nvgEndFrame(org.lwjgl.nanovg.NanoVG.nvgEndFrame) Frame(com.spinyowl.legui.component.Frame) NanoVG.nvgBeginFrame(org.lwjgl.nanovg.NanoVG.nvgBeginFrame) CallbackKeeper(com.spinyowl.legui.system.context.CallbackKeeper) DefaultCallbackKeeper(com.spinyowl.legui.system.context.DefaultCallbackKeeper) Widget(com.spinyowl.legui.component.Widget) NvgRenderer(com.spinyowl.legui.system.renderer.nvg.NvgRenderer) GLFWWindowCloseCallbackI(org.lwjgl.glfw.GLFWWindowCloseCallbackI) DefaultCallbackKeeper(com.spinyowl.legui.system.context.DefaultCallbackKeeper) SystemEventProcessorImpl(com.spinyowl.legui.system.handler.processor.SystemEventProcessorImpl) Renderer(com.spinyowl.legui.system.renderer.Renderer) NvgRenderer(com.spinyowl.legui.system.renderer.nvg.NvgRenderer) ImageView(com.spinyowl.legui.component.ImageView) Vector2i(org.joml.Vector2i) FBOImage(com.spinyowl.legui.image.FBOImage) SystemEventProcessor(com.spinyowl.legui.system.handler.processor.SystemEventProcessor)

Aggregations

Frame (com.spinyowl.legui.component.Frame)6 EventProcessorProvider (com.spinyowl.legui.listener.processor.EventProcessorProvider)6 CallbackKeeper (com.spinyowl.legui.system.context.CallbackKeeper)6 Context (com.spinyowl.legui.system.context.Context)6 LayoutManager (com.spinyowl.legui.system.layout.LayoutManager)6 Renderer (com.spinyowl.legui.system.renderer.Renderer)6 Vector2i (org.joml.Vector2i)6 GLFW (org.lwjgl.glfw.GLFW)6 GLFW_KEY_ESCAPE (org.lwjgl.glfw.GLFW.GLFW_KEY_ESCAPE)6 GLFW_RELEASE (org.lwjgl.glfw.GLFW.GLFW_RELEASE)6 GLFW.glfwCreateWindow (org.lwjgl.glfw.GLFW.glfwCreateWindow)6 GLFW.glfwDestroyWindow (org.lwjgl.glfw.GLFW.glfwDestroyWindow)6 GLFW.glfwMakeContextCurrent (org.lwjgl.glfw.GLFW.glfwMakeContextCurrent)6 GLFW.glfwPollEvents (org.lwjgl.glfw.GLFW.glfwPollEvents)6 GLFW.glfwShowWindow (org.lwjgl.glfw.GLFW.glfwShowWindow)6 GLFW.glfwSwapBuffers (org.lwjgl.glfw.GLFW.glfwSwapBuffers)6 GLFW.glfwSwapInterval (org.lwjgl.glfw.GLFW.glfwSwapInterval)6 GLFW.glfwTerminate (org.lwjgl.glfw.GLFW.glfwTerminate)6 GLFWKeyCallbackI (org.lwjgl.glfw.GLFWKeyCallbackI)6 GLFWWindowCloseCallbackI (org.lwjgl.glfw.GLFWWindowCloseCallbackI)6