Nob ~/pane

08 · librería

pane

Un navegador de verdad dentro de tu app de Java, dibujado como tú quieras

Quería que Ko-fi y la página de jukz se abrieran dentro de Minecraft, no en el navegador del sistema. Lo que existía (MCEF) llega solo hasta la 1.21.4 y es LGPL, así que escribí mi propia librería sobre java-cef: pane

##Verlo funcionar

##Chromium sin ventana

pane arranca Chromium en modo off-screen: no abre ninguna ventana, solo pinta la página en un búfer de píxeles (BGRA) que tu app sube a una textura y dibuja donde quiera. Un número de versión avisa cuándo cambió, así solo se vuelve a subir lo necesario. Los menús desplegables llegan aparte, para dibujarlos encima

##Entrada como en un navegador

El mouse y el teclado entran con los códigos de GLFW, los mismos que usan Minecraft y casi cualquier juego en Java: doble y triple clic, arrastrar, la rueda (con shift va de lado), lo que escribes y los atajos de siempre (Ctrl+R, Alt+← y →, zoom con Ctrl). El cursor cambia a mano sobre los enlaces

##Un instalador propio

Chromium no va en el jar: la primera vez se descarga para tu sistema (Linux, Windows o Mac, x64 o ARM), se compara con su SHA-256 y se descomprime con un lector de tar.gz propio, sin dependencias. Las siguientes veces ni se descarga. Los archivos vienen de mi copia en chromium.nuulm.com (R2), así que no dependo del servidor de otro

##Los detalles que costaron

El lado nativo de java-cef cancela cualquier ventana nueva antes de avisarle a Java, así que pane inyecta un script que abre esos enlaces en la misma página. El nativo también tiene cruzados los botones derecho y del medio. Y la política de mismo origen sigue prendida (MCEF la apaga), porque en estas páginas se paga

~/pane · cómo funciona
tu app (Minecraft, un juego en Java…)
 │ Pane.install ─► chromium.nuulm.com ─► sha256 ✓
 │ Pane.start · Pane.open("https://…")
 ▼
Chromium off-screen (java-cef)
 │ onPaint ─► píxeles BGRA + versión
 ▼
textura del juego ─► la página, dibujada a tu manera
 ▲
 └─ mouse · teclado · rueda (códigos GLFW)
Ventana azul de jukz dentro de Minecraft con la página de Ko-fi de Nobz cargada, barra con atrás, adelante, recargar, la dirección ko-fi.com/nobmz y los botones Outside y cerrar
Ko-fi de verdad dentro de Minecraft 26.2, en la ventana del navegador de jukz
La misma ventana con el mensaje Getting the browser ready, Only the first time. About 120 MB, y una barra de progreso al 75%
La primera vez: jukz descarga el navegador y muestra el progreso

##Bitácora

  1. Primero con MCEFEl prototipo usaba MCEF y funcionó en Minecraft 1.21.1, pero MCEF no existe para 1.21.11 ni 26.2, y es LGPL
  2. Mi propia libreríapane, escrita desde la API de java-cef: instalador, píxeles, entrada y cursor. Probada en las tres versiones de Minecraft que soporta jukz, con Ko-fi, campos de texto, scroll, enlaces y atrás
  3. Mi propia copia de ChromiumLos seis builds pasan a chromium.nuulm.com. Copiarlos destapó un bug: el checksum de Windows viene en formato de PowerShell y pane no lo leía. Sale la v0.1.1

Una página de muestra como la ve pane: mueve el mouse, haz clic (también con el derecho), usa la rueda o escribe, y a la derecha sale lo que recibe en códigos de GLFW. Cada cambio sube la versión, y el recuadro punteado es la parte que se volvió a pintar