- 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);