blob: 48733333828278b24f4554f051b1df73606d69c2 [file]
// Copyright 2019 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.
#include "chrome/browser/android/compositor/layer/tabgroup_content_layer.h"
#include <vector>
#include "cc/layers/layer.h"
#include "chrome/browser/android/compositor/layer/tabgroup_tab_content_layer.h"
#include "chrome/browser/android/compositor/tab_content_manager.h"
#include "ui/android/resources/nine_patch_resource.h"
#include "ui/gfx/geometry/rect.h"
#include "ui/gfx/geometry/rect_f.h"
#include "ui/gfx/geometry/size.h"
namespace android {
// row x column of the tab group content grid is 2 x 2.
const int THUMBNAIL_ROWS = 2;
const int THUMBNAIL_COLS = THUMBNAIL_ROWS;
const float DESIRED_SCALE = 0.475;
const float GAP_SCALE = 0.05;
// static
scoped_refptr<TabGroupContentLayer> TabGroupContentLayer::Create(
TabContentManager* tab_content_manager) {
return base::WrapRefCounted(new TabGroupContentLayer(tab_content_manager));
}
void TabGroupContentLayer::SetProperties(
int id,
const std::vector<int>& tab_ids,
bool can_use_live_layer,
float static_to_view_blend,
bool should_override_content_alpha,
float content_alpha_override,
float saturation,
bool should_clip,
const gfx::Rect& clip,
ui::NinePatchResource* inner_shadow_resource,
float inner_shadow_alpha) {
if (group_tab_content_layers_.size() == 0) {
for (int i = 0; i < 4; i++) {
group_tab_content_layers_.emplace_back(
TabGroupTabContentLayer::Create(tab_content_manager_));
layer_->AddChild(group_tab_content_layers_.back()->layer());
}
}
const gfx::RectF border_inner_shadow_padding(
inner_shadow_resource->padding());
const gfx::Size border_inner_shadow_padding_size(
inner_shadow_resource->size().width() -
border_inner_shadow_padding.width(),
inner_shadow_resource->size().height() -
border_inner_shadow_padding.height());
int size = tab_ids.size();
for (int i = 0; i < size; i++) {
group_tab_content_layers_[i]->SetProperties(
tab_ids[i], can_use_live_layer, static_to_view_blend,
should_override_content_alpha, content_alpha_override, saturation,
should_clip, clip, inner_shadow_resource, tab_ids, inner_shadow_alpha);
gfx::Transform transform;
transform.Scale(DESIRED_SCALE, DESIRED_SCALE);
group_tab_content_layers_[i]->layer()->SetTransform(transform);
int height_offset_factor = i / THUMBNAIL_ROWS;
int width_offset_factor = i % THUMBNAIL_COLS;
float position_x =
clip.x() +
width_offset_factor *
(clip.width() * DESIRED_SCALE + clip.width() * GAP_SCALE -
border_inner_shadow_padding_size.width());
float position_y =
clip.y() +
height_offset_factor *
(clip.height() * DESIRED_SCALE + clip.height() * GAP_SCALE -
border_inner_shadow_padding_size.height());
gfx::PointF position(position_x, position_y);
group_tab_content_layers_[i]->layer()->SetPosition(position);
}
}
TabGroupContentLayer::TabGroupContentLayer(
TabContentManager* tab_content_manager)
: ContentLayer(tab_content_manager) {}
TabGroupContentLayer::~TabGroupContentLayer() {}
} // namespace android