[iOS] Disable ENABLE_IOS_{GESTURE, TOUCH}_EVENTS, and temporarily disable ENABLE_TOUC...
[WebKit-https.git] / Source / WebCore / html / shadow / SliderThumbElement.h
index 8f94a56..01450da 100644 (file)
 #ifndef SliderThumbElement_h
 #define SliderThumbElement_h
 
-#include "FloatPoint.h"
 #include "HTMLDivElement.h"
 #include "HTMLNames.h"
-#include "RenderBlock.h"
-#include "RenderStyleConstants.h"
+#include "RenderBlockFlow.h"
 #include <wtf/Forward.h>
 
 namespace WebCore {
 
-class HTMLElement;
 class HTMLInputElement;
-class Event;
 class FloatPoint;
+class TouchEvent;
 
-class SliderThumbElement FINAL : public HTMLDivElement {
+class SliderThumbElement final : public HTMLDivElement {
 public:
-    static PassRefPtr<SliderThumbElement> create(Document*);
+    static PassRefPtr<SliderThumbElement> create(Document&);
 
     void setPositionFromValue();
-
     void dragFrom(const LayoutPoint&);
-    virtual void defaultEventHandler(Event*);
-    virtual bool willRespondToMouseMoveEvents() OVERRIDE;
-    virtual bool willRespondToMouseClickEvents() OVERRIDE;
-    virtual void detach();
-    virtual const AtomicString& shadowPseudoId() const;
     HTMLInputElement* hostInput() const;
     void setPositionFromPoint(const LayoutPoint&);
 
+#if ENABLE(IOS_TOUCH_EVENTS)
+    void handleTouchEvent(TouchEvent*);
+
+    void disabledAttributeChanged();
+#endif
+
 private:
-    SliderThumbElement(Document*);
-    virtual RenderObject* createRenderer(RenderArena*, RenderStyle*);
-    virtual PassRefPtr<Element> cloneElementWithoutAttributesAndChildren();
-    virtual bool isDisabledFormControl() const OVERRIDE;
-    virtual bool matchesReadOnlyPseudoClass() const OVERRIDE;
-    virtual bool matchesReadWritePseudoClass() const OVERRIDE;
-    virtual Node* focusDelegate();
+    SliderThumbElement(Document&);
+
+    virtual RenderPtr<RenderElement> createElementRenderer(PassRef<RenderStyle>) override;
+    virtual PassRefPtr<Element> cloneElementWithoutAttributesAndChildren() override;
+    virtual bool isDisabledFormControl() const override;
+    virtual bool matchesReadOnlyPseudoClass() const override;
+    virtual bool matchesReadWritePseudoClass() const override;
+    virtual Element* focusDelegate() override;
+#if !PLATFORM(IOS)
+    virtual void defaultEventHandler(Event*) override;
+    virtual bool willRespondToMouseMoveEvents() override;
+    virtual bool willRespondToMouseClickEvents() override;
+#endif
+
+#if ENABLE(IOS_TOUCH_EVENTS)
+    virtual void didAttachRenderers() override;
+#endif
+    virtual void willDetachRenderers() override;
+
+    virtual const AtomicString& shadowPseudoId() const override;
+
     void startDragging();
     void stopDragging();
 
-    bool m_inDragMode;
-};
+#if ENABLE(IOS_TOUCH_EVENTS)
+    unsigned exclusiveTouchIdentifier() const;
+    void setExclusiveTouchIdentifier(unsigned);
+    void clearExclusiveTouchIdentifier();
 
-inline SliderThumbElement::SliderThumbElement(Document* document)
-    : HTMLDivElement(HTMLNames::divTag, document)
-    , m_inDragMode(false)
-{
-}
+    void handleTouchStart(TouchEvent*);
+    void handleTouchMove(TouchEvent*);
+    void handleTouchEndAndCancel(TouchEvent*);
 
-inline PassRefPtr<SliderThumbElement> SliderThumbElement::create(Document* document)
-{
-    return adoptRef(new SliderThumbElement(document));
-}
+    bool shouldAcceptTouchEvents();
+    void registerForTouchEvents();
+    void unregisterForTouchEvents();
+#endif
 
-inline PassRefPtr<Element> SliderThumbElement::cloneElementWithoutAttributesAndChildren()
-{
-    return create(document());
-}
+    bool m_inDragMode;
+
+#if ENABLE(IOS_TOUCH_EVENTS)
+    // FIXME: Currently it is safe to use 0, but this may need to change
+    // if touch identifers change in the future and can be 0.
+    static const unsigned NoIdentifier = 0;
+    unsigned m_exclusiveTouchIdentifier;
+    bool m_isRegisteredAsTouchEventListener;
+#endif
+};
 
-inline SliderThumbElement* toSliderThumbElement(Node* node)
+inline PassRefPtr<SliderThumbElement> SliderThumbElement::create(Document& document)
 {
-    ASSERT_WITH_SECURITY_IMPLICATION(!node || node->isHTMLElement());
-    return static_cast<SliderThumbElement*>(node);
+    return adoptRef(new SliderThumbElement(document));
 }
 
-// This always return a valid pointer.
-// An assertion fails if the specified node is not a range input.
-SliderThumbElement* sliderThumbElementOf(Node*);
-HTMLElement* sliderTrackElementOf(Node*);
-
 // --------------------------------
 
-class RenderSliderThumb FINAL : public RenderBlock {
+class RenderSliderThumb final : public RenderBlockFlow {
 public:
-    RenderSliderThumb(SliderThumbElement*);
+    RenderSliderThumb(SliderThumbElement&, PassRef<RenderStyle>);
     void updateAppearance(RenderStyle* parentStyle);
 
 private:
-    virtual bool isSliderThumb() const;
+    virtual bool isSliderThumb() const override;
 };
 
 // --------------------------------
 
-class SliderContainerElement FINAL : public HTMLDivElement {
+class SliderContainerElement final : public HTMLDivElement {
 public:
-    static PassRefPtr<SliderContainerElement> create(Document*);
+    static PassRefPtr<SliderContainerElement> create(Document&);
 
 private:
-    SliderContainerElement(Document*);
-    virtual RenderObject* createRenderer(RenderArena*, RenderStyle*);
-    virtual const AtomicString& shadowPseudoId() const;
+    SliderContainerElement(Document&);
+    virtual RenderPtr<RenderElement> createElementRenderer(PassRef<RenderStyle>) override;
+    virtual const AtomicString& shadowPseudoId() const override;
 };
 
 }