Serenity Operating System
at master 55 lines 1.7 kB view raw
1/* 2 * Copyright (c) 2020, Andreas Kling <kling@serenityos.org> 3 * Copyright (c) 2022, the SerenityOS developers. 4 * 5 * SPDX-License-Identifier: BSD-2-Clause 6 */ 7 8#include <LibGUI/Painter.h> 9#include <LibGUI/SeparatorWidget.h> 10#include <LibGfx/Palette.h> 11 12REGISTER_WIDGET(GUI, HorizontalSeparator) 13REGISTER_WIDGET(GUI, VerticalSeparator) 14 15constexpr int minimum_size = 8; 16 17namespace GUI { 18 19SeparatorWidget::SeparatorWidget(Gfx::Orientation orientation) 20 : m_orientation(orientation) 21{ 22 set_preferred_size(SpecialDimension::Fit); 23} 24 25void SeparatorWidget::paint_event(PaintEvent& event) 26{ 27 Painter painter(*this); 28 painter.add_clip_rect(event.rect()); 29 30 if (m_orientation == Gfx::Orientation::Vertical) { 31 painter.translate(rect().center().x() - 1, 0); 32 painter.draw_line({ 0, 0 }, { 0, rect().bottom() }, palette().threed_shadow1()); 33 painter.draw_line({ 1, 0 }, { 1, rect().bottom() }, palette().threed_highlight()); 34 } else { 35 painter.translate(0, rect().center().y() - 1); 36 painter.draw_line({ 0, 0 }, { rect().right(), 0 }, palette().threed_shadow1()); 37 painter.draw_line({ 0, 1 }, { rect().right(), 1 }, palette().threed_highlight()); 38 } 39} 40 41Optional<UISize> SeparatorWidget::calculated_preferred_size() const 42{ 43 if (m_orientation == Gfx::Orientation::Vertical) 44 return UISize { minimum_size, SpecialDimension::OpportunisticGrow }; 45 return UISize { SpecialDimension::OpportunisticGrow, minimum_size }; 46} 47 48Optional<UISize> SeparatorWidget::calculated_min_size() const 49{ 50 if (m_orientation == Gfx::Orientation::Vertical) 51 return UISize { minimum_size, 0 }; 52 return UISize { 0, minimum_size }; 53} 54 55}