瀏覽代碼

WindowServer: Consider screen scaling when getting color under cursor

Multiply the cursor position by the current scaling mode multiplier when
getting the color under the cursor. Also multiply the screen rectangle
before checking if the cursor is within bounds.

Color picker would not account for scaling when getting the color under
the cursor.

Fixes #13906.
offtkp 3 年之前
父節點
當前提交
70e2b42b9d
共有 1 個文件被更改,包括 4 次插入2 次删除
  1. 4 2
      Userland/Services/WindowServer/ConnectionFromClient.cpp

+ 4 - 2
Userland/Services/WindowServer/ConnectionFromClient.cpp

@@ -1128,12 +1128,14 @@ Messages::WindowServer::GetScreenBitmapAroundCursorResponse ConnectionFromClient
 
 Messages::WindowServer::GetColorUnderCursorResponse ConnectionFromClient::get_color_under_cursor()
 {
+    auto screen_scale_factor = ScreenInput::the().cursor_location_screen().scale_factor();
     // FIXME: Add a mechanism to get screen bitmap without cursor, so we don't have to do this
     //        manual translation to avoid sampling the color on the actual cursor itself.
-    auto cursor_location = ScreenInput::the().cursor_location().translated(-1, -1);
+    auto cursor_location = (ScreenInput::the().cursor_location() * screen_scale_factor).translated(-1, -1);
     auto& screen_with_cursor = ScreenInput::the().cursor_location_screen();
+    auto scaled_screen_rect = screen_with_cursor.rect() * screen_scale_factor;
 
-    if (!screen_with_cursor.rect().contains(cursor_location))
+    if (!scaled_screen_rect.contains(cursor_location))
         return Optional<Color> {};
 
     return { Compositor::the().color_at_position({}, screen_with_cursor, cursor_location) };