1eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch// Copyright 2013 The Chromium Authors. All rights reserved. 2eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch// Use of this source code is governed by a BSD-style license that can be 3eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch// found in the LICENSE file. 4eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 5eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#ifndef CC_OUTPUT_FILTER_OPERATION_H_ 6eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#define CC_OUTPUT_FILTER_OPERATION_H_ 7eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 8eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "base/logging.h" 9ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch#include "base/memory/scoped_ptr.h" 10eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "cc/base/cc_export.h" 1168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)#include "skia/ext/refptr.h" 12eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "third_party/skia/include/core/SkColor.h" 1368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)#include "third_party/skia/include/core/SkImageFilter.h" 140529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch#include "third_party/skia/include/core/SkRegion.h" 15eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "third_party/skia/include/core/SkScalar.h" 16eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "ui/gfx/point.h" 17eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 18ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdochnamespace base { 19ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdochclass Value; 20ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch} 21ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 22eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochnamespace cc { 23eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 24eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochclass CC_EXPORT FilterOperation { 25eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch public: 26eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch enum FilterType { 27eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch GRAYSCALE, 28eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch SEPIA, 29eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch SATURATE, 30eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch HUE_ROTATE, 31eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch INVERT, 32eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch BRIGHTNESS, 33eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch CONTRAST, 34eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch OPACITY, 35eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch BLUR, 36eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch DROP_SHADOW, 37eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch COLOR_MATRIX, 38eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch ZOOM, 3968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) REFERENCE, 40eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch SATURATING_BRIGHTNESS, // Not used in CSS/SVG. 410529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch ALPHA_THRESHOLD, // Not used in CSS/SVG. 420529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch FILTER_TYPE_LAST = ALPHA_THRESHOLD 43eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch }; 44eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 4568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) FilterOperation(const FilterOperation& other); 4668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) 4768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) ~FilterOperation(); 4868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) 49eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch FilterType type() const { return type_; } 50eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 51eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch float amount() const { 52eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch DCHECK_NE(type_, COLOR_MATRIX); 5368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) DCHECK_NE(type_, REFERENCE); 54eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch return amount_; 55eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch } 56eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 570529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch float outer_threshold() const { 580529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch DCHECK_EQ(type_, ALPHA_THRESHOLD); 590529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch return outer_threshold_; 600529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch } 610529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch 62eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch gfx::Point drop_shadow_offset() const { 63eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch DCHECK_EQ(type_, DROP_SHADOW); 64eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch return drop_shadow_offset_; 65eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch } 66eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 67eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch SkColor drop_shadow_color() const { 68eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch DCHECK_EQ(type_, DROP_SHADOW); 69eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch return drop_shadow_color_; 70eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch } 71eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 7268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) skia::RefPtr<SkImageFilter> image_filter() const { 7368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) DCHECK_EQ(type_, REFERENCE); 7468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) return image_filter_; 7568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) } 7668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) 77eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch const SkScalar* matrix() const { 78eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch DCHECK_EQ(type_, COLOR_MATRIX); 79eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch return matrix_; 80eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch } 81eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 82eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch int zoom_inset() const { 83eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch DCHECK_EQ(type_, ZOOM); 84eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch return zoom_inset_; 85eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch } 86eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 870529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch const SkRegion& region() const { 880529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch DCHECK_EQ(type_, ALPHA_THRESHOLD); 890529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch return region_; 900529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch } 910529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch 92eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch static FilterOperation CreateGrayscaleFilter(float amount) { 93eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch return FilterOperation(GRAYSCALE, amount); 94eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch } 95eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 96eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch static FilterOperation CreateSepiaFilter(float amount) { 97eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch return FilterOperation(SEPIA, amount); 98eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch } 99eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 100eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch static FilterOperation CreateSaturateFilter(float amount) { 101eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch return FilterOperation(SATURATE, amount); 102eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch } 103eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 104eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch static FilterOperation CreateHueRotateFilter(float amount) { 105eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch return FilterOperation(HUE_ROTATE, amount); 106eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch } 107eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 108eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch static FilterOperation CreateInvertFilter(float amount) { 109eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch return FilterOperation(INVERT, amount); 110eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch } 111eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 112eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch static FilterOperation CreateBrightnessFilter(float amount) { 113eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch return FilterOperation(BRIGHTNESS, amount); 114eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch } 115eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 116eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch static FilterOperation CreateContrastFilter(float amount) { 117eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch return FilterOperation(CONTRAST, amount); 118eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch } 119eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 120eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch static FilterOperation CreateOpacityFilter(float amount) { 121eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch return FilterOperation(OPACITY, amount); 122eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch } 123eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 124eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch static FilterOperation CreateBlurFilter(float amount) { 125eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch return FilterOperation(BLUR, amount); 126eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch } 127eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 128a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) static FilterOperation CreateDropShadowFilter(const gfx::Point& offset, 129eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch float std_deviation, 130eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch SkColor color) { 131eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch return FilterOperation(DROP_SHADOW, offset, std_deviation, color); 132eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch } 133eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 134eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch static FilterOperation CreateColorMatrixFilter(SkScalar matrix[20]) { 135eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch return FilterOperation(COLOR_MATRIX, matrix); 136eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch } 137eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 138eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch static FilterOperation CreateZoomFilter(float amount, int inset) { 139eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch return FilterOperation(ZOOM, amount, inset); 140eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch } 141eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 14268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) static FilterOperation CreateReferenceFilter( 14368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) const skia::RefPtr<SkImageFilter>& image_filter) { 14468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) return FilterOperation(REFERENCE, image_filter); 14568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) } 14668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) 147eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch static FilterOperation CreateSaturatingBrightnessFilter(float amount) { 148eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch return FilterOperation(SATURATING_BRIGHTNESS, amount); 149eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch } 150eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 1510529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch static FilterOperation CreateAlphaThresholdFilter(const SkRegion& region, 1520529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch float inner_threshold, 1530529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch float outer_threshold) { 1540529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch return FilterOperation(ALPHA_THRESHOLD, region, 1550529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch inner_threshold, outer_threshold); 1560529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch } 1570529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch 158eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch bool operator==(const FilterOperation& other) const; 159eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 160eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch bool operator!=(const FilterOperation& other) const { 161eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch return !(*this == other); 162eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch } 163eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 164eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch // Methods for restoring a FilterOperation. 165eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch static FilterOperation CreateEmptyFilter() { 166eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch return FilterOperation(GRAYSCALE, 0.f); 167eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch } 168eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 169eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch void set_type(FilterType type) { type_ = type; } 170eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 171eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch void set_amount(float amount) { 172eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch DCHECK_NE(type_, COLOR_MATRIX); 17368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) DCHECK_NE(type_, REFERENCE); 174eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch amount_ = amount; 175eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch } 176eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 1770529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch void set_outer_threshold(float outer_threshold) { 1780529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch DCHECK_EQ(type_, ALPHA_THRESHOLD); 1790529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch outer_threshold_ = outer_threshold; 1800529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch } 1810529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch 182a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) void set_drop_shadow_offset(const gfx::Point& offset) { 183eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch DCHECK_EQ(type_, DROP_SHADOW); 184eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch drop_shadow_offset_ = offset; 185eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch } 186eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 187eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch void set_drop_shadow_color(SkColor color) { 188eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch DCHECK_EQ(type_, DROP_SHADOW); 189eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch drop_shadow_color_ = color; 190eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch } 191eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 19268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) void set_image_filter(const skia::RefPtr<SkImageFilter>& image_filter) { 19368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) DCHECK_EQ(type_, REFERENCE); 19468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) image_filter_ = image_filter; 19568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) } 19668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) 197eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch void set_matrix(const SkScalar matrix[20]) { 198eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch DCHECK_EQ(type_, COLOR_MATRIX); 199eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch for (unsigned i = 0; i < 20; ++i) 200eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch matrix_[i] = matrix[i]; 201eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch } 202eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 203eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch void set_zoom_inset(int inset) { 204eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch DCHECK_EQ(type_, ZOOM); 205eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch zoom_inset_ = inset; 206eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch } 207eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 2080529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch void set_region(const SkRegion& region) { 2090529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch DCHECK_EQ(type_, ALPHA_THRESHOLD); 2100529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch region_ = region; 2110529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch } 2120529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch 2137dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch // Given two filters of the same type, returns a filter operation created by 2147dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch // linearly interpolating a |progress| fraction from |from| to |to|. If either 2157dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch // |from| or |to| (but not both) is null, it is treated as a no-op filter of 2167dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch // the same type as the other given filter. If both |from| and |to| are null, 2177dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch // or if |from| and |to| are non-null but of different types, returns a 2187dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch // no-op filter. 2197dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch static FilterOperation Blend(const FilterOperation* from, 2207dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch const FilterOperation* to, 2217dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch double progress); 2227dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 223ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch scoped_ptr<base::Value> AsValue() const; 224ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 225eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch private: 226eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch FilterOperation(FilterType type, float amount); 227eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 228eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch FilterOperation(FilterType type, 229a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) const gfx::Point& offset, 230eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch float stdDeviation, 231eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch SkColor color); 232eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 233eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch FilterOperation(FilterType, SkScalar matrix[20]); 234eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 235eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch FilterOperation(FilterType type, float amount, int inset); 236eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 23768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) FilterOperation(FilterType type, 23868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) const skia::RefPtr<SkImageFilter>& image_filter); 23968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) 2400529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch FilterOperation(FilterType type, 2410529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch const SkRegion& region, 2420529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch float inner_threshold, 2430529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch float outer_threshold); 2440529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch 245eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch FilterType type_; 246eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch float amount_; 2470529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch float outer_threshold_; 248eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch gfx::Point drop_shadow_offset_; 249eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch SkColor drop_shadow_color_; 25068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) skia::RefPtr<SkImageFilter> image_filter_; 251eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch SkScalar matrix_[20]; 252eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch int zoom_inset_; 2530529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch SkRegion region_; 254eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch}; 255eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 256eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch} // namespace cc 257eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 258eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#endif // CC_OUTPUT_FILTER_OPERATION_H_ 259