Changeset 88415 in webkit
- Timestamp:
- Jun 8, 2011 7:06:38 PM (13 years ago)
- Location:
- trunk
- Files:
-
- 21 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/LayoutTests/ChangeLog
r88414 r88415 1 2011-06-08 Kent Tamura <tkent@chromium.org> 2 3 Reviewed by Dimitri Glazkov. 4 5 Allow drawing a slider thumb for any nodes. 6 https://bugs.webkit.org/show_bug.cgi?id=62196 7 8 The behavior was changed. We should show slider thumbs for any nodes with 9 -webkit-appearance:slidertumb-horizontal/vertical. 10 11 * fast/forms/thumbslider-no-parent-slider.html: 12 * platform/chromium/test_expections.txt: Expect to fail with thumbslider-no-parent-slider.html. 13 * platform/mac/fast/forms/thumbslider-no-parent-slider-expected.png: 14 * platform/mac/fast/forms/thumbslider-no-parent-slider-expected.txt: 15 1 16 2011-06-08 James Kozianski <koz@chromium.org> 2 17 -
trunk/LayoutTests/fast/forms/thumbslider-no-parent-slider.html
r23840 r88415 1 1 <html> 2 2 <head> 3 <style type="text/css"> 4 #thumbHorizontal { -webkit-appearance: sliderthumb-horizontal; } 5 #thumbVertical { -webkit-appearance: sliderthumb-vertical; } 6 </style> 3 <style type="text/css"> 4 #thumbHorizontal { 5 -webkit-appearance: sliderthumb-horizontal; 6 display: inline-block; 7 width: 20px; 8 height: 20px; 9 } 10 #thumbVertical { 11 -webkit-appearance: sliderthumb-vertical; 12 display: inline-block; 13 width: 20px; 14 height: 20px; 15 } 16 </style> 7 17 </head> 8 18 <body> 9 There should be no thumbsliders below, you should only see the words "Hello World" twice. 10 <br> 11 <br> 12 <span id="thumbHorizontal">Hello World</span><br> 13 <span id="thumbVertical">Hello World</span> 19 <!-- There should be a horizontal slider thumb and a vertical slider thumb. --> 20 <span id="thumbHorizontal"></span><br> 21 <span id="thumbVertical"></span> 14 22 </body> 15 23 </html> -
trunk/LayoutTests/platform/chromium/test_expectations.txt
r88414 r88415 3209 3209 BUG_TKENT LEOPARD : fast/forms/input-appearance-spinbutton-visibility.html = IMAGE 3210 3210 BUG_TKENT LEOPARD : fast/forms/input-appearance-spinbutton-layer.html= IMAGE 3211 BUGWK62196 : fast/forms/thumbslider-no-parent-slider.html = FAIL 3211 3212 3212 3213 // Need expectations -
trunk/LayoutTests/platform/mac/fast/forms/thumbslider-no-parent-slider-expected.txt
r63403 r88415 4 4 RenderBlock {HTML} at (0,0) size 800x600 5 5 RenderBody {BODY} at (8,8) size 784x584 6 RenderText {#text} at (0,0) size 592x18 7 text run at (0,0) width 592: "There should be no thumbsliders below, you should only see the words \"Hello World\" twice. " 8 RenderBR {BR} at (0,0) size 0x0 9 RenderBR {BR} at (0,18) size 0x18 10 RenderBlock {SPAN} at (0,36) size 79x18 11 RenderText {#text} at (0,0) size 79x18 12 text run at (0,0) width 79: "Hello World" 13 RenderBR {BR} at (79,50) size 0x0 14 RenderBlock {SPAN} at (0,54) size 79x18 15 RenderText {#text} at (0,0) size 79x18 16 text run at (0,0) width 79: "Hello World" 6 RenderBlock {SPAN} at (0,0) size 20x20 7 RenderBR {BR} at (20,20) size 0x0 8 RenderBlock {SPAN} at (0,20) size 20x20 17 9 RenderText {#text} at (0,0) size 0x0 -
trunk/Source/WebCore/ChangeLog
r88411 r88415 1 2011-06-08 Kent Tamura <tkent@chromium.org> 2 3 Reviewed by Dimitri Glazkov. 4 5 Allow drawing a slider thumb for any nodes. 6 https://bugs.webkit.org/show_bug.cgi?id=62196 7 8 RenderObject::node() should provide various information which is 9 necessary for rendering. We don't need to refer the parent renderer. 10 11 * dom/Node.cpp: 12 (WebCore::Node::focusDe1egate): Added. 13 * dom/Node.h: Added a declaration. 14 * html/shadow/MediaControlElements.cpp: 15 (WebCore::toParentMediaElement): 16 Added an overload of toParentMediaElement() with Node* parameter. 17 * html/shadow/MediaControlElements.h: 18 (WebCore::toParentMediaElement): ditto. 19 * html/shadow/SliderThumbElement.cpp: 20 (WebCore::SliderThumbElement::isEnabledFormControl): 21 Returns the status of the host node. 22 (WebCore::SliderThumbElement::isReadOnlyFormControl): ditto. 23 (WebCore::SliderThumbElement::focusDe1egate): 24 Returns the host node so that RenderTheme::isFocused() returns true. 25 (WebCore::SliderThumbElement::detach): Style nit. 26 (WebCore::SliderThumbElement::hostInput): 27 Make it const because it is called by const functions. 28 * html/shadow/SliderThumbElement.h: 29 - Remove inDragMode() 30 - Update declarations 31 * platform/qt/RenderThemeQt.cpp: 32 (WebCore::RenderThemeQt::paintMediaSliderThumb): 33 Use Node::shadowAncestorNode() instead of RenderObject::parent() to 34 support deeper thumb nodes. 35 * rendering/RenderMediaControlsChromium.cpp: 36 (WebCore::paintMediaSliderThumb): ditto. 37 (WebCore::paintMediaVolumeSliderThumb): Remove isSlider() check. 38 * rendering/RenderSlider.cpp: 39 (WebCore::RenderSlider::inDragMode): 40 SliderThumbElement::inDragMode() was removed, and Node::active() has 41 the same information. 42 * rendering/RenderTheme.cpp: 43 (WebCore::RenderTheme::paint): Remove isSlider() checks. 44 (WebCore::RenderTheme::isFocused): Apply Node::focusDelegate(). 45 * rendering/RenderThemeChromiumLinux.cpp: 46 (WebCore::RenderThemeChromiumLinux::paintSliderThumb): 47 isPressed() is enough. 48 * rendering/RenderThemeChromiumWin.cpp: 49 isEnabled(), isFocused(), and isPressed() are enough. 50 (WebCore::RenderThemeChromiumWin::determineSliderThumbState): 51 (WebCore::RenderThemeChromiumWin::determineClassicState): 52 * rendering/RenderThemeMac.mm: 53 (WebCore::RenderThemeMac::paintSliderThumb): 54 - Remove isSlider() check. 55 - Passing 'o' to udpateFooState functions is enough. 56 - isPressed() is enough. 57 * rendering/RenderThemeSafari.cpp: 58 (WebCore::RenderThemeSafari::paintSliderThumb): 59 We don't need special handling anymore. 60 * rendering/RenderThemeWin.cpp: 61 (WebCore::RenderThemeWin::determineSliderThumbState): 62 isEnabled(), isFocused(), and isPressed() are enough. 63 1 64 2011-06-08 Adam Barth <abarth@webkit.org> 2 65 -
trunk/Source/WebCore/dom/Node.cpp
r88297 r88415 964 964 } 965 965 966 Node* Node::focusDelegate() 967 { 968 return this; 969 } 970 966 971 unsigned Node::nodeIndex() const 967 972 { -
trunk/Source/WebCore/dom/Node.h
r87885 r88415 336 336 virtual bool isKeyboardFocusable(KeyboardEvent*) const; 337 337 virtual bool isMouseFocusable() const; 338 virtual Node* focusDelegate(); 338 339 339 340 bool isContentEditable() const; -
trunk/Source/WebCore/html/shadow/MediaControlElements.cpp
r87692 r88415 53 53 using namespace HTMLNames; 54 54 55 HTMLMediaElement* toParentMediaElement(RenderObject* o) 56 { 57 Node* node = o->node(); 55 HTMLMediaElement* toParentMediaElement(Node* node) 56 { 58 57 Node* mediaNode = node ? node->shadowAncestorNode() : 0; 59 58 if (!mediaNode || (!mediaNode->hasTagName(HTMLNames::videoTag) && !mediaNode->hasTagName(HTMLNames::audioTag))) -
trunk/Source/WebCore/html/shadow/MediaControlElements.h
r87692 r88415 71 71 }; 72 72 73 HTMLMediaElement* toParentMediaElement(RenderObject*); 73 HTMLMediaElement* toParentMediaElement(Node*); 74 inline HTMLMediaElement* toParentMediaElement(RenderObject* renderer) { return toParentMediaElement(renderer->node()); } 74 75 75 76 // ---------------------------- -
trunk/Source/WebCore/html/shadow/SliderThumbElement.cpp
r88405 r88415 96 96 } 97 97 98 bool SliderThumbElement::isEnabledFormControl() const 99 { 100 return hostInput()->isEnabledFormControl(); 101 } 102 103 bool SliderThumbElement::isReadOnlyFormControl() const 104 { 105 return hostInput()->isReadOnlyFormControl(); 106 } 107 108 Node* SliderThumbElement::focusDelegate() 109 { 110 return hostInput(); 111 } 112 98 113 void SliderThumbElement::dragFrom(const IntPoint& point) 99 114 { … … 192 207 if (m_inDragMode) { 193 208 if (Frame* frame = document()->frame()) 194 frame->eventHandler()->setCapturingMouseEventsNode(0); 209 frame->eventHandler()->setCapturingMouseEventsNode(0); 195 210 } 196 211 HTMLDivElement::detach(); 197 212 } 198 213 199 HTMLInputElement* SliderThumbElement::hostInput() 200 { 201 ASSERT(parentNode()); 202 return static_cast<HTMLInputElement*>(parentNode()->shadowHost()); 214 HTMLInputElement* SliderThumbElement::hostInput() const 215 { 216 // Only HTMLInputElement creates SliderThumbElement instances as its shadow nodes. 217 // So, shadowAncestorNode() must be an HTMLInputElement. 218 HTMLInputElement* input = shadowAncestorNode()->toInputElement(); 219 return input; 203 220 } 204 221 -
trunk/Source/WebCore/html/shadow/SliderThumbElement.h
r87995 r88415 50 50 static PassRefPtr<SliderThumbElement> create(Document*); 51 51 52 bool inDragMode() const { return m_inDragMode; }53 52 void setPositionFromValue(); 54 53 … … 62 61 virtual RenderObject* createRenderer(RenderArena*, RenderStyle*); 63 62 virtual PassRefPtr<Element> cloneElementWithoutAttributesAndChildren() const; 63 virtual bool isEnabledFormControl() const; 64 virtual bool isReadOnlyFormControl() const; 65 virtual Node* focusDelegate(); 64 66 void startDragging(); 65 67 void stopDragging(); 66 68 void setPositionFromPoint(const IntPoint&); 67 HTMLInputElement* hostInput() ;69 HTMLInputElement* hostInput() const; 68 70 69 71 bool m_inDragMode; -
trunk/Source/WebCore/platform/qt/RenderThemeQt.cpp
r88405 r88415 1443 1443 bool RenderThemeQt::paintMediaSliderThumb(RenderObject* o, const PaintInfo& paintInfo, const IntRect& r) 1444 1444 { 1445 if (!o->parent()->isSlider()) 1446 return false; 1447 1448 // We can get the HTMLMediaElement from the parent of the thumb : MediaControlTimelineElement. 1449 HTMLMediaElement* mediaElement = toParentMediaElement(o->parent()); 1445 ASSERT(o->node()); 1446 Node* hostNode = o->node()->shadowAncestorNode(); 1447 ASSERT(hostNode); 1448 HTMLMediaElement* mediaElement = toParentMediaElement(hostNode); 1450 1449 if (!mediaElement) 1451 1450 return false; … … 1458 1457 1459 1458 p.painter->setPen(Qt::NoPen); 1460 p.painter->setBrush(getMediaControlForegroundColor( o->parent()));1459 p.painter->setBrush(getMediaControlForegroundColor(hostNode->renderer())); 1461 1460 p.painter->drawRect(r.x(), r.y(), r.width(), r.height()); 1462 1461 -
trunk/Source/WebCore/rendering/RenderMediaControlsChromium.cpp
r88405 r88415 168 168 static bool paintMediaSliderThumb(RenderObject* object, const PaintInfo& paintInfo, const IntRect& rect) 169 169 { 170 if (!object->parent()->isSlider())171 return false;172 173 HTMLMediaElement* mediaElement = toParentMediaElement( object->parent());170 ASSERT(object->node()); 171 Node* hostNode = object->node()->shadowAncestorNode(); 172 ASSERT(hostNode); 173 HTMLMediaElement* mediaElement = toParentMediaElement(hostNode); 174 174 if (!mediaElement) 175 175 return false; … … 203 203 static bool paintMediaVolumeSliderThumb(RenderObject* object, const PaintInfo& paintInfo, const IntRect& rect) 204 204 { 205 if (!object->parent()->isSlider())206 return false;207 208 205 static Image* mediaVolumeSliderThumb = platformResource("mediaVolumeSliderThumb"); 209 206 return paintMediaButton(paintInfo.context, rect, mediaVolumeSliderThumb); -
trunk/Source/WebCore/rendering/RenderSlider.cpp
r88405 r88415 187 187 { 188 188 SliderThumbElement* thumbElement = shadowSliderThumb(); 189 return thumbElement && thumbElement-> inDragMode();189 return thumbElement && thumbElement->active(); 190 190 } 191 191 -
trunk/Source/WebCore/rendering/RenderTheme.cpp
r88405 r88415 307 307 case SliderThumbHorizontalPart: 308 308 case SliderThumbVerticalPart: 309 if (o->parent()->isSlider()) 310 return paintSliderThumb(o, paintInfo, r); 311 // We don't support drawing a slider thumb without a parent slider 312 break; 309 return paintSliderThumb(o, paintInfo, r); 313 310 case MediaFullscreenButtonPart: 314 311 return paintMediaFullscreenButton(o, paintInfo, r); … … 330 327 return paintMediaSliderTrack(o, paintInfo, r); 331 328 case MediaSliderThumbPart: 332 if (o->parent()->isSlider()) 333 return paintMediaSliderThumb(o, paintInfo, r); 334 break; 329 return paintMediaSliderThumb(o, paintInfo, r); 335 330 case MediaVolumeSliderMuteButtonPart: 336 331 return paintMediaMuteButton(o, paintInfo, r); … … 340 335 return paintMediaVolumeSliderTrack(o, paintInfo, r); 341 336 case MediaVolumeSliderThumbPart: 342 if (o->parent()->isSlider()) 343 return paintMediaVolumeSliderThumb(o, paintInfo, r); 344 break; 337 return paintMediaVolumeSliderThumb(o, paintInfo, r); 345 338 case MediaTimeRemainingPart: 346 339 return paintMediaTimeRemaining(o, paintInfo, r); … … 778 771 if (!node) 779 772 return false; 773 774 node = node->focusDelegate(); 780 775 Document* document = node->document(); 781 776 Frame* frame = document->frame(); -
trunk/Source/WebCore/rendering/RenderThemeChromiumLinux.cpp
r88405 r88415 297 297 PlatformBridge::ThemePaintExtraParams extraParams; 298 298 extraParams.slider.vertical = o->style()->appearance() == SliderThumbVerticalPart; 299 extraParams.slider.inDrag = toRenderSlider(o->parent())->inDragMode();299 extraParams.slider.inDrag = isPressed(o); 300 300 301 301 PlatformBridge::paintThemePart(i.context, PlatformBridge::PartSliderThumb, getWebThemeState(this, o), rect, &extraParams); -
trunk/Source/WebCore/rendering/RenderThemeChromiumWin.cpp
r88405 r88415 561 561 { 562 562 unsigned result = TUS_NORMAL; 563 if (!isEnabled(o ->parent()))563 if (!isEnabled(o)) 564 564 result = TUS_DISABLED; 565 else if (supportsFocus(o->style()->appearance()) && isFocused(o ->parent()))565 else if (supportsFocus(o->style()->appearance()) && isFocused(o)) 566 566 result = TUS_FOCUSED; 567 else if ( toRenderSlider(o->parent())->inDragMode())567 else if (isPressed(o)) 568 568 result = TUS_PRESSED; 569 569 else if (isHovered(o)) … … 587 587 588 588 if (part == SliderThumbHorizontalPart || part == SliderThumbVerticalPart) { 589 if (!isEnabled(o ->parent()))589 if (!isEnabled(o)) 590 590 result = DFCS_INACTIVE; 591 else if ( toRenderSlider(o->parent())->inDragMode()) // Active supersedes hover591 else if (isPressed(o)) // Active supersedes hover 592 592 result = DFCS_PUSHED; 593 593 else if (isHovered(o)) -
trunk/Source/WebCore/rendering/RenderThemeMac.mm
r88405 r88415 1300 1300 bool RenderThemeMac::paintSliderThumb(RenderObject* o, const PaintInfo& paintInfo, const IntRect& r) 1301 1301 { 1302 ASSERT(o->parent()->isSlider());1303 1304 1302 NSSliderCell* sliderThumbCell = o->style()->appearance() == SliderThumbVerticalPart 1305 1303 ? sliderThumbVertical() … … 1309 1307 1310 1308 // Update the various states we respond to. 1311 updateActiveState(sliderThumbCell, o ->parent());1312 updateEnabledState(sliderThumbCell, o ->parent());1313 updateFocusedState(sliderThumbCell, o ->parent());1309 updateActiveState(sliderThumbCell, o); 1310 updateEnabledState(sliderThumbCell, o); 1311 updateFocusedState(sliderThumbCell, o); 1314 1312 1315 1313 // Update the pressed state using the NSCell tracking methods, since that's how NSSliderCell keeps track of it. … … 1320 1318 oldPressed = m_isSliderThumbHorizontalPressed; 1321 1319 1322 bool pressed = toRenderSlider(o->parent())->inDragMode();1320 bool pressed = isPressed(o); 1323 1321 1324 1322 if (o->style()->appearance() == SliderThumbVerticalPart) -
trunk/Source/WebCore/rendering/RenderThemeSafari.cpp
r88405 r88415 1000 1000 { 1001 1001 ASSERT(SafariThemeLibrary()); 1002 1003 ASSERT(o->parent()->isSlider()); 1004 1005 bool pressed = toRenderSlider(o->parent())->inDragMode(); 1006 ThemeControlState state = determineState(o->parent()); 1007 state &= ~SafariTheme::PressedState; 1008 if (pressed) 1009 state |= SafariTheme::PressedState; 1010 1011 paintThemePart(SliderThumbPart, paintInfo.context->platformContext(), r, NSSmallControlSize, state); 1002 paintThemePart(SliderThumbPart, paintInfo.context->platformContext(), r, NSSmallControlSize, determineState(o)); 1012 1003 return false; 1013 1004 } -
trunk/Source/WebCore/rendering/RenderThemeWin.cpp
r88405 r88415 464 464 { 465 465 unsigned result = TUS_NORMAL; 466 if (!isEnabled(o ->parent()))466 if (!isEnabled(o)) 467 467 result = TUS_DISABLED; 468 else if (supportsFocus(o->style()->appearance()) && isFocused(o ->parent()))468 else if (supportsFocus(o->style()->appearance()) && isFocused(o)) 469 469 result = TUS_FOCUSED; 470 else if ( toRenderSlider(o->parent())->inDragMode())470 else if (isPressed(o)) 471 471 result = TUS_PRESSED; 472 472 else if (isHovered(o))
Note: See TracChangeset
for help on using the changeset viewer.