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 "core/html/canvas/HitRegionOptions.h"
11 #include "platform/graphics/Path.h"
12 #include "platform/heap/Handle.h"
13 #include "wtf/Noncopyable.h"
14 #include "wtf/OwnPtr.h"
15 #include "wtf/PassOwnPtr.h"
16 #include "wtf/PassRefPtr.h"
17 #include "wtf/RefPtr.h"
21 class HitRegion final : public RefCountedWillBeGarbageCollectedFinalized<HitRegion> {
23 static PassRefPtrWillBeRawPtr<HitRegion> create(const Path& path, const HitRegionOptions& options)
25 return adoptRefWillBeNoop(new HitRegion(path, options));
28 virtual ~HitRegion() { }
30 void removePixels(const Path&);
31 void updateAccessibility(Element* canvas);
33 bool contains(const LayoutPoint&) const;
35 const String& id() const { return m_id; }
36 const Path& path() const { return m_path; }
37 Element* control() const { return m_control.get(); }
38 WindRule fillRule() const { return m_fillRule; }
43 HitRegion(const Path&, const HitRegionOptions&);
46 RefPtrWillBeMember<Element> m_control;
51 class HitRegionManager final : public NoBaseWillBeGarbageCollected<HitRegionManager> {
52 WTF_MAKE_NONCOPYABLE(HitRegionManager);
53 DECLARE_EMPTY_DESTRUCTOR_WILL_BE_REMOVED(HitRegionManager)
55 static PassOwnPtrWillBeRawPtr<HitRegionManager> create() { return adoptPtrWillBeNoop(new HitRegionManager()); }
57 void addHitRegion(PassRefPtrWillBeRawPtr<HitRegion>);
59 void removeHitRegion(HitRegion*);
60 void removeHitRegionById(const String& id);
61 void removeHitRegionByControl(Element*);
62 void removeHitRegionsInRect(const FloatRect&, const AffineTransform&);
63 void removeAllHitRegions();
65 HitRegion* getHitRegionById(const String& id) const;
66 HitRegion* getHitRegionByControl(Element*) const;
67 HitRegion* getHitRegionAtPoint(const LayoutPoint&) const;
69 unsigned getHitRegionsCount() const;
74 HitRegionManager() { }
76 typedef WillBeHeapListHashSet<RefPtrWillBeMember<HitRegion>> HitRegionList;
77 typedef HitRegionList::const_reverse_iterator HitRegionIterator;
78 typedef WillBeHeapHashMap<String, RefPtrWillBeMember<HitRegion>> HitRegionIdMap;
79 typedef WillBeHeapHashMap<RefPtrWillBeMember<Element>, RefPtrWillBeMember<HitRegion>> HitRegionControlMap;
81 HitRegionList m_hitRegionList;
82 HitRegionIdMap m_hitRegionIdMap;
83 HitRegionControlMap m_hitRegionControlMap;