mirror of
https://github.com/LadybirdBrowser/ladybird.git
synced 2025-06-02 16:33:13 +00:00
LibWeb+WebContent: Move scrollbar painting into WebContent
The main intention of this change is to have a consistent look and behavior across all scrollbars, including elements with `overflow: scroll` and `overflow: auto`, iframes, and a page. Before: - Page's scrollbar is painted by Browser (Qt/AppKit) using the corresponding UI framework style, - Both WebContent and Browser know the scroll position offset. - WebContent uses did_request_scroll_to() IPC call to send updates. - Browser uses set_viewport_rect() to send updates. After: - Page's scrollbar is painted on WebContent side using the same style as currently used for elements with `overflow: scroll` and `overflow: auto`. A nice side effects: scrollbars are now painted for iframes, and page's scrollbar respects scrollbar-width CSS property. - Only WebContent knows scroll position offset. - did_request_scroll_to() is no longer used. - set_viewport_rect() is changed to set_viewport_size().
This commit is contained in:
parent
eb909118bf
commit
5285e22f2a
Notes:
sideshowbarker
2024-07-17 01:28:15 +09:00
Author: https://github.com/kalenikaliaksandr
Commit: 5285e22f2a
Pull-request: https://github.com/LadybirdBrowser/ladybird/pull/21
30 changed files with 147 additions and 186 deletions
|
@ -392,18 +392,18 @@ void ViewImplementation::resize_backing_stores_if_needed(WindowResizeInProgress
|
|||
|
||||
m_client_state.has_usable_bitmap = false;
|
||||
|
||||
auto viewport_rect = this->viewport_rect();
|
||||
if (viewport_rect.is_empty())
|
||||
auto viewport_size = this->viewport_size();
|
||||
if (viewport_size.is_empty())
|
||||
return;
|
||||
|
||||
Web::DevicePixelSize minimum_needed_size;
|
||||
|
||||
if (window_resize_in_progress == WindowResizeInProgress::Yes) {
|
||||
// Pad the minimum needed size so that we don't have to keep reallocating backing stores while the window is being resized.
|
||||
minimum_needed_size = { viewport_rect.width() + 256, viewport_rect.height() + 256 };
|
||||
minimum_needed_size = { viewport_size.width() + 256, viewport_size.height() + 256 };
|
||||
} else {
|
||||
// If we're not in the middle of a resize, we can shrink the backing store size to match the viewport size.
|
||||
minimum_needed_size = viewport_rect.size();
|
||||
minimum_needed_size = viewport_size;
|
||||
m_client_state.front_bitmap = {};
|
||||
m_client_state.back_bitmap = {};
|
||||
}
|
||||
|
@ -417,7 +417,7 @@ void ViewImplementation::resize_backing_stores_if_needed(WindowResizeInProgress
|
|||
backing_store.bitmap = new_bitmap_or_error.release_value();
|
||||
backing_store.id = m_client_state.next_bitmap_id++;
|
||||
}
|
||||
backing_store.last_painted_size = viewport_rect.size();
|
||||
backing_store.last_painted_size = viewport_size;
|
||||
}
|
||||
};
|
||||
|
||||
|
@ -430,7 +430,7 @@ void ViewImplementation::resize_backing_stores_if_needed(WindowResizeInProgress
|
|||
if (front_bitmap.id != old_front_bitmap_id || back_bitmap.id != old_back_bitmap_id) {
|
||||
client().async_add_backing_store(page_id(), front_bitmap.id, front_bitmap.bitmap->to_shareable_bitmap(), back_bitmap.id,
|
||||
back_bitmap.bitmap->to_shareable_bitmap());
|
||||
client().async_set_viewport_rect(page_id(), viewport_rect);
|
||||
client().async_set_viewport_size(page_id(), viewport_size);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue