ThemePreviewWidget.cpp 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. /*
  2. * Copyright (c) 2022, MacDue <macdue@dueutil.tech>
  3. *
  4. * SPDX-License-Identifier: BSD-2-Clause
  5. */
  6. #include "ThemePreviewWidget.h"
  7. #include <AK/Array.h>
  8. #include <LibCore/File.h>
  9. #include <LibGUI/Painter.h>
  10. #include <LibGfx/Painter.h>
  11. #include <LibGfx/StylePainter.h>
  12. namespace DisplaySettings {
  13. ThemePreviewWidget::ThemePreviewWidget(Gfx::Palette const& palette)
  14. : GUI::AbstractThemePreview(palette)
  15. {
  16. set_fixed_size(304, 201);
  17. }
  18. void ThemePreviewWidget::set_theme(String path)
  19. {
  20. set_theme_from_file(*Core::File::open(path, Core::OpenMode::ReadOnly).release_value_but_fixme_should_propagate_errors());
  21. }
  22. void ThemePreviewWidget::paint_preview(GUI::PaintEvent&)
  23. {
  24. GUI::Painter painter(*this);
  25. auto active_window_rect = rect().shrunken(48, 100).translated(4, 26);
  26. auto inactive_window_rect = active_window_rect.translated(-8, -32);
  27. auto message_box = active_window_rect.shrunken(100, 60);
  28. paint_window("Inactive Window", inactive_window_rect, Gfx::WindowTheme::WindowState::Inactive, inactive_window_icon());
  29. paint_window("Active Window", active_window_rect, Gfx::WindowTheme::WindowState::Active, active_window_icon());
  30. paint_window("Alert", message_box, Gfx::WindowTheme::WindowState::Highlighted, active_window_icon(), 1);
  31. auto draw_centered_button = [&](auto window_rect, auto text, int button_width, int button_height) {
  32. auto box_center = window_rect.center();
  33. Gfx::IntRect button_rect { box_center.x() - button_width / 2, box_center.y() - button_height / 2, button_width, button_height };
  34. Gfx::StylePainter::paint_button(
  35. painter, button_rect, preview_palette(), Gfx::ButtonStyle::Normal, false, false, false, true, false, false);
  36. painter.draw_text(button_rect, text, Gfx::TextAlignment::Center, preview_palette().color(foreground_role()), Gfx::TextElision::Right, Gfx::TextWrapping::DontWrap);
  37. };
  38. draw_centered_button(message_box, "Ok", 32, 16);
  39. }
  40. }