Serenity Operating System
at master 71 lines 2.1 kB view raw
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}