Remove dead vertical-tab separator and sidebar traffic-light paths from the unified chrome layout. Keep the toolbar stack owned by TabWidget so layout changes no longer move each tab toolbar in and out of its page. Share the vertical New Tab button setup between initial layout and hover expansion, and keep window-control sizing helpers private.
911 lines
26 KiB
C++
911 lines
26 KiB
C++
/*
|
|
* Copyright (c) 2026-present, the Ladybird developers.
|
|
*
|
|
* SPDX-License-Identifier: BSD-2-Clause
|
|
*/
|
|
|
|
#include <UI/Qt/ChromeStyle.h>
|
|
#include <UI/Qt/StringUtils.h>
|
|
|
|
#include <AK/Platform.h>
|
|
#include <QGuiApplication>
|
|
#if QT_VERSION >= QT_VERSION_CHECK(6, 5, 0)
|
|
# include <QStyleHints>
|
|
#endif
|
|
|
|
namespace Ladybird::ChromeStyle {
|
|
|
|
static bool color_is_dark(QColor const& color)
|
|
{
|
|
return color.lightness() < 128;
|
|
}
|
|
|
|
static bool palette_is_dark(QPalette const& palette)
|
|
{
|
|
return color_is_dark(palette.color(QPalette::Window));
|
|
}
|
|
|
|
bool is_dark(QPalette const& palette)
|
|
{
|
|
#if QT_VERSION >= QT_VERSION_CHECK(6, 5, 0)
|
|
auto color_scheme = QGuiApplication::styleHints()->colorScheme();
|
|
if (color_scheme != Qt::ColorScheme::Unknown)
|
|
return color_scheme == Qt::ColorScheme::Dark;
|
|
#endif
|
|
|
|
return palette_is_dark(palette);
|
|
}
|
|
|
|
#if QT_VERSION >= QT_VERSION_CHECK(6, 5, 0)
|
|
static bool palette_roles_match_color_scheme(QPalette const& palette, bool dark)
|
|
{
|
|
return color_is_dark(palette.color(QPalette::Window)) == dark
|
|
&& color_is_dark(palette.color(QPalette::Base)) == dark
|
|
&& color_is_dark(palette.color(QPalette::Text)) != dark
|
|
&& color_is_dark(palette.color(QPalette::ButtonText)) != dark;
|
|
}
|
|
#endif
|
|
|
|
static bool palette_matches_current_color_scheme(QPalette const& palette)
|
|
{
|
|
#if QT_VERSION >= QT_VERSION_CHECK(6, 5, 0)
|
|
auto color_scheme = QGuiApplication::styleHints()->colorScheme();
|
|
if (color_scheme == Qt::ColorScheme::Dark)
|
|
return palette_roles_match_color_scheme(palette, true);
|
|
if (color_scheme == Qt::ColorScheme::Light)
|
|
return palette_roles_match_color_scheme(palette, false);
|
|
#endif
|
|
|
|
Q_UNUSED(palette);
|
|
return true;
|
|
}
|
|
|
|
static QColor chrome_window(QPalette const& palette)
|
|
{
|
|
if (palette_matches_current_color_scheme(palette))
|
|
return palette.color(QPalette::Window);
|
|
|
|
return is_dark(palette) ? QColor(24, 25, 28) : QColor(245, 245, 246);
|
|
}
|
|
|
|
static QColor chrome_base(QPalette const& palette)
|
|
{
|
|
if (palette_matches_current_color_scheme(palette))
|
|
return palette.color(QPalette::Base);
|
|
|
|
return is_dark(palette) ? QColor(22, 23, 26) : QColor(255, 255, 255);
|
|
}
|
|
|
|
struct MaterialColorAnchors {
|
|
QColor background;
|
|
QColor surface;
|
|
QColor recessed;
|
|
QColor hover;
|
|
QColor pressed;
|
|
QColor border;
|
|
};
|
|
|
|
static MaterialColorAnchors material_color_anchors(bool dark)
|
|
{
|
|
if (dark) {
|
|
return {
|
|
.background = QColor(13, 15, 18),
|
|
.surface = QColor(34, 36, 40),
|
|
.recessed = QColor(55, 58, 63),
|
|
.hover = QColor(57, 61, 66),
|
|
.pressed = QColor(70, 74, 80),
|
|
.border = QColor(150, 155, 162),
|
|
};
|
|
}
|
|
|
|
return {
|
|
.background = QColor(236, 236, 237),
|
|
.surface = QColor(255, 255, 255),
|
|
.recessed = QColor(150, 150, 152),
|
|
.hover = QColor(229, 229, 230),
|
|
.pressed = QColor(219, 220, 221),
|
|
.border = QColor(95, 96, 98),
|
|
};
|
|
}
|
|
|
|
QColor mix(QColor const& from, QColor const& to, double amount)
|
|
{
|
|
auto channel = [&](int from_channel, int to_channel) {
|
|
return static_cast<int>(from_channel + (to_channel - from_channel) * amount);
|
|
};
|
|
|
|
return QColor {
|
|
channel(from.red(), to.red()),
|
|
channel(from.green(), to.green()),
|
|
channel(from.blue(), to.blue()),
|
|
};
|
|
}
|
|
|
|
QColor chrome_background(QPalette const& palette)
|
|
{
|
|
auto window = chrome_window(palette);
|
|
auto dark = is_dark(palette);
|
|
return mix(window, material_color_anchors(dark).background, dark ? 0.34 : 0.68);
|
|
}
|
|
|
|
QColor chrome_surface(QPalette const& palette)
|
|
{
|
|
auto base = chrome_base(palette);
|
|
auto dark = is_dark(palette);
|
|
return mix(base, material_color_anchors(dark).surface, dark ? 0.64 : 0.72);
|
|
}
|
|
|
|
QColor chrome_surface_recessed(QPalette const& palette)
|
|
{
|
|
auto dark = is_dark(palette);
|
|
if (dark)
|
|
return chrome_background(palette).lighter(108);
|
|
|
|
return mix(chrome_background(palette), material_color_anchors(dark).recessed, 0.42);
|
|
}
|
|
|
|
QColor chrome_surface_hover(QPalette const& palette)
|
|
{
|
|
auto dark = is_dark(palette);
|
|
return mix(chrome_surface(palette), material_color_anchors(dark).hover, dark ? 0.34 : 0.52);
|
|
}
|
|
|
|
QColor chrome_surface_pressed(QPalette const& palette)
|
|
{
|
|
auto dark = is_dark(palette);
|
|
return mix(chrome_surface(palette), material_color_anchors(dark).pressed, dark ? 0.48 : 0.56);
|
|
}
|
|
|
|
static QColor chrome_control_surface_hover(QPalette const& palette)
|
|
{
|
|
auto dark = is_dark(palette);
|
|
return mix(chrome_surface(palette), material_color_anchors(dark).hover, dark ? 0.82 : 0.62);
|
|
}
|
|
|
|
static QColor chrome_control_surface_pressed(QPalette const& palette)
|
|
{
|
|
auto dark = is_dark(palette);
|
|
return mix(chrome_surface(palette), material_color_anchors(dark).pressed, dark ? 0.86 : 0.66);
|
|
}
|
|
|
|
QColor chrome_control_border(QPalette const& palette)
|
|
{
|
|
auto dark = is_dark(palette);
|
|
if (dark)
|
|
return mix(chrome_control_surface_hover(palette), material_color_anchors(dark).border, 0.42);
|
|
|
|
return mix(chrome_border(palette), material_color_anchors(dark).border, 0.18);
|
|
}
|
|
|
|
QColor chrome_active_tab_surface_top(QPalette const& palette)
|
|
{
|
|
auto dark = is_dark(palette);
|
|
if (!dark)
|
|
return QColor(255, 255, 255);
|
|
|
|
auto background = chrome_background(palette);
|
|
return mix(background, QColor(255, 255, 255), 0.22);
|
|
}
|
|
|
|
QColor chrome_active_tab_surface_bottom(QPalette const& palette)
|
|
{
|
|
auto dark = is_dark(palette);
|
|
if (!dark)
|
|
return QColor(251, 251, 251);
|
|
|
|
auto background = chrome_background(palette);
|
|
return mix(background, QColor(255, 255, 255), 0.20);
|
|
}
|
|
|
|
QColor chrome_border(QPalette const& palette)
|
|
{
|
|
auto dark = is_dark(palette);
|
|
return mix(dark ? chrome_surface(palette) : chrome_background(palette), material_color_anchors(dark).border, 0.22);
|
|
}
|
|
|
|
QColor chrome_accent(QPalette const& palette)
|
|
{
|
|
return palette.color(QPalette::Highlight);
|
|
}
|
|
|
|
QColor chrome_text(QPalette const& palette)
|
|
{
|
|
if (palette_matches_current_color_scheme(palette))
|
|
return palette.color(QPalette::Text);
|
|
|
|
return is_dark(palette) ? QColor(238, 241, 246) : QColor(24, 29, 36);
|
|
}
|
|
|
|
QColor chrome_button_text(QPalette const& palette)
|
|
{
|
|
if (palette_matches_current_color_scheme(palette))
|
|
return palette.color(QPalette::ButtonText);
|
|
|
|
return chrome_text(palette);
|
|
}
|
|
|
|
QColor chrome_muted_text(QPalette const& palette)
|
|
{
|
|
if (!palette_matches_current_color_scheme(palette))
|
|
return is_dark(palette) ? QColor(154, 163, 176) : QColor(98, 108, 122);
|
|
|
|
return palette.color(QPalette::PlaceholderText);
|
|
}
|
|
|
|
static QColor chrome_destructive_hover()
|
|
{
|
|
return QColor(196, 43, 28);
|
|
}
|
|
|
|
static QColor chrome_destructive_text()
|
|
{
|
|
return QColor(255, 255, 255);
|
|
}
|
|
|
|
QString style_sheet_color(QColor const& color)
|
|
{
|
|
return qformatted("rgb({}, {}, {})", color.red(), color.green(), color.blue());
|
|
}
|
|
|
|
QString application_style_sheet(QPalette const& palette)
|
|
{
|
|
auto surface_color = chrome_surface(palette);
|
|
auto text_color = chrome_text(palette);
|
|
auto surface = style_sheet_color(surface_color);
|
|
auto hover = style_sheet_color(chrome_control_surface_hover(palette));
|
|
auto pressed = style_sheet_color(chrome_control_surface_pressed(palette));
|
|
auto border = style_sheet_color(chrome_border(palette));
|
|
auto separator = style_sheet_color(mix(chrome_surface(palette), chrome_border(palette), is_dark(palette) ? 0.42 : 0.54));
|
|
auto text = style_sheet_color(text_color);
|
|
auto disabled_text = style_sheet_color(mix(text_color, surface_color, is_dark(palette) ? 0.58 : 0.48));
|
|
|
|
return qformatted(R"(
|
|
QMenu {{
|
|
color: {5};
|
|
background: {0};
|
|
border: 1px solid {3};
|
|
border-radius: 7px;
|
|
padding: 5px;
|
|
}}
|
|
|
|
QMenu::item {{
|
|
color: {5};
|
|
background: transparent;
|
|
border-radius: 5px;
|
|
min-height: 20px;
|
|
padding: 5px 14px;
|
|
}}
|
|
|
|
QMenu::item:selected {{
|
|
background: {1};
|
|
}}
|
|
|
|
QMenu::item:pressed {{
|
|
background: {2};
|
|
}}
|
|
|
|
QMenu::item:disabled {{
|
|
color: {6};
|
|
}}
|
|
|
|
QMenu::icon {{
|
|
left: 8px;
|
|
}}
|
|
)"
|
|
#if defined(AK_OS_MACOS)
|
|
R"(
|
|
QMenu::right-arrow,
|
|
QMenu::left-arrow {{
|
|
width: 8px;
|
|
height: 8px;
|
|
}}
|
|
)"
|
|
#endif
|
|
R"(
|
|
QMenu::separator {{
|
|
background: {4};
|
|
height: 1px;
|
|
margin: 5px 8px;
|
|
}}
|
|
)",
|
|
surface, hover, pressed, border, separator, text, disabled_text);
|
|
}
|
|
|
|
QString toolbar_container_style_sheet(QPalette const& palette)
|
|
{
|
|
auto background = style_sheet_color(chrome_background(palette));
|
|
auto surface_hover = style_sheet_color(chrome_control_surface_hover(palette));
|
|
auto surface_pressed = style_sheet_color(chrome_control_surface_pressed(palette));
|
|
auto control_border = style_sheet_color(chrome_control_border(palette));
|
|
auto separator = style_sheet_color(chrome_border(palette));
|
|
auto window_controls_separator = style_sheet_color(mix(chrome_background(palette), chrome_border(palette), is_dark(palette) ? 0.36 : 0.46));
|
|
auto text = style_sheet_color(chrome_button_text(palette));
|
|
auto disabled_text = style_sheet_color(chrome_muted_text(palette));
|
|
auto close_hover = style_sheet_color(chrome_destructive_hover());
|
|
auto close_text = style_sheet_color(chrome_destructive_text());
|
|
|
|
return qformatted(R"(
|
|
QWidget#LadybirdToolbarContainer {{
|
|
background: {0};
|
|
border: 0;
|
|
border-bottom: 1px solid {4};
|
|
}}
|
|
|
|
QWidget#LadybirdToolbarContainer[fullWidthToolbar="true"] {{
|
|
border-bottom: 0;
|
|
}}
|
|
|
|
QWidget#LadybirdNavigationToolbar QToolButton {{
|
|
color: {5};
|
|
background: transparent;
|
|
border: 1px solid transparent;
|
|
border-radius: 17px;
|
|
min-width: 34px;
|
|
min-height: 34px;
|
|
margin: 1px 0;
|
|
padding: 0;
|
|
}}
|
|
|
|
QWidget#LadybirdNavigationToolbar QToolButton:hover {{
|
|
background: {1};
|
|
border-color: {3};
|
|
}}
|
|
|
|
QWidget#LadybirdNavigationToolbar QToolButton:pressed,
|
|
QWidget#LadybirdNavigationToolbar QToolButton:checked {{
|
|
background: {2};
|
|
border-color: {3};
|
|
}}
|
|
|
|
QWidget#LadybirdNavigationToolbar QToolButton:disabled {{
|
|
color: {6};
|
|
background: transparent;
|
|
border-color: transparent;
|
|
}}
|
|
|
|
QWidget#LadybirdNavigationToolbar QToolButton::menu-indicator {{
|
|
image: none;
|
|
}}
|
|
|
|
QWidget#LadybirdToolbarWindowControlsSeparator {{
|
|
background: {9};
|
|
}}
|
|
|
|
QWidget#LadybirdNavigationToolbar QToolButton#LadybirdWindowButton,
|
|
QWidget#LadybirdNavigationToolbar QToolButton#LadybirdCloseWindowButton {{
|
|
color: {5};
|
|
background: transparent;
|
|
border: 0;
|
|
border-radius: 0;
|
|
min-width: 38px;
|
|
min-height: 38px;
|
|
max-width: 38px;
|
|
max-height: 38px;
|
|
margin: 0;
|
|
padding: 0;
|
|
}}
|
|
|
|
QWidget#LadybirdNavigationToolbar QToolButton#LadybirdWindowButton:hover {{
|
|
background: {1};
|
|
}}
|
|
|
|
QWidget#LadybirdNavigationToolbar QToolButton#LadybirdWindowButton:pressed {{
|
|
background: {2};
|
|
}}
|
|
|
|
QWidget#LadybirdNavigationToolbar QToolButton#LadybirdCloseWindowButton:hover {{
|
|
color: {8};
|
|
background: {7};
|
|
}}
|
|
|
|
QWidget#LadybirdNavigationToolbar QToolButton#LadybirdCloseWindowButton:pressed {{
|
|
color: {8};
|
|
background: {7};
|
|
}}
|
|
|
|
QWidget#LadybirdNavigationToolbar QToolButton#LadybirdWindowButton[pressedOutside="true"],
|
|
QWidget#LadybirdNavigationToolbar QToolButton#LadybirdCloseWindowButton[pressedOutside="true"] {{
|
|
color: {5};
|
|
background: transparent;
|
|
}}
|
|
)",
|
|
background, surface_hover, surface_pressed, control_border, separator, text, disabled_text, close_hover, close_text, window_controls_separator);
|
|
}
|
|
|
|
QString menu_bar_style_sheet(QPalette const& palette)
|
|
{
|
|
auto background = style_sheet_color(chrome_background(palette));
|
|
auto background_bottom = background;
|
|
auto hover = style_sheet_color(chrome_control_surface_hover(palette));
|
|
auto pressed = style_sheet_color(chrome_control_surface_pressed(palette));
|
|
auto control_border = style_sheet_color(chrome_control_border(palette));
|
|
auto text = style_sheet_color(chrome_button_text(palette));
|
|
auto disabled_text = style_sheet_color(chrome_muted_text(palette));
|
|
auto close_hover = style_sheet_color(chrome_destructive_hover());
|
|
auto close_text = style_sheet_color(chrome_destructive_text());
|
|
|
|
return qformatted(R"(
|
|
QMenuBar#LadybirdMenuBar {{
|
|
color: {5};
|
|
background: qlineargradient(x1:0, y1:0, x2:0, y2:1, stop:0 {0}, stop:1 {1});
|
|
border: 0;
|
|
padding: 0 4px 0 8px;
|
|
spacing: 2px;
|
|
}}
|
|
|
|
QMenuBar#LadybirdMenuBar::item {{
|
|
color: {5};
|
|
background: transparent;
|
|
border: 1px solid transparent;
|
|
border-radius: 6px;
|
|
padding: 4px 9px;
|
|
}}
|
|
|
|
QMenuBar#LadybirdMenuBar::item:selected {{
|
|
background: {2};
|
|
border-color: {4};
|
|
}}
|
|
|
|
QMenuBar#LadybirdMenuBar::item:pressed {{
|
|
background: {3};
|
|
border-color: {4};
|
|
}}
|
|
|
|
QMenuBar#LadybirdMenuBar::item:disabled {{
|
|
color: {6};
|
|
}}
|
|
|
|
QMenuBar#LadybirdMenuBar QWidget#LadybirdMenuBarWindowControls {{
|
|
background: transparent;
|
|
}}
|
|
|
|
QMenuBar#LadybirdMenuBar QToolButton#LadybirdWindowButton,
|
|
QMenuBar#LadybirdMenuBar QToolButton#LadybirdCloseWindowButton {{
|
|
color: {5};
|
|
background: transparent;
|
|
border: 0;
|
|
border-radius: 0;
|
|
min-width: 40px;
|
|
min-height: 30px;
|
|
max-height: 30px;
|
|
padding: 0;
|
|
}}
|
|
|
|
QMenuBar#LadybirdMenuBar QToolButton#LadybirdWindowButton:hover {{
|
|
background: {2};
|
|
}}
|
|
|
|
QMenuBar#LadybirdMenuBar QToolButton#LadybirdWindowButton:pressed {{
|
|
background: {3};
|
|
}}
|
|
|
|
QMenuBar#LadybirdMenuBar QToolButton#LadybirdCloseWindowButton:hover {{
|
|
color: {8};
|
|
background: {7};
|
|
}}
|
|
|
|
QMenuBar#LadybirdMenuBar QToolButton#LadybirdCloseWindowButton:pressed {{
|
|
color: {8};
|
|
background: {7};
|
|
}}
|
|
|
|
QMenuBar#LadybirdMenuBar QToolButton#LadybirdWindowButton[pressedOutside="true"],
|
|
QMenuBar#LadybirdMenuBar QToolButton#LadybirdCloseWindowButton[pressedOutside="true"] {{
|
|
color: {5};
|
|
background: transparent;
|
|
}}
|
|
)",
|
|
background, background_bottom, hover, pressed, control_border, text, disabled_text, close_hover, close_text);
|
|
}
|
|
|
|
QString location_edit_style_sheet(QPalette const& palette)
|
|
{
|
|
auto dark = is_dark(palette);
|
|
auto surface_color = chrome_surface(palette);
|
|
if (dark)
|
|
surface_color = mix(chrome_background(palette), material_color_anchors(true).background, 0.34);
|
|
auto hover_color = chrome_surface_hover(palette);
|
|
if (dark)
|
|
hover_color = mix(surface_color, QColor(255, 255, 255), 0.035);
|
|
|
|
auto border_color = dark ? mix(chrome_background(palette), chrome_border(palette), 0.36) : chrome_border(palette);
|
|
auto hover_border_color = dark ? mix(chrome_background(palette), chrome_border(palette), 0.48) : chrome_control_border(palette);
|
|
auto focus_border_color = mix(chrome_border(palette), chrome_accent(palette), dark ? 0.50 : 0.54);
|
|
|
|
auto surface = style_sheet_color(surface_color);
|
|
auto hover = style_sheet_color(hover_color);
|
|
auto border = style_sheet_color(border_color);
|
|
auto hover_border = style_sheet_color(hover_border_color);
|
|
auto focus_border = style_sheet_color(focus_border_color);
|
|
auto text = style_sheet_color(dark ? mix(chrome_text(palette), QColor(255, 255, 255), 0.08) : chrome_text(palette));
|
|
auto placeholder = style_sheet_color(mix(chrome_muted_text(palette), surface_color, dark ? 0.46 : 0.34));
|
|
auto selection = style_sheet_color(chrome_accent(palette));
|
|
auto selection_text = style_sheet_color(palette.color(QPalette::HighlightedText));
|
|
auto not_secure_text = style_sheet_color(dark ? QColor(224, 142, 136) : QColor(144, 62, 56));
|
|
auto not_secure_background = style_sheet_color(dark ? mix(surface_color, QColor(102, 52, 48), 0.28) : QColor(246, 235, 233));
|
|
auto not_secure_hover = style_sheet_color(dark ? mix(surface_color, QColor(104, 55, 51), 0.34) : QColor(242, 226, 223));
|
|
auto not_secure_pressed = style_sheet_color(dark ? mix(surface_color, QColor(112, 60, 55), 0.40) : QColor(236, 215, 211));
|
|
auto not_secure_border = style_sheet_color(dark ? mix(QColor(92, 48, 45), chrome_border(palette), 0.52) : QColor(224, 203, 199));
|
|
auto zoom_text = style_sheet_color(chrome_muted_text(palette));
|
|
auto zoom_background = style_sheet_color(dark ? mix(surface_color, chrome_surface_recessed(palette), 0.28) : mix(surface_color, chrome_surface_recessed(palette), 0.14));
|
|
auto zoom_hover = style_sheet_color(dark ? mix(surface_color, chrome_surface_recessed(palette), 0.36) : mix(surface_color, chrome_surface_recessed(palette), 0.20));
|
|
auto zoom_pressed = style_sheet_color(dark ? mix(surface_color, chrome_surface_recessed(palette), 0.44) : mix(surface_color, chrome_surface_recessed(palette), 0.28));
|
|
auto zoom_border = style_sheet_color(dark ? mix(chrome_border(palette), surface_color, 0.38) : mix(chrome_border(palette), surface_color, 0.54));
|
|
|
|
return qformatted(R"(
|
|
QLineEdit#LadybirdLocationEdit {{
|
|
color: {4};
|
|
background: {0};
|
|
border: 1px solid {2};
|
|
border-radius: 16px;
|
|
min-height: 32px;
|
|
padding: 0 16px;
|
|
selection-background-color: {6};
|
|
selection-color: {7};
|
|
placeholder-text-color: {5};
|
|
}}
|
|
|
|
QLineEdit#LadybirdLocationEdit:hover {{
|
|
background: {1};
|
|
border-color: {8};
|
|
}}
|
|
|
|
QLineEdit#LadybirdLocationEdit:focus {{
|
|
background: {1};
|
|
border-color: {3};
|
|
}}
|
|
|
|
QLineEdit#LadybirdLocationEdit:disabled {{
|
|
color: {5};
|
|
border-color: {2};
|
|
}}
|
|
|
|
QToolButton#LadybirdLocationIcon {{
|
|
background: transparent;
|
|
border: 0;
|
|
padding: 0;
|
|
}}
|
|
|
|
QToolButton#LadybirdLocationIcon[notSecure="true"] {{
|
|
color: {9};
|
|
background: {10};
|
|
border: 1px solid {13};
|
|
border-radius: 10px;
|
|
padding: 0 7px;
|
|
font-weight: 500;
|
|
}}
|
|
|
|
QToolButton#LadybirdLocationIcon[notSecure="true"]:hover {{
|
|
background: {11};
|
|
}}
|
|
|
|
QToolButton#LadybirdLocationIcon[notSecure="true"]:pressed {{
|
|
background: {12};
|
|
}}
|
|
|
|
QToolButton#LadybirdLocationZoomIndicator {{
|
|
color: {14};
|
|
background: {15};
|
|
border: 1px solid {18};
|
|
border-radius: 10px;
|
|
padding: 0 7px;
|
|
font-weight: 500;
|
|
}}
|
|
|
|
QToolButton#LadybirdLocationZoomIndicator:hover {{
|
|
background: {16};
|
|
}}
|
|
|
|
QToolButton#LadybirdLocationZoomIndicator:pressed {{
|
|
background: {17};
|
|
}}
|
|
|
|
QToolButton#LadybirdLocationAction {{
|
|
background: transparent;
|
|
border: 0;
|
|
margin: 1px;
|
|
padding: 0;
|
|
}}
|
|
)",
|
|
surface, hover, border, focus_border, text, placeholder, selection, selection_text, hover_border,
|
|
not_secure_text, not_secure_background, not_secure_hover, not_secure_pressed, not_secure_border, zoom_text, zoom_background, zoom_hover, zoom_pressed, zoom_border);
|
|
}
|
|
|
|
QString bookmarks_bar_style_sheet(QPalette const& palette)
|
|
{
|
|
auto hover = style_sheet_color(chrome_control_surface_hover(palette));
|
|
auto pressed = style_sheet_color(chrome_control_surface_pressed(palette));
|
|
auto control_border = style_sheet_color(chrome_control_border(palette));
|
|
auto text = style_sheet_color(chrome_button_text(palette));
|
|
|
|
return qformatted(R"(
|
|
QToolBar#LadybirdBookmarksBar {{
|
|
color: {2};
|
|
border: 0;
|
|
padding: 1px 4px;
|
|
spacing: 3px;
|
|
}}
|
|
|
|
QToolBar#LadybirdBookmarksBar QToolButton {{
|
|
color: {2};
|
|
background: transparent;
|
|
border: 1px solid transparent;
|
|
border-radius: 7px;
|
|
}}
|
|
|
|
QToolBar#LadybirdBookmarksBar QToolButton:hover {{
|
|
background: {0};
|
|
border-color: {3};
|
|
}}
|
|
|
|
QToolBar#LadybirdBookmarksBar QToolButton:pressed,
|
|
QToolBar#LadybirdBookmarksBar QToolButton:checked {{
|
|
background: {1};
|
|
border-color: {3};
|
|
}}
|
|
)",
|
|
hover, pressed, text, control_border);
|
|
}
|
|
|
|
QString find_in_page_style_sheet(QPalette const& palette)
|
|
{
|
|
auto background = style_sheet_color(chrome_background(palette));
|
|
auto surface = style_sheet_color(chrome_surface(palette));
|
|
auto hover = style_sheet_color(chrome_control_surface_hover(palette));
|
|
auto pressed = style_sheet_color(chrome_control_surface_pressed(palette));
|
|
auto border = style_sheet_color(chrome_border(palette));
|
|
auto control_border = style_sheet_color(chrome_control_border(palette));
|
|
auto accent = style_sheet_color(chrome_accent(palette));
|
|
auto text = style_sheet_color(chrome_text(palette));
|
|
auto muted = style_sheet_color(chrome_muted_text(palette));
|
|
|
|
return qformatted(R"(
|
|
QWidget#LadybirdFindInPageBar {{
|
|
background: {0};
|
|
border-top: 1px solid {4};
|
|
}}
|
|
|
|
QWidget#LadybirdFindInPageBar QLineEdit {{
|
|
color: {7};
|
|
background: {1};
|
|
border: 1px solid {4};
|
|
border-radius: 8px;
|
|
min-height: 26px;
|
|
padding: 2px 9px;
|
|
selection-background-color: {6};
|
|
}}
|
|
|
|
QWidget#LadybirdFindInPageBar QLineEdit:focus {{
|
|
border-color: {6};
|
|
}}
|
|
|
|
QWidget#LadybirdFindInPageBar QPushButton {{
|
|
color: {7};
|
|
background: transparent;
|
|
border: 1px solid transparent;
|
|
border-radius: 7px;
|
|
min-height: 26px;
|
|
}}
|
|
|
|
QWidget#LadybirdFindInPageBar QPushButton:hover {{
|
|
background: {2};
|
|
border-color: {5};
|
|
}}
|
|
|
|
QWidget#LadybirdFindInPageBar QPushButton:pressed {{
|
|
background: {3};
|
|
border-color: {5};
|
|
}}
|
|
|
|
QWidget#LadybirdFindInPageBar QCheckBox,
|
|
QWidget#LadybirdFindInPageBar QLabel {{
|
|
color: {8};
|
|
}}
|
|
)",
|
|
background, surface, hover, pressed, border, control_border, accent, text, muted);
|
|
}
|
|
|
|
QString devtools_banner_style_sheet(QPalette const& palette)
|
|
{
|
|
auto background = style_sheet_color(chrome_background(palette));
|
|
auto border = style_sheet_color(chrome_border(palette));
|
|
auto control_border = style_sheet_color(chrome_control_border(palette));
|
|
auto hover = style_sheet_color(chrome_surface_hover(palette));
|
|
auto pressed = style_sheet_color(chrome_surface_pressed(palette));
|
|
auto text = style_sheet_color(chrome_text(palette));
|
|
|
|
return qformatted(R"(
|
|
QWidget#LadybirdDevToolsBanner {{
|
|
background: {0};
|
|
border-top: 1px solid {1};
|
|
}}
|
|
|
|
QWidget#LadybirdDevToolsBanner QLabel,
|
|
QWidget#LadybirdDevToolsBanner QPushButton {{
|
|
background: transparent;
|
|
color: {5};
|
|
}}
|
|
|
|
QWidget#LadybirdDevToolsBanner QPushButton:hover {{
|
|
background: {3};
|
|
border-color: {2};
|
|
}}
|
|
|
|
QWidget#LadybirdDevToolsBanner QPushButton:pressed {{
|
|
background: {4};
|
|
border-color: {2};
|
|
}}
|
|
)",
|
|
background, border, control_border, hover, pressed, text);
|
|
}
|
|
|
|
QString tab_widget_style_sheet(QPalette const& palette)
|
|
{
|
|
auto dark = is_dark(palette);
|
|
auto chrome_background_color = chrome_background(palette);
|
|
auto background = style_sheet_color(chrome_background_color);
|
|
auto hover = style_sheet_color(chrome_control_surface_hover(palette));
|
|
auto pressed = style_sheet_color(chrome_control_surface_pressed(palette));
|
|
auto control_border = style_sheet_color(chrome_control_border(palette));
|
|
auto text = style_sheet_color(chrome_button_text(palette));
|
|
auto close_hover = style_sheet_color(chrome_destructive_hover());
|
|
auto close_text = style_sheet_color(chrome_destructive_text());
|
|
auto strip_separator = style_sheet_color(chrome_border(palette));
|
|
auto sidebar_separator = style_sheet_color(mix(chrome_background_color, chrome_border(palette), dark ? 0.44 : 0.58));
|
|
auto sidebar_separator_hover = style_sheet_color(mix(chrome_background_color, chrome_border(palette), dark ? 0.64 : 0.76));
|
|
auto vertical_tab_button_background_color = style_sheet_color(chrome_active_tab_surface_top(palette));
|
|
return qformatted(R"(
|
|
QWidget#LadybirdTabStrip {{
|
|
color: {4};
|
|
background: {0};
|
|
border: 0;
|
|
border-bottom: 1px solid {7};
|
|
}}
|
|
|
|
QWidget#LadybirdVerticalTabBar {{
|
|
color: {4};
|
|
background: {0};
|
|
border-right: 1px solid {8};
|
|
}}
|
|
|
|
QWidget#LadybirdVerticalTabBar[hovered="true"],
|
|
QWidget#LadybirdVerticalTabBar[active="true"] {{
|
|
border-right: 1px solid {9};
|
|
}}
|
|
|
|
QWidget#LadybirdVerticalTabsResizeHandle {{
|
|
background: transparent;
|
|
border: 0;
|
|
}}
|
|
|
|
QWidget#LadybirdVerticalTabsContentSeparator {{
|
|
background: {7};
|
|
border: 0;
|
|
min-height: 1px;
|
|
max-height: 1px;
|
|
}}
|
|
|
|
QPushButton#LadybirdAudioState,
|
|
QToolButton#LadybirdNewTabButton,
|
|
QPushButton#LadybirdTabButton {{
|
|
color: {4};
|
|
background: transparent;
|
|
border: 1px solid transparent;
|
|
border-radius: 11px;
|
|
padding: 0;
|
|
}}
|
|
|
|
QToolButton#LadybirdNewTabButton {{
|
|
min-width: 30px;
|
|
min-height: 30px;
|
|
border-radius: 16px;
|
|
}}
|
|
|
|
QPushButton#LadybirdAudioState,
|
|
QPushButton#LadybirdTabButton {{
|
|
min-width: 22px;
|
|
min-height: 22px;
|
|
max-width: 22px;
|
|
max-height: 22px;
|
|
}}
|
|
|
|
QPushButton#LadybirdAudioState[collapsedVerticalTabButton="true"] {{
|
|
min-width: 18px;
|
|
min-height: 18px;
|
|
max-width: 18px;
|
|
max-height: 18px;
|
|
border-radius: 9px;
|
|
}}
|
|
|
|
QPushButton#LadybirdTabButton[collapsedVerticalTabButton="true"] {{
|
|
min-width: 16px;
|
|
min-height: 16px;
|
|
max-width: 16px;
|
|
max-height: 16px;
|
|
background: {10};
|
|
border-color: {4};
|
|
border-radius: 8px;
|
|
}}
|
|
|
|
QPushButton#LadybirdAudioState:hover,
|
|
QToolButton#LadybirdNewTabButton[verticalTabsButton="false"]:hover,
|
|
QPushButton#LadybirdTabButton:hover {{
|
|
color: {4};
|
|
background: {1};
|
|
border-color: {3};
|
|
}}
|
|
|
|
QPushButton#LadybirdAudioState:pressed,
|
|
QPushButton#LadybirdAudioState:checked,
|
|
QToolButton#LadybirdNewTabButton[verticalTabsButton="false"]:pressed,
|
|
QPushButton#LadybirdTabButton:pressed,
|
|
QPushButton#LadybirdTabButton:checked {{
|
|
color: {4};
|
|
background: {2};
|
|
border-color: {3};
|
|
}}
|
|
|
|
QToolButton#LadybirdWindowButton,
|
|
QToolButton#LadybirdCloseWindowButton {{
|
|
color: {4};
|
|
background: transparent;
|
|
border: 0;
|
|
border-radius: 0;
|
|
min-width: 40px;
|
|
min-height: 40px;
|
|
padding: 0;
|
|
}}
|
|
|
|
QToolButton#LadybirdWindowButton:hover {{
|
|
background: {1};
|
|
}}
|
|
|
|
QToolButton#LadybirdWindowButton:pressed {{
|
|
background: {2};
|
|
}}
|
|
|
|
QToolButton#LadybirdCloseWindowButton:hover {{
|
|
color: {6};
|
|
background: {5};
|
|
}}
|
|
|
|
QToolButton#LadybirdCloseWindowButton:pressed {{
|
|
color: {6};
|
|
background: {5};
|
|
}}
|
|
|
|
QToolButton#LadybirdWindowButton[pressedOutside="true"],
|
|
QToolButton#LadybirdCloseWindowButton[pressedOutside="true"] {{
|
|
color: {4};
|
|
background: transparent;
|
|
}}
|
|
)",
|
|
background, hover, pressed, control_border, text, close_hover, close_text, strip_separator,
|
|
sidebar_separator, sidebar_separator_hover, vertical_tab_button_background_color);
|
|
}
|
|
|
|
QString autocomplete_popup_style_sheet(QPalette const& palette)
|
|
{
|
|
auto surface = style_sheet_color(chrome_surface(palette));
|
|
auto border = style_sheet_color(chrome_border(palette));
|
|
auto text = style_sheet_color(chrome_text(palette));
|
|
|
|
return qformatted(R"(
|
|
QFrame#LadybirdAutocompletePopup {{
|
|
color: {2};
|
|
background: {0};
|
|
border: 1px solid {1};
|
|
border-radius: 8px;
|
|
}}
|
|
|
|
QListView#LadybirdAutocompleteList {{
|
|
color: {2};
|
|
background: transparent;
|
|
border: 0;
|
|
outline: 0;
|
|
}}
|
|
)",
|
|
surface, border, text);
|
|
}
|
|
|
|
}
|