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

Side by Side Diff: third_party/WebKit/Source/core/dom/IntersectionObservation.h

Issue 1449623002: IntersectionObserver: second cut. (Closed) Base URL: https://chromium.googlesource.com/chromium/src@master
Patch Set: Implemented root margin Created 5 years 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
(Empty)
1 // Copyright 2015 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include "platform/geometry/LayoutRect.h"
6 #include "platform/heap/Handle.h"
7 #include "wtf/HashSet.h"
8 #include "wtf/RefPtr.h"
9 #include "wtf/WeakPtr.h"
10
11 #ifndef IntersectionObservation_h
12 #define IntersectionObservation_h
13
14 namespace blink {
15
16 class Element;
17 class IntersectionObserver;
18
19 class IntersectionObservation : public GarbageCollectedFinalized<IntersectionObs ervation> {
20 public:
21 typedef std::pair<IntersectionObserver*, Element*> HashKey;
22 typedef Member<IntersectionObservation> ValueType;
23 typedef WeakMember<IntersectionObservation> WeakValueType;
24 typedef typename WTF::HashTraits<ValueType>::PeekInType PeekInType;
25 struct ValueTypeHash {
esprehn 2015/12/12 00:14:14 hmm, we've never had to do this before for a norma
szager1 2015/12/16 19:15:35 Removed the custom hash_traits.
26 static unsigned hash()
27 {
28 return DefaultHash<HashKey>::Hash::hash(HashKey(nullptr, nullptr));
29 }
30 static unsigned hash(PeekInType keyRef)
31 {
32 IntersectionObservation* key = keyRef;
33 if (!key)
34 return hash();
35 return DefaultHash<HashKey>::Hash::hash(HashKey(key->observer(), key ->target()));
36 }
37 static bool equal(const PeekInType& aRef, const PeekInType& bRef)
38 {
39 IntersectionObservation* a = aRef;
40 IntersectionObservation* b = bRef;
41 if (!a)
42 return b;
43 if (!b)
44 return true;
45 return a->observer() == b->observer() && a->target() == b->target();
46 }
47 static const bool safeToCompareToEmptyOrDeleted = true;
48 };
49 struct HashKeyTranslator {
50 static unsigned hash(const HashKey& key) { return DefaultHash<HashKey>:: Hash::hash(key); }
51 static bool equal(const ValueType& a, const HashKey& b)
52 {
esprehn 2015/12/12 00:14:14 yeah I'd really rather we didn't do this
szager1 2015/12/16 19:15:35 Done.
53 return a && a->observer() == b.first && a->target() == b.second;
54 }
55 static bool equal(const WeakValueType& a, const HashKey& b)
56 {
57 return a && a->observer() == b.first && a->target() == b.second;
58 }
59 };
60 typedef HeapHashSet<ValueType, ValueTypeHash> HashSet;
61 typedef HeapHashSet<WeakValueType, ValueTypeHash> WeakHashSet;
62
63 template<typename HashSetType>
64 static typename HashSetType::iterator find(HashSetType& hashSet, Intersectio nObserver* observer, Element* target)
esprehn 2015/12/12 00:14:14 remove this, no templates or statics like this, ad
szager1 2015/12/16 19:15:35 Done.
65 {
66 return hashSet.template find<HashKeyTranslator, HashKey>(HashKey(observe r, target));
67 }
68
69 template<typename HashSetType>
70 static bool contains(HashSetType& hashSet, IntersectionObserver* observer, E lement* target)
71 {
72 return hashSet.template contains<HashKeyTranslator, HashKey>(HashKey(obs erver, target));
73 }
74
75 template<typename HashSetType>
76 static void remove(HashSetType& hashSet, IntersectionObserver* observer, Ele ment* target)
esprehn 2015/12/12 00:14:14 ditto for all of these
szager1 2015/12/16 19:15:35 Done.
77 {
78 hashSet.remove(hashSet.template find<HashKeyTranslator, HashKey>(HashKey (observer, target)));
79 }
80
81 IntersectionObservation(IntersectionObserver&, Element*, bool);
esprehn 2015/12/12 00:14:14 bool needs an argument name, why not an enum? We d
szager1 2015/12/16 19:15:35 The bool is canReportRootBounds, is there some oth
82
83 const IntersectionObserver* observer() const { return m_observer; }
84 IntersectionObserver* observer() { return m_observer; }
85 const Element* target() const { return m_target.get(); }
86 Element* target() { return m_target.get(); }
87 bool isActive() const { return m_active; }
88 void setActive(bool active) { m_active = active; }
89 float lastVisibleRatio() const { return m_lastVisibleRatio; }
90 void setLastVisibleRatio(float ratio) { m_lastVisibleRatio = ratio; }
91 bool canReportRootBounds() const { return m_canReportRootBounds; }
92
93 void computeIntersectionObservations(int);
esprehn 2015/12/12 00:14:14 int needs an argument name, primitive arguments al
szager1 2015/12/16 19:15:35 Done.
94 void disconnect();
95
96 DECLARE_TRACE();
97
98 private:
99 bool computeGeometry(LayoutRect& targetRect, LayoutRect& rootRect, LayoutRec t& intersectionRect);
100
101 Member<IntersectionObserver> m_observer;
102 WeakPtrWillBeWeakMember<Element> m_target;
103 bool m_active;
104 bool m_canReportRootBounds;
esprehn 2015/12/12 00:14:14 I'd swap these with the float, and make them both
ojan 2015/12/12 01:06:28 Bikeshed nit: We typically call this m_shouldRepor
szager1 2015/12/16 19:15:35 Done.
szager1 2015/12/16 19:15:35 Done.
105 float m_lastVisibleRatio;
106 };
107
108 } // namespace blink {
109
110 #endif // IntersectionObservation_h
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698