Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(2)

Side by Side Diff: Source/core/rendering/RenderMenuList.cpp

Issue 197283025: Use new is*Element() helper functions more in rendering code (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Created 6 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « Source/core/rendering/RenderListItem.cpp ('k') | Source/core/rendering/RenderMeter.cpp » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 * This file is part of the select element renderer in WebCore. 2 * This file is part of the select element renderer in WebCore.
3 * 3 *
4 * Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). 4 * Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
5 * Copyright (C) 2006, 2007, 2008, 2009, 2010, 2011 Apple Inc. All rights reserv ed. 5 * Copyright (C) 2006, 2007, 2008, 2009, 2010, 2011 Apple Inc. All rights reserv ed.
6 * 2009 Torch Mobile Inc. All rights reserved. (http://www.torchmo bile.com/) 6 * 2009 Torch Mobile Inc. All rights reserved. (http://www.torchmo bile.com/)
7 * 7 *
8 * This library is free software; you can redistribute it and/or 8 * This library is free software; you can redistribute it and/or
9 * modify it under the terms of the GNU Library General Public 9 * modify it under the terms of the GNU Library General Public
10 * License as published by the Free Software Foundation; either 10 * License as published by the Free Software Foundation; either
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after
54 54
55 RenderMenuList::RenderMenuList(Element* element) 55 RenderMenuList::RenderMenuList(Element* element)
56 : RenderFlexibleBox(element) 56 : RenderFlexibleBox(element)
57 , m_buttonText(0) 57 , m_buttonText(0)
58 , m_innerBlock(0) 58 , m_innerBlock(0)
59 , m_optionsChanged(true) 59 , m_optionsChanged(true)
60 , m_optionsWidth(0) 60 , m_optionsWidth(0)
61 , m_lastActiveIndex(-1) 61 , m_lastActiveIndex(-1)
62 , m_popupIsVisible(false) 62 , m_popupIsVisible(false)
63 { 63 {
64 ASSERT(element); 64 ASSERT(isHTMLSelectElement(element));
65 ASSERT(element->isHTMLElement());
66 ASSERT(element->hasTagName(HTMLNames::selectTag));
67 } 65 }
68 66
69 RenderMenuList::~RenderMenuList() 67 RenderMenuList::~RenderMenuList()
70 { 68 {
71 if (m_popup) 69 if (m_popup)
72 m_popup->disconnectClient(); 70 m_popup->disconnectClient();
73 m_popup = nullptr; 71 m_popup = nullptr;
74 } 72 }
75 73
76 // FIXME: Instead of this hack we should add a ShadowRoot to <select> with no in sertion point 74 // FIXME: Instead of this hack we should add a ShadowRoot to <select> with no in sertion point
(...skipping 86 matching lines...) Expand 10 before | Expand all | Expand 10 after
163 161
164 void RenderMenuList::updateOptionsWidth() 162 void RenderMenuList::updateOptionsWidth()
165 { 163 {
166 float maxOptionWidth = 0; 164 float maxOptionWidth = 0;
167 const Vector<HTMLElement*>& listItems = selectElement()->listItems(); 165 const Vector<HTMLElement*>& listItems = selectElement()->listItems();
168 int size = listItems.size(); 166 int size = listItems.size();
169 FontCachePurgePreventer fontCachePurgePreventer; 167 FontCachePurgePreventer fontCachePurgePreventer;
170 168
171 for (int i = 0; i < size; ++i) { 169 for (int i = 0; i < size; ++i) {
172 HTMLElement* element = listItems[i]; 170 HTMLElement* element = listItems[i];
173 if (!element->hasTagName(optionTag)) 171 if (!isHTMLOptionElement(*element))
174 continue; 172 continue;
175 173
176 String text = toHTMLOptionElement(element)->textIndentedToRespectGroupLa bel(); 174 String text = toHTMLOptionElement(element)->textIndentedToRespectGroupLa bel();
177 applyTextTransform(style(), text, ' '); 175 applyTextTransform(style(), text, ' ');
178 if (RenderTheme::theme().popupOptionSupportsTextIndent()) { 176 if (RenderTheme::theme().popupOptionSupportsTextIndent()) {
179 // Add in the option's text indent. We can't calculate percentage v alues for now. 177 // Add in the option's text indent. We can't calculate percentage v alues for now.
180 float optionWidth = 0; 178 float optionWidth = 0;
181 if (RenderStyle* optionStyle = element->renderStyle()) 179 if (RenderStyle* optionStyle = element->renderStyle())
182 optionWidth += minimumValueForLength(optionStyle->textIndent(), 0); 180 optionWidth += minimumValueForLength(optionStyle->textIndent(), 0);
183 if (!text.isEmpty()) 181 if (!text.isEmpty())
(...skipping 28 matching lines...) Expand all
212 void RenderMenuList::setTextFromOption(int optionIndex) 210 void RenderMenuList::setTextFromOption(int optionIndex)
213 { 211 {
214 HTMLSelectElement* select = selectElement(); 212 HTMLSelectElement* select = selectElement();
215 const Vector<HTMLElement*>& listItems = select->listItems(); 213 const Vector<HTMLElement*>& listItems = select->listItems();
216 int size = listItems.size(); 214 int size = listItems.size();
217 215
218 int i = select->optionToListIndex(optionIndex); 216 int i = select->optionToListIndex(optionIndex);
219 String text = emptyString(); 217 String text = emptyString();
220 if (i >= 0 && i < size) { 218 if (i >= 0 && i < size) {
221 Element* element = listItems[i]; 219 Element* element = listItems[i];
222 if (element->hasTagName(optionTag)) { 220 if (isHTMLOptionElement(*element)) {
223 text = toHTMLOptionElement(element)->textIndentedToRespectGroupLabel (); 221 text = toHTMLOptionElement(element)->textIndentedToRespectGroupLabel ();
224 m_optionStyle = element->renderStyle(); 222 m_optionStyle = element->renderStyle();
225 } 223 }
226 } 224 }
227 225
228 setText(text.stripWhiteSpace()); 226 setText(text.stripWhiteSpace());
229 didUpdateActiveOption(optionIndex); 227 didUpdateActiveOption(optionIndex);
230 } 228 }
231 229
232 void RenderMenuList::setText(const String& s) 230 void RenderMenuList::setText(const String& s)
(...skipping 155 matching lines...) Expand 10 before | Expand all | Expand 10 after
388 386
389 String RenderMenuList::itemText(unsigned listIndex) const 387 String RenderMenuList::itemText(unsigned listIndex) const
390 { 388 {
391 HTMLSelectElement* select = selectElement(); 389 HTMLSelectElement* select = selectElement();
392 const Vector<HTMLElement*>& listItems = select->listItems(); 390 const Vector<HTMLElement*>& listItems = select->listItems();
393 if (listIndex >= listItems.size()) 391 if (listIndex >= listItems.size())
394 return String(); 392 return String();
395 393
396 String itemString; 394 String itemString;
397 Element* element = listItems[listIndex]; 395 Element* element = listItems[listIndex];
398 if (element->hasTagName(optgroupTag)) 396 if (isHTMLOptGroupElement(*element))
399 itemString = toHTMLOptGroupElement(element)->groupLabelText(); 397 itemString = toHTMLOptGroupElement(*element).groupLabelText();
400 else if (element->hasTagName(optionTag)) 398 else if (isHTMLOptionElement(*element))
401 itemString = toHTMLOptionElement(element)->textIndentedToRespectGroupLab el(); 399 itemString = toHTMLOptionElement(*element).textIndentedToRespectGroupLab el();
402 400
403 applyTextTransform(style(), itemString, ' '); 401 applyTextTransform(style(), itemString, ' ');
404 return itemString; 402 return itemString;
405 } 403 }
406 404
407 String RenderMenuList::itemAccessibilityText(unsigned listIndex) const 405 String RenderMenuList::itemAccessibilityText(unsigned listIndex) const
408 { 406 {
409 // Allow the accessible name be changed if necessary. 407 // Allow the accessible name be changed if necessary.
410 const Vector<HTMLElement*>& listItems = selectElement()->listItems(); 408 const Vector<HTMLElement*>& listItems = selectElement()->listItems();
411 if (listIndex >= listItems.size()) 409 if (listIndex >= listItems.size())
412 return String(); 410 return String();
413 return listItems[listIndex]->fastGetAttribute(aria_labelAttr); 411 return listItems[listIndex]->fastGetAttribute(aria_labelAttr);
414 } 412 }
415 413
416 String RenderMenuList::itemToolTip(unsigned listIndex) const 414 String RenderMenuList::itemToolTip(unsigned listIndex) const
417 { 415 {
418 const Vector<HTMLElement*>& listItems = selectElement()->listItems(); 416 const Vector<HTMLElement*>& listItems = selectElement()->listItems();
419 if (listIndex >= listItems.size()) 417 if (listIndex >= listItems.size())
420 return String(); 418 return String();
421 return listItems[listIndex]->title(); 419 return listItems[listIndex]->title();
422 } 420 }
423 421
424 bool RenderMenuList::itemIsEnabled(unsigned listIndex) const 422 bool RenderMenuList::itemIsEnabled(unsigned listIndex) const
425 { 423 {
426 const Vector<HTMLElement*>& listItems = selectElement()->listItems(); 424 const Vector<HTMLElement*>& listItems = selectElement()->listItems();
427 if (listIndex >= listItems.size()) 425 if (listIndex >= listItems.size())
428 return false; 426 return false;
429 HTMLElement* element = listItems[listIndex]; 427 HTMLElement* element = listItems[listIndex];
430 if (!element->hasTagName(optionTag)) 428 if (!isHTMLOptionElement(*element))
431 return false; 429 return false;
432 430
433 bool groupEnabled = true; 431 bool groupEnabled = true;
434 if (Element* parentElement = element->parentElement()) { 432 if (Element* parentElement = element->parentElement()) {
435 if (parentElement->hasTagName(optgroupTag)) 433 if (isHTMLOptGroupElement(*parentElement))
436 groupEnabled = !parentElement->isDisabledFormControl(); 434 groupEnabled = !parentElement->isDisabledFormControl();
437 } 435 }
438 if (!groupEnabled) 436 if (!groupEnabled)
439 return false; 437 return false;
440 438
441 return !element->isDisabledFormControl(); 439 return !element->isDisabledFormControl();
442 } 440 }
443 441
444 PopupMenuStyle RenderMenuList::itemStyle(unsigned listIndex) const 442 PopupMenuStyle RenderMenuList::itemStyle(unsigned listIndex) const
445 { 443 {
(...skipping 92 matching lines...) Expand 10 before | Expand all | Expand 10 after
538 } 536 }
539 537
540 void RenderMenuList::popupDidHide() 538 void RenderMenuList::popupDidHide()
541 { 539 {
542 m_popupIsVisible = false; 540 m_popupIsVisible = false;
543 } 541 }
544 542
545 bool RenderMenuList::itemIsSeparator(unsigned listIndex) const 543 bool RenderMenuList::itemIsSeparator(unsigned listIndex) const
546 { 544 {
547 const Vector<HTMLElement*>& listItems = selectElement()->listItems(); 545 const Vector<HTMLElement*>& listItems = selectElement()->listItems();
548 return listIndex < listItems.size() && listItems[listIndex]->hasTagName(hrTa g); 546 return listIndex < listItems.size() && isHTMLHRElement(*listItems[listIndex] );
549 } 547 }
550 548
551 bool RenderMenuList::itemIsLabel(unsigned listIndex) const 549 bool RenderMenuList::itemIsLabel(unsigned listIndex) const
552 { 550 {
553 const Vector<HTMLElement*>& listItems = selectElement()->listItems(); 551 const Vector<HTMLElement*>& listItems = selectElement()->listItems();
554 return listIndex < listItems.size() && listItems[listIndex]->hasTagName(optg roupTag); 552 return listIndex < listItems.size() && isHTMLOptGroupElement(*listItems[list Index]);
555 } 553 }
556 554
557 bool RenderMenuList::itemIsSelected(unsigned listIndex) const 555 bool RenderMenuList::itemIsSelected(unsigned listIndex) const
558 { 556 {
559 const Vector<HTMLElement*>& listItems = selectElement()->listItems(); 557 const Vector<HTMLElement*>& listItems = selectElement()->listItems();
560 if (listIndex >= listItems.size()) 558 if (listIndex >= listItems.size())
561 return false; 559 return false;
562 HTMLElement* element = listItems[listIndex]; 560 HTMLElement* element = listItems[listIndex];
563 return element->hasTagName(optionTag) && toHTMLOptionElement(element)->selec ted(); 561 return isHTMLOptionElement(*element) && toHTMLOptionElement(*element).select ed();
564 } 562 }
565 563
566 void RenderMenuList::setTextFromItem(unsigned listIndex) 564 void RenderMenuList::setTextFromItem(unsigned listIndex)
567 { 565 {
568 setTextFromOption(selectElement()->listToOptionIndex(listIndex)); 566 setTextFromOption(selectElement()->listToOptionIndex(listIndex));
569 } 567 }
570 568
571 } 569 }
OLDNEW
« no previous file with comments | « Source/core/rendering/RenderListItem.cpp ('k') | Source/core/rendering/RenderMeter.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698