// TextTrack parameter when passed in as a nullptr, creates the "Off" list item in the track list.
Element* MediaControlTextTrackListElement::createTextTrackListItem(TextTrack* track)
{
    int trackIndex = track ? track->trackIndex() : trackIndexOffValue;
    HTMLLabelElement* trackItem = HTMLLabelElement::create(document());
    trackItem->setShadowPseudoId(AtomicString("-internal-media-controls-text-track-list-item"));
    HTMLInputElement* trackItemInput = HTMLInputElement::create(document(), nullptr, false);
    trackItemInput->setShadowPseudoId(AtomicString("-internal-media-controls-text-track-list-item-input"));
    trackItemInput->setType(InputTypeNames::checkbox);
    trackItemInput->setIntegralAttribute(trackIndexAttrName(), trackIndex);
    if (!mediaElement().textTracksVisible()) {
        if (!track)
            trackItemInput->setChecked(true);
    } else {
        // If there are multiple text tracks set to showing, they must all have
        // checkmarks displayed.
        if (track && track->mode() == TextTrack::showingKeyword())
            trackItemInput->setChecked(true);
    }

    trackItem->appendChild(trackItemInput);
    String trackLabel = getTextTrackLabel(track);
    trackItem->appendChild(Text::create(document(), trackLabel));
    // Add a track kind marker icon if there are multiple tracks with the same label or if the track has no label.
    if (track && (track->label().isEmpty() || hasDuplicateLabel(track))) {
        HTMLSpanElement* trackKindMarker = HTMLSpanElement::create(document());
        if (track->kind() == track->captionsKeyword()) {
            trackKindMarker->setShadowPseudoId(AtomicString("-internal-media-controls-text-track-list-kind-captions"));
        } else {
            DCHECK_EQ(track->kind(), track->subtitlesKeyword());
            trackKindMarker->setShadowPseudoId(AtomicString("-internal-media-controls-text-track-list-kind-subtitles"));
        }
        trackItem->appendChild(trackKindMarker);
    }
    return trackItem;
}
Пример #2
0
HTMLElement* MediaControlInputElement::createOverflowElement(
    MediaControls& mediaControls,
    MediaControlInputElement* button) {
  if (!button)
    return nullptr;

  // We don't want the button visible within the overflow menu.
  button->setIsWanted(false);

  m_overflowMenuText =
      Text::create(mediaControls.document(), button->getOverflowMenuString());

  HTMLLabelElement* element =
      HTMLLabelElement::create(mediaControls.document());
  element->setShadowPseudoId(
      AtomicString("-internal-media-controls-overflow-menu-list-item"));
  // Appending a button to a label element ensures that clicks on the label
  // are passed down to the button, performing the action we'd expect.
  element->appendChild(button);
  element->appendChild(m_overflowMenuText);
  m_overflowMenuElement = element;
  return element;
}