diff options
Diffstat (limited to 'Source/WebCore/html/shadow')
| -rw-r--r-- | Source/WebCore/html/shadow/SliderThumbElement.cpp | 49 | ||||
| -rw-r--r-- | Source/WebCore/html/shadow/SliderThumbElement.h | 33 |
2 files changed, 71 insertions, 11 deletions
diff --git a/Source/WebCore/html/shadow/SliderThumbElement.cpp b/Source/WebCore/html/shadow/SliderThumbElement.cpp index d29d257..0402e89 100644 --- a/Source/WebCore/html/shadow/SliderThumbElement.cpp +++ b/Source/WebCore/html/shadow/SliderThumbElement.cpp @@ -37,6 +37,7 @@ #include "Frame.h" #include "MouseEvent.h" #include "RenderSlider.h" +#include "RenderTheme.h" #if PLATFORM(ANDROID) && ENABLE(TOUCH_EVENTS) #include "TouchEvent.h" @@ -44,14 +45,58 @@ namespace WebCore { +// FIXME: Find a way to cascade appearance (see the layout method) and get rid of this class. +class RenderSliderThumb : public RenderBlock { +public: + RenderSliderThumb(Node*); + virtual void layout(); +}; + + +RenderSliderThumb::RenderSliderThumb(Node* node) + : RenderBlock(node) +{ +} + +void RenderSliderThumb::layout() +{ + // FIXME: Hard-coding this cascade of appearance is bad, because it's something + // that CSS usually does. We need to find a way to express this in CSS. + RenderStyle* parentStyle = parent()->style(); + if (parentStyle->appearance() == SliderVerticalPart) + style()->setAppearance(SliderThumbVerticalPart); + else if (parentStyle->appearance() == SliderHorizontalPart) + style()->setAppearance(SliderThumbHorizontalPart); + else if (parentStyle->appearance() == MediaSliderPart) + style()->setAppearance(MediaSliderThumbPart); + else if (parentStyle->appearance() == MediaVolumeSliderPart) + style()->setAppearance(MediaVolumeSliderThumbPart); + + if (style()->hasAppearance()) { + // FIXME: This should pass the style, not the renderer, to the theme. + theme()->adjustSliderThumbSize(this); + } + RenderBlock::layout(); +} + +RenderObject* SliderThumbElement::createRenderer(RenderArena* arena, RenderStyle*) +{ + return new (arena) RenderSliderThumb(this); +} + void SliderThumbElement::defaultEventHandler(Event* event) { +<<<<<<< HEAD if (!event->isMouseEvent() #if PLATFORM(ANDROID) && ENABLE(TOUCH_EVENTS) && !event->isTouchEvent() #endif ) { ShadowBlockElement::defaultEventHandler(event); +======= + if (!event->isMouseEvent()) { + HTMLDivElement::defaultEventHandler(event); +>>>>>>> WebKit.org @ r75993 return; } @@ -126,7 +171,7 @@ void SliderThumbElement::defaultEventHandler(Event* event) } } - ShadowBlockElement::defaultEventHandler(event); + HTMLDivElement::defaultEventHandler(event); } void SliderThumbElement::detach() @@ -135,7 +180,7 @@ void SliderThumbElement::detach() if (Frame* frame = document()->frame()) frame->eventHandler()->setCapturingMouseEventsNode(0); } - ShadowBlockElement::detach(); + HTMLDivElement::detach(); } } diff --git a/Source/WebCore/html/shadow/SliderThumbElement.h b/Source/WebCore/html/shadow/SliderThumbElement.h index 8205746..7219186 100644 --- a/Source/WebCore/html/shadow/SliderThumbElement.h +++ b/Source/WebCore/html/shadow/SliderThumbElement.h @@ -33,7 +33,9 @@ #define SliderThumbElement_h #include "FloatPoint.h" -#include "ShadowElement.h" +#include "HTMLDivElement.h" +#include "HTMLNames.h" +#include "RenderStyleConstants.h" #include <wtf/Forward.h> namespace WebCore { @@ -42,34 +44,47 @@ class HTMLElement; class Event; class FloatPoint; -class SliderThumbElement : public ShadowBlockElement { +class SliderThumbElement : public HTMLDivElement { public: - static PassRefPtr<SliderThumbElement> create(HTMLElement* shadowParent); + static PassRefPtr<SliderThumbElement> create(Document*); bool inDragMode() const { return m_inDragMode; } virtual void defaultEventHandler(Event*); virtual void detach(); + virtual AtomicString shadowPseudoId() const; -private: - SliderThumbElement(HTMLElement* shadowParent); +private: + SliderThumbElement(Document*); + virtual RenderObject* createRenderer(RenderArena*, RenderStyle*); FloatPoint m_offsetToThumb; bool m_inDragMode; }; -inline SliderThumbElement::SliderThumbElement(HTMLElement* shadowParent) - : ShadowBlockElement(shadowParent) +inline SliderThumbElement::SliderThumbElement(Document* document) + : HTMLDivElement(HTMLNames::divTag, document) , m_inDragMode(false) { } -inline PassRefPtr<SliderThumbElement> SliderThumbElement::create(HTMLElement* shadowParent) +inline PassRefPtr<SliderThumbElement> SliderThumbElement::create(Document* document) { - return adoptRef(new SliderThumbElement(shadowParent)); + return adoptRef(new SliderThumbElement(document)); } +inline AtomicString SliderThumbElement::shadowPseudoId() const +{ + DEFINE_STATIC_LOCAL(AtomicString, sliderThumb, ("-webkit-slider-thumb")); + return sliderThumb; } +inline SliderThumbElement* toSliderThumbElement(Node* node) +{ + ASSERT(!node || node->isHTMLElement()); + return static_cast<SliderThumbElement*>(node); +} + +} #endif |
