blob: 2310da3881e9f40b2285f0b05760e97a9bd2976c [file] [log] [blame]
commit-bot@chromium.org1a4fb702013-09-26 16:09:28 +00001/*
2 * Copyright 2013 Google Inc.
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 SkTileImageFilter_DEFINED
9#define SkTileImageFilter_DEFINED
10
Cary Clark4dc5a452018-05-21 11:56:57 -040011#include "SkFlattenable.h"
commit-bot@chromium.org1a4fb702013-09-26 16:09:28 +000012#include "SkImageFilter.h"
13
sugoi@google.com55f56822013-10-02 18:27:43 +000014class SK_API SkTileImageFilter : public SkImageFilter {
commit-bot@chromium.org1a4fb702013-09-26 16:09:28 +000015public:
commit-bot@chromium.orgcac5fd52014-03-10 10:51:58 +000016 /** Create a tile image filter
reed5ea95df2015-10-06 14:05:32 -070017 @param src Defines the pixels to tile
18 @param dst Defines the pixels where tiles are drawn
commit-bot@chromium.org1a4fb702013-09-26 16:09:28 +000019 @param input Input from which the subregion defined by srcRect will be tiled
20 */
robertphillips534c2702016-04-15 07:57:40 -070021 static sk_sp<SkImageFilter> Make(const SkRect& src,
22 const SkRect& dst,
23 sk_sp<SkImageFilter> input);
commit-bot@chromium.org1a4fb702013-09-26 16:09:28 +000024
Robert Phillips12078432018-05-17 11:17:39 -040025 SkIRect onFilterBounds(const SkIRect& src, const SkMatrix& ctm,
26 MapDirection, const SkIRect* inputRect) const override;
27 SkIRect onFilterNodeBounds(const SkIRect&, const SkMatrix& ctm,
28 MapDirection, const SkIRect* inputRect) const override;
senorblancoe5e79842016-03-21 14:51:59 -070029 SkRect computeFastBounds(const SkRect& src) const override;
commit-bot@chromium.org1a4fb702013-09-26 16:09:28 +000030
Cary Clark4dc5a452018-05-21 11:56:57 -040031 Factory getFactory() const override { return CreateProc; }
commit-bot@chromium.org1a4fb702013-09-26 16:09:28 +000032
33protected:
schenney95376a02015-10-06 12:59:55 -070034 void flatten(SkWriteBuffer& buffer) const override;
35
robertphillipsc14b9782016-04-11 13:26:14 -070036 sk_sp<SkSpecialImage> onFilterImage(SkSpecialImage* source, const Context&,
37 SkIPoint* offset) const override;
Matt Sarett6d72ed92017-04-10 16:35:33 -040038 sk_sp<SkImageFilter> onMakeColorSpace(SkColorSpaceXformer*) const override;
robertphillipsc14b9782016-04-11 13:26:14 -070039
schenney95376a02015-10-06 12:59:55 -070040private:
robertphillips534c2702016-04-15 07:57:40 -070041 SkTileImageFilter(const SkRect& srcRect, const SkRect& dstRect, sk_sp<SkImageFilter> input)
42 : INHERITED(&input, 1, nullptr), fSrcRect(srcRect), fDstRect(dstRect) {}
Cary Clark4dc5a452018-05-21 11:56:57 -040043 static sk_sp<SkFlattenable> CreateProc(SkReadBuffer&);
44 friend class SkFlattenable::PrivateInitializer;
reed5ea95df2015-10-06 14:05:32 -070045
commit-bot@chromium.org1a4fb702013-09-26 16:09:28 +000046 SkRect fSrcRect;
47 SkRect fDstRect;
robertphillipsc14b9782016-04-11 13:26:14 -070048
49 typedef SkImageFilter INHERITED;
commit-bot@chromium.org1a4fb702013-09-26 16:09:28 +000050};
51
52#endif