diff --git a/Applications/Browser/main.cpp b/Applications/Browser/main.cpp index 8a0c99b840..99ffd80d3b 100644 --- a/Applications/Browser/main.cpp +++ b/Applications/Browser/main.cpp @@ -87,6 +87,7 @@ int main(int argc, char** argv) auto& tab_widget = widget.add(); tab_widget.set_text_alignment(Gfx::TextAlignment::CenterLeft); tab_widget.set_container_padding(0); + tab_widget.set_uniform_tabs(true); tab_widget.on_change = [&](auto& active_widget) { auto& tab = static_cast(active_widget); diff --git a/Libraries/LibGUI/TabWidget.cpp b/Libraries/LibGUI/TabWidget.cpp index 36bc3d91f0..6fa6a03a7e 100644 --- a/Libraries/LibGUI/TabWidget.cpp +++ b/Libraries/LibGUI/TabWidget.cpp @@ -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()); auto text_rect = button_rect.translated(0, 1); 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) { @@ -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()); auto text_rect = button_rect.translated(0, 1); 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()); break; } } +int TabWidget::uniform_tab_width() const +{ + return 160; +} + Gfx::Rect TabWidget::button_rect(int index) const { int x_offset = 2; - for (int i = 0; i < index; ++i) - x_offset += m_tabs[i].width(font()); - Gfx::Rect rect { x_offset, 0, m_tabs[index].width(font()), bar_height() }; + for (int i = 0; i < index; ++i) { + auto tab_width = m_uniform_tabs ? uniform_tab_width() : m_tabs[i].width(font()); + 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) { rect.move_by(0, 2); rect.set_height(rect.height() - 2); diff --git a/Libraries/LibGUI/TabWidget.h b/Libraries/LibGUI/TabWidget.h index 0bdffad270..85035a95b7 100644 --- a/Libraries/LibGUI/TabWidget.h +++ b/Libraries/LibGUI/TabWidget.h @@ -76,6 +76,9 @@ public: void set_text_alignment(Gfx::TextAlignment alignment) { m_text_alignment = 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 on_change; protected: @@ -108,6 +111,7 @@ private: int m_hovered_tab_index { -1 }; int m_container_padding { 2 }; Gfx::TextAlignment m_text_alignment { Gfx::TextAlignment::Center }; + bool m_uniform_tabs { false }; }; }