SeparatorWidget.cpp 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  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. #include <LibGUI/Painter.h>
  8. #include <LibGUI/SeparatorWidget.h>
  9. #include <LibGfx/Palette.h>
  10. REGISTER_WIDGET(GUI, HorizontalSeparator)
  11. REGISTER_WIDGET(GUI, VerticalSeparator)
  12. constexpr int minimum_size = 8;
  13. namespace GUI {
  14. SeparatorWidget::SeparatorWidget(Gfx::Orientation orientation)
  15. : m_orientation(orientation)
  16. {
  17. set_preferred_size(SpecialDimension::Fit);
  18. }
  19. void SeparatorWidget::paint_event(PaintEvent& event)
  20. {
  21. Painter painter(*this);
  22. painter.add_clip_rect(event.rect());
  23. if (m_orientation == Gfx::Orientation::Vertical) {
  24. painter.translate(rect().center().x() - 1, 0);
  25. painter.draw_line({ 0, 0 }, { 0, rect().bottom() - 1 }, palette().threed_shadow1());
  26. painter.draw_line({ 1, 0 }, { 1, rect().bottom() - 1 }, palette().threed_highlight());
  27. } else {
  28. painter.translate(0, rect().center().y() - 1);
  29. painter.draw_line({ 0, 0 }, { rect().right() - 1, 0 }, palette().threed_shadow1());
  30. painter.draw_line({ 0, 1 }, { rect().right() - 1, 1 }, palette().threed_highlight());
  31. }
  32. }
  33. Optional<UISize> SeparatorWidget::calculated_preferred_size() const
  34. {
  35. if (m_orientation == Gfx::Orientation::Vertical)
  36. return UISize { minimum_size, SpecialDimension::OpportunisticGrow };
  37. return UISize { SpecialDimension::OpportunisticGrow, minimum_size };
  38. }
  39. Optional<UISize> SeparatorWidget::calculated_min_size() const
  40. {
  41. if (m_orientation == Gfx::Orientation::Vertical)
  42. return UISize { minimum_size, 0 };
  43. return UISize { 0, minimum_size };
  44. }
  45. }