Serenity Operating System
at master 57 lines 2.1 kB view raw
1/* 2 * Copyright (c) 2022, MacDue <macdue@dueutil.tech> 3 * 4 * SPDX-License-Identifier: BSD-2-Clause 5 */ 6 7#include "ThemePreviewWidget.h" 8#include <AK/Array.h> 9#include <LibGUI/Painter.h> 10#include <LibGfx/Painter.h> 11#include <LibGfx/StylePainter.h> 12 13namespace DisplaySettings { 14 15ThemePreviewWidget::ThemePreviewWidget(Gfx::Palette const& palette) 16 : GUI::AbstractThemePreview(palette) 17{ 18 set_fixed_size(304, 201); 19} 20 21ErrorOr<void> ThemePreviewWidget::set_theme(DeprecatedString path) 22{ 23 auto config_file = TRY(Core::File::open(path, Core::File::OpenMode::Read)); 24 TRY(set_theme_from_file(path, move(config_file))); 25 return {}; 26} 27 28void ThemePreviewWidget::paint_preview(GUI::PaintEvent&) 29{ 30 GUI::Painter painter(*this); 31 32 auto active_window_rect = frame_inner_rect().shrunken(48, 100); 33 auto inactive_window_rect = active_window_rect.translated(-8, -32); 34 auto message_box = active_window_rect.shrunken(100, 60); 35 36 Array window_group { 37 Window { active_window_rect }, 38 Window { inactive_window_rect }, 39 Window { message_box } 40 }; 41 center_window_group_within(window_group, frame_inner_rect()); 42 43 paint_window("Inactive Window"sv, inactive_window_rect, Gfx::WindowTheme::WindowState::Inactive, inactive_window_icon()); 44 paint_window("Active Window"sv, active_window_rect, Gfx::WindowTheme::WindowState::Active, active_window_icon()); 45 paint_window("Alert"sv, message_box, Gfx::WindowTheme::WindowState::Highlighted, active_window_icon(), 1); 46 47 auto draw_centered_button = [&](auto window_rect, auto text, int button_width, int button_height) { 48 Gfx::IntRect button_rect { 0, 0, button_width, button_height }; 49 button_rect.center_within(window_rect); 50 Gfx::StylePainter::paint_button(painter, button_rect, preview_palette(), Gfx::ButtonStyle::Normal, false, false, false, true, false, false); 51 painter.draw_text(button_rect, text, Gfx::TextAlignment::Center, preview_palette().color(foreground_role()), Gfx::TextElision::Right, Gfx::TextWrapping::DontWrap); 52 }; 53 54 draw_centered_button(message_box, "Ok"sv, 32, 16); 55} 56 57}