// Copyright 2015 The Chromium Authors. All rights reserved.
// 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_LAYER_TAB_HANDLE_LAYER_H_
#define CHROME_BROWSER_ANDROID_COMPOSITOR_LAYER_TAB_HANDLE_LAYER_H_

#include <memory>

#include "base/macros.h"
#include "cc/layers/nine_patch_layer.h"
#include "cc/layers/solid_color_layer.h"
#include "cc/layers/ui_resource_layer.h"
#include "chrome/browser/android/compositor/layer/layer.h"
#include "ui/android/resources/resource_manager.h"

namespace cc {
class Layer;
class NinePatchLayer;
}

namespace ui {
class NinePatchResource;
}

namespace android {

class LayerTitleCache;

class TabHandleLayer : public Layer {
 public:
  static scoped_refptr<TabHandleLayer> Create(
      LayerTitleCache* layer_title_cache);

  void SetProperties(int id,
                     ui::Resource* close_button_resource,
                     ui::NinePatchResource* tab_handle_resource,
                     bool foreground,
                     bool close_pressed,
                     float toolbar_width,
                     float x,
                     float y,
                     float width,
                     float height,
                     float content_offset_x,
                     float close_button_alpha,
                     bool is_loading,
                     float spinner_rotation,
                     float brightness,
                     float border_opacity);
  scoped_refptr<cc::Layer> layer() override;

 protected:
  explicit TabHandleLayer(LayerTitleCache* layer_title_cache);
  ~TabHandleLayer() override;

 private:
  LayerTitleCache* layer_title_cache_;

  scoped_refptr<cc::Layer> layer_;
  scoped_refptr<cc::UIResourceLayer> close_button_;
  scoped_refptr<cc::NinePatchLayer> decoration_tab_;
  scoped_refptr<cc::SolidColorLayer> border_;
  scoped_refptr<cc::Layer> title_layer_;

  float brightness_;
  bool foreground_;

  DISALLOW_COPY_AND_ASSIGN(TabHandleLayer);
};

}  // namespace android

#endif  // CHROME_BROWSER_ANDROID_COMPOSITOR_LAYER_TAB_HANDLE_LAYER_H_
