mirror of
https://github.com/RGBCube/serenity
synced 2025-05-18 21:45:08 +00:00
LibGUI: Add "uniform tabs" mode to TabWidget (all tabs have same width)
...and enable this in the main Browser UI. :^)
This commit is contained in:
parent
682f0ac93b
commit
d6bbf12b7c
3 changed files with 17 additions and 5 deletions
|
@ -87,6 +87,7 @@ int main(int argc, char** argv)
|
||||||
auto& tab_widget = widget.add<GUI::TabWidget>();
|
auto& tab_widget = widget.add<GUI::TabWidget>();
|
||||||
tab_widget.set_text_alignment(Gfx::TextAlignment::CenterLeft);
|
tab_widget.set_text_alignment(Gfx::TextAlignment::CenterLeft);
|
||||||
tab_widget.set_container_padding(0);
|
tab_widget.set_container_padding(0);
|
||||||
|
tab_widget.set_uniform_tabs(true);
|
||||||
|
|
||||||
tab_widget.on_change = [&](auto& active_widget) {
|
tab_widget.on_change = [&](auto& active_widget) {
|
||||||
auto& tab = static_cast<Browser::Tab&>(active_widget);
|
auto& tab = static_cast<Browser::Tab&>(active_widget);
|
||||||
|
|
|
@ -178,7 +178,7 @@ void TabWidget::paint_event(PaintEvent& event)
|
||||||
Gfx::StylePainter::paint_tab_button(painter, button_rect, palette(), false, hovered, m_tabs[i].widget->is_enabled());
|
Gfx::StylePainter::paint_tab_button(painter, button_rect, palette(), false, hovered, m_tabs[i].widget->is_enabled());
|
||||||
auto text_rect = button_rect.translated(0, 1);
|
auto text_rect = button_rect.translated(0, 1);
|
||||||
paint_tab_icon_if_needed(m_tabs[i].icon, button_rect, text_rect);
|
paint_tab_icon_if_needed(m_tabs[i].icon, button_rect, text_rect);
|
||||||
painter.draw_text(text_rect, m_tabs[i].title, m_text_alignment, palette().button_text());
|
painter.draw_text(text_rect, m_tabs[i].title, m_text_alignment, palette().button_text(), Gfx::TextElision::Right);
|
||||||
}
|
}
|
||||||
|
|
||||||
for (size_t i = 0; i < m_tabs.size(); ++i) {
|
for (size_t i = 0; i < m_tabs.size(); ++i) {
|
||||||
|
@ -189,18 +189,25 @@ void TabWidget::paint_event(PaintEvent& event)
|
||||||
Gfx::StylePainter::paint_tab_button(painter, button_rect, palette(), true, hovered, m_tabs[i].widget->is_enabled());
|
Gfx::StylePainter::paint_tab_button(painter, button_rect, palette(), true, hovered, m_tabs[i].widget->is_enabled());
|
||||||
auto text_rect = button_rect.translated(0, 1);
|
auto text_rect = button_rect.translated(0, 1);
|
||||||
paint_tab_icon_if_needed(m_tabs[i].icon, button_rect, text_rect);
|
paint_tab_icon_if_needed(m_tabs[i].icon, button_rect, text_rect);
|
||||||
painter.draw_text(text_rect, m_tabs[i].title, m_text_alignment, palette().button_text());
|
painter.draw_text(text_rect, m_tabs[i].title, m_text_alignment, palette().button_text(), Gfx::TextElision::Right);
|
||||||
painter.draw_line(button_rect.bottom_left().translated(1, 1), button_rect.bottom_right().translated(-1, 1), palette().button());
|
painter.draw_line(button_rect.bottom_left().translated(1, 1), button_rect.bottom_right().translated(-1, 1), palette().button());
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int TabWidget::uniform_tab_width() const
|
||||||
|
{
|
||||||
|
return 160;
|
||||||
|
}
|
||||||
|
|
||||||
Gfx::Rect TabWidget::button_rect(int index) const
|
Gfx::Rect TabWidget::button_rect(int index) const
|
||||||
{
|
{
|
||||||
int x_offset = 2;
|
int x_offset = 2;
|
||||||
for (int i = 0; i < index; ++i)
|
for (int i = 0; i < index; ++i) {
|
||||||
x_offset += m_tabs[i].width(font());
|
auto tab_width = m_uniform_tabs ? uniform_tab_width() : m_tabs[i].width(font());
|
||||||
Gfx::Rect rect { x_offset, 0, m_tabs[index].width(font()), bar_height() };
|
x_offset += tab_width;
|
||||||
|
}
|
||||||
|
Gfx::Rect rect { x_offset, 0, m_uniform_tabs ? uniform_tab_width() : m_tabs[index].width(font()), bar_height() };
|
||||||
if (m_tabs[index].widget != m_active_widget) {
|
if (m_tabs[index].widget != m_active_widget) {
|
||||||
rect.move_by(0, 2);
|
rect.move_by(0, 2);
|
||||||
rect.set_height(rect.height() - 2);
|
rect.set_height(rect.height() - 2);
|
||||||
|
|
|
@ -76,6 +76,9 @@ public:
|
||||||
void set_text_alignment(Gfx::TextAlignment alignment) { m_text_alignment = alignment; }
|
void set_text_alignment(Gfx::TextAlignment alignment) { m_text_alignment = alignment; }
|
||||||
Gfx::TextAlignment text_alignment() const { return m_text_alignment; }
|
Gfx::TextAlignment text_alignment() const { return m_text_alignment; }
|
||||||
|
|
||||||
|
void set_uniform_tabs(bool uniform_tabs) { m_uniform_tabs = uniform_tabs; }
|
||||||
|
int uniform_tab_width() const;
|
||||||
|
|
||||||
Function<void(Widget&)> on_change;
|
Function<void(Widget&)> on_change;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
|
@ -108,6 +111,7 @@ private:
|
||||||
int m_hovered_tab_index { -1 };
|
int m_hovered_tab_index { -1 };
|
||||||
int m_container_padding { 2 };
|
int m_container_padding { 2 };
|
||||||
Gfx::TextAlignment m_text_alignment { Gfx::TextAlignment::Center };
|
Gfx::TextAlignment m_text_alignment { Gfx::TextAlignment::Center };
|
||||||
|
bool m_uniform_tabs { false };
|
||||||
};
|
};
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue