Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(80)

Side by Side Diff: third_party/WebKit/Source/platform/graphics/BoxReflection.h

Issue 2894843002: Revert of Remove cullRect() from PaintOpBuffer. (Closed)
Patch Set: rebase TestExpectations Created 3 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright 2016 The Chromium Authors. All rights reserved. 1 // Copyright 2016 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #ifndef BoxReflection_h 5 #ifndef BoxReflection_h
6 #define BoxReflection_h 6 #define BoxReflection_h
7 7
8 #include "platform/PlatformExport.h" 8 #include "platform/PlatformExport.h"
9 #include "platform/geometry/FloatRect.h"
10 #include "platform/graphics/paint/PaintRecord.h" 9 #include "platform/graphics/paint/PaintRecord.h"
11 #include "third_party/skia/include/core/SkRefCnt.h" 10 #include "third_party/skia/include/core/SkRefCnt.h"
12 11
13 class SkMatrix; 12 class SkMatrix;
14 13
15 namespace blink { 14 namespace blink {
16 15
16 class FloatRect;
17
17 // A reflection, as created by -webkit-box-reflect. Consists of: 18 // A reflection, as created by -webkit-box-reflect. Consists of:
18 // * a direction (either vertical or horizontal) 19 // * a direction (either vertical or horizontal)
19 // * an offset to be applied to the reflection after flipping about the 20 // * an offset to be applied to the reflection after flipping about the
20 // x- or y-axis, according to the direction 21 // x- or y-axis, according to the direction
21 // * a mask image, which will be applied to the reflection before the 22 // * a mask image, which will be applied to the reflection before the
22 // reflection matrix is applied 23 // reflection matrix is applied
23 class PLATFORM_EXPORT BoxReflection { 24 class PLATFORM_EXPORT BoxReflection {
24 public: 25 public:
25 enum ReflectionDirection { 26 enum ReflectionDirection {
26 // Vertically flipped (to appear above or below). 27 // Vertically flipped (to appear above or below).
27 kVerticalReflection, 28 kVerticalReflection,
28 // Horizontally flipped (to appear to the left or right). 29 // Horizontally flipped (to appear to the left or right).
29 kHorizontalReflection, 30 kHorizontalReflection,
30 }; 31 };
31 32
32 BoxReflection(ReflectionDirection direction, float offset)
33 : BoxReflection(direction, offset, nullptr, FloatRect()) {}
34
35 BoxReflection(ReflectionDirection direction, 33 BoxReflection(ReflectionDirection direction,
36 float offset, 34 float offset,
37 sk_sp<PaintRecord> mask, 35 sk_sp<PaintRecord> mask = nullptr)
38 const FloatRect& mask_bounds) 36 : direction_(direction), offset_(offset), mask_(std::move(mask)) {}
39 : direction_(direction),
40 offset_(offset),
41 mask_(std::move(mask)),
42 mask_bounds_(mask_bounds) {}
43 37
44 ReflectionDirection Direction() const { return direction_; } 38 ReflectionDirection Direction() const { return direction_; }
45 float Offset() const { return offset_; } 39 float Offset() const { return offset_; }
46 const sk_sp<PaintRecord>& Mask() const { return mask_; } 40 const sk_sp<PaintRecord>& Mask() const { return mask_; }
47 const FloatRect& MaskBounds() const { return mask_bounds_; }
48 41
49 // Returns a matrix which maps points between the original content and its 42 // Returns a matrix which maps points between the original content and its
50 // reflection. Reflections are self-inverse, so this matrix can be used to 43 // reflection. Reflections are self-inverse, so this matrix can be used to
51 // map in either direction. 44 // map in either direction.
52 SkMatrix ReflectionMatrix() const; 45 SkMatrix ReflectionMatrix() const;
53 46
54 // Maps a source rectangle to the destination rectangle it can affect, 47 // Maps a source rectangle to the destination rectangle it can affect,
55 // including this reflection. Due to the symmetry of reflections, this can 48 // including this reflection. Due to the symmetry of reflections, this can
56 // also be used to map from a destination rectangle to the source rectangle 49 // also be used to map from a destination rectangle to the source rectangle
57 // which contributes to it. 50 // which contributes to it.
58 FloatRect MapRect(const FloatRect&) const; 51 FloatRect MapRect(const FloatRect&) const;
59 52
60 private: 53 private:
61 ReflectionDirection direction_; 54 ReflectionDirection direction_;
62 float offset_; 55 float offset_;
63 sk_sp<PaintRecord> mask_; 56 sk_sp<PaintRecord> mask_;
64 FloatRect mask_bounds_;
65 }; 57 };
66 58
67 inline bool operator==(const BoxReflection& a, const BoxReflection& b) { 59 inline bool operator==(const BoxReflection& a, const BoxReflection& b) {
68 return a.Direction() == b.Direction() && a.Offset() == b.Offset() && 60 return a.Direction() == b.Direction() && a.Offset() == b.Offset() &&
69 a.Mask() == b.Mask() && a.MaskBounds() == b.MaskBounds(); 61 a.Mask() == b.Mask();
70 } 62 }
71 63
72 inline bool operator!=(const BoxReflection& a, const BoxReflection& b) { 64 inline bool operator!=(const BoxReflection& a, const BoxReflection& b) {
73 return !(a == b); 65 return !(a == b);
74 } 66 }
75 67
76 } // namespace blink 68 } // namespace blink
77 69
78 #endif // BoxReflection_h 70 #endif // BoxReflection_h
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698