[iOS] Disable ENABLE_IOS_{GESTURE, TOUCH}_EVENTS, and temporarily disable ENABLE_TOUC...
[WebKit-https.git] / Source / WebCore / html / shadow / SliderThumbElement.h
index 2fa60cb..01450da 100644 (file)
 #ifndef SliderThumbElement_h
 #define SliderThumbElement_h
 
-#include "FloatPoint.h"
 #include "HTMLDivElement.h"
 #include "HTMLNames.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 : public HTMLDivElement {
+class SliderThumbElement final : public HTMLDivElement {
 public:
-    static PassRefPtr<SliderThumbElement> create(Document*);
+    static PassRefPtr<SliderThumbElement> create(Document&);
 
-    bool inDragMode() const { return m_inDragMode; }
     void setPositionFromValue();
+    void dragFrom(const LayoutPoint&);
+    HTMLInputElement* hostInput() const;
+    void setPositionFromPoint(const LayoutPoint&);
 
-    void dragFrom(const IntPoint&);
-    virtual void defaultEventHandler(Event*);
-    virtual void detach();
-    virtual const AtomicString& shadowPseudoId() const;
+#if ENABLE(IOS_TOUCH_EVENTS)
+    void handleTouchEvent(TouchEvent*);
+
+    void disabledAttributeChanged();
+#endif
 
 private:
-    SliderThumbElement(Document*);
-    virtual RenderObject* createRenderer(RenderArena*, RenderStyle*);
+    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();
-    void setPositionFromPoint(const IntPoint&);
-    HTMLInputElement* hostInput();
 
-    FloatPoint m_offsetToThumb;
+#if ENABLE(IOS_TOUCH_EVENTS)
+    unsigned exclusiveTouchIdentifier() const;
+    void setExclusiveTouchIdentifier(unsigned);
+    void clearExclusiveTouchIdentifier();
+
+    void handleTouchStart(TouchEvent*);
+    void handleTouchMove(TouchEvent*);
+    void handleTouchEndAndCancel(TouchEvent*);
+
+    bool shouldAcceptTouchEvents();
+    void registerForTouchEvents();
+    void unregisterForTouchEvents();
+#endif
+
     bool m_inDragMode;
-};
 
-inline SliderThumbElement::SliderThumbElement(Document* document)
-    : HTMLDivElement(HTMLNames::divTag, document)
-    , m_inDragMode(false)
-{
-}
+#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 PassRefPtr<SliderThumbElement> SliderThumbElement::create(Document* document)
+inline PassRefPtr<SliderThumbElement> SliderThumbElement::create(Document& document)
 {
     return adoptRef(new SliderThumbElement(document));
 }
 
-inline SliderThumbElement* toSliderThumbElement(Node* node)
-{
-    ASSERT(!node || node->isHTMLElement());
-    return static_cast<SliderThumbElement*>(node);
-}
+// --------------------------------
+
+class RenderSliderThumb final : public RenderBlockFlow {
+public:
+    RenderSliderThumb(SliderThumbElement&, PassRef<RenderStyle>);
+    void updateAppearance(RenderStyle* parentStyle);
+
+private:
+    virtual bool isSliderThumb() const override;
+};
+
+// --------------------------------
+
+class SliderContainerElement final : public HTMLDivElement {
+public:
+    static PassRefPtr<SliderContainerElement> create(Document&);
+
+private:
+    SliderContainerElement(Document&);
+    virtual RenderPtr<RenderElement> createElementRenderer(PassRef<RenderStyle>) override;
+    virtual const AtomicString& shadowPseudoId() const override;
+};
 
 }