1 /* 2 * Copyright (C) 2006, 2007, 2008 Apple Computer, Inc. All rights reserved. 3 * Copyright (C) 2008 Eric Seidel <eric@webkit.org> 4 * Copyright (C) 2007-2008 Torch Mobile, Inc. 5 * Copyright (C) 2013 Google, Inc. All rights reserved. 6 * 7 * Redistribution and use in source and binary forms, with or without 8 * modification, are permitted provided that the following conditions 9 * are met: 10 * 1. Redistributions of source code must retain the above copyright 11 * notice, this list of conditions and the following disclaimer. 12 * 2. Redistributions in binary form must reproduce the above copyright 13 * notice, this list of conditions and the following disclaimer in the 14 * documentation and/or other materials provided with the distribution. 15 * 16 * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY 17 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 18 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 19 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR 20 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, 21 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 22 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR 23 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY 24 * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 25 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 26 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 27 */ 28 29 #ifndef THIRD_PARTY_BLINK_RENDERER_PLATFORM_GRAPHICS_PATTERN_H_ 30 #define THIRD_PARTY_BLINK_RENDERER_PLATFORM_GRAPHICS_PATTERN_H_ 31 32 #include "base/macros.h" 33 #include "base/memory/scoped_refptr.h" 34 #include "third_party/blink/renderer/platform/graphics/image.h" 35 #include "third_party/blink/renderer/platform/graphics/paint/paint_record.h" 36 #include "third_party/blink/renderer/platform/graphics/paint/paint_shader.h" 37 #include "third_party/blink/renderer/platform/platform_export.h" 38 #include "third_party/blink/renderer/platform/wtf/ref_counted.h" 39 #include "third_party/skia/include/core/SkRefCnt.h" 40 41 class SkMatrix; 42 43 namespace blink { 44 45 class PLATFORM_EXPORT Pattern : public RefCounted<Pattern> { 46 public: 47 enum RepeatMode { 48 kRepeatModeX = 1 << 0, 49 kRepeatModeY = 1 << 1, 50 51 kRepeatModeNone = 0, 52 kRepeatModeXY = kRepeatModeX | kRepeatModeY 53 }; 54 55 static scoped_refptr<Pattern> CreateImagePattern(scoped_refptr<Image>, 56 RepeatMode = kRepeatModeXY); 57 static scoped_refptr<Pattern> CreatePaintRecordPattern( 58 sk_sp<PaintRecord>, 59 const FloatRect& record_bounds, 60 RepeatMode = kRepeatModeXY); 61 virtual ~Pattern(); 62 63 void ApplyToFlags(cc::PaintFlags&, const SkMatrix&); 64 IsRepeatX()65 bool IsRepeatX() const { return repeat_mode_ & kRepeatModeX; } IsRepeatY()66 bool IsRepeatY() const { return repeat_mode_ & kRepeatModeY; } IsRepeatXY()67 bool IsRepeatXY() const { return repeat_mode_ == kRepeatModeXY; } 68 IsTextureBacked()69 virtual bool IsTextureBacked() const { return false; } 70 71 protected: 72 virtual sk_sp<PaintShader> CreateShader(const SkMatrix&) = 0; 73 74 RepeatMode repeat_mode_; 75 76 Pattern(RepeatMode); 77 mutable sk_sp<PaintShader> cached_shader_; 78 79 private: 80 DISALLOW_COPY_AND_ASSIGN(Pattern); 81 }; 82 83 } // namespace blink 84 85 #endif 86