From 1fc995d4aac7449b09be1f1efdcbdd1572f56d1a Mon Sep 17 00:00:00 2001 From: Timothy Flynn Date: Tue, 2 Apr 2024 21:24:17 -0400 Subject: [PATCH] Ladybird/Qt: Add a hover effect to the audio play state button By default, a flat QPushButton does not have a hover effect. Add a small subclass to provide such an effect to make it clearer it is a button. --- Ladybird/CMakeLists.txt | 1 + Ladybird/Qt/BrowserWindow.cpp | 7 +++---- Ladybird/Qt/TabBar.cpp | 30 +++++++++++++++++++++++++++++ Ladybird/Qt/TabBar.h | 27 ++++++++++++++++++++++++++ Meta/gn/secondary/Ladybird/BUILD.gn | 2 ++ 5 files changed, 63 insertions(+), 4 deletions(-) create mode 100644 Ladybird/Qt/TabBar.cpp create mode 100644 Ladybird/Qt/TabBar.h diff --git a/Ladybird/CMakeLists.txt b/Ladybird/CMakeLists.txt index 83ea86f20eb..061e73db06a 100644 --- a/Ladybird/CMakeLists.txt +++ b/Ladybird/CMakeLists.txt @@ -124,6 +124,7 @@ if (ENABLE_QT) Qt/Settings.cpp Qt/SettingsDialog.cpp Qt/Tab.cpp + Qt/TabBar.cpp Qt/TaskManagerWindow.cpp Qt/TVGIconEngine.cpp Qt/StringUtils.cpp diff --git a/Ladybird/Qt/BrowserWindow.cpp b/Ladybird/Qt/BrowserWindow.cpp index 56ec17bdd8b..5a7c042025d 100644 --- a/Ladybird/Qt/BrowserWindow.cpp +++ b/Ladybird/Qt/BrowserWindow.cpp @@ -15,6 +15,7 @@ #include "TaskManagerWindow.h" #include "WebContentView.h" #include +#include #include #include #include @@ -669,11 +670,9 @@ void BrowserWindow::tab_audio_play_state_changed(int index, Web::HTML::AudioPlay break; case Web::HTML::AudioPlayState::Playing: - auto* button = new QPushButton(icon_for_page_mute_state(*tab), {}); + auto* button = new TabBarButton(icon_for_page_mute_state(*tab)); button->setToolTip(tool_tip_for_page_mute_state(*tab)); button->setObjectName("LadybirdAudioState"); - button->setFlat(true); - button->resize({ 20, 20 }); connect(button, &QPushButton::clicked, this, [this, tab, position]() { tab->view().toggle_page_mute_state(); @@ -685,7 +684,7 @@ void BrowserWindow::tab_audio_play_state_changed(int index, Web::HTML::AudioPlay break; case Web::HTML::AudioPlayState::Playing: auto* button = m_tabs_container->tabBar()->tabButton(index, position); - verify_cast(button)->setIcon(icon_for_page_mute_state(*tab)); + verify_cast(button)->setIcon(icon_for_page_mute_state(*tab)); button->setToolTip(tool_tip_for_page_mute_state(*tab)); break; } diff --git a/Ladybird/Qt/TabBar.cpp b/Ladybird/Qt/TabBar.cpp new file mode 100644 index 00000000000..f8a70fcb5d9 --- /dev/null +++ b/Ladybird/Qt/TabBar.cpp @@ -0,0 +1,30 @@ +/* + * Copyright (c) 2024, Tim Flynn + * + * SPDX-License-Identifier: BSD-2-Clause + */ + +#include +#include +#include + +namespace Ladybird { + +TabBarButton::TabBarButton(QIcon const& icon, QWidget* parent) + : QPushButton(icon, {}, parent) +{ + resize({ 20, 20 }); + setFlat(true); +} + +bool TabBarButton::event(QEvent* event) +{ + if (event->type() == QEvent::Enter) + setFlat(false); + if (event->type() == QEvent::Leave) + setFlat(true); + + return QPushButton::event(event); +} + +} diff --git a/Ladybird/Qt/TabBar.h b/Ladybird/Qt/TabBar.h new file mode 100644 index 00000000000..d28d0d32c56 --- /dev/null +++ b/Ladybird/Qt/TabBar.h @@ -0,0 +1,27 @@ +/* + * Copyright (c) 2024, Tim Flynn + * + * SPDX-License-Identifier: BSD-2-Clause + */ + +#pragma once + +#include + +class QEvent; +class QIcon; +class QWidget; + +namespace Ladybird { + +class TabBarButton : public QPushButton { + Q_OBJECT + +public: + explicit TabBarButton(QIcon const& icon, QWidget* parent = nullptr); + +protected: + bool event(QEvent* event); +}; + +} diff --git a/Meta/gn/secondary/Ladybird/BUILD.gn b/Meta/gn/secondary/Ladybird/BUILD.gn index 1ca9072e6b2..d58cc4d6db2 100644 --- a/Meta/gn/secondary/Ladybird/BUILD.gn +++ b/Meta/gn/secondary/Ladybird/BUILD.gn @@ -20,6 +20,7 @@ moc_qt_objects("generate_moc") { "Qt/LocationEdit.h", "Qt/SettingsDialog.h", "Qt/Tab.h", + "Qt/TabBar.h", "Qt/TaskManagerWindow.h", "Qt/WebContentView.h", ] @@ -96,6 +97,7 @@ executable("ladybird_executable") { "Qt/StringUtils.cpp", "Qt/TVGIconEngine.cpp", "Qt/Tab.cpp", + "Qt/TabBar.cpp", "Qt/TaskManagerWindow.cpp", "Qt/WebContentView.cpp", "Qt/main.cpp",