File: tab_strip_scene_layer.h

package info (click to toggle)
chromium 139.0.7258.127-1
  • links: PTS, VCS
  • area: main
  • in suites:
  • size: 6,122,068 kB
  • sloc: cpp: 35,100,771; ansic: 7,163,530; javascript: 4,103,002; python: 1,436,920; asm: 946,517; xml: 746,709; pascal: 187,653; perl: 88,691; sh: 88,436; objc: 79,953; sql: 51,488; cs: 44,583; fortran: 24,137; makefile: 22,147; tcl: 15,277; php: 13,980; yacc: 8,984; ruby: 7,485; awk: 3,720; lisp: 3,096; lex: 1,327; ada: 727; jsp: 228; sed: 36
file content (258 lines) | stat: -rw-r--r-- 9,821 bytes parent folder | download | duplicates (3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
// Copyright 2015 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_ANDROID_COMPOSITOR_SCENE_LAYER_TAB_STRIP_SCENE_LAYER_H_
#define CHROME_BROWSER_ANDROID_COMPOSITOR_SCENE_LAYER_TAB_STRIP_SCENE_LAYER_H_

#include <memory>
#include <vector>

#include "base/android/jni_android.h"
#include "base/android/scoped_java_ref.h"
#include "base/memory/raw_ptr.h"
#include "cc/input/android/offset_tag_android.h"
#include "chrome/browser/ui/android/layouts/scene_layer.h"
#include "components/tab_groups/tab_group_id.h"
#include "ui/android/resources/resource_manager.h"

namespace cc::slim {
class Layer;
class SolidColorLayer;
class UIResourceLayer;
}  // namespace cc::slim

namespace android {

class GroupIndicatorLayer;
class LayerTitleCache;
class TabHandleLayer;

// A scene layer to draw one or more tab strips. Note that content tree can be
// added as a subtree.
class TabStripSceneLayer : public SceneLayer {
 public:
  TabStripSceneLayer(JNIEnv* env, const base::android::JavaRef<jobject>& jobj);

  TabStripSceneLayer(const TabStripSceneLayer&) = delete;
  TabStripSceneLayer& operator=(const TabStripSceneLayer&) = delete;

  ~TabStripSceneLayer() override;

  void SetConstants(JNIEnv* env,
                    jint reorder_background_top_margin,
                    jint reorder_background_bottom_margin,
                    jint reorder_background_padding_short,
                    jint reorder_background_padding_long,
                    jint reorder_background_corner_radius);

  void SetContentTree(
      JNIEnv* env,
      const base::android::JavaParamRef<jobject>& jobj,
      const base::android::JavaParamRef<jobject>& jcontent_tree);

  void BeginBuildingFrame(
      JNIEnv* env,
      const base::android::JavaParamRef<jobject>& jobj,
      jboolean visible,
      const base::android::JavaParamRef<jobject>& jresource_manager,
      const base::android::JavaParamRef<jobject>& jlayer_title_cache);

  void FinishBuildingFrame(JNIEnv* env,
                           const base::android::JavaParamRef<jobject>& jobj);

  void UpdateOffsetTag(JNIEnv* env,
                       const base::android::JavaParamRef<jobject>& jobj,
                       const base::android::JavaParamRef<jobject>& joffset_tag);

  void UpdateTabStripLayer(JNIEnv* env,
                           const base::android::JavaParamRef<jobject>& jobj,
                           jint width,
                           jint height,
                           jfloat y_offset,
                           jint background_color,
                           jint scrim_color,
                           jfloat scrim_opacity,
                           jfloat left_padding,
                           jfloat right_padding,
                           jfloat top_padding);

  void UpdateNewTabButton(JNIEnv* env,
                          const base::android::JavaParamRef<jobject>& jobj,
                          jint resource_id,
                          jint bg_resource_id,
                          jfloat x,
                          jfloat y,
                          jfloat touch_target_offset,
                          jboolean visible,
                          jboolean should_apply_hover_highlight,
                          jint tint,
                          jint background_tint,
                          jfloat button_alpha,
                          jboolean is_keyboard_focused,
                          jint keyboard_focus_ring_resource_id,
                          jint keyboard_focus_ring_color);

  void UpdateModelSelectorButton(
      JNIEnv* env,
      const base::android::JavaParamRef<jobject>& jobj,
      jint resource_id,
      jint bg_resource_id,
      jfloat x,
      jfloat y,
      jboolean visible,
      jboolean should_apply_hover_highlight,
      jint tint,
      jint background_tint,
      jfloat button_alpha,
      jboolean is_keyboard_focused,
      jint keyboard_focus_ring_resource_id,
      jint keyboard_focus_ring_color);

  void UpdateTabStripLeftFade(
      JNIEnv* env,
      const base::android::JavaParamRef<jobject>& jobj,
      jint resource_id,
      jfloat opacity,
      jint leftFadeColor,
      jfloat left_padding);

  void UpdateTabStripRightFade(
      JNIEnv* env,
      const base::android::JavaParamRef<jobject>& jobj,
      jint resource_id,
      jfloat opacity,
      jint rightFadeColor,
      jfloat right_padding);

  void PutStripTabLayer(JNIEnv* env,
                        const base::android::JavaParamRef<jobject>& jobj,
                        jint id,
                        jint close_resource_id,
                        jint close_hover_bg_resource_id,
                        jboolean is_close_keyboard_focused,
                        jint close_keyboard_focus_ring_resource_id,
                        jint divider_resource_id,
                        jint handle_resource_id,
                        jint handle_outline_resource_id,
                        jint close_tint,
                        jint close_hover_bg_tint,
                        jint divider_tint,
                        jint handle_tint,
                        jint handle_outline_tint,
                        jboolean foreground,
                        jboolean shouldShowTabOutline,
                        jboolean close_pressed,
                        jfloat toolbar_width,
                        jfloat x,
                        jfloat y,
                        jfloat width,
                        jfloat height,
                        jfloat content_offset_y,
                        jfloat divider_offset_x,
                        jfloat bottom_margin,
                        jfloat top_margin,
                        jfloat close_button_padding,
                        jfloat close_button_alpha,
                        jboolean is_start_divider_visible,
                        jboolean is_end_divider_visible,
                        jboolean is_loading,
                        jfloat spinner_rotation,
                        jfloat opacity,
                        jboolean is_keyboard_focused,
                        jint keyboard_focus_ring_resource_id,
                        jint keyboard_focus_ring_color,
                        jint keyboard_focus_ring_offset,
                        jint stroke_width,
                        jfloat folio_foot_length);

  void PutGroupIndicatorLayer(
      JNIEnv* env,
      const base::android::JavaParamRef<jobject>& jobj,
      jboolean incognito,
      jboolean foreground,
      jboolean collapsed,
      jboolean show_bubble,
      const base::android::JavaParamRef<jobject>& jgroup_token,
      jint tint,
      jint reorder_background_tint,
      jint bubble_tint,
      jfloat x,
      jfloat y,
      jfloat width,
      jfloat height,
      jfloat title_start_padding,
      jfloat title_end_padding,
      jfloat corner_radius,
      jfloat bottom_indicator_width,
      jfloat bottom_indicator_height,
      jfloat bubble_padding,
      jfloat bubble_size,
      jboolean is_keyboard_focused,
      jint keyboard_focus_ring_resource_id,
      jint keyboard_focus_ring_color,
      jint keyboard_focus_ring_offset,
      jint keyboard_focus_ring_width);

  bool ShouldShowBackground() override;
  SkColor GetBackgroundColor() override;

 private:
  scoped_refptr<TabHandleLayer> GetNextTabLayer(
      LayerTitleCache* layer_title_cache);

  scoped_refptr<GroupIndicatorLayer> GetNextGroupIndicatorLayer(
      LayerTitleCache* layer_title_cache);

  void UpdateCompositorButton(
      scoped_refptr<cc::slim::UIResourceLayer> button,
      scoped_refptr<cc::slim::UIResourceLayer> background,
      ui::Resource* button_resource,
      ui::Resource* background_resource,
      float x,
      float y,
      bool visible,
      bool should_apply_hover_highlight,
      float button_alpha,
      scoped_refptr<cc::slim::UIResourceLayer> keyboard_focus_ring_layer,
      bool is_keyboard_focused,
      ui::Resource* keyboard_focus_ring_drawable);

  typedef std::vector<scoped_refptr<TabHandleLayer>> TabHandleLayerList;

  scoped_refptr<cc::slim::SolidColorLayer> background_layer_;
  scoped_refptr<cc::slim::SolidColorLayer> tab_strip_layer_;
  scoped_refptr<cc::slim::Layer> group_ui_parent_layer_;
  scoped_refptr<cc::slim::Layer> tab_ui_parent_layer_;
  scoped_refptr<cc::slim::Layer> foreground_layer_;
  scoped_refptr<cc::slim::Layer> foreground_tabs_;
  scoped_refptr<cc::slim::Layer> foreground_group_titles_;
  scoped_refptr<cc::slim::UIResourceLayer> new_tab_button_;
  scoped_refptr<cc::slim::UIResourceLayer> new_tab_button_background_;
  scoped_refptr<cc::slim::UIResourceLayer> new_tab_button_keyboard_focus_ring_;
  scoped_refptr<cc::slim::UIResourceLayer> left_fade_;
  scoped_refptr<cc::slim::UIResourceLayer> right_fade_;

  // Layers covering the tab strip padding area, used as an visual extension of
  // fading.
  scoped_refptr<cc::slim::SolidColorLayer> left_padding_layer_;
  scoped_refptr<cc::slim::SolidColorLayer> right_padding_layer_;

  scoped_refptr<cc::slim::UIResourceLayer> model_selector_button_;
  scoped_refptr<cc::slim::UIResourceLayer> model_selector_button_background_;
  scoped_refptr<cc::slim::UIResourceLayer>
      model_selector_button_keyboard_focus_ring_;
  scoped_refptr<cc::slim::SolidColorLayer> scrim_layer_;

  unsigned write_index_ = 0;
  TabHandleLayerList tab_handle_layers_;
  unsigned group_write_index_ = 0;
  std::vector<scoped_refptr<GroupIndicatorLayer>> group_title_layers_;
  raw_ptr<SceneLayer> content_tree_;
  raw_ptr<ui::ResourceManager> resource_manager_;
  raw_ptr<LayerTitleCache> layer_title_cache_;
};

}  // namespace android

#endif  // CHROME_BROWSER_ANDROID_COMPOSITOR_SCENE_LAYER_TAB_STRIP_SCENE_LAYER_H_