java javafx-8 hdpi

JavaFX 8 HiDPI Support



javafx-8 hdpi (1)

Soporte Hi-DPI en varios dispositivos

Para OS X Mac con pantalla retina, debería "simplemente funcionar": JavaFX es consciente de Hi-DPI Macs y escalará la IU de manera apropiada. Si establece el espaciado en un VBox en 8, entonces esa es una unidad independiente del dispositivo; en una pantalla sin retina, tomará 8 píxeles, en una pantalla con retina que tenga el doble de resolución, el espacio ocupará 16 píxeles. Debido a que la pantalla de retina también tiene el doble de DPI y el doble de resolución que la pantalla sin retina, la medición física de la pantalla del espacio será la misma independientemente del dispositivo.

Para los dispositivos de Windows y Linux, sus resultados pueden ser menos satisfactorios, ya que JavaFX 8u20 actualmente no realiza de forma predeterminada resoluciones arbitrarias de DPI en dichos dispositivos y se adapta a ellos adecuadamente. Lo que podría hacer es realizar la mayoría de sus mediciones en css como unidades em (que se basan en el tamaño en puntos de la fuente de la raíz de la escena) y de manera similar para fxml , y luego establecer el tamaño de la fuente por defecto de la raíz de la escena de manera apropiada dependiendo de Lo que determine al consultar la resolución de DPI de la pantalla. Consulte la discusión en esta respuesta para obtener más información y código de muestra: cambio de tamaño automático de javafx y relleno de botones .

Específico para Gnome

Gnome 3 tiene una configuración para el factor de escala que se puede controlar con este comando:

gsettings set org.gnome.desktop.interface scaling-factor 2

Puede consultar este factor de escala leyendo la configuración del perfil del gnomo del usuario y usarlo junto con la consulta del DPI de la pantalla para averiguar cómo un factor de escala apropiado aplica la escala utilizando las técnicas descritas anteriormente.

Solo una anécdota personal: cuando intenté usar el escalado de Gnome 3 (CentOS 7 y también un reciente lanzamiento de Fedora) en una pantalla Hi-DPI hace un par de días, encontré que el soporte general para Hi-DPI en todas las aplicaciones que se ejecutan bajo Linux es bastante irregular Ciertamente, el soporte se mejoró mucho con respecto a CentOS 6 cuando lo intenté, pero aún quedaba mucho camino por recorrer para lograr un soporte de alta calidad de alta resolución en todo el conjunto de herramientas de ventanas, aplicaciones estándar y aplicaciones de terceros. Por esta razón, creo que la ejecución de escritorios HiDPI Gnome sigue siendo una cuestión bastante sangrante que definitivamente no es para todos. Estoy seguro de que esta situación cambiará con el tiempo.

Imágenes de mapa de bits

De una entrada de blog líder del equipo JavaFX en Hi-DPI :

En las aplicaciones de Apple (comenzando con el iPhone y el iPad con sus pantallas de retina), la solución al problema es que el desarrollador de la aplicación proporcione dos imágenes en lugar de una para cada activo de imagen. Por ejemplo, la pantalla de bienvenida se suministrará con dos imágenes, una con resolución normal y la otra con resolución 2x. Los archivos tienen el mismo nombre, pero el 2x se nombra de acuerdo con alguna convención, de modo que en el tiempo de ejecución la plataforma buscará la versión 2x ​​en la retina detrás de escena. De tal manera, su aplicación dice "fooImage.png", pero se busca "[email protected]" cuando está en una máquina con una pantalla retina.

No sé si esta funcionalidad de selección de imágenes de mapa de bits para pantallas de Hi-DPI está actualmente en Java 8u20 o no, es posible que tenga que implementarla usted mismo consultando la pantalla con screen.getDpi() y luego cargando el mapa de bits apropiado.

Dispositivos 4K

4K es un montón de píxeles para empujar. JavaFX usará de forma predeterminada el hardware de un flujo de gráficos acelerado cuando dicho flujo de gráficos esté disponible. Es posible que parte del hardware de gráficos no esté totalmente optimizado para la pantalla 4K (p. Ej., No suficiente memoria RAM de video), lo que puede llevar a una aplicación que no funciona o funciona mal. Tampoco creo que actualmente se haya realizado un gran esfuerzo para investigar el rendimiento de JavaFX en varios dispositivos 4K; puede que "simplemente funcione", pero puede que tampoco. Deberá probar su aplicación en el hardware de destino para determinar las capacidades actuales de las aplicaciones JavaFX cuando se ejecuta en ese hardware. Es posible que también deba modificar la aplicación de acuerdo con algunas de las sugerencias anteriores.

Un usuario ha informado de un problema con JavaFX 8u20 al intentar mostrar un video 4K con JavaFX:

Fondo

El soporte de Hi-DPI bajo OS X era (probablemente) más simple que los dispositivos Windows / Linux, ya que los dispositivos de destino son retina o sin retina. Una de ellas es una escala exacta de 2x de la otra y la compatibilidad directa del sistema OS X puede aprovecharse. Para ayudar a lograr la escala de la retina. Con Windows / Linux, probablemente lo que se requiere es una capacidad para escalar en factores distintos a solo 2x, y eso está cubierto por la solicitud de función (actualmente pendiente y programada) RT-32521 Admite el escalado de coordenadas globales con el valor predeterminado basado en DPI . La escala en una cantidad integral generalmente da los mejores resultados visibles.

Recursos adicionales

Una guía completa para la codificación de dispositivos Hi-DPI está fuera del alcance de esta respuesta en particular: puede buscar diversos recursos web en Google para obtener más información.

Si tiene más preguntas sobre el soporte de Hi-DPI para JavaFX, le sugiero que las consulte en la lista de correo de desarrolladores de openjfx-dev JavaFX .

Respuesta de Wiki

Esta respuesta puede tener algunas posibles inconsistencias o errores y puede fechar con el tiempo. He hecho la respuesta wiki de la comunidad. Si tiene conocimiento de correcciones específicas, limitaciones de dispositivos y sistemas operativos o compatibilidad con modelos de Hi-DPI en JavaFX, no dude en editar esta respuesta o moverla a la wiki de OpenJFX (donde probablemente pertenece).

Acabo de probar JavaFX Hello World Example en una pantalla de 4k en Arch Linux, pero desafortunadamente la GUI no se escala.

La documentation dice

Soporte Hi-DPI. JavaFX 8 ahora admite pantallas Hi-DPI.

Entonces, ¿cómo puedo hacer que mi aplicación tenga en cuenta los ppp?