blob: 978c07ecbee07cab2e7368170d2aebe92fd81db4 [file] [log] [blame]
senorblanco@chromium.org4a9a6122012-12-04 14:18:50 +00001/*
2 * Copyright 2012 The Android Open Source Project
3 *
4 * Use of this source code is governed by a BSD-style license that can be
5 * found in the LICENSE file.
6 */
7
8#ifndef SkMergeImageFilter_DEFINED
9#define SkMergeImageFilter_DEFINED
10
Cary Clark4dc5a452018-05-21 11:56:57 -040011#include "SkFlattenable.h"
senorblanco@chromium.org4a9a6122012-12-04 14:18:50 +000012#include "SkImageFilter.h"
13
senorblanco@chromium.org4a9a6122012-12-04 14:18:50 +000014class SK_API SkMergeImageFilter : public SkImageFilter {
15public:
Mike Reed0bdaf052017-06-18 23:35:57 -040016 static sk_sp<SkImageFilter> Make(sk_sp<SkImageFilter>* const filters, int count,
17 const CropRect* cropRect = nullptr);
senorblanco@chromium.org4a9a6122012-12-04 14:18:50 +000018
robertphillips2238c9d2016-03-30 13:34:16 -070019 static sk_sp<SkImageFilter> Make(sk_sp<SkImageFilter> first, sk_sp<SkImageFilter> second,
Mike Reed0bdaf052017-06-18 23:35:57 -040020 const CropRect* cropRect = nullptr) {
21 sk_sp<SkImageFilter> array[] = {
22 std::move(first),
23 std::move(second),
24 };
25 return Make(array, 2, cropRect);
26 }
27
Cary Clark4dc5a452018-05-21 11:56:57 -040028 Factory getFactory() const override { return CreateProc; }
senorblanco@chromium.org4a9a6122012-12-04 14:18:50 +000029
30protected:
mtklein36352bf2015-03-25 18:17:31 -070031 void flatten(SkWriteBuffer&) const override;
robertphillips2302de92016-03-24 07:26:32 -070032 sk_sp<SkSpecialImage> onFilterImage(SkSpecialImage* source, const Context&,
33 SkIPoint* offset) const override;
Matt Sarett6d72ed92017-04-10 16:35:33 -040034 sk_sp<SkImageFilter> onMakeColorSpace(SkColorSpaceXformer*) const override;
reed96a04f32016-04-25 09:25:15 -070035 bool onCanHandleComplexCTM() const override { return true; }
commit-bot@chromium.orgbd0be252014-05-15 15:40:41 +000036
senorblanco@chromium.org4a9a6122012-12-04 14:18:50 +000037private:
Mike Reed0bdaf052017-06-18 23:35:57 -040038 SkMergeImageFilter(sk_sp<SkImageFilter>* const filters, int count, const CropRect* cropRect);
Cary Clark4dc5a452018-05-21 11:56:57 -040039 static sk_sp<SkFlattenable> CreateProc(SkReadBuffer&);
40 friend class SkFlattenable::PrivateInitializer;
senorblanco@chromium.org4a9a6122012-12-04 14:18:50 +000041
42 typedef SkImageFilter INHERITED;
43};
44
45#endif