| // Copyright 2023 The Chromium Authors |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #ifndef CHROME_BROWSER_UI_VIEWS_TABS_TAB_GROUP_STYLE_H_ |
| #define CHROME_BROWSER_UI_VIEWS_TABS_TAB_GROUP_STYLE_H_ |
| |
| #include <string> |
| |
| #include "base/memory/raw_ptr.h" |
| #include "tab_group_header.h" |
| #include "ui/gfx/geometry/rect.h" |
| #include "ui/views/view.h" |
| |
| class TabGroupViews; |
| |
| // Default styling of tab groups. |
| class TabGroupStyle { |
| public: |
| static int GetTabGroupOverlapAdjustment(); |
| |
| explicit TabGroupStyle(const TabGroupViews& tab_group_views); |
| TabGroupStyle(const TabGroupStyle&) = delete; |
| TabGroupStyle& operator=(const TabGroupStyle&) = delete; |
| virtual ~TabGroupStyle(); |
| |
| // returns whether the underline for the group should be hidden |
| virtual bool TabGroupUnderlineShouldBeHidden() const; |
| virtual bool TabGroupUnderlineShouldBeHidden( |
| const views::View* leading_view, |
| const views::View* trailing_view) const; |
| // Returns the path of an underline given the local bounds of the underline. |
| virtual SkPath GetUnderlinePath(gfx::Rect local_bounds) const; |
| |
| // Returns the bounds of a title chip without any text. |
| virtual gfx::Rect GetEmptyTitleChipBounds(const TabGroupHeader* header) const; |
| |
| // Returns the starting y coordinate of the title chip from the `tabstrip`. |
| virtual gfx::Point GetTitleChipOffset(std::optional<int> text_height) const; |
| |
| // Returns the background of a title chip without any text. |
| virtual std::unique_ptr<views::Background> GetEmptyTitleChipBackground( |
| SkColor color) const; |
| |
| // Returns the radius for the tab group header's highlight path. This is used |
| // when the header is focused. |
| virtual int GetHighlightPathGeneratorCornerRadius( |
| const views::View* title) const; |
| |
| // Returns the insets for a header chip that has text. |
| virtual gfx::Insets GetInsetsForHeaderChip() const; |
| |
| // While calculating desired width of a tab group an adjustment value is added |
| // for the distance between the tab group header and the right tab. |
| virtual int GetTitleAdjustmentToTabGroupHeaderDesiredWidth( |
| std::u16string title) const; |
| |
| // Returns the size of an empty chip without any text. |
| virtual float GetEmptyChipSize() const; |
| |
| // Returns the sync icon width. |
| virtual float GetSyncIconWidth() const; |
| |
| // Returns the attention indicator icon width. |
| virtual float GetAttentionIndicatorWidth() const; |
| |
| // The radius of the tab group header chip |
| virtual int GetChipCornerRadius() const; |
| |
| // Overlap between the tab group view and neighbor tab slot |
| virtual int GetTabGroupViewOverlap() const; |
| |
| protected: |
| const raw_ref<const TabGroupViews> tab_group_views_; |
| }; |
| |
| #endif // CHROME_BROWSER_UI_VIEWS_TABS_TAB_GROUP_STYLE_H_ |