Title: [125644] trunk/Source/WebCore
Revision
125644
Author
shin...@chromium.org
Date
2012-08-14 21:02:17 -0700 (Tue, 14 Aug 2012)

Log Message

[Refactoring] RenderMenuList and RenderListBox should have a method to return HTMLSelectElement.
https://bugs.webkit.org/show_bug.cgi?id=94061

Reviewed by Kent Tamura.

This is a preparation patch for Bug 91487. Since RenderMenuList::node() and RenderListBox::node()
will not return HTMLSelectElement to fix Bug 91487, it would be good to have a method to HTMLSelectElement.

No new tests, no change in behavior.

* rendering/RenderListBox.cpp:
(WebCore::RenderListBox::selectElement):
(WebCore):
(WebCore::RenderListBox::updateFromElement):
(WebCore::RenderListBox::scrollToRevealSelection):
(WebCore::RenderListBox::size):
(WebCore::RenderListBox::numItems):
(WebCore::RenderListBox::addFocusRingRects):
(WebCore::RenderListBox::paintItemForeground):
(WebCore::RenderListBox::paintItemBackground):
(WebCore::RenderListBox::panScroll):
(WebCore::RenderListBox::autoscroll):
(WebCore::RenderListBox::stopAutoscroll):
(WebCore::RenderListBox::valueChanged):
(WebCore::RenderListBox::nodeAtPoint):
* rendering/RenderListBox.h:
(WebCore):
(RenderListBox):
* rendering/RenderMenuList.cpp:
(WebCore::RenderMenuList::selectElement):
(WebCore):
(WebCore::RenderMenuList::updateOptionsWidth):
(WebCore::RenderMenuList::updateFromElement):
(WebCore::RenderMenuList::setTextFromOption):
(WebCore::RenderMenuList::showPopup):
(WebCore::RenderMenuList::valueChanged):
(WebCore::RenderMenuList::listBoxSelectItem):
(WebCore::RenderMenuList::multiple):
(WebCore::RenderMenuList::didSetSelectedIndex):
(WebCore::RenderMenuList::didUpdateActiveOption):
(WebCore::RenderMenuList::itemText):
(WebCore::RenderMenuList::itemAccessibilityText):
(WebCore::RenderMenuList::itemToolTip):
(WebCore::RenderMenuList::itemIsEnabled):
(WebCore::RenderMenuList::itemStyle):
(WebCore::RenderMenuList::itemBackgroundColor):
(WebCore::RenderMenuList::listSize):
(WebCore::RenderMenuList::selectedIndex):
(WebCore::RenderMenuList::itemIsSeparator):
(WebCore::RenderMenuList::itemIsLabel):
(WebCore::RenderMenuList::itemIsSelected):
(WebCore::RenderMenuList::setTextFromItem):
* rendering/RenderMenuList.h:
(WebCore):
(RenderMenuList):

Modified Paths

Diff

Modified: trunk/Source/WebCore/ChangeLog (125643 => 125644)


--- trunk/Source/WebCore/ChangeLog	2012-08-15 04:00:39 UTC (rev 125643)
+++ trunk/Source/WebCore/ChangeLog	2012-08-15 04:02:17 UTC (rev 125644)
@@ -1,3 +1,61 @@
+2012-08-14  Shinya Kawanaka  <shin...@chromium.org>
+
+        [Refactoring] RenderMenuList and RenderListBox should have a method to return HTMLSelectElement.
+        https://bugs.webkit.org/show_bug.cgi?id=94061
+
+        Reviewed by Kent Tamura.
+
+        This is a preparation patch for Bug 91487. Since RenderMenuList::node() and RenderListBox::node()
+        will not return HTMLSelectElement to fix Bug 91487, it would be good to have a method to HTMLSelectElement.
+
+        No new tests, no change in behavior.
+
+        * rendering/RenderListBox.cpp:
+        (WebCore::RenderListBox::selectElement):
+        (WebCore):
+        (WebCore::RenderListBox::updateFromElement):
+        (WebCore::RenderListBox::scrollToRevealSelection):
+        (WebCore::RenderListBox::size):
+        (WebCore::RenderListBox::numItems):
+        (WebCore::RenderListBox::addFocusRingRects):
+        (WebCore::RenderListBox::paintItemForeground):
+        (WebCore::RenderListBox::paintItemBackground):
+        (WebCore::RenderListBox::panScroll):
+        (WebCore::RenderListBox::autoscroll):
+        (WebCore::RenderListBox::stopAutoscroll):
+        (WebCore::RenderListBox::valueChanged):
+        (WebCore::RenderListBox::nodeAtPoint):
+        * rendering/RenderListBox.h:
+        (WebCore):
+        (RenderListBox):
+        * rendering/RenderMenuList.cpp:
+        (WebCore::RenderMenuList::selectElement):
+        (WebCore):
+        (WebCore::RenderMenuList::updateOptionsWidth):
+        (WebCore::RenderMenuList::updateFromElement):
+        (WebCore::RenderMenuList::setTextFromOption):
+        (WebCore::RenderMenuList::showPopup):
+        (WebCore::RenderMenuList::valueChanged):
+        (WebCore::RenderMenuList::listBoxSelectItem):
+        (WebCore::RenderMenuList::multiple):
+        (WebCore::RenderMenuList::didSetSelectedIndex):
+        (WebCore::RenderMenuList::didUpdateActiveOption):
+        (WebCore::RenderMenuList::itemText):
+        (WebCore::RenderMenuList::itemAccessibilityText):
+        (WebCore::RenderMenuList::itemToolTip):
+        (WebCore::RenderMenuList::itemIsEnabled):
+        (WebCore::RenderMenuList::itemStyle):
+        (WebCore::RenderMenuList::itemBackgroundColor):
+        (WebCore::RenderMenuList::listSize):
+        (WebCore::RenderMenuList::selectedIndex):
+        (WebCore::RenderMenuList::itemIsSeparator):
+        (WebCore::RenderMenuList::itemIsLabel):
+        (WebCore::RenderMenuList::itemIsSelected):
+        (WebCore::RenderMenuList::setTextFromItem):
+        * rendering/RenderMenuList.h:
+        (WebCore):
+        (RenderMenuList):
+
 2012-08-10  Kinuko Yasuda  <kin...@chromium.org>
 
         FileWriter fails with assertion when trying to write empty Blob

Modified: trunk/Source/WebCore/rendering/RenderListBox.cpp (125643 => 125644)


--- trunk/Source/WebCore/rendering/RenderListBox.cpp	2012-08-15 04:00:39 UTC (rev 125643)
+++ trunk/Source/WebCore/rendering/RenderListBox.cpp	2012-08-15 04:02:17 UTC (rev 125644)
@@ -105,12 +105,17 @@
         frameView->removeScrollableArea(this);
 }
 
+inline HTMLSelectElement* RenderListBox::selectElement() const
+{
+    return toHTMLSelectElement(node());
+}
+
 void RenderListBox::updateFromElement()
 {
     FontCachePurgePreventer fontCachePurgePreventer;
 
     if (m_optionsChanged) {
-        const Vector<HTMLElement*>& listItems = toHTMLSelectElement(node())->listItems();
+        const Vector<HTMLElement*>& listItems = selectElement()->listItems();
         int size = numItems();
         
         float width = 0;
@@ -176,7 +181,7 @@
 
 void RenderListBox::scrollToRevealSelection()
 {    
-    HTMLSelectElement* select = toHTMLSelectElement(node());
+    HTMLSelectElement* select = selectElement();
 
     m_scrollToRevealSelectionAfterLayout = false;
 
@@ -222,7 +227,7 @@
 
 int RenderListBox::size() const
 {
-    int specifiedSize = toHTMLSelectElement(node())->size();
+    int specifiedSize = selectElement()->size();
     if (specifiedSize > 1)
         return max(minSize, specifiedSize);
 
@@ -237,7 +242,7 @@
 
 int RenderListBox::numItems() const
 {
-    return toHTMLSelectElement(node())->listItems().size();
+    return selectElement()->listItems().size();
 }
 
 LayoutUnit RenderListBox::listHeight() const
@@ -326,7 +331,7 @@
     if (!isSpatialNavigationEnabled(frame()))
         return RenderBlock::addFocusRingRects(rects, additionalOffset);
 
-    HTMLSelectElement* select = toHTMLSelectElement(node());
+    HTMLSelectElement* select = selectElement();
 
     // Focus the last selected item.
     int selectedItem = select->activeSelectionEndListIndex();
@@ -383,9 +388,9 @@
 {
     FontCachePurgePreventer fontCachePurgePreventer;
 
-    HTMLSelectElement* selectElement = toHTMLSelectElement(node());
+    HTMLSelectElement* select = selectElement();
 
-    const Vector<HTMLElement*>& listItems = selectElement->listItems();
+    const Vector<HTMLElement*>& listItems = select->listItems();
     HTMLElement* element = listItems[listIndex];
 
     RenderStyle* itemStyle = element->renderStyle();
@@ -408,7 +413,7 @@
         if (frame()->selection()->isFocusedAndActive() && document()->focusedNode() == node())
             textColor = theme()->activeListBoxSelectionForegroundColor();
         // Honor the foreground color for disabled items
-        else if (!element->disabled() && !selectElement->disabled())
+        else if (!element->disabled() && !select->disabled())
             textColor = theme()->inactiveListBoxSelectionForegroundColor();
     }
 
@@ -433,7 +438,7 @@
 
 void RenderListBox::paintItemBackground(PaintInfo& paintInfo, const LayoutPoint& paintOffset, int listIndex)
 {
-    const Vector<HTMLElement*>& listItems = toHTMLSelectElement(node())->listItems();
+    const Vector<HTMLElement*>& listItems = selectElement()->listItems();
     HTMLElement* element = listItems[listIndex];
 
     Color backColor;
@@ -528,7 +533,7 @@
         return;
 
     m_inAutoscroll = true;
-    HTMLSelectElement* select = toHTMLSelectElement(node());
+    HTMLSelectElement* select = selectElement();
     select->updateListBoxSelection(!select->multiple());
     m_inAutoscroll = false;
 }
@@ -557,7 +562,7 @@
 
     int endIndex = scrollToward(pos);
     if (endIndex >= 0) {
-        HTMLSelectElement* select = toHTMLSelectElement(node());
+        HTMLSelectElement* select = selectElement();
         m_inAutoscroll = true;
 
         if (!select->multiple())
@@ -571,7 +576,7 @@
 
 void RenderListBox::stopAutoscroll()
 {
-    toHTMLSelectElement(node())->listBoxOnChange();
+    selectElement()->listBoxOnChange();
 }
 
 bool RenderListBox::scrollToRevealElementAtListIndex(int index)
@@ -607,7 +612,7 @@
 
 void RenderListBox::valueChanged(unsigned listIndex)
 {
-    HTMLSelectElement* element = toHTMLSelectElement(node());
+    HTMLSelectElement* element = selectElement();
     element->setSelectedIndex(element->listToOptionIndex(listIndex));
     element->dispatchFormControlChangeEvent();
 }
@@ -693,7 +698,7 @@
 {
     if (!RenderBlock::nodeAtPoint(request, result, pointInContainer, accumulatedOffset, hitTestAction))
         return false;
-    const Vector<HTMLElement*>& listItems = toHTMLSelectElement(node())->listItems();
+    const Vector<HTMLElement*>& listItems = selectElement()->listItems();
     int size = numItems();
     LayoutPoint adjustedLocation = accumulatedOffset + location();
 

Modified: trunk/Source/WebCore/rendering/RenderListBox.h (125643 => 125644)


--- trunk/Source/WebCore/rendering/RenderListBox.h	2012-08-15 04:00:39 UTC (rev 125643)
+++ trunk/Source/WebCore/rendering/RenderListBox.h	2012-08-15 04:02:17 UTC (rev 125644)
@@ -36,6 +36,8 @@
 
 namespace WebCore {
 
+class HTMLSelectElement;
+
 class RenderListBox : public RenderBlock, private ScrollableArea {
 public:
     RenderListBox(Element*);
@@ -56,6 +58,8 @@
     int size() const;
 
 private:
+    HTMLSelectElement* selectElement() const;
+
     virtual const char* renderName() const { return "RenderListBox"; }
 
     virtual bool isListBox() const { return true; }

Modified: trunk/Source/WebCore/rendering/RenderMenuList.cpp (125643 => 125644)


--- trunk/Source/WebCore/rendering/RenderMenuList.cpp	2012-08-15 04:00:39 UTC (rev 125643)
+++ trunk/Source/WebCore/rendering/RenderMenuList.cpp	2012-08-15 04:02:17 UTC (rev 125644)
@@ -119,6 +119,11 @@
     }
 }
 
+inline HTMLSelectElement* RenderMenuList::selectElement() const
+{
+    return toHTMLSelectElement(node());
+}
+
 void RenderMenuList::addChild(RenderObject* newChild, RenderObject* beforeChild)
 {
     createInnerBlock();
@@ -155,7 +160,7 @@
 void RenderMenuList::updateOptionsWidth()
 {
     float maxOptionWidth = 0;
-    const Vector<HTMLElement*>& listItems = toHTMLSelectElement(node())->listItems();
+    const Vector<HTMLElement*>& listItems = selectElement()->listItems();
     int size = listItems.size();    
     FontCachePurgePreventer fontCachePurgePreventer;
 
@@ -197,12 +202,12 @@
     if (m_popupIsVisible)
         m_popup->updateFromElement();
     else
-        setTextFromOption(toHTMLSelectElement(node())->selectedIndex());
+        setTextFromOption(selectElement()->selectedIndex());
 }
 
 void RenderMenuList::setTextFromOption(int optionIndex)
 {
-    HTMLSelectElement* select = toHTMLSelectElement(node());
+    HTMLSelectElement* select = selectElement();
     const Vector<HTMLElement*>& listItems = select->listItems();
     int size = listItems.size();
 
@@ -318,7 +323,7 @@
     FloatPoint absTopLeft = localToAbsolute(FloatPoint(), false, true);
     IntRect absBounds = absoluteBoundingBoxRectIgnoringTransforms();
     absBounds.setLocation(roundedIntPoint(absTopLeft));
-    HTMLSelectElement* select = toHTMLSelectElement(node());
+    HTMLSelectElement* select = selectElement();
     m_popup->show(absBounds, document()->view(), select->optionToListIndex(select->selectedIndex()));
 }
 
@@ -336,23 +341,23 @@
     if (!doc || doc != doc->frame()->document())
         return;
     
-    HTMLSelectElement* select = toHTMLSelectElement(node());
+    HTMLSelectElement* select = selectElement();
     select->optionSelectedByUser(select->listToOptionIndex(listIndex), fireOnChange);
 }
 
 void RenderMenuList::listBoxSelectItem(int listIndex, bool allowMultiplySelections, bool shift, bool fireOnChangeNow)
 {
-    toHTMLSelectElement(node())->listBoxSelectItem(listIndex, allowMultiplySelections, shift, fireOnChangeNow);
+    selectElement()->listBoxSelectItem(listIndex, allowMultiplySelections, shift, fireOnChangeNow);
 }
 
 bool RenderMenuList::multiple() const
 {
-    return toHTMLSelectElement(node())->multiple();
+    return selectElement()->multiple();
 }
 
 void RenderMenuList::didSetSelectedIndex(int listIndex)
 {
-    didUpdateActiveOption(toHTMLSelectElement(node())->listToOptionIndex(listIndex));
+    didUpdateActiveOption(selectElement()->listToOptionIndex(listIndex));
 }
 
 void RenderMenuList::didUpdateActiveOption(int optionIndex)
@@ -364,7 +369,7 @@
         return;
     m_lastActiveIndex = optionIndex;
 
-    HTMLSelectElement* select = toHTMLSelectElement(node());
+    HTMLSelectElement* select = selectElement();
     int listIndex = select->optionToListIndex(optionIndex);
     if (listIndex < 0 || listIndex >= static_cast<int>(select->listItems().size()))
         return;
@@ -377,7 +382,7 @@
 
 String RenderMenuList::itemText(unsigned listIndex) const
 {
-    HTMLSelectElement* select = toHTMLSelectElement(node());
+    HTMLSelectElement* select = selectElement();
     const Vector<HTMLElement*>& listItems = select->listItems();
     if (listIndex >= listItems.size())
         return String();
@@ -406,7 +411,7 @@
 String RenderMenuList::itemAccessibilityText(unsigned listIndex) const
 {
     // Allow the accessible name be changed if necessary.
-    const Vector<HTMLElement*>& listItems = toHTMLSelectElement(node())->listItems();
+    const Vector<HTMLElement*>& listItems = selectElement()->listItems();
     if (listIndex >= listItems.size())
         return String();
     return listItems[listIndex]->fastGetAttribute(aria_labelAttr);
@@ -414,7 +419,7 @@
     
 String RenderMenuList::itemToolTip(unsigned listIndex) const
 {
-    const Vector<HTMLElement*>& listItems = toHTMLSelectElement(node())->listItems();
+    const Vector<HTMLElement*>& listItems = selectElement()->listItems();
     if (listIndex >= listItems.size())
         return String();
     return listItems[listIndex]->title();
@@ -422,7 +427,7 @@
 
 bool RenderMenuList::itemIsEnabled(unsigned listIndex) const
 {
-    const Vector<HTMLElement*>& listItems = toHTMLSelectElement(node())->listItems();
+    const Vector<HTMLElement*>& listItems = selectElement()->listItems();
     if (listIndex >= listItems.size())
         return false;
     HTMLElement* element = listItems[listIndex];
@@ -442,7 +447,7 @@
 
 PopupMenuStyle RenderMenuList::itemStyle(unsigned listIndex) const
 {
-    const Vector<HTMLElement*>& listItems = toHTMLSelectElement(node())->listItems();
+    const Vector<HTMLElement*>& listItems = selectElement()->listItems();
     if (listIndex >= listItems.size()) {
         // If we are making an out of bounds access, then we want to use the style
         // of a different option element (index 0). However, if there isn't an option element
@@ -462,7 +467,7 @@
 
 Color RenderMenuList::itemBackgroundColor(unsigned listIndex) const
 {
-    const Vector<HTMLElement*>& listItems = toHTMLSelectElement(node())->listItems();
+    const Vector<HTMLElement*>& listItems = selectElement()->listItems();
     if (listIndex >= listItems.size())
         return style()->visitedDependentColor(CSSPropertyBackgroundColor);
     HTMLElement* element = listItems[listIndex];
@@ -539,12 +544,12 @@
 
 int RenderMenuList::listSize() const
 {
-    return toHTMLSelectElement(node())->listItems().size();
+    return selectElement()->listItems().size();
 }
 
 int RenderMenuList::selectedIndex() const
 {
-    HTMLSelectElement* select = toHTMLSelectElement(node());
+    HTMLSelectElement* select = selectElement();
     return select->optionToListIndex(select->selectedIndex());
 }
 
@@ -555,19 +560,19 @@
 
 bool RenderMenuList::itemIsSeparator(unsigned listIndex) const
 {
-    const Vector<HTMLElement*>& listItems = toHTMLSelectElement(node())->listItems();
+    const Vector<HTMLElement*>& listItems = selectElement()->listItems();
     return listIndex < listItems.size() && listItems[listIndex]->hasTagName(hrTag);
 }
 
 bool RenderMenuList::itemIsLabel(unsigned listIndex) const
 {
-    const Vector<HTMLElement*>& listItems = toHTMLSelectElement(node())->listItems();
+    const Vector<HTMLElement*>& listItems = selectElement()->listItems();
     return listIndex < listItems.size() && listItems[listIndex]->hasTagName(optgroupTag);
 }
 
 bool RenderMenuList::itemIsSelected(unsigned listIndex) const
 {
-    const Vector<HTMLElement*>& listItems = toHTMLSelectElement(node())->listItems();
+    const Vector<HTMLElement*>& listItems = selectElement()->listItems();
     if (listIndex >= listItems.size())
         return false;
     HTMLElement* element = listItems[listIndex];
@@ -576,7 +581,7 @@
 
 void RenderMenuList::setTextFromItem(unsigned listIndex)
 {
-    setTextFromOption(toHTMLSelectElement(node())->listToOptionIndex(listIndex));
+    setTextFromOption(selectElement()->listToOptionIndex(listIndex));
 }
 
 FontSelector* RenderMenuList::fontSelector() const

Modified: trunk/Source/WebCore/rendering/RenderMenuList.h (125643 => 125644)


--- trunk/Source/WebCore/rendering/RenderMenuList.h	2012-08-15 04:00:39 UTC (rev 125643)
+++ trunk/Source/WebCore/rendering/RenderMenuList.h	2012-08-15 04:02:17 UTC (rev 125644)
@@ -37,6 +37,7 @@
 
 namespace WebCore {
 
+class HTMLSelectElement;
 class RenderText;
 
 class RenderMenuList : public RenderDeprecatedFlexibleBox, private PopupMenuClient {
@@ -57,6 +58,8 @@
     String text() const;
 
 private:
+    HTMLSelectElement* selectElement() const;
+
     virtual bool isMenuList() const { return true; }
 
     virtual void addChild(RenderObject* newChild, RenderObject* beforeChild = 0);
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
http://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to