ladybird/Userland/DevTools/Profiler/TimelineContainer.cpp
Brian Gianforcaro cfef3040fb Profiler: Configure the TimelineContainer to be shrink to fit
Today the profile viewer timeline view has a static size, which is
computed as half the height of the window given it has two root widgets.

Instead the timeline view should shrink to only consume the size that
each process timeline consumes.
2021-07-17 18:24:54 +04:30

73 lines
1.9 KiB
C++

/*
* Copyright (c) 2021, Andreas Kling <kling@serenityos.org>
*
* SPDX-License-Identifier: BSD-2-Clause
*/
#include "TimelineContainer.h"
#include "TimelineView.h"
#include <LibGUI/BoxLayout.h>
namespace Profiler {
TimelineContainer::TimelineContainer(GUI::Widget& header_container, TimelineView& timeline_view)
{
set_layout<GUI::HorizontalBoxLayout>();
set_should_hide_unnecessary_scrollbars(true);
m_header_container = header_container;
m_timeline_view = timeline_view;
add_child(header_container);
add_child(timeline_view);
header_container.move_to_back();
timeline_view.move_to_back();
update_widget_sizes();
update_widget_positions();
set_shrink_to_fit(true);
m_timeline_view->on_scale_change = [this] {
update_widget_positions();
update_widget_sizes();
};
}
TimelineContainer::~TimelineContainer()
{
}
void TimelineContainer::did_scroll()
{
AbstractScrollableWidget::did_scroll();
update_widget_positions();
}
void TimelineContainer::update_widget_positions()
{
m_header_container->move_to(0, -vertical_scrollbar().value());
m_timeline_view->move_to(m_header_container->width() + -horizontal_scrollbar().value(), -vertical_scrollbar().value());
}
void TimelineContainer::update_widget_sizes()
{
{
m_timeline_view->do_layout();
auto preferred_size = m_timeline_view->layout()->preferred_size();
m_timeline_view->resize(preferred_size);
set_content_size(preferred_size);
}
{
m_header_container->do_layout();
auto preferred_size = m_header_container->layout()->preferred_size();
m_header_container->resize(preferred_size);
set_size_occupied_by_fixed_elements({ preferred_size.width(), 0 });
}
}
void TimelineContainer::resize_event(GUI::ResizeEvent& event)
{
AbstractScrollableWidget::resize_event(event);
update_widget_positions();
update_widget_sizes();
}
}