All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.jnngl.system.WebBrowserBootstrapV2 Maven / Gradle / Ivy

/*
    Plugin for computers in vanilla minecraft!
    Copyright (C) 2022  JNNGL

    This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.

    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.

    You should have received a copy of the GNU General Public License
    along with this program.  If not, see .
 */

package com.jnngl.system;

import com.jnngl.totalcomputers.TotalComputers;
import com.jnngl.totalcomputers.system.TotalOS;
import com.jnngl.totalcomputers.system.desktop.ApplicationHandler;
import com.jnngl.totalcomputers.system.desktop.WindowApplication;

import java.awt.*;
import java.io.File;
import java.io.IOException;
import java.nio.ByteBuffer;

public class WebBrowserBootstrapV2 extends WindowApplication {

    private ByteBuffer nativeHandle;

    public WebBrowserBootstrapV2(TotalOS os, String path) {
        super(os, "Browser", os.screenWidth/3*2, os.screenHeight/3*2, path);
    }

    public static void main(String[] args) throws IOException {
        String path = new File(args[0]).getAbsolutePath();
        System.load(path+"/chrome_elf.dll");
        System.load(path+"/d3dcompiler_47.dll");
        System.load(path+"/libcef.dll");
        System.load(path+"/libEGL.dll");
        System.load(path+"/libGLESv2.dll");
        System.load(path+"/vk_swiftshader.dll");
        System.load(path+"/vulkan-1.dll");
        System.load(path+"/swiftshader/libEGL.dll");
        System.load(path+"/swiftshader/libGLESv2.dll");
        System.load(path+"/cef2java.dll");
        ApplicationHandler.open(WebBrowserBootstrapV2.class, path);
    }

    private static native boolean InitCEF(String path);
    private static native ByteBuffer CreateBrowser(int width, int height);
    private static native void Update(ByteBuffer browser, int width, int height);
    private static native int[] GetPixels(ByteBuffer browser);
    private static native void ProcessTouch(ByteBuffer browser, int x, int y, boolean type);
    private static native void RunLoop();

    @Override
    protected void onStart() {
        InitCEF(applicationPath);
        nativeHandle = CreateBrowser(getWidth(), getHeight());
        new Thread(WebBrowserBootstrapV2::RunLoop).start();
    }

    @Override
    protected boolean onClose() {
        return true;
    }

    @Override
    public void update() {
        Update(nativeHandle, getWidth(), getHeight());
        renderCanvas();
    }

    @Override
    public void render(Graphics2D g) {
        int[] pixels = GetPixels(nativeHandle);
        for(int x = 0; x < getWidth(); x++) {
            for(int y = 0; y < getHeight(); y++) {
                int index = y*getWidth()+x;
                if(index >= pixels.length) return;
                g.setColor(new Color(pixels[index]));
                g.fillRect(x, y, 1, 1);
            }
        }
    }

    @Override
    public void processInput(int x, int y, TotalComputers.InputInfo.InteractType type) {
        ProcessTouch(nativeHandle, x, y, type == TotalComputers.InputInfo.InteractType.RIGHT_CLICK);
    }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy