| Index: Source/core/html/canvas/CanvasHitRegion.h
|
| diff --git a/Source/core/html/canvas/CanvasHitRegion.h b/Source/core/html/canvas/CanvasHitRegion.h
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..1e3935224ca50a0aa28f581b83579501bce939c7
|
| --- /dev/null
|
| +++ b/Source/core/html/canvas/CanvasHitRegion.h
|
| @@ -0,0 +1,135 @@
|
| +// Copyright 2014 The Chromium Authors. All rights reserved.
|
| +// Use of this source code is governed by a BSD-style license that can be
|
| +// found in the LICENSE file.
|
| +
|
| +#ifndef CanvasHitRegion_h
|
| +#define CanvasHitRegion_h
|
| +
|
| +#include "platform/graphics/Path.h"
|
| +#include "platform/heap/Handle.h"
|
| +#include "platform/transforms/AffineTransform.h"
|
| +#include "wtf/HashMap.h"
|
| +#include "wtf/HashSet.h"
|
| +#include "wtf/Noncopyable.h"
|
| +#include "wtf/OwnPtr.h"
|
| +#include "wtf/PassOwnPtr.h"
|
| +#include "wtf/PassRefPtr.h"
|
| +#include "wtf/RefPtr.h"
|
| +#include "wtf/Vector.h"
|
| +#include "wtf/text/WTFString.h"
|
| +
|
| +namespace WebCore {
|
| +
|
| +class CanvasHitRegion;
|
| +class CanvasHitRegionManager;
|
| +class Dictionary;
|
| +class Element;
|
| +class ExceptionState;
|
| +
|
| +struct DecodedHitRegionOptions {
|
| + DecodedHitRegionOptions();
|
| + DecodedHitRegionOptions(const Dictionary& options);
|
| +
|
| + void resolvePath(const Path&, const AffineTransform&);
|
| + void resolveIds(const CanvasHitRegionManager*);
|
| +
|
| + bool validate(ExceptionState&) const;
|
| +
|
| + Path path;
|
| + bool hasPath;
|
| + WindRule fillRule;
|
| + String id;
|
| + String parentId;
|
| + String cursor;
|
| + RefPtrWillBeRawPtr<Element> control;
|
| + String label;
|
| + String role;
|
| + RefPtrWillBeRawPtr<CanvasHitRegion> previousHitRegion;
|
| + RefPtrWillBeRawPtr<CanvasHitRegion> parentHitRegion;
|
| +};
|
| +
|
| +class CanvasHitRegion : public RefCountedWillBeGarbageCollectedFinalized<CanvasHitRegion> {
|
| +public:
|
| + static PassRefPtrWillBeRawPtr<CanvasHitRegion> create(const DecodedHitRegionOptions& options)
|
| + {
|
| + return adoptRef(new CanvasHitRegion(options));
|
| + }
|
| +
|
| + virtual ~CanvasHitRegion();
|
| +
|
| + class GeometryInfo : public RefCounted<GeometryInfo> {
|
| + public:
|
| + static PassRefPtr<GeometryInfo> create(const Path& path, WindRule fillRule, CanvasHitRegion* hitRegion)
|
| + {
|
| + return adoptRef(new GeometryInfo(path, fillRule, hitRegion));
|
| + }
|
| +
|
| + bool contains(const LayoutPoint&) const;
|
| + bool isEnclosed(const FloatRect&, const AffineTransform&) const;
|
| +
|
| + CanvasHitRegion* hitRegion() const { return m_hitRegion; }
|
| + void detachHitRegion() { m_hitRegion = 0; }
|
| +
|
| + private:
|
| + GeometryInfo(const Path&, WindRule, CanvasHitRegion*);
|
| +
|
| + Path m_path;
|
| + WindRule m_fillRule;
|
| + CanvasHitRegion* m_hitRegion;
|
| + };
|
| +
|
| + bool isAncestorOf(const CanvasHitRegion*) const;
|
| +
|
| + GeometryInfo* geometryInfo() const { return m_geometryInfo.get(); }
|
| + const String& id() const { return m_id; }
|
| + const CanvasHitRegion* parent() const { return m_parent.get(); }
|
| + const Element* control() const { return m_control.get(); }
|
| +
|
| + virtual void trace(Visitor*) OVERRIDE;
|
| +
|
| +private:
|
| + CanvasHitRegion(const DecodedHitRegionOptions&);
|
| +
|
| + RefPtr<GeometryInfo> m_geometryInfo;
|
| + RefPtrWillBeMember<CanvasHitRegion> m_parent;
|
| + RefPtrWillBeMember<Element> m_control;
|
| + String m_id;
|
| + String m_cursor;
|
| + String m_label;
|
| + String m_ariaRole;
|
| +};
|
| +
|
| +class CanvasHitRegionManager : public NoBaseWillBeGarbageCollectedFinalized<CanvasHitRegionManager> {
|
| + WTF_MAKE_NONCOPYABLE(CanvasHitRegionManager);
|
| +public:
|
| + static PassOwnPtrWillBeRawPtr<CanvasHitRegionManager> create() { return adoptPtr(new CanvasHitRegionManager()); }
|
| +
|
| + virtual ~CanvasHitRegionManager() { }
|
| +
|
| + void add(PassRefPtrWillBeRawPtr<CanvasHitRegion>);
|
| + void remove(CanvasHitRegion*);
|
| +
|
| + void clear();
|
| +
|
| + void removeEnclosed(const FloatRect&, const AffineTransform&);
|
| +
|
| + CanvasHitRegion* getHitRegionById(const String& id) const;
|
| + CanvasHitRegion* getHitRegionAtPoint(const LayoutPoint&) const;
|
| +
|
| + virtual void trace(Visitor*) OVERRIDE;
|
| +
|
| +private:
|
| + CanvasHitRegionManager() { }
|
| +
|
| + typedef WillBeHeapHashSet<RefPtrWillBeMember<CanvasHitRegion> > HitRegionList;
|
| + typedef WillBeHeapHashMap<String, RefPtrWillBeMember<CanvasHitRegion> > HitRegionMap;
|
| + typedef Vector<RefPtr<CanvasHitRegion::GeometryInfo> > HitRegionGeometry;
|
| +
|
| + HitRegionList m_hitRegions; // Storage for hit regions.
|
| + HitRegionMap m_hitRegionIdMap; // Map for id-based lookups.
|
| + HitRegionGeometry m_hitRegionGeometry; // The intersection/hit test query list.
|
| +};
|
| +
|
| +} // namespace WebCore
|
| +
|
| +#endif
|
|
|