mirror of
https://github.com/RGBCube/serenity
synced 2025-07-25 21:57:43 +00:00
WindowServer: In HighDPI mode, load high-res window buttons and high-res cursors
Bitmap::load_from_file("foo.png", 2) will now look for "foo-2x.png" and try load that as a bitmap with scale factor 2 if it exists. If it doesn't, it falls back to the 1x bitmap as normal. Only places that know that they'll draw the bitmap to a 2x painter should pass "2" for the second argument. Use this new API in WindowServer for loading window buttons and cursors. As a testing aid, ctrl-shift-super-i can force HighDPI icons off in HighDPI mode. Toggling between low-res and high-res icons makes it easy to see if the high-res version of an icon looks right: It should look like the low-res version, just less jaggy. We'll likely have to grow a better API for loading scaled resources, but for now this suffices. Things to check: - `chres 640 480` followed by `chres 640 480 2` followed by `chres 640 480` - window buttons in window context menu (in task bar and on title bar) still have low-res icons - ctrl-shift-super-i in high-res mode toggles sharpness of window buttons and of arrow cursorf - arrow cursor hotspot is still where you'd expect
This commit is contained in:
parent
5ad2cbe9ad
commit
98637bd549
8 changed files with 86 additions and 18 deletions
|
@ -46,7 +46,8 @@ CursorParams CursorParams::parse_from_file_name(const StringView& cursor_path, c
|
|||
auto params_str = file_title.substring_view(last_dot_in_title.value() + 1);
|
||||
|
||||
CursorParams params(default_hotspot);
|
||||
for (size_t i = 0; i + 1 < params_str.length();) {
|
||||
bool in_display_scale_part = false;
|
||||
for (size_t i = 0; i + 1 < params_str.length() && !in_display_scale_part;) {
|
||||
auto property = params_str[i++];
|
||||
|
||||
auto value = [&]() -> Optional<size_t> {
|
||||
|
@ -88,6 +89,9 @@ CursorParams CursorParams::parse_from_file_name(const StringView& cursor_path, c
|
|||
else
|
||||
dbgln("Cursor frame rate outside of valid range (100-1000ms)");
|
||||
break;
|
||||
case '-':
|
||||
in_display_scale_part = true;
|
||||
break;
|
||||
default:
|
||||
dbg() << "Ignore unknown property '" << property << "' with value " << value.value() << " parsed from cursor path: " << cursor_path;
|
||||
return { default_hotspot };
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue