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