| // Copyright 2025 The Chromium Authors | |
| // Use of this source code is governed by a BSD-style license that can be | |
| // found in the LICENSE file. | |
| #ifndef COMPONENTS_SPLIT_TABS_SPLIT_TAB_VISUAL_DATA_H_ | |
| #define COMPONENTS_SPLIT_TABS_SPLIT_TAB_VISUAL_DATA_H_ | |
| namespace split_tabs { | |
| enum class SplitTabLayout { | |
| // A tab will stretch out vertically so one tab in the split will be next to | |
| // the other. | |
| kVertical, | |
| // A tab will stretch out horizontally so one tab in the split will be on top | |
| // of the other. | |
| kHorizontal | |
| }; | |
| // Represents the visual state of a split tab, including its layout type and the | |
| // proportional size of the webcontents. | |
| class SplitTabVisualData { | |
| public: | |
| SplitTabVisualData(); | |
| explicit SplitTabVisualData(SplitTabLayout split_layout); | |
| SplitTabVisualData(SplitTabLayout split_layout, double split_ratio); | |
| ~SplitTabVisualData(); | |
| SplitTabVisualData(const SplitTabVisualData& other) = default; | |
| SplitTabVisualData(SplitTabVisualData&& other) = default; | |
| SplitTabVisualData& operator=(const SplitTabVisualData& other) = default; | |
| SplitTabVisualData& operator=(SplitTabVisualData&& other) = default; | |
| void set_split_layout(SplitTabLayout split_layout) { | |
| split_layout_ = split_layout; | |
| } | |
| void set_split_ratio(double split_ratio) { split_ratio_ = split_ratio; } | |
| SplitTabLayout split_layout() const { return split_layout_; } | |
| double split_ratio() const { return split_ratio_; } | |
| // Checks whether two instances are visually equivalent. | |
| friend bool operator==(const SplitTabVisualData&, | |
| const SplitTabVisualData&) = default; | |
| private: | |
| SplitTabLayout split_layout_; | |
| // ratio of the first split tab's width to the available width. | |
| double split_ratio_ = 0.5; | |
| }; | |
| } // namespace split_tabs | |
| #endif // COMPONENTS_SPLIT_TABS_SPLIT_TAB_VISUAL_DATA_H_ |