소스 검색

LibWeb: Find closest scrollable paintable to call handle_mousewheel()

This makes event handler to try to find scrollable paintable in the
chain of containing blocks of hit box. This is very naive and will
have to be improved in the future.
Aliaksandr Kalenik 1 년 전
부모
커밋
3eb9ae4ed5
1개의 변경된 파일9개의 추가작업 그리고 0개의 파일을 삭제
  1. 9 0
      Userland/Libraries/LibWeb/Page/EventHandler.cpp

+ 9 - 0
Userland/Libraries/LibWeb/Page/EventHandler.cpp

@@ -163,6 +163,15 @@ bool EventHandler::handle_mousewheel(CSSPixelPoint position, unsigned button, un
     if (auto result = target_for_mouse_position(position); result.has_value())
         paintable = result->paintable;
 
+    auto* containing_block = paintable->containing_block();
+    while (containing_block) {
+        if (containing_block->is_scrollable()) {
+            const_cast<Painting::PaintableBox*>(containing_block->paintable_box())->handle_mousewheel({}, position, buttons, modifiers, wheel_delta_x * scroll_step_size, wheel_delta_y * scroll_step_size);
+            break;
+        }
+        containing_block = containing_block->containing_block();
+    }
+
     if (paintable) {
         paintable->handle_mousewheel({}, position, buttons, modifiers, wheel_delta_x, wheel_delta_y);