Подтвердить что ты не робот

Поддержка JavaFX 8 HiDPI

Я просто опробовал JavaFX Hello World Example на экране 4k на Arch Linux, но, к сожалению, графический интерфейс не масштабируется.

В документации говорится

Поддержка Hi-DPI. JavaFX 8 теперь поддерживает дисплеи Hi-DPI.

Итак, как я могу получить информацию о вашем приложении?

4b9b3361

Ответ 1

Поддержка Hi-DPI на различных устройствах

Для Mac OS OS X с отображением сетчатки он должен "просто работать" - JavaFX знает о Hi-DPI Mac и соответствующим образом масштабирует интерфейс. Если вы установите интервал в VBox на 8, то это независимый от устройства блок; на дисплее без сетчатки отобразится 8 пикселей, на экране сетчатки, которое имеет двойное разрешение, интервал займет 16 пикселей. Поскольку дисплей сетчатки также имеет в два раза DPI, а также в два раза больше разрешения экрана, не отображающего сетчатки, измерение физического экрана в пространстве будет одинаковым независимо от устройства.

Для устройств Windows и Linux ваши результаты могут быть менее удовлетворительными, так как JavaFX 8u20 в настоящее время по умолчанию не выполняет произвольные разрешения DPI на таких устройствах и не масштабируется до них. Что вы можете сделать, так это выполнить большую часть ваших измерений в css в качестве единиц em (которые основаны на размере точки шрифта корневого шрифта сцены) и аналогично для fxml, а затем соответствующим образом задайте размер точки корневого шрифта по умолчанию в зависимости от того, что вы определяете при запросе разрешения разрешения DPI на экране. См. Обсуждение в этом ответе для получения дополнительной информации и примера кода: автоматическое изменение размера javafx и добавление кнопок.

Конкретно для Gnome

Gnome 3 имеет параметр для коэффициента масштабирования, который можно контролировать с помощью этой команды:

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

Вы можете запросить этот коэффициент масштабирования, прочитав настройки профиля пользователя gnome и используйте его в сочетании с запросом экрана DPI для определения того, как соответствующий коэффициент масштабирования затем применяет масштабирование с использованием методов, описанных выше.

Просто личный анекдот - когда я попытался использовать масштабирование Gnome 3 (CentOS 7, а также недавнюю версию Fedora) на дисплее Hi-DPI пару дней назад, я нашел общую поддержку Hi-DPI для приложений, работающих под Linux будет довольно пятнистым. Конечно, поддержка была значительно улучшена с CentOS 6, когда я попытался это сделать, но по-прежнему можно было найти качественную поддержку Hi-DPI в инструментах для набора окон, стандартных приложений и сторонних приложений. По этой причине я считаю, что работа с рабочими столами HiDPI Gnome по-прежнему остается довольно кровоточащей вещью, которая определенно не для всех - я уверен, что эта ситуация со временем изменится.

Растровые изображения

Из команды JavaFX выполните запись в блоге в Hi-DPI:

В приложениях Apple (начиная с iPhone и iPad со своими сетчатыми дисплеями) решение проблемы заключается в том, что разработчик приложения может предоставить два изображения вместо одного для каждого ресурса изображения. Например, экран заставки будет снабжен двумя изображениями: один с нормальным разрешением и один с разрешением 2x. Файлы называются одинаковыми, но 2x один назван в соответствии с некоторым соглашением, так что во время выполнения платформа будет искать версию 2x на сетчатке за кулисами. Таким образом, ваше приложение говорит "fooImage.png", но "[email protected]" просматривается вместо этого, когда на машине с дисплеем сетчатки.

Я не знаю, работает ли эта функция отображения изображений с растровым изображением для дисплеев Hi-DPI в Java 8u20 или нет - вам, возможно, придется реализовать ее самостоятельно, запросив экран с помощью screen.getDpi(), затем загрузите соответствующее растровое изображение.

4K Devices

4K - это много пикселей для нажатия. JavaFX по умолчанию использует аппаратное обеспечение ускоренного графического конвейера, когда такой графический конвейер доступен. Некоторое графическое оборудование не может быть полностью оптимизировано для отображения 4K (например, недостаточно видеопамяти), что может привести к приложению, которое либо не работает, либо работает плохо. Я также не считаю, что в настоящее время много усилий было предпринято для изучения производительности JavaFX на разных 4K-устройствах - он может "просто работать", но это может и не быть. Вам нужно будет протестировать приложение на целевом оборудовании, чтобы определить текущие возможности приложений JavaFX при работе на этом оборудовании. Вам также может потребоваться настроить приложение в соответствии с некоторыми из приведенных выше предложений.

Пользователь сообщил о проблеме с JavaFX 8u20 при попытке отобразить 4K видео с помощью JavaFX:

Фон

Поддержка Hi-DPI под OS X была (скорее всего) проще, чем устройства Windows/Linux, поскольку целевые устройства являются сетчатым или не-сетчатым дисплеем, причем один из них является точной шкалой 2x и прямой поддержкой системы OS X могут быть использованы для достижения масштабирования сетчатки. В Windows/Linux возможно, что требуется масштабирование при других факторах, отличных от 2x, и это покрывается запросом функции (в настоящее время выдающимся и запланированным) RT-32521 Поддержка глобального масштабирования координат с использованием по умолчанию DPI. Масштабирование по интегральной величине обычно дает наилучшие видимые результаты.

Дополнительные ресурсы

Полное руководство по кодированию устройств Hi-DPI выходит за рамки данного конкретного ответа - вы можете использовать различные веб-ресурсы Google для получения дополнительной информации.

Если у вас есть дополнительные вопросы по поддержке Hi-DPI для JavaFX, я предлагаю вам спросить их в список рассылки разработчиков openjfx-dev JavaFX,

Вики-ответ

Этот ответ может иметь некоторые возможные несоответствия или ошибки и может встречаться со временем. Я сделал ответ сообщество wiki. Если вам известны конкретные исправления, ограничения на устройства и ОС или поддержка поддержки модели Hi-DPI на JavaFX, не стесняйтесь редактировать этот ответ или переместить его в OpenJFX wiki (где он, вероятно, так или иначе принадлежит).