Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fix icon scaling for HiDPI displays #3332

Merged

Conversation

@therealfarfetchd
Copy link
Contributor

therealfarfetchd commented Jun 27, 2019

Type of change

  • Bug fix (non-breaking change which fixes an issue)

Description and Context

This PR fixes the way icons are scaled for displays with a scale level >1 according to the method described in https://andrewcrouthamel.wordpress.com/2018/10/03/making-plasma-superb-in-hidpi/. Before, icons displayed severe scaling artifacts (see screenshots below)

Screenshots

The top image is taken from this PR with fixed scaling. (Open in fullscreen view/zoom in to see the change better!)
image

Testing strategy

Tested with scale factor 1, no change from upstream. Tested with scale factor >1, fix works as expected.

Checklist:

  • I have read the CONTRIBUTING document. [REQUIRED]
  • My code follows the code style of this project. [REQUIRED]
  • All new and existing tests passed. [REQUIRED]
  • I have compiled and verified my code with -DWITH_ASAN=ON. [REQUIRED]
@droidmonkey droidmonkey requested review from droidmonkey and phoerious Jun 28, 2019
@droidmonkey droidmonkey added this to the v2.5.0 milestone Jun 28, 2019
@phoerious

This comment has been minimized.

Copy link
Member

phoerious commented Jun 28, 2019

I think this is like the fourth PR or so that proposes this change. I don't like it unless we finally get new icons that actually support higher resolutions.

Right now the icons don't have "severe artifacts" (except those that actually have high resolution), they are just scaled with nearest neighbour interpolation. It makes them look blocky but sharp. Bilinear interpolation, however, makes them quite mushy and unpleasant.

@therealfarfetchd

This comment has been minimized.

Copy link
Contributor Author

therealfarfetchd commented Jun 28, 2019

It does seem to be nearest neighbor interpolation, but scaling using an uneven factor using that always makes the result look pretty bad, since some of the pixels on the icons will have different sizes, which is the case here. Not to mention downscaling using nearest makes the image lose way more detail than any interpolation (which also seems to be happening here, I think?) If I open for example share/icons/application/32x32/actions/password-generator.png in an image editor and compare it to a screenshot taken from the KeePassXC gui, the original image looks way better. And it also happens for system icons (most of the icons in the icon bar here) provided by KDE, that do have high resolution icons.

Here's the original icon (left) and the way it is displayed in the application without this patch (scaled to both 256x256 with nearest from 32x32 source images). You'll see that the original looks way better. (If it'd just keep the original image as is, it would most likely look fine, but not like this.)
image

@droidmonkey

This comment has been minimized.

Copy link
Member

droidmonkey commented Jun 28, 2019

I don't see the harm in adding this application property as long as it doesn't degrade non-hidpi experience.

@phoerious

This comment has been minimized.

Copy link
Member

phoerious commented Jun 28, 2019

I cannot really speak for Linux, because I only have a HiDPI screen on my Windows laptop. But on Windows at least not having that option looked better IMHO. At least the last time I tested it, everything looked blurry after applying this option. I do agree that having proper scaling will improve appearances on Linux where most of the icons are taken from your system theme which does have high-resolution versions of them. But on Windows we only have our own low-res icons which are hard to scale properly. I will test it again, though. In the end the only real solution is new icons and then we will definitely turn pixmap scaling on.

@droidmonkey

This comment has been minimized.

Copy link
Member

droidmonkey commented Jun 28, 2019

We can limit this to Linux-only then, until you get our new icon set in order 😉.

@droidmonkey droidmonkey merged commit 12f42a5 into keepassxreboot:develop Jun 30, 2019
4 checks passed
4 checks passed
CodeFactor No issues found.
Details
MacOS (KeepassXC) TeamCity build finished
Details
Ubuntu Linux (KeepassXC) TeamCity build finished
Details
Windows 10 (KeepassXC) TeamCity build finished
Details
@therealfarfetchd therealfarfetchd deleted the therealfarfetchd:feature/hidpi-icon-fix branch Jul 1, 2019
phoerious added a commit that referenced this pull request Oct 26, 2019
Added

- Add 'Paper Backup' aka 'Export to HTML file' to the 'Database' menu [[#3277](#3277)]
- Add statistics panel with information about the database (number of entries, number of unique passwords, etc.) to the Database Settings dialog [[#2034](#2034)]
- Add offline user manual accessible via the 'Help' menu [[#3274](#3274)]
- Add support for importing 1Password OpVault files [[#2292](#2292)]
- Implement Freedesktop.org secret storage DBus protocol so that KeePassXC can be used as a vault service by libsecret [[#2726](#2726)]
- Add support for OnlyKey as an alternative to YubiKeys (requires yubikey-personalization >= 1.20.0) [[#3352](#3352)]
- Add group sorting feature [[#3282](#3282)]
- Add feature to download favicons for all entries at once [[#3169](#3169)]
- Add word case option to passphrase generator [[#3172](#3172)]
- Add support for RFC6238-compliant TOTP hashes [[#2972](#2972)]
- Add UNIX man page for main program [[#3665](#3665)]
- Add 'Monospaced font' option to the notes field [[#3321](#3321)]
- Add support for key files in auto open [[#3504](#3504)]
- Add search field for filtering entries in Auto-Type dialog [[#2955](#2955)]
- Complete usernames based on known usernames from other entries [[#3300](#3300)]
- Parse hyperlinks in the notes field of the entry preview pane [[#3596](#3596)]
- Allow abbreviation of field names in entry search [[#3440](#3440)]
- Allow setting group icons recursively [[#3273](#3273)]
- Add copy context menu for username and password in Auto-Type dialog [[#3038](#3038)]
- Drop to background after copying a password to the clipboard [[#3253](#3253)]
- Add 'Lock databases' entry to tray icon menu [[#2896](#2896)]
- Add option to minimize window after unlocking [[#3439](#3439)]
- Add option to minimize window after opening a URL [[#3302](#3302)]
- Request accessibility permissions for Auto-Type on macOS [[#3624](#3624)]
- Browser: Add initial support for multiple URLs [[#3558](#3558)]
- Browser: Add entry-specific browser integration settings [[#3444](#3444)]
- CLI: Add offline HIBP checker (requires a downloaded HIBP dump) [[#2707](#2707)]
- CLI: Add 'flatten' option to the 'ls' command [[#3276](#3276)]
- CLI: Add password generation options to `Add` and `Edit` commands [[#3275](#3275)]
- CLI: Add XML import [[#3572](#3572)]
- CLI: Add CSV export to the 'export' command [[#3278](#3278)]
- CLI: Add `-y --yubikey` option for YubiKey [[#3416](#3416)]
- CLI: Add `--dry-run` option for merging databases [[#3254](#3254)]
- CLI: Add group commands (mv, mkdir and rmdir) [[#3313](#3313)].
- CLI: Add interactive shell mode command `open` [[#3224](#3224)]

Changed

- Redesign database unlock dialog [ [#3287](#3287)]
- Rework the entry preview panel [ [#3306](#3306)]
- Move notes to General tab on Group Preview Panel [[#3336](#3336)]
- Enable entry actions when editing an entry and cleanup entry context menu  [[#3641](#3641)]
- Improve detection of external database changes  [[#2389](#2389)]
- Warn if user is trying to use a KDBX file as a key file [[#3625](#3625)]
- Add option to disable KeePassHTTP settings migrations prompt [[#3349](#3349), [#3344](#3344)]
- Re-enabled Wayland support (no Auto-Type yet) [[#3520](#3520), [#3341](#3341)]
- Add icon to 'Toggle Window' action in tray icon menu [[3244](#3244)]
- Merge custom data between databases only when necessary [[#3475](#3475)]
- Improve various file-handling related issues when picking files using the system's file dialog [[#3473](#3473)]
- Add 'New Entry' context menu when no entries are selected [[#3671](#3671)]
- Reduce default Argon2 settings from 128 MiB and one thread per CPU core to 64 MiB and two threads to account for lower-spec mobile hardware [ [#3672](#3672)]
- Browser: Remove unused 'Remember' checkbox for HTTP Basic Auth [[#3371](#3371)]
- Browser: Show database name when pairing with a new browser [[#3638](#3638)]
- Browser: Show URL in allow access dialog [[#3639](#3639)]
- CLI: The password length option `-l` for the CLI commands `Add` and `Edit` is now `-L` [[#3275](#3275)]
- CLI: The `-u` shorthand for the `--upper` password generation option has been renamed to `-U` [[#3275](#3275)]
- CLI: Rename command `extract` to `export`. [[#3277](#3277)]

Fixed

- Improve accessibility for assistive technologies [[#3409](#3409)]
- Correctly unlock all databases if `--pw-stdin` is provided [[#2916](#2916)]
- Fix password generator issues with special characters [[#3303](#3303)]
- Fix KeePassXC interrupting shutdown procedure [[#3666](#3666)]
- Fix password visibility toggle button state on unlock dialog [[#3312](#3312)]
- Fix potential data loss if database is reloaded while user is editing an entry [[#3656](#3656)]
- Fix hard-coded background color in search help popup [[#3001](#3001)]
- Fix font choice for password preview [[#3425](#3425)]
- Fix handling of read-only files when autosave is enabled [[#3408](#3408)]
- Handle symlinks correctly when atomic saves are disabled [[#3463](#3463)]
- Enable HighDPI icon scaling on Linux [[#3332](#3332)]
- Make Auto-Type on macOS more robust and remove old Carbon API calls [[#3634](#3634), [[#3347](#3347))]
- Hide Share tab if KeePassXC is compiled without KeeShare support and other minor KeeShare improvements [[#3654](#3654), [[#3291](#3291), [#3029](#3029), [#3031](#3031), [#3236](#3236)]
- Correctly bring window to the front when clicking tray icon on macOS [[#3576](#3576)]
- Correct application shortcut created by MSI Installer on Windows [[#3296](#3296)]
- Fix crash when removing custom data [[#3508](#3508)]
- Fix placeholder resolution in URLs [[#3281](#3281)]
- Fix various inconsistencies and platform-dependent compilation bugs [[#3664](#3664), [#3662](#3662), [#3660](#3660), [#3655](#3655), [#3649](#3649), [#3417](#3417), [#3357](#3357), [#3319](#3319), [#3318](#3318), [#3304](#3304)]
- Browser: Fix potential leaking of entries through the browser integration API if multiple databases are opened [[#3480](#3480)]
- Browser: Fix password entropy calculation [[#3107](#3107)]
- Browser: Fix Windows registry settings for portable installation [[#3603](#3603)]
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
3 participants
You can’t perform that action at this time.