Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(790)

Side by Side Diff: third_party/WebKit/Source/platform/graphics/filters/FEDropShadow.cpp

Issue 2393993004: Consolidate FilterOperation and FilterEffect mapRect implementations (Closed)
Patch Set: Rebase; Drop stale comment. Created 4 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 /* 1 /*
2 * Copyright (C) Research In Motion Limited 2011. All rights reserved. 2 * Copyright (C) Research In Motion Limited 2011. All rights reserved.
3 * Copyright (C) 2013 Google Inc. All rights reserved. 3 * Copyright (C) 2013 Google Inc. All rights reserved.
4 * 4 *
5 * This library is free software; you can redistribute it and/or 5 * This library is free software; you can redistribute it and/or
6 * modify it under the terms of the GNU Library General Public 6 * modify it under the terms of the GNU Library General Public
7 * License as published by the Free Software Foundation; either 7 * License as published by the Free Software Foundation; either
8 * version 2 of the License, or (at your option) any later version. 8 * version 2 of the License, or (at your option) any later version.
9 * 9 *
10 * This library is distributed in the hope that it will be useful, 10 * This library is distributed in the hope that it will be useful,
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
47 float stdX, 47 float stdX,
48 float stdY, 48 float stdY,
49 float dx, 49 float dx,
50 float dy, 50 float dy,
51 const Color& shadowColor, 51 const Color& shadowColor,
52 float shadowOpacity) { 52 float shadowOpacity) {
53 return new FEDropShadow(filter, stdX, stdY, dx, dy, shadowColor, 53 return new FEDropShadow(filter, stdX, stdY, dx, dy, shadowColor,
54 shadowOpacity); 54 shadowOpacity);
55 } 55 }
56 56
57 FloatRect FEDropShadow::mapEffect(const FloatSize& stdDeviation,
58 const FloatPoint& offset,
59 const FloatRect& rect) {
60 FloatRect offsetRect = rect;
61 offsetRect.moveBy(offset);
62 FloatRect blurredRect = FEGaussianBlur::mapEffect(stdDeviation, offsetRect);
63 return unionRect(blurredRect, rect);
64 }
65
57 FloatRect FEDropShadow::mapEffect(const FloatRect& rect) const { 66 FloatRect FEDropShadow::mapEffect(const FloatRect& rect) const {
58 const Filter* filter = this->getFilter(); 67 const Filter* filter = this->getFilter();
59 DCHECK(filter); 68 DCHECK(filter);
60 69 FloatPoint offset(filter->applyHorizontalScale(m_dx),
61 FloatRect offsetRect = rect; 70 filter->applyVerticalScale(m_dy));
62 offsetRect.move(filter->applyHorizontalScale(m_dx), 71 FloatSize stdError(filter->applyHorizontalScale(m_stdX),
63 filter->applyVerticalScale(m_dy)); 72 filter->applyVerticalScale(m_stdY));
64 73 return mapEffect(stdError, offset, rect);
65 IntSize kernelSize =
66 FEGaussianBlur::calculateKernelSize(filter, FloatPoint(m_stdX, m_stdY));
67
68 // We take the half kernel size and multiply it by three, because we run box
69 // blur three times.
70 FloatRect result = unionRect(rect, offsetRect);
71 result.inflateX(3.0f * kernelSize.width() * 0.5f);
72 result.inflateY(3.0f * kernelSize.height() * 0.5f);
73 return result;
74 } 74 }
75 75
76 sk_sp<SkImageFilter> FEDropShadow::createImageFilter() { 76 sk_sp<SkImageFilter> FEDropShadow::createImageFilter() {
77 sk_sp<SkImageFilter> input( 77 sk_sp<SkImageFilter> input(
78 SkiaImageFilterBuilder::build(inputEffect(0), operatingColorSpace())); 78 SkiaImageFilterBuilder::build(inputEffect(0), operatingColorSpace()));
79 float dx = getFilter()->applyHorizontalScale(m_dx); 79 float dx = getFilter()->applyHorizontalScale(m_dx);
80 float dy = getFilter()->applyVerticalScale(m_dy); 80 float dy = getFilter()->applyVerticalScale(m_dy);
81 float stdX = getFilter()->applyHorizontalScale(m_stdX); 81 float stdX = getFilter()->applyHorizontalScale(m_stdX);
82 float stdY = getFilter()->applyVerticalScale(m_stdY); 82 float stdY = getFilter()->applyVerticalScale(m_stdY);
83 Color color = adaptColorToOperatingColorSpace( 83 Color color = adaptColorToOperatingColorSpace(
(...skipping 13 matching lines...) Expand all
97 FilterEffect::externalRepresentation(ts); 97 FilterEffect::externalRepresentation(ts);
98 ts << " stdDeviation=\"" << m_stdX << ", " << m_stdY << "\" dx=\"" << m_dx 98 ts << " stdDeviation=\"" << m_stdX << ", " << m_stdY << "\" dx=\"" << m_dx
99 << "\" dy=\"" << m_dy << "\" flood-color=\"" 99 << "\" dy=\"" << m_dy << "\" flood-color=\""
100 << m_shadowColor.nameForLayoutTreeAsText() << "\" flood-opacity=\"" 100 << m_shadowColor.nameForLayoutTreeAsText() << "\" flood-opacity=\""
101 << m_shadowOpacity << "]\n"; 101 << m_shadowOpacity << "]\n";
102 inputEffect(0)->externalRepresentation(ts, indent + 1); 102 inputEffect(0)->externalRepresentation(ts, indent + 1);
103 return ts; 103 return ts;
104 } 104 }
105 105
106 } // namespace blink 106 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698