shadow_layer_delegate.cc revision 1320f92c476a1ad9d19dba2a48c72b75566198e9
15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2013 The Chromium Authors. All rights reserved.
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file.
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/browser/web_contents/aura/shadow_layer_delegate.h"
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
75d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "base/bind.h"
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "third_party/skia/include/effects/SkGradientShader.h"
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/aura/window.h"
10c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "ui/compositor/layer.h"
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/gfx/canvas.h"
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/gfx/skia_util.h"
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace {
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const SkColor kShadowLightColor = SkColorSetARGB(0x0, 0, 0, 0);
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const SkColor kShadowDarkColor = SkColorSetARGB(0x70, 0, 0, 0);
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const int kShadowThick = 7;
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
22c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)namespace content {
23c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
24c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)ShadowLayerDelegate::ShadowLayerDelegate(ui::Layer* shadow_for)
25c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    : layer_(new ui::Layer(ui::LAYER_TEXTURED)) {
265d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  layer_->set_delegate(this);
275d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  layer_->SetBounds(gfx::Rect(-kShadowThick, 0, kShadowThick,
285d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                              shadow_for->bounds().height()));
295d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  layer_->SetFillsBoundsOpaquely(false);
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  shadow_for->Add(layer_.get());
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)ShadowLayerDelegate::~ShadowLayerDelegate() {
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ShadowLayerDelegate::OnPaintLayer(gfx::Canvas* canvas) {
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SkPoint points[2];
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  const SkColor kShadowColors[2] = { kShadowLightColor, kShadowDarkColor };
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
405d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  points[0].iset(0, 0);
415d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  points[1].iset(kShadowThick, 0);
425d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
435d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  skia::RefPtr<SkShader> shader = skia::AdoptRef(
44c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      SkGradientShader::CreateLinear(points, kShadowColors, NULL,
45c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (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;
505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  paint.setShader(shader.get());
515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  canvas->sk_canvas()->drawRect(gfx::RectToSkRect(paint_rect), paint);
525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ShadowLayerDelegate::OnDelegatedFrameDamage(
555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    const gfx::Rect& damage_rect_in_dip) {
565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
575d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
585d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (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)}
645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace content
665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)