1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-07-25 23:17:45 +00:00

MouseSettings: Get highlight preview cursor via cursor theme Config.ini

Fixes #14200
This commit is contained in:
MacDue 2022-06-06 10:16:43 +01:00 committed by Linus Groh
parent a0bea0b86f
commit d116fc01e8
2 changed files with 23 additions and 2 deletions

View file

@ -6,6 +6,7 @@
#include "HighlightPreviewWidget.h"
#include <AK/String.h>
#include <LibCore/ConfigFile.h>
#include <LibGUI/ConnectionToWindowServer.h>
#include <LibGUI/Painter.h>
#include <LibGfx/AntiAliasingPainter.h>
@ -14,9 +15,26 @@ namespace MouseSettings {
HighlightPreviewWidget::HighlightPreviewWidget(Gfx::Palette const& palette)
: GUI::AbstractThemePreview(palette)
{
(void)reload_cursor();
}
ErrorOr<void> HighlightPreviewWidget::reload_cursor()
{
auto cursor_theme = GUI::ConnectionToWindowServer::the().get_cursor_theme();
m_cursor_bitmap = Gfx::Bitmap::try_load_from_file(String::formatted("/res/cursor-themes/{}/arrow.x2y2.png", cursor_theme)).release_value_but_fixme_should_propagate_errors();
auto theme_path = String::formatted("/res/cursor-themes/{}/{}", cursor_theme, "Config.ini");
auto cursor_theme_config = TRY(Core::ConfigFile::open(theme_path));
auto load_bitmap = [](StringView path, StringView default_path) {
auto maybe_bitmap = Gfx::Bitmap::try_load_from_file(path);
if (!maybe_bitmap.is_error())
return maybe_bitmap;
return Gfx::Bitmap::try_load_from_file(default_path);
};
constexpr auto default_cursor_path = "/res/cursor-themes/Default/arrow.x2y2.png";
auto cursor_path = String::formatted("/res/cursor-themes/{}/{}",
cursor_theme, cursor_theme_config->read_entry("Cursor", "Arrow"));
m_cursor_bitmap = TRY(load_bitmap(cursor_path, default_cursor_path));
return {};
}
void HighlightPreviewWidget::paint_preview(GUI::PaintEvent&)
@ -28,7 +46,8 @@ void HighlightPreviewWidget::paint_preview(GUI::PaintEvent&)
highlight_rect.center_within(frame_inner_rect());
aa_painter.fill_ellipse(highlight_rect, m_color);
}
painter.blit(m_cursor_bitmap->rect().centered_within(frame_inner_rect()).location(), *m_cursor_bitmap, m_cursor_bitmap->rect());
if (m_cursor_bitmap)
painter.blit(m_cursor_bitmap->rect().centered_within(frame_inner_rect()).location(), *m_cursor_bitmap, m_cursor_bitmap->rect());
}
}