1c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// Copyright (c) 2013 The Chromium Authors. All rights reserved.
2c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
3c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// found in the LICENSE file.
4c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
5c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "content/browser/web_contents/aura/shadow_layer_delegate.h"
6c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
7c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "base/bind.h"
8c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "third_party/skia/include/effects/SkGradientShader.h"
9c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "ui/aura/window.h"
10c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "ui/compositor/layer.h"
11c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "ui/gfx/canvas.h"
12c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "ui/gfx/skia_util.h"
13c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
14c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)namespace {
15c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
16c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)const SkColor kShadowLightColor = SkColorSetARGB(0x0, 0, 0, 0);
17c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)const SkColor kShadowDarkColor = SkColorSetARGB(0x70, 0, 0, 0);
18c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)const int kShadowThick = 7;
19c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
20c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)}  // namespace
21c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
22c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)namespace content {
23c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
247d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)ShadowLayerDelegate::ShadowLayerDelegate(ui::Layer* shadow_for)
25c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    : layer_(new ui::Layer(ui::LAYER_TEXTURED)) {
26c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  layer_->set_delegate(this);
27c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  layer_->SetBounds(gfx::Rect(-kShadowThick, 0, kShadowThick,
287d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)                              shadow_for->bounds().height()));
29c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  layer_->SetFillsBoundsOpaquely(false);
307d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  shadow_for->Add(layer_.get());
31c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)}
32c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
33c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)ShadowLayerDelegate::~ShadowLayerDelegate() {
34c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)}
35c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
36c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void ShadowLayerDelegate::OnPaintLayer(gfx::Canvas* canvas) {
37c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  SkPoint points[2];
38c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  const SkColor kShadowColors[2] = { kShadowLightColor, kShadowDarkColor };
39c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
40c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  points[0].iset(0, 0);
41c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  points[1].iset(kShadowThick, 0);
42c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
43c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  skia::RefPtr<SkShader> shader = skia::AdoptRef(
44c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      SkGradientShader::CreateLinear(points, kShadowColors, NULL,
45cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)          arraysize(points), SkShader::kRepeat_TileMode));
46c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
47c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  gfx::Rect paint_rect = gfx::Rect(0, 0, kShadowThick,
48c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                                   layer_->bounds().height());
49c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  SkPaint paint;
50c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  paint.setShader(shader.get());
51c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  canvas->sk_canvas()->drawRect(gfx::RectToSkRect(paint_rect), paint);
52c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)}
53c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
541320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccivoid ShadowLayerDelegate::OnDelegatedFrameDamage(
551320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    const gfx::Rect& damage_rect_in_dip) {
561320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci}
571320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
58c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void ShadowLayerDelegate::OnDeviceScaleFactorChanged(float scale_factor) {
59c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)}
60c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
61c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)base::Closure ShadowLayerDelegate::PrepareForLayerBoundsChange() {
62c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  return base::Bind(&base::DoNothing);
63c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)}
64c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
65c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)}  // namespace content
66