[iOS] Disable ENABLE_IOS_{GESTURE, TOUCH}_EVENTS, and temporarily disable ENABLE_TOUC...
[WebKit-https.git] / Source / WebCore / html / shadow / SliderThumbElement.h
index 5220f2b..01450da 100644 (file)
 #ifndef SliderThumbElement_h
 #define SliderThumbElement_h
 
-#include "FloatPoint.h"
-#include "RenderStyleConstants.h"
-#include "ShadowElement.h"
+#include "HTMLDivElement.h"
+#include "HTMLNames.h"
+#include "RenderBlockFlow.h"
 #include <wtf/Forward.h>
 
 namespace WebCore {
 
-class HTMLElement;
-class Event;
+class HTMLInputElement;
 class FloatPoint;
+class TouchEvent;
 
-class SliderThumbElement : public ShadowBlockElement {
+class SliderThumbElement final : public HTMLDivElement {
 public:
-    static PassRefPtr<SliderThumbElement> create(HTMLElement* shadowParent);
+    static PassRefPtr<SliderThumbElement> create(Document&);
 
-    bool inDragMode() const { return m_inDragMode; }
+    void setPositionFromValue();
+    void dragFrom(const LayoutPoint&);
+    HTMLInputElement* hostInput() const;
+    void setPositionFromPoint(const LayoutPoint&);
 
-    virtual void defaultEventHandler(Event*);
-    virtual void detach();
-    virtual AtomicString shadowPseudoId() const;
+#if ENABLE(IOS_TOUCH_EVENTS)
+    void handleTouchEvent(TouchEvent*);
 
-private:        
-    SliderThumbElement(HTMLElement* shadowParent);
+    void disabledAttributeChanged();
+#endif
+
+private:
+    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();
+
+#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
 
-    FloatPoint m_offsetToThumb;
     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::SliderThumbElement(HTMLElement* shadowParent)
-    : ShadowBlockElement(shadowParent)
-    , m_inDragMode(false)
+inline PassRefPtr<SliderThumbElement> SliderThumbElement::create(Document& document)
 {
+    return adoptRef(new SliderThumbElement(document));
 }
 
-inline PassRefPtr<SliderThumbElement> SliderThumbElement::create(HTMLElement* shadowParent)
-{
-    return adoptRef(new SliderThumbElement(shadowParent));
-}
+// --------------------------------
 
-inline AtomicString SliderThumbElement::shadowPseudoId() const
-{
-    DEFINE_STATIC_LOCAL(AtomicString, sliderThumb, ("-webkit-slider-thumb"));
-    return sliderThumb;
-}
+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;
+};
+
+}
 
 #endif