mirror of
				https://github.com/RGBCube/serenity
				synced 2025-10-31 06:02:44 +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>(); | ||||
|     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<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()); | ||||
|         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); | ||||
|  |  | |||
|  | @ -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<void(Widget&)> 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 }; | ||||
| }; | ||||
| 
 | ||||
| } | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Andreas Kling
						Andreas Kling