void ExternalPopupMenu::getPopupMenuInfo(WebPopupMenuInfo& info, PopupMenuClient& popupMenuClient) { int itemCount = popupMenuClient.listSize(); int count = 0; Vector<WebMenuItemInfo> items(static_cast<size_t>(itemCount)); for (int i = 0; i < itemCount; ++i) { PopupMenuStyle style = popupMenuClient.itemStyle(i); if (style.isDisplayNone()) continue; WebMenuItemInfo& popupItem = items[count++]; popupItem.label = popupMenuClient.itemText(i); popupItem.toolTip = popupMenuClient.itemToolTip(i); if (popupMenuClient.itemIsSeparator(i)) popupItem.type = WebMenuItemInfo::Separator; else if (popupMenuClient.itemIsLabel(i)) popupItem.type = WebMenuItemInfo::Group; else popupItem.type = WebMenuItemInfo::Option; popupItem.enabled = popupMenuClient.itemIsEnabled(i); popupItem.checked = popupMenuClient.itemIsSelected(i); popupItem.textDirection = toWebTextDirection(style.textDirection()); popupItem.hasTextDirectionOverride = style.hasTextDirectionOverride(); } info.itemHeight = popupMenuClient.menuStyle().font().fontMetrics().height(); info.itemFontSize = static_cast<int>(popupMenuClient.menuStyle().font().fontDescription().computedSize()); info.selectedIndex = toExternalPopupMenuItemIndex(popupMenuClient.selectedIndex(), popupMenuClient); info.rightAligned = popupMenuClient.menuStyle().textDirection() == RTL; info.allowMultipleSelection = popupMenuClient.multiple(); if (count < itemCount) items.shrink(count); info.items = items; }
void ExternalPopupMenu::getPopupMenuInfo(WebPopupMenuInfo& info, HTMLSelectElement& ownerElement) { const WillBeHeapVector<RawPtrWillBeMember<HTMLElement>>& listItems = ownerElement.listItems(); size_t itemCount = listItems.size(); size_t count = 0; Vector<WebMenuItemInfo> items(itemCount); for (size_t i = 0; i < itemCount; ++i) { if (ownerElement.itemIsDisplayNone(*listItems[i])) continue; Element& itemElement = *listItems[i]; WebMenuItemInfo& popupItem = items[count++]; popupItem.label = ownerElement.itemText(itemElement); popupItem.toolTip = itemElement.title(); popupItem.checked = false; if (isHTMLHRElement(itemElement)) { popupItem.type = WebMenuItemInfo::Separator; } else if (isHTMLOptGroupElement(itemElement)) { popupItem.type = WebMenuItemInfo::Group; } else { popupItem.type = WebMenuItemInfo::Option; popupItem.checked = toHTMLOptionElement(itemElement).selected(); } popupItem.enabled = !itemElement.isDisabledFormControl(); const ComputedStyle& style = *ownerElement.itemComputedStyle(itemElement); popupItem.textDirection = toWebTextDirection(style.direction()); popupItem.hasTextDirectionOverride = isOverride(style.unicodeBidi()); } const ComputedStyle& menuStyle = ownerElement.computedStyle() ? *ownerElement.computedStyle() : *ownerElement.ensureComputedStyle(); info.itemHeight = menuStyle.font().fontMetrics().height(); info.itemFontSize = static_cast<int>(menuStyle.font().fontDescription().computedSize()); info.selectedIndex = toExternalPopupMenuItemIndex(ownerElement.optionToListIndex(ownerElement.selectedIndex()), ownerElement); info.rightAligned = menuStyle.direction() == RTL; info.allowMultipleSelection = ownerElement.multiple(); if (count < itemCount) items.shrink(count); info.items = items; }