1 // Copyright 2014 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.
8 #include "bindings/core/v8/Dictionary.h"
9 #include "core/dom/Element.h"
10 #include "platform/graphics/Path.h"
11 #include "platform/heap/Handle.h"
12 #include "wtf/Noncopyable.h"
13 #include "wtf/OwnPtr.h"
14 #include "wtf/PassOwnPtr.h"
15 #include "wtf/PassRefPtr.h"
16 #include "wtf/RefPtr.h"
20 struct HitRegionOptions {
25 RefPtrWillBeMember<Element> control;
30 class HitRegion FINAL : public RefCountedWillBeGarbageCollectedFinalized<HitRegion> {
32 static PassRefPtrWillBeRawPtr<HitRegion> create(const HitRegionOptions& options)
34 return adoptRefWillBeNoop(new HitRegion(options));
37 virtual ~HitRegion() { }
39 void removePixels(const Path&);
40 void updateAccessibility(Element* canvas);
42 bool contains(const LayoutPoint&) const;
44 const String& id() const { return m_id; }
45 const Path& path() const { return m_path; }
46 Element* control() const { return m_control.get(); }
47 WindRule fillRule() const { return m_fillRule; }
52 explicit HitRegion(const HitRegionOptions&);
55 RefPtrWillBeMember<Element> m_control;
60 class HitRegionManager FINAL : public NoBaseWillBeGarbageCollected<HitRegionManager> {
61 WTF_MAKE_NONCOPYABLE(HitRegionManager);
62 DECLARE_EMPTY_DESTRUCTOR_WILL_BE_REMOVED(HitRegionManager)
64 static PassOwnPtrWillBeRawPtr<HitRegionManager> create() { return adoptPtrWillBeNoop(new HitRegionManager()); }
66 void addHitRegion(PassRefPtrWillBeRawPtr<HitRegion>);
68 void removeHitRegion(HitRegion*);
69 void removeHitRegionById(const String& id);
70 void removeHitRegionByControl(Element*);
71 void removeHitRegionsInRect(const FloatRect&, const AffineTransform&);
72 void removeAllHitRegions();
74 HitRegion* getHitRegionById(const String& id) const;
75 HitRegion* getHitRegionByControl(Element*) const;
76 HitRegion* getHitRegionAtPoint(const LayoutPoint&) const;
78 unsigned getHitRegionsCount() const;
83 HitRegionManager() { }
85 typedef WillBeHeapListHashSet<RefPtrWillBeMember<HitRegion> > HitRegionList;
86 typedef HitRegionList::const_reverse_iterator HitRegionIterator;
87 typedef WillBeHeapHashMap<String, RefPtrWillBeMember<HitRegion> > HitRegionIdMap;
88 typedef WillBeHeapHashMap<RefPtrWillBeMember<Element>, RefPtrWillBeMember<HitRegion> > HitRegionControlMap;
90 HitRegionList m_hitRegionList;
91 HitRegionIdMap m_hitRegionIdMap;
92 HitRegionControlMap m_hitRegionControlMap;