chromium/cc/paint/paint_filter.h

// Copyright 2017 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#ifndef CC_PAINT_PAINT_FILTER_H_
#define CC_PAINT_PAINT_FILTER_H_

#include <optional>
#include <string>
#include <vector>

#include "base/check_op.h"
#include "base/containers/span.h"
#include "cc/paint/color_filter.h"
#include "cc/paint/paint_export.h"
#include "cc/paint/paint_image.h"
#include "cc/paint/paint_shader.h"
#include "third_party/abseil-cpp/absl/container/inlined_vector.h"
#include "third_party/skia/include/core/SkBlendMode.h"
#include "third_party/skia/include/core/SkColor.h"
#include "third_party/skia/include/core/SkImageFilter.h"
#include "third_party/skia/include/core/SkPoint3.h"
#include "third_party/skia/include/core/SkRefCnt.h"
#include "third_party/skia/include/core/SkRegion.h"
#include "third_party/skia/include/effects/SkImageFilters.h"
#include "ui/gfx/display_color_spaces.h"

namespace viz {
class SkiaRenderer;
class SoftwareRenderer;
}  // namespace viz

namespace cc {
class ImageProvider;

class CC_PAINT_EXPORT PaintFilter : public SkRefCnt {};

// Base class of paint filter classes with one input filter.
class CC_PAINT_EXPORT OneInputPaintFilter : public PaintFilter {};

// Base class of paint filter classes with two input filters.
class CC_PAINT_EXPORT TwoInputPaintFilter : public PaintFilter {};

class CC_PAINT_EXPORT ColorFilterPaintFilter final
    : public OneInputPaintFilter {};

class CC_PAINT_EXPORT BlurPaintFilter final : public OneInputPaintFilter {};

class CC_PAINT_EXPORT DropShadowPaintFilter final : public OneInputPaintFilter {};

class CC_PAINT_EXPORT MagnifierPaintFilter final : public OneInputPaintFilter {};

class CC_PAINT_EXPORT ComposePaintFilter final : public TwoInputPaintFilter {};

class CC_PAINT_EXPORT AlphaThresholdPaintFilter final
    : public OneInputPaintFilter {};

class CC_PAINT_EXPORT XfermodePaintFilter final : public TwoInputPaintFilter {};

class CC_PAINT_EXPORT ArithmeticPaintFilter final : public TwoInputPaintFilter {};

class CC_PAINT_EXPORT MatrixConvolutionPaintFilter final
    : public OneInputPaintFilter {};

class CC_PAINT_EXPORT DisplacementMapEffectPaintFilter final
    : public TwoInputPaintFilter {};

class CC_PAINT_EXPORT ImagePaintFilter final : public PaintFilter {};

class CC_PAINT_EXPORT RecordPaintFilter final : public PaintFilter {};

class CC_PAINT_EXPORT MergePaintFilter final : public PaintFilter {};

class CC_PAINT_EXPORT MorphologyPaintFilter final : public OneInputPaintFilter {};

class CC_PAINT_EXPORT OffsetPaintFilter final : public OneInputPaintFilter {};

class CC_PAINT_EXPORT TilePaintFilter final : public OneInputPaintFilter {};

class CC_PAINT_EXPORT TurbulencePaintFilter final : public PaintFilter {};

class CC_PAINT_EXPORT ShaderPaintFilter final : public PaintFilter {};

class CC_PAINT_EXPORT MatrixPaintFilter final : public OneInputPaintFilter {};

class CC_PAINT_EXPORT LightingDistantPaintFilter final
    : public OneInputPaintFilter {};

class CC_PAINT_EXPORT LightingPointPaintFilter final
    : public OneInputPaintFilter {};

class CC_PAINT_EXPORT LightingSpotPaintFilter final
    : public OneInputPaintFilter {};

}  // namespace cc

#endif  // CC_PAINT_PAINT_FILTER_H_