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#include "TimelineContainer.h"
9#include "TimelineView.h"
10#include <LibGUI/Layout.h>
11
12namespace Profiler {
13
14TimelineContainer::TimelineContainer(GUI::Widget& header_container, TimelineView& timeline_view)
15{
16 set_should_hide_unnecessary_scrollbars(true);
17 m_header_container = header_container;
18 m_timeline_view = timeline_view;
19 add_child(header_container);
20 add_child(timeline_view);
21 header_container.move_to_back();
22 timeline_view.move_to_back();
23 update_widget_sizes();
24 update_widget_positions();
25
26 int initial_height = min(300, timeline_view.height() + 16 + frame_thickness() * 2);
27 set_preferred_height(initial_height);
28
29 m_timeline_view->on_scale_change = [this] {
30 update_widget_sizes();
31 update_widget_positions();
32 };
33}
34
35void TimelineContainer::did_scroll()
36{
37 AbstractScrollableWidget::did_scroll();
38 update_widget_positions();
39}
40
41void TimelineContainer::update_widget_positions()
42{
43 m_header_container->move_to(0, -vertical_scrollbar().value());
44 m_timeline_view->move_to(m_header_container->width() + -horizontal_scrollbar().value(), -vertical_scrollbar().value());
45}
46
47void TimelineContainer::update_widget_sizes()
48{
49 {
50 m_timeline_view->do_layout();
51 auto preferred_size = m_timeline_view->effective_preferred_size();
52 m_timeline_view->resize(Gfx::IntSize(preferred_size));
53 set_content_size(Gfx::IntSize(preferred_size));
54 }
55
56 {
57 m_header_container->do_layout();
58 auto preferred_size = m_header_container->effective_preferred_size();
59 m_header_container->resize(Gfx::IntSize(preferred_size));
60 set_size_occupied_by_fixed_elements({ preferred_size.width().as_int(), 0 });
61 }
62}
63
64void TimelineContainer::resize_event(GUI::ResizeEvent& event)
65{
66 AbstractScrollableWidget::resize_event(event);
67 update_widget_sizes();
68 update_widget_positions();
69}
70
71}