blob: ea7275a82b395216f13fb48de9ed654f700ddbf1 [file] [log] [blame]
// 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/jni_weak_ref.h"
#include "base/android/scoped_java_ref.h"
#include "base/memory/raw_ptr.h"
#include "chrome/browser/ui/android/layouts/scene_layer.h"
namespace cc::slim {
class Layer;
class SolidColorLayer;
class UIResourceLayer;
} // namespace cc::slim
namespace android {
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,
jboolean is_tab_strip_redesign_enabled);
TabStripSceneLayer(const TabStripSceneLayer&) = delete;
TabStripSceneLayer& operator=(const TabStripSceneLayer&) = delete;
~TabStripSceneLayer() override;
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);
void FinishBuildingFrame(JNIEnv* env,
const base::android::JavaParamRef<jobject>& jobj);
void UpdateTabStripLayer(JNIEnv* env,
const base::android::JavaParamRef<jobject>& jobj,
jint width,
jint height,
jfloat y_offset,
jint background_color);
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,
jint tint,
jint background_tint,
jfloat button_alpha,
const base::android::JavaParamRef<jobject>& jresource_manager);
void UpdateModelSelectorButton(
JNIEnv* env,
const base::android::JavaParamRef<jobject>& jobj,
jint resource_id,
jfloat x,
jfloat y,
jfloat width,
jfloat height,
jboolean incognito,
jboolean visible,
jfloat button_alpha,
const base::android::JavaParamRef<jobject>& jresource_manager);
void UpdateModelSelectorButtonBackground(
JNIEnv* env,
const base::android::JavaParamRef<jobject>& jobj,
jint resource_id,
jint bg_resource_id,
jfloat x,
jfloat y,
jfloat width,
jfloat height,
jboolean incognito,
jboolean visible,
jint tint,
jint background_tint,
jfloat button_alpha,
const base::android::JavaParamRef<jobject>& jresource_manager);
void UpdateTabStripLeftFade(
JNIEnv* env,
const base::android::JavaParamRef<jobject>& jobj,
jint resource_id,
jfloat opacity,
const base::android::JavaParamRef<jobject>& jresource_manager,
jint leftFadeColor);
void UpdateTabStripRightFade(
JNIEnv* env,
const base::android::JavaParamRef<jobject>& jobj,
jint resource_id,
jfloat opacity,
const base::android::JavaParamRef<jobject>& jresource_manager,
jint rightFadeColor);
void PutStripTabLayer(
JNIEnv* env,
const base::android::JavaParamRef<jobject>& jobj,
jint id,
jint close_resource_id,
jint divider_resource_id,
jint handle_resource_id,
jint handle_outline_resource_id,
jint close_tint,
jint divider_tint,
jint handle_tint,
jint handle_outline_tint,
jboolean foreground,
jboolean close_pressed,
jfloat toolbar_width,
jfloat x,
jfloat y,
jfloat width,
jfloat height,
jfloat content_offset_x,
jfloat content_offset_y,
jfloat divider_offset_x,
jfloat bottom_offset_y,
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 brightness,
jfloat opacity,
const base::android::JavaParamRef<jobject>& jlayer_title_cache,
const base::android::JavaParamRef<jobject>& jresource_manager);
bool ShouldShowBackground() override;
SkColor GetBackgroundColor() override;
private:
scoped_refptr<TabHandleLayer> GetNextLayer(
LayerTitleCache* layer_title_cache);
typedef std::vector<scoped_refptr<TabHandleLayer>> TabHandleLayerList;
scoped_refptr<cc::slim::SolidColorLayer> tab_strip_layer_;
scoped_refptr<cc::slim::Layer> scrollable_strip_layer_;
scoped_refptr<cc::slim::UIResourceLayer> new_tab_button_;
scoped_refptr<cc::slim::UIResourceLayer> new_tab_button_background_;
scoped_refptr<cc::slim::UIResourceLayer> left_fade_;
scoped_refptr<cc::slim::UIResourceLayer> right_fade_;
scoped_refptr<cc::slim::UIResourceLayer> model_selector_button_;
scoped_refptr<cc::slim::UIResourceLayer> model_selector_button_background_;
unsigned write_index_;
TabHandleLayerList tab_handle_layers_;
raw_ptr<SceneLayer> content_tree_;
};
} // namespace android
#endif // CHROME_BROWSER_ANDROID_COMPOSITOR_SCENE_LAYER_TAB_STRIP_SCENE_LAYER_H_