2014-10-03 10 views
20

Ho appena provato lo JavaFX Hello World Example su uno schermo 4k su Arch Linux, ma sfortunatamente la GUI non scala.Supporto HiDPI JavaFX 8

Il documentation dice

supporto Hi-DPI. JavaFX 8 ora supporta i display Hi-DPI.

Quindi, come posso rendere consapevole il mio dpi dell'applicazione?

+0

Qualche parte del sistema operativo supporta correttamente la modalità "HI-DPI", oltre all'applicazione? [Secondo Arch Wiki] (https://wiki.archlinux.org/index.php/HiDPI), il supporto di HiDPI è discutibile al meglio. – Ideasthete

+0

Io uso gnome che supporta un fattore di scala HiDPI. – tryzor

risposta

28

supporto Hi-DPI su vari dispositivi

per OS X Mac con Retina Display dovrebbe "solo lavoro" - JavaFX è a conoscenza di Hi-DPI Mac e scalerà l'interfaccia utente in modo appropriato. Se si imposta la spaziatura in un VBox su 8, allora questa è un'unità indipendente dal dispositivo; su un display non retina mac ci vorranno 8 pixel, su un display retina che ha il doppio della risoluzione, la spaziatura occuperà 16 pixel. Poiché il display retina ha anche il doppio del DPI e una risoluzione doppia rispetto al display senza retina, la misurazione dello schermo dello spazio fisico sarà la stessa indipendentemente dal dispositivo.

Per i dispositivi Windows e Linux, i risultati potrebbero essere meno soddisfacenti dato che JavaFX 8u20 attualmente non risolve automaticamente risoluzioni DPI arbitrarie su tali dispositivi e li adatta in modo appropriato. Quello che potresti fare è eseguire la maggior parte delle tue misurazioni in css as em units (che sono basate sulla dimensione del carattere predefinito della radice della scena) e similarly for fxml, e quindi impostare la dimensione del carattere predefinito della radice della scena in modo appropriato a seconda di cosa determini dall'interrogazione la risoluzione DPI dello schermo. Vedere la discussione in questa risposta per ulteriori informazioni e codice di esempio: javafx automatic resizing and button padding.

specifico di Gnome

Gnome 3 ha una setting for the scaling factor che può essere controllato da questo comando:

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

è possibile interrogare questo fattore di scala attraverso la lettura impostazioni del profilo gnome dell'utente e utilizzare questo in congiunzione con l'interrogazione del DPI dello schermo per capire come un fattore di scala appropriato quindi applicare il ridimensionamento utilizzando le tecniche sopra descritte.

Solo un aneddoto personale: quando ho provato a utilizzare il ridimensionamento di Gnome 3 (CentOS 7 e una recente versione di Fedora) su un display Hi-DPI un paio di giorni fa, ho trovato il supporto generale per Hi-DPI tra le applicazioni in esecuzione sotto Linux per essere piuttosto discutibile. Sicuramente, il supporto è stato migliorato molto da CentOS 6 quando l'ho provato, ma c'era ancora molto da fare per ottenere un supporto Hi-DPI di qualità attraverso toolkit per finestre, app standard e app di terze parti. Per questo motivo, ritengo che l'esecuzione di desktop Gnome HiDPI sia ancora una cosa sanguinosa che non è sicuramente per tutti, sono certo che questa situazione cambierà nel tempo.

immagini bitmap

Da una squadra JavaFX portare blog entry on Hi-DPI:

Nelle applicazioni di Apple (a partire con l'iPhone e iPad con i loro schermi retina), la soluzione al problema è per l'applicazione sviluppatore per fornire due immagini anziché una per ciascun asset immagine.Ad esempio, la schermata iniziale verrà fornita con due immagini, una con risoluzione normale e una con risoluzione 2x. I file vengono denominati uguali, ma il 2x è denominato secondo alcune convenzioni, in modo tale che durante il runtime la piattaforma cercherà la versione 2x sulla retina dietro le quinte. In tal modo, la tua applicazione dice "fooImage.png", ma "[email protected]" viene invece cercata su una macchina con display retina.

Non so se questa immagine bitmap scelta di funzionalità per Hi-DPI mostra è attualmente in 8u20 Java o no - potrebbe essere necessario implementare da soli interrogando lo schermo con screen.getDpi(), quindi caricare la bitmap appropriata.

Dispositivi 4K

4K è un sacco di pixel per spingere. Per impostazione predefinita, JavaFX utilizza l'hardware una pipeline grafica accelerata quando tale pipeline grafica è disponibile. Alcuni hardware grafici potrebbero non essere completamente ottimizzati per la visualizzazione 4K (ad esempio una RAM video non sufficiente), il che potrebbe portare a un'applicazione che non funziona o che funziona male. Inoltre, non credo che attualmente siano stati compiuti molti sforzi per studiare le prestazioni di JavaFX su vari dispositivi 4K: potrebbe "funzionare", ma potrebbe anche non esserlo. Sarà necessario testare la propria applicazione sull'hardware di destinazione per determinare le attuali funzionalità delle applicazioni JavaFX durante l'esecuzione su tale hardware. Potrebbe anche essere necessario modificare l'applicazione in base ad alcuni dei suggerimenti sopra riportati.

Un utente ha riportato un problema con JavaFX 8u20 quando si tenta di visualizzare un video 4K utilizzando JavaFX:

Sfondo

supporto Hi-DPI sotto OS X era (probabilmente) più semplice dei dispositivi Windows/Linux in quanto i dispositivi di destinazione sono o retina o display non retina con uno che è esattamente una scala 2x dell'altro e diretto su È possibile sfruttare il vantaggio del sistema OS X per ottenere il ridimensionamento della retina. Con Windows/Linux, probabilmente ciò che è richiesto è una capacità di scalare con fattori diversi da 2x, e questo è coperto dalla richiesta di funzionalità (attualmente in sospeso e programmata) RT-32521 Support global coordinate scaling with DPI-based default. Il ridimensionamento di una quantità integrale di solito dà i migliori risultati visibili.

Risorse aggiuntive

Una guida completa alla codifica per dispositivi Hi-DPI non rientra nell'ambito di questa particolare risposta: è possibile google varie risorse Web per ottenere ulteriori informazioni.

Se hai ulteriori domande sul supporto Hi-DPI per JavaFX, ti suggerisco di chiedere loro il openjfx-dev JavaFX developer mailing list.

risposta Wiki

Questa risposta può avere alcune possibili incongruenze o errori e potrebbe risalire nel tempo. Ho creato la risposta alla wiki della comunità. Se si è a conoscenza di correzioni specifiche, limitazioni del dispositivo e del sistema operativo o supporto del modello di supporto per Hi-DPI su JavaFX, non esitate a modificare questa risposta o spostarla sullo OpenJFX wiki (dove probabilmente appartiene comunque).

+0

Grazie per questa risposta completa. Proverò ciò che funziona sulle diverse piattaforme. – tryzor