Cómo Blockbench, el editor de modelos 3D, usa la API de EyeDropper para permitir que los usuarios elijan colores de todas partes

La API de EyeDropper proporciona un mecanismo para crear una herramienta de cuentagotas que permite a los usuarios tomar muestras de colores de sus pantallas, incluso fuera de la ventana del navegador. Descubre cómo el editor de modelos 3D Blockbench usa esta API en su base de código.

Introducción

(Este artículo también está disponible en forma de video).

Blockbench es un editor de modelos moderno y gratuito para modelos de baja poligonización con texturas de pixel art. Si alguna vez jugaste Minecraft, es probable que hayas visto recursos creados con Blockbench, por ejemplo, la cabra, que se agregó a Minecraft como parte de la actualización de Cuevas y acantilados, parte 1. El código de Blockbench con licencia GPL versión 3 es de código abierto en GitHub.

Oveja de Minecraft diseñada con Blockbench.

Para probar Blockbench, inicia la app navegando a web.blockbench.net. Como AWP, puedes instalarla en tu escritorio e iniciarla en una ventana independiente. Si eres nuevo en el modelado 3D, puedes comenzar con uno de los numerosos ejemplos de archivos .bbmodel de código abierto que puedes encontrar usando la búsqueda de código de GitHub. Por ejemplo, prueba el modelo de entrenamiento que puedes ver en la siguiente captura de pantalla.

Edición de un modelo de entrenamiento en Blockbench.

La API de Eyedropper

Entre muchas otras funciones, Blockbench ofrece una función de pintura, por lo que si alguna vez quisiste etiquetar un tren, ahora puedes hacerlo. No lo hagas en el mundo real. Puedes ver que, para mi etiquetado, usé un naranja brillante.

La etiqueta “Tom estuvo aquí” y un signo de la paz escrito en el modelo de tren

En realidad, es una naranja que extraje directamente del fondo de pantalla de macOS Ventura a través de la API de EyeDropper. Como puedes ver en la siguiente captura de pantalla, el cuentagotas (el círculo naranja a la izquierda de la ventana de la aplicación) se puede extender fuera de la aplicación directamente a mi escritorio o a cualquier otra aplicación que tenga abierta.

Se muestra un selector de color saliendo de la app de Blockbench eligiendo un color de la imagen de fondo del escritorio.

Como Blockbench es de código abierto, puedes aprender cómo los desarrolladores implementaron la API. El código en cuestión está en JannisX11/blockbench/blob/master/js/texturing/color.js. Blockbench también está disponible como una app de Electron.js. Como puedes ver en el comentario, tiene un manejo de casos especiales para un problema en Electron, en el que el selector de color no puede elegir un color fuera de la ventana. Con la API web, que puedes ver en la parte destacada del fragmento de código, esto no es un problema. Usar la API es sencillo. Crea una instancia nueva de EyeDropper y llama a su método open(). Este método se resuelve con una cadena sRGBHex que representa el color seleccionado, en formato hexadecimal sRGB.

new Action("pick_screen_color", {
  icon: "colorize",
  category: "color",
  condition: () => typeof EyeDropper == "function",
  click: async function () {
    if (Blockbench.platform == "win32") {
      // workaround for https://github.com/electron/electron/issues/27980
      ipcRenderer.send("request-color-picker", {
        sync: settings.sync_color.value,
      });
    } else if (typeof EyeDropper == "function") {
      let dropper = new EyeDropper();
      let { sRGBHex } = await dropper.open();
      ColorPanel.set(sRGBHex);
    }
  },
});

Conclusiones

Los selectores de color son una herramienta pequeña, pero importante, de software de creatividad, como Blockbench. Por lo general, el color deseado no forma parte de la ventana de la app, sino que se encuentra en algún lugar fuera de ella, incluso en una pantalla diferente. Un selector de color que no te permite elegir colores en esos casos puede resultar casi inútil. La API de EyeDropper se creó exactamente para casos de uso como este y ha funcionado muy bien para Blockbench desde que se implementó en noviembre de 2021. Si juegas con Blockbench, ¡feliz selección de colores!