1 // Copyright 2016 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4 
5 #include "third_party/blink/renderer/platform/graphics/compositor_filter_operations.h"
6 
7 #include "third_party/blink/renderer/platform/geometry/int_rect.h"
8 #include "third_party/blink/renderer/platform/runtime_enabled_features.h"
9 #include "third_party/skia/include/core/SkImageFilter.h"
10 #include "ui/gfx/geometry/rect.h"
11 
12 namespace blink {
13 
AsCcFilterOperations() const14 const cc::FilterOperations& CompositorFilterOperations::AsCcFilterOperations()
15     const {
16   return filter_operations_;
17 }
18 
ReleaseCcFilterOperations()19 cc::FilterOperations CompositorFilterOperations::ReleaseCcFilterOperations() {
20   return std::move(filter_operations_);
21 }
22 
AppendGrayscaleFilter(float amount)23 void CompositorFilterOperations::AppendGrayscaleFilter(float amount) {
24   filter_operations_.Append(cc::FilterOperation::CreateGrayscaleFilter(amount));
25 }
26 
AppendSepiaFilter(float amount)27 void CompositorFilterOperations::AppendSepiaFilter(float amount) {
28   filter_operations_.Append(cc::FilterOperation::CreateSepiaFilter(amount));
29 }
30 
AppendSaturateFilter(float amount)31 void CompositorFilterOperations::AppendSaturateFilter(float amount) {
32   filter_operations_.Append(cc::FilterOperation::CreateSaturateFilter(amount));
33 }
34 
AppendHueRotateFilter(float amount)35 void CompositorFilterOperations::AppendHueRotateFilter(float amount) {
36   filter_operations_.Append(cc::FilterOperation::CreateHueRotateFilter(amount));
37 }
38 
AppendInvertFilter(float amount)39 void CompositorFilterOperations::AppendInvertFilter(float amount) {
40   filter_operations_.Append(cc::FilterOperation::CreateInvertFilter(amount));
41 }
42 
AppendBrightnessFilter(float amount)43 void CompositorFilterOperations::AppendBrightnessFilter(float amount) {
44   filter_operations_.Append(
45       cc::FilterOperation::CreateBrightnessFilter(amount));
46 }
47 
AppendContrastFilter(float amount)48 void CompositorFilterOperations::AppendContrastFilter(float amount) {
49   filter_operations_.Append(cc::FilterOperation::CreateContrastFilter(amount));
50 }
51 
AppendOpacityFilter(float amount)52 void CompositorFilterOperations::AppendOpacityFilter(float amount) {
53   filter_operations_.Append(cc::FilterOperation::CreateOpacityFilter(amount));
54 }
55 
AppendBlurFilter(float amount,SkBlurImageFilter::TileMode tile_mode)56 void CompositorFilterOperations::AppendBlurFilter(
57     float amount,
58     SkBlurImageFilter::TileMode tile_mode) {
59   filter_operations_.Append(
60       cc::FilterOperation::CreateBlurFilter(amount, tile_mode));
61 }
62 
AppendDropShadowFilter(IntPoint offset,float std_deviation,Color color)63 void CompositorFilterOperations::AppendDropShadowFilter(IntPoint offset,
64                                                         float std_deviation,
65                                                         Color color) {
66   gfx::Point gfx_offset(offset.X(), offset.Y());
67   filter_operations_.Append(cc::FilterOperation::CreateDropShadowFilter(
68       gfx_offset, std_deviation, color.Rgb()));
69 }
70 
AppendColorMatrixFilter(const cc::FilterOperation::Matrix & matrix)71 void CompositorFilterOperations::AppendColorMatrixFilter(
72     const cc::FilterOperation::Matrix& matrix) {
73   filter_operations_.Append(
74       cc::FilterOperation::CreateColorMatrixFilter(matrix));
75 }
76 
AppendZoomFilter(float amount,int inset)77 void CompositorFilterOperations::AppendZoomFilter(float amount, int inset) {
78   filter_operations_.Append(
79       cc::FilterOperation::CreateZoomFilter(amount, inset));
80 }
81 
AppendSaturatingBrightnessFilter(float amount)82 void CompositorFilterOperations::AppendSaturatingBrightnessFilter(
83     float amount) {
84   filter_operations_.Append(
85       cc::FilterOperation::CreateSaturatingBrightnessFilter(amount));
86 }
87 
AppendReferenceFilter(sk_sp<PaintFilter> image_filter)88 void CompositorFilterOperations::AppendReferenceFilter(
89     sk_sp<PaintFilter> image_filter) {
90   filter_operations_.Append(
91       cc::FilterOperation::CreateReferenceFilter(std::move(image_filter)));
92 }
93 
Clear()94 void CompositorFilterOperations::Clear() {
95   filter_operations_.Clear();
96 }
97 
IsEmpty() const98 bool CompositorFilterOperations::IsEmpty() const {
99   return filter_operations_.IsEmpty();
100 }
101 
MapRect(const FloatRect & input_rect) const102 FloatRect CompositorFilterOperations::MapRect(
103     const FloatRect& input_rect) const {
104   gfx::Rect result =
105       filter_operations_.MapRect(EnclosingIntRect(input_rect), SkMatrix::I());
106   return FloatRect(result.x(), result.y(), result.width(), result.height());
107 }
108 
HasFilterThatMovesPixels() const109 bool CompositorFilterOperations::HasFilterThatMovesPixels() const {
110   return filter_operations_.HasFilterThatMovesPixels();
111 }
112 
HasReferenceFilter() const113 bool CompositorFilterOperations::HasReferenceFilter() const {
114   return filter_operations_.HasReferenceFilter();
115 }
116 
operator ==(const CompositorFilterOperations & o) const117 bool CompositorFilterOperations::operator==(
118     const CompositorFilterOperations& o) const {
119   return reference_box_ == o.reference_box_ &&
120          filter_operations_ == o.filter_operations_;
121 }
122 
ToString() const123 String CompositorFilterOperations::ToString() const {
124   return String(filter_operations_.ToString().c_str()) + " at " +
125          reference_box_.ToString();
126 }
127 
128 }  // namespace blink
129