Serenity Operating System
1/*
2 * Copyright (c) 2021, Andreas Kling <kling@serenityos.org>
3 * Copyright (c) 2022, the SerenityOS developers.
4 *
5 * SPDX-License-Identifier: BSD-2-Clause
6 */
7
8#pragma once
9
10#include <LibGUI/AbstractScrollableWidget.h>
11
12namespace GUI {
13
14class ScrollableContainerWidget : public GUI::AbstractScrollableWidget {
15 C_OBJECT(ScrollableContainerWidget);
16
17public:
18 virtual ~ScrollableContainerWidget() = default;
19
20 void set_widget(GUI::Widget*);
21 GUI::Widget* widget() { return m_widget; }
22 GUI::Widget const* widget() const { return m_widget; }
23
24protected:
25 virtual void did_scroll() override;
26 virtual void resize_event(GUI::ResizeEvent&) override;
27 virtual void layout_relevant_change_occurred() override;
28
29private:
30 void update_widget_size();
31 void update_widget_position();
32 void update_widget_min_size();
33 virtual ErrorOr<void> load_from_gml_ast(NonnullRefPtr<GUI::GML::Node const> ast, UnregisteredChildHandler) override;
34
35 ScrollableContainerWidget();
36
37 RefPtr<GUI::Widget> m_widget;
38};
39
40}