Update To 11.40.268.0
[platform/framework/web/crosswalk.git] / src / third_party / WebKit / Source / core / html / canvas / HitRegion.h
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.
4
5 #ifndef HitRegion_h
6 #define HitRegion_h
7
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"
18
19 namespace blink {
20
21 class HitRegion final : public RefCountedWillBeGarbageCollectedFinalized<HitRegion> {
22 public:
23     static PassRefPtrWillBeRawPtr<HitRegion> create(const Path& path, const HitRegionOptions& options)
24     {
25         return adoptRefWillBeNoop(new HitRegion(path, options));
26     }
27
28     virtual ~HitRegion() { }
29
30     void removePixels(const Path&);
31     void updateAccessibility(Element* canvas);
32
33     bool contains(const LayoutPoint&) const;
34
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; }
39
40     void trace(Visitor*);
41
42 private:
43     HitRegion(const Path&, const HitRegionOptions&);
44
45     String m_id;
46     RefPtrWillBeMember<Element> m_control;
47     Path m_path;
48     WindRule m_fillRule;
49 };
50
51 class HitRegionManager final : public NoBaseWillBeGarbageCollected<HitRegionManager> {
52     WTF_MAKE_NONCOPYABLE(HitRegionManager);
53     DECLARE_EMPTY_DESTRUCTOR_WILL_BE_REMOVED(HitRegionManager)
54 public:
55     static PassOwnPtrWillBeRawPtr<HitRegionManager> create() { return adoptPtrWillBeNoop(new HitRegionManager()); }
56
57     void addHitRegion(PassRefPtrWillBeRawPtr<HitRegion>);
58
59     void removeHitRegion(HitRegion*);
60     void removeHitRegionById(const String& id);
61     void removeHitRegionByControl(Element*);
62     void removeHitRegionsInRect(const FloatRect&, const AffineTransform&);
63     void removeAllHitRegions();
64
65     HitRegion* getHitRegionById(const String& id) const;
66     HitRegion* getHitRegionByControl(Element*) const;
67     HitRegion* getHitRegionAtPoint(const LayoutPoint&) const;
68
69     unsigned getHitRegionsCount() const;
70
71     void trace(Visitor*);
72
73 private:
74     HitRegionManager() { }
75
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;
80
81     HitRegionList m_hitRegionList;
82     HitRegionIdMap m_hitRegionIdMap;
83     HitRegionControlMap m_hitRegionControlMap;
84 };
85
86 } // namespace blink
87
88 #endif