diff --git a/Userland/Applets/Keymap/KeymapStatusWidget.cpp b/Userland/Applets/Keymap/KeymapStatusWidget.cpp index d2b5aa68a6e..38b196107e7 100644 --- a/Userland/Applets/Keymap/KeymapStatusWidget.cpp +++ b/Userland/Applets/Keymap/KeymapStatusWidget.cpp @@ -1,5 +1,6 @@ /* * Copyright (c) 2022, the SerenityOS developers. + * Copyright (c) 2023, Andreas Kling * * SPDX-License-Identifier: BSD-2-Clause */ @@ -8,10 +9,13 @@ #include #include #include +#include #include #include #include -#include + +KeymapStatusWidget::KeymapStatusWidget() = default; +KeymapStatusWidget::~KeymapStatusWidget() = default; void KeymapStatusWidget::mousedown_event(GUI::MouseEvent& event) { @@ -59,15 +63,16 @@ ErrorOr KeymapStatusWidget::refresh_menu() return {}; } -void KeymapStatusWidget::set_current_keymap(DeprecatedString const& keymap, ClearBackground clear_background) +void KeymapStatusWidget::set_current_keymap(DeprecatedString const& keymap) { - if (clear_background == ClearBackground::Yes) { - GUI::Painter painter(*this); - painter.clear_rect(rect(), Color::Transparent); - } - m_current_keymap = keymap; - set_tooltip(keymap); - set_text(keymap.substring(0, 2)); +} + +void KeymapStatusWidget::paint_event(GUI::PaintEvent& event) +{ + GUI::Painter painter(*this); + painter.add_clip_rect(event.rect()); + painter.clear_rect(event.rect(), Gfx::Color::Transparent); + painter.draw_text(rect(), m_current_keymap.substring_view(0, 2), Gfx::TextAlignment::Center); } diff --git a/Userland/Applets/Keymap/KeymapStatusWidget.h b/Userland/Applets/Keymap/KeymapStatusWidget.h index 880a6510d25..8ee174cf2be 100644 --- a/Userland/Applets/Keymap/KeymapStatusWidget.h +++ b/Userland/Applets/Keymap/KeymapStatusWidget.h @@ -1,34 +1,32 @@ /* * Copyright (c) 2022, the SerenityOS developers. + * Copyright (c) 2023, Andreas Kling * * SPDX-License-Identifier: BSD-2-Clause */ #pragma once -#include #include -#include -#include -#include +#include -enum class ClearBackground { - No, - Yes -}; - -class KeymapStatusWidget : public GUI::Label { +class KeymapStatusWidget final : public GUI::Widget { C_OBJECT(KeymapStatusWidget); - virtual void mousedown_event(GUI::MouseEvent& event) override; - - void set_current_keymap(DeprecatedString const& keymap, ClearBackground clear_background = ClearBackground::Yes); +public: + virtual ~KeymapStatusWidget() override; + void set_current_keymap(DeprecatedString const& keymap); private: - RefPtr m_context_menu; - DeprecatedString m_current_keymap; + KeymapStatusWidget(); + + virtual void paint_event(GUI::PaintEvent&) override; + virtual void mousedown_event(GUI::MouseEvent&) override; ErrorOr refresh_menu(); + RefPtr m_context_menu; + + DeprecatedString m_current_keymap; GUI::ActionGroup m_keymaps_group; }; diff --git a/Userland/Applets/Keymap/KeymapStatusWindow.cpp b/Userland/Applets/Keymap/KeymapStatusWindow.cpp index 661a1fa46c0..651534c6637 100644 --- a/Userland/Applets/Keymap/KeymapStatusWindow.cpp +++ b/Userland/Applets/Keymap/KeymapStatusWindow.cpp @@ -6,8 +6,6 @@ */ #include "KeymapStatusWindow.h" -#include -#include #include KeymapStatusWindow::KeymapStatusWindow() @@ -17,8 +15,7 @@ KeymapStatusWindow::KeymapStatusWindow() m_status_widget = set_main_widget().release_value_but_fixme_should_propagate_errors(); auto current_keymap = MUST(Keyboard::CharacterMap::fetch_system_map()); - auto current_keymap_name = current_keymap.character_map_name(); - m_status_widget->set_current_keymap(current_keymap_name, ClearBackground::No); + m_status_widget->set_current_keymap(current_keymap.character_map_name()); } void KeymapStatusWindow::wm_event(GUI::WMEvent& event)