⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 rendermedia.cpp

📁 linux下开源浏览器WebKit的源码,市面上的很多商用浏览器都是移植自WebKit
💻 CPP
📖 第 1 页 / 共 2 页
字号:
}    void RenderMedia::updateFromElement(){    updateControls();}            void RenderMedia::updateControls(){    HTMLMediaElement* media = mediaElement();    if (!media->controls() || !media->inActiveDocument()) {        if (m_controlsShadowRoot) {            m_controlsShadowRoot->detach();            m_panel = 0;            m_muteButton = 0;            m_playButton = 0;            m_timelineContainer = 0;            m_timeline = 0;            m_seekBackButton = 0;            m_seekForwardButton = 0;            m_currentTimeDisplay = 0;            m_timeRemainingDisplay = 0;            m_fullscreenButton = 0;            m_controlsShadowRoot = 0;        }        m_opacityAnimationTo = 1.0f;        m_opacityAnimationTimer.stop();        m_timeUpdateTimer.stop();        return;    }        if (!m_controlsShadowRoot) {        createControlsShadowRoot();        createPanel();        createMuteButton();        createPlayButton();        createTimelineContainer();        createTimeline();        createSeekBackButton();        createSeekForwardButton();        createCurrentTimeDisplay();        createTimeRemainingDisplay();        createFullscreenButton();    }    if (media->canPlay()) {        if (m_timeUpdateTimer.isActive())            m_timeUpdateTimer.stop();    } else if (style()->visibility() == VISIBLE && m_timeline && m_timeline->renderer() && m_timeline->renderer()->style()->display() != NONE ) {        m_timeUpdateTimer.startRepeating(cTimeUpdateRepeatDelay);    }    m_previousVisible = style()->visibility();        if (m_muteButton)        m_muteButton->update();    if (m_playButton)        m_playButton->update();    if (m_timeline)        m_timeline->update();    if (m_seekBackButton)        m_seekBackButton->update();    if (m_seekForwardButton)        m_seekForwardButton->update();    if (m_fullscreenButton)        m_fullscreenButton->update();    updateTimeDisplay();    updateControlVisibility();}void RenderMedia::timeUpdateTimerFired(Timer<RenderMedia>*){    if (m_timeline)        m_timeline->update(false);    updateTimeDisplay();}    String RenderMedia::formatTime(float time){    if (!isfinite(time))        time = 0;    int seconds = (int)fabsf(time);     int hours = seconds / (60 * 60);    int minutes = (seconds / 60) % 60;    seconds %= 60;    if (hours) {        if (hours > 9)            return String::format("%s%02d:%02d:%02d", (time < 0 ? "-" : ""), hours, minutes, seconds);        else            return String::format("%s%01d:%02d:%02d", (time < 0 ? "-" : ""), hours, minutes, seconds);    }    else        return String::format("%s%02d:%02d", (time < 0 ? "-" : ""), minutes, seconds);}void RenderMedia::updateTimeDisplay(){    if (!m_currentTimeDisplay || !m_currentTimeDisplay->renderer() || m_currentTimeDisplay->renderer()->style()->display() == NONE || style()->visibility() != VISIBLE)        return;    float now = mediaElement()->currentTime();    float duration = mediaElement()->duration();    String timeString = formatTime(now);    ExceptionCode ec;    m_currentTimeDisplay->setInnerText(timeString, ec);        timeString = formatTime(now - duration);    m_timeRemainingDisplay->setInnerText(timeString, ec);}void RenderMedia::updateControlVisibility() {    if (!m_panel || !m_panel->renderer())        return;    // Don't fade for audio controls.    HTMLMediaElement* media = mediaElement();    if (!media->hasVideo())        return;    // do fading manually, css animations don't work well with shadow trees    bool visible = style()->visibility() == VISIBLE && (m_mouseOver || media->canPlay());    if (visible == (m_opacityAnimationTo > 0))        return;    if (style()->visibility() != m_previousVisible) {        // don't fade gradually if it the element has just changed visibility        m_previousVisible = style()->visibility();        m_opacityAnimationTo = m_previousVisible == VISIBLE ? 1.0f : 0;        changeOpacity(m_panel.get(), m_opacityAnimationTo);        return;    }    if (visible) {        m_opacityAnimationFrom = m_panel->renderer()->style()->opacity();        m_opacityAnimationTo = 1.0f;    } else {        m_opacityAnimationFrom = m_panel->renderer()->style()->opacity();        m_opacityAnimationTo = 0;    }    m_opacityAnimationStartTime = currentTime();    m_opacityAnimationTimer.startRepeating(cOpacityAnimationRepeatDelay);}    void RenderMedia::changeOpacity(HTMLElement* e, float opacity) {    if (!e || !e->renderer() || !e->renderer()->style())        return;    RefPtr<RenderStyle> s = RenderStyle::clone(e->renderer()->style());    s->setOpacity(opacity);    // z-index can't be auto if opacity is used    s->setZIndex(0);    e->renderer()->setStyle(s.release());}    void RenderMedia::opacityAnimationTimerFired(Timer<RenderMedia>*){    double time = currentTime() - m_opacityAnimationStartTime;    if (time >= cOpacityAnimationDuration) {        time = cOpacityAnimationDuration;        m_opacityAnimationTimer.stop();    }    float opacity = narrowPrecisionToFloat(m_opacityAnimationFrom + (m_opacityAnimationTo - m_opacityAnimationFrom) * time / cOpacityAnimationDuration);    changeOpacity(m_panel.get(), opacity);}void RenderMedia::forwardEvent(Event* event){    if (event->isMouseEvent() && m_controlsShadowRoot) {        MouseEvent* mouseEvent = static_cast<MouseEvent*>(event);        IntPoint point(mouseEvent->pageX(), mouseEvent->pageY());        if (m_muteButton && m_muteButton->hitTest(point))            m_muteButton->defaultEventHandler(event);        if (m_playButton && m_playButton->hitTest(point))            m_playButton->defaultEventHandler(event);        if (m_seekBackButton && m_seekBackButton->hitTest(point))            m_seekBackButton->defaultEventHandler(event);        if (m_seekForwardButton && m_seekForwardButton->hitTest(point))            m_seekForwardButton->defaultEventHandler(event);        if (m_timeline && m_timeline->hitTest(point))            m_timeline->defaultEventHandler(event);        if (m_fullscreenButton && m_fullscreenButton->hitTest(point))            m_fullscreenButton->defaultEventHandler(event);                if (event->type() == eventNames().mouseoverEvent) {            m_mouseOver = true;            updateControlVisibility();        }        if (event->type() == eventNames().mouseoutEvent) {            // When the scrollbar thumb captures mouse events, we should treat the mouse as still being over our renderer if the new target is a descendant            Node* mouseOverNode = mouseEvent->relatedTarget() ? mouseEvent->relatedTarget()->toNode() : 0;            RenderObject* mouseOverRenderer = mouseOverNode ? mouseOverNode->renderer() : 0;            m_mouseOver = mouseOverRenderer && mouseOverRenderer->isDescendantOf(this);            updateControlVisibility();        }    }}int RenderMedia::lowestPosition(bool includeOverflowInterior, bool includeSelf) const{    int bottom = RenderReplaced::lowestPosition(includeOverflowInterior, includeSelf);    if (!m_controlsShadowRoot || !m_controlsShadowRoot->renderer())        return bottom;        return max(bottom,  m_controlsShadowRoot->renderBox()->y() + m_controlsShadowRoot->renderBox()->lowestPosition(includeOverflowInterior, includeSelf));}int RenderMedia::rightmostPosition(bool includeOverflowInterior, bool includeSelf) const{    int right = RenderReplaced::rightmostPosition(includeOverflowInterior, includeSelf);    if (!m_controlsShadowRoot || !m_controlsShadowRoot->renderer())        return right;        return max(right, m_controlsShadowRoot->renderBox()->x() + m_controlsShadowRoot->renderBox()->rightmostPosition(includeOverflowInterior, includeSelf));}int RenderMedia::leftmostPosition(bool includeOverflowInterior, bool includeSelf) const{    int left = RenderReplaced::leftmostPosition(includeOverflowInterior, includeSelf);    if (!m_controlsShadowRoot || !m_controlsShadowRoot->renderer())        return left;        return min(left, m_controlsShadowRoot->renderBox()->x() +  m_controlsShadowRoot->renderBox()->leftmostPosition(includeOverflowInterior, includeSelf));}} // namespace WebCore#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -