Question Prise en charge de JavaFX 8 HiDPI


Je viens d'essayer le JavaFX Hello World Exemple sur un écran 4k sur Arch Linux, mais malheureusement, l’interface graphique n’a pas évolué.

le Documentation dit

Support Hi-DPI. JavaFX 8 prend désormais en charge les affichages Hi-DPI.

Alors, comment puis-je mettre à jour mon application ppp?


20
2017-10-03 15:55


origine


Réponses:


Prise en charge Hi-DPI sur divers périphériques

Pour les Mac OS X avec affichage Retina, il devrait "fonctionner" - JavaFX est conscient des Macs Hi-DPI et adaptera correctement l'interface utilisateur. Si vous définissez l'espacement dans une VBox à 8, alors c'est une unité indépendante du périphérique; sur un écran non-rétina il faudra 8 pixels, sur un écran de rétine qui a la double résolution, l’espacement prendra 16 pixels. Étant donné que l'affichage de la rétine a également deux fois la résolution PPP et deux fois la résolution de l'écran sans rétine, la mesure de l'écran physique de l'espace sera la même quel que soit l'appareil.

Pour les périphériques Windows et Linux, vos résultats peuvent être moins satisfaisants, car JavaFX 8u20 ne permet pas actuellement de définir des résolutions DPI arbitraires sur ces périphériques et de les adapter de manière appropriée. Ce que vous pouvez faire est d'effectuer la plupart de vos mesures en css comme em units (qui sont basées sur la taille de la police par défaut de la racine de la scène) et de même pour fxml, puis définissez la taille de la police par défaut de la racine de la scène en fonction de ce que vous avez déterminé lors de l'interrogation de la résolution DPI de l'écran. Voir la discussion dans cette réponse pour plus d'informations et un exemple de code: Redimensionnement automatique javafx et remplissage de boutons.

Spécifique à Gnome

Gnome 3 a un réglage du facteur d'échelle qui peut être contrôlé par cette commande:

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

Vous pouvez interroger ce facteur de mise à l'échelle en lisant les paramètres du profil gnome de l'utilisateur et l'utiliser conjointement avec l'interrogation de l'écran DPI pour déterminer comment appliquer un facteur de mise à l'échelle approprié en utilisant les techniques décrites ci-dessus.

Juste une anecdote personnelle - lorsque j'ai essayé d'utiliser le redimensionnement de Gnome 3 (CentOS 7 et une version récente de Fedora) sur un écran Hi-DPI il y a quelques jours, j'ai trouvé la prise en charge globale de Hi-DPI assez inégale. Certes, le support a été nettement amélioré par rapport à CentOS 6, mais il restait encore beaucoup à faire pour obtenir une prise en charge Hi-DPI de qualité sur les outils, applications standard et applications tierces. Pour cette raison, je pense que l’exécution des ordinateurs de bureau HiDPI Gnome est encore un avantage certain, ce qui n’est certainement pas pour tout le monde. Je suis sûr que cette situation changera avec le temps.

Images bitmap

D'un chef d'équipe JavaFX entrée de blog sur Hi-DPI:

Dans les applications d'Apple (à commencer par l'iPhone et l'iPad avec leurs écrans Retina), la solution au problème est que le développeur de l'application fournisse deux images au lieu d'une pour chaque élément d'image. Par exemple, l'écran de démarrage sera fourni avec deux images, une à la résolution normale et une à la résolution 2x. Les fichiers sont nommés de la même façon, mais le 2x est nommé conformément à une convention, de sorte que, lors de l'exécution, la plate-forme recherchera la version 2x de la rétine en coulisse. De cette façon, votre application dit "fooImage.png" mais "fooImage@2x.png" est plutôt recherché sur une machine avec un écran rétina.

Je ne sais pas si cette fonctionnalité de sélection d'images bitmap pour les écrans Hi-DPI est actuellement en Java 8u20 ou non - vous devrez peut-être l'implémenter vous-même en interrogeant l'écran avec screen.getDpi (), puis charger le bitmap approprié.

Appareils 4K

4K, c'est beaucoup de pixels à pousser. JavaFX utilisera par défaut du matériel un pipeline graphique accéléré lorsqu'un tel pipeline graphique est disponible. Certains matériels graphiques peuvent ne pas être totalement optimisés pour l'affichage 4K (par exemple, pas assez de mémoire vidéo), ce qui peut conduire à une application qui ne fonctionne pas ou présente des performances médiocres. Je ne crois pas non plus qu’à l’heure actuelle, beaucoup d’efforts ont été déployés pour étudier les performances de JavaFX sur divers périphériques 4K - cela pourrait «simplement fonctionner», mais ce n’est pas le cas non plus. Vous devrez tester votre application sur le matériel cible pour déterminer les capacités actuelles des applications JavaFX lors de l’exécution de ce matériel. Vous pourriez également avoir besoin de modifier l'application en fonction de certaines des suggestions ci-dessus.

Un utilisateur a signalé un problème avec JavaFX 8u20 lors de la tentative d'affichage d'une vidéo 4K à l'aide de JavaFX:

Contexte

La prise en charge de Hi-DPI sous OS X était (probablement) plus simple que les périphériques Windows / Linux car les périphériques cibles sont des écrans rétiniens ou non-rétiniens, l’un étant une échelle 2x exacte. pour aider à réaliser le détartrage de la rétine. Avec Windows / Linux, ce qui est probablement nécessaire, c’est la possibilité de mettre à niveau des facteurs autres que 2x et cela est couvert par la demande de fonctionnalité (actuellement en cours et planifiée). RT-32521 Prise en charge de la mise à l'échelle des coordonnées globales par défaut basée sur le DPI. La mise à l'échelle d'une quantité intégrale donne généralement les meilleurs résultats visibles.

Ressources additionnelles

Un guide complet de codage pour les périphériques Hi-DPI n'entre pas dans le cadre de cette réponse particulière - vous pouvez rechercher différentes ressources Web sur Google pour obtenir plus d'informations.

Si vous avez d'autres questions sur le support Hi-DPI pour JavaFX, je vous suggère de les poser sur le openjfx-dev Liste de diffusion pour développeurs JavaFX.

Réponse Wiki

Cette réponse peut comporter des incohérences ou des erreurs éventuelles et peut remonter dans le temps. J'ai créé le wiki de réponse de la communauté. Si vous connaissez des corrections spécifiques, des limitations de périphérique et de système d’exploitation ou la prise en charge du modèle de support Hi-DPI sur JavaFX, n'hésitez pas à modifier cette réponse ou à la déplacer vers le Wiki OpenJFX (où il appartient probablement de toute façon).


30