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

Unified Diff: Source/core/rendering/RenderMediaControlsChromium.cpp

Issue 25699002: Rename RenderMediaControlsChromium to RenderMediaControls (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: Created 7 years, 2 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 side-by-side diff with in-line comments
Download patch
Index: Source/core/rendering/RenderMediaControlsChromium.cpp
diff --git a/Source/core/rendering/RenderMediaControlsChromium.cpp b/Source/core/rendering/RenderMediaControlsChromium.cpp
deleted file mode 100644
index 26fc395f103186a58558614e240d0708d2826c96..0000000000000000000000000000000000000000
--- a/Source/core/rendering/RenderMediaControlsChromium.cpp
+++ /dev/null
@@ -1,452 +0,0 @@
-/*
- * Copyright (C) 2009 Apple Inc.
- * Copyright (C) 2009 Google Inc.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
- * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include "config.h"
-#include "core/rendering/RenderMediaControlsChromium.h"
-
-#include "bindings/v8/ExceptionStatePlaceholder.h"
-#include "core/html/HTMLMediaElement.h"
-#include "core/html/TimeRanges.h"
-#include "core/platform/graphics/Gradient.h"
-#include "core/platform/graphics/GraphicsContext.h"
-#include "core/rendering/PaintInfo.h"
-
-namespace WebCore {
-
-typedef WTF::HashMap<const char*, Image*> MediaControlImageMap;
-static MediaControlImageMap* gMediaControlImageMap = 0;
-
-static Image* platformResource(const char* name)
-{
- if (!gMediaControlImageMap)
- gMediaControlImageMap = new MediaControlImageMap();
- if (Image* image = gMediaControlImageMap->get(name))
- return image;
- if (Image* image = Image::loadPlatformResource(name).leakRef()) {
- gMediaControlImageMap->set(name, image);
- return image;
- }
- ASSERT_NOT_REACHED();
- return 0;
-}
-
-static bool hasSource(const HTMLMediaElement* mediaElement)
-{
- return mediaElement->networkState() != HTMLMediaElement::NETWORK_EMPTY
- && mediaElement->networkState() != HTMLMediaElement::NETWORK_NO_SOURCE;
-}
-
-static bool paintMediaButton(GraphicsContext* context, const IntRect& rect, Image* image)
-{
- context->drawImage(image, rect);
- return true;
-}
-
-static bool paintMediaMuteButton(RenderObject* object, const PaintInfo& paintInfo, const IntRect& rect)
-{
- HTMLMediaElement* mediaElement = toParentMediaElement(object);
- if (!mediaElement)
- return false;
-
- static Image* soundLevel3 = platformResource("mediaplayerSoundLevel3");
- static Image* soundLevel2 = platformResource("mediaplayerSoundLevel2");
- static Image* soundLevel1 = platformResource("mediaplayerSoundLevel1");
- static Image* soundLevel0 = platformResource("mediaplayerSoundLevel0");
- static Image* soundDisabled = platformResource("mediaplayerSoundDisabled");
-
- if (!hasSource(mediaElement) || !mediaElement->hasAudio())
- return paintMediaButton(paintInfo.context, rect, soundDisabled);
-
- if (mediaElement->muted() || mediaElement->volume() <= 0)
- return paintMediaButton(paintInfo.context, rect, soundLevel0);
-
- if (mediaElement->volume() <= 0.33)
- return paintMediaButton(paintInfo.context, rect, soundLevel1);
-
- if (mediaElement->volume() <= 0.66)
- return paintMediaButton(paintInfo.context, rect, soundLevel2);
-
- return paintMediaButton(paintInfo.context, rect, soundLevel3);
-}
-
-static bool paintMediaPlayButton(RenderObject* object, const PaintInfo& paintInfo, const IntRect& rect)
-{
- HTMLMediaElement* mediaElement = toParentMediaElement(object);
- if (!mediaElement)
- return false;
-
- static Image* mediaPlay = platformResource("mediaplayerPlay");
- static Image* mediaPause = platformResource("mediaplayerPause");
- static Image* mediaPlayDisabled = platformResource("mediaplayerPlayDisabled");
-
- if (!hasSource(mediaElement))
- return paintMediaButton(paintInfo.context, rect, mediaPlayDisabled);
-
- return paintMediaButton(paintInfo.context, rect, mediaElement->canPlay() ? mediaPlay : mediaPause);
-}
-
-static bool paintMediaOverlayPlayButton(RenderObject* object, const PaintInfo& paintInfo, const IntRect& rect)
-{
- HTMLMediaElement* mediaElement = toParentMediaElement(object);
- if (!mediaElement)
- return false;
-
- if (!hasSource(mediaElement) || !mediaElement->canPlay())
- return false;
-
- static Image* mediaOverlayPlay = platformResource("mediaplayerOverlayPlay");
- return paintMediaButton(paintInfo.context, rect, mediaOverlayPlay);
-}
-
-static Image* getMediaSliderThumb()
-{
- static Image* mediaSliderThumb = platformResource("mediaplayerSliderThumb");
- return mediaSliderThumb;
-}
-
-static void paintRoundedSliderBackground(const IntRect& rect, const RenderStyle* style, GraphicsContext* context)
-{
- int borderRadius = rect.height() / 2;
- IntSize radii(borderRadius, borderRadius);
- Color sliderBackgroundColor = Color(11, 11, 11);
- context->save();
- context->fillRoundedRect(rect, radii, radii, radii, radii, sliderBackgroundColor);
- context->restore();
-}
-
-static void paintSliderRangeHighlight(const IntRect& rect, const RenderStyle* style, GraphicsContext* context, int startPosition, int endPosition, Color startColor, Color endColor)
-{
- // Calculate border radius; need to avoid being smaller than half the slider height
- // because of https://bugs.webkit.org/show_bug.cgi?id=30143.
- int borderRadius = rect.height() / 2;
- IntSize radii(borderRadius, borderRadius);
-
- // Calculate highlight rectangle and edge dimensions.
- int startOffset = startPosition;
- int endOffset = rect.width() - endPosition;
- int rangeWidth = endPosition - startPosition;
-
- if (rangeWidth <= 0)
- return;
-
- // Make sure the range width is bigger than border radius at the edges to retain rounded corners.
- if (startOffset < borderRadius && rangeWidth < borderRadius)
- rangeWidth = borderRadius;
- if (endOffset < borderRadius && rangeWidth < borderRadius) {
- startPosition -= borderRadius - rangeWidth;
- rangeWidth = borderRadius;
- }
-
- // Set rectangle to highlight range.
- IntRect highlightRect = rect;
- highlightRect.move(startOffset, 0);
- highlightRect.setWidth(rangeWidth);
-
- // Don't bother drawing an empty area.
- if (highlightRect.isEmpty())
- return;
-
- // Calculate white-grey gradient.
- IntPoint sliderTopLeft = highlightRect.location();
- IntPoint sliderBottomLeft = sliderTopLeft;
- sliderBottomLeft.move(0, highlightRect.height());
- RefPtr<Gradient> gradient = Gradient::create(sliderTopLeft, sliderBottomLeft);
- gradient->addColorStop(0.0, startColor);
- gradient->addColorStop(1.0, endColor);
-
- // Fill highlight rectangle with gradient, potentially rounded if on left or right edge.
- context->save();
- context->setFillGradient(gradient);
-
- if (startOffset < borderRadius && endOffset < borderRadius)
- context->fillRoundedRect(highlightRect, radii, radii, radii, radii, startColor);
- else if (startOffset < borderRadius)
- context->fillRoundedRect(highlightRect, radii, IntSize(0, 0), radii, IntSize(0, 0), startColor);
- else if (endOffset < borderRadius)
- context->fillRoundedRect(highlightRect, IntSize(0, 0), radii, IntSize(0, 0), radii, startColor);
- else
- context->fillRect(highlightRect);
-
- context->restore();
-}
-
-const int mediaSliderThumbWidth = 32;
-
-static bool paintMediaSlider(RenderObject* object, const PaintInfo& paintInfo, const IntRect& rect)
-{
- HTMLMediaElement* mediaElement = toParentMediaElement(object);
- if (!mediaElement)
- return false;
-
- RenderStyle* style = object->style();
- GraphicsContext* context = paintInfo.context;
-
- paintRoundedSliderBackground(rect, style, context);
-
- // Draw the buffered range. Since the element may have multiple buffered ranges and it'd be
- // distracting/'busy' to show all of them, show only the buffered range containing the current play head.
- RefPtr<TimeRanges> bufferedTimeRanges = mediaElement->buffered();
- float duration = mediaElement->duration();
- float currentTime = mediaElement->currentTime();
- if (std::isnan(duration) || std::isinf(duration) || !duration || std::isnan(currentTime))
- return true;
-
- for (unsigned i = 0; i < bufferedTimeRanges->length(); ++i) {
- float start = bufferedTimeRanges->start(i, ASSERT_NO_EXCEPTION);
- float end = bufferedTimeRanges->end(i, ASSERT_NO_EXCEPTION);
- if (std::isnan(start) || std::isnan(end) || start > currentTime || end < currentTime)
- continue;
- int startPosition = int(start * rect.width() / duration);
- int currentPosition = int(currentTime * rect.width() / duration);
- int endPosition = int(end * rect.width() / duration);
-
- // Add half the thumb width proportionally adjusted to the current painting position.
- int thumbCenter = mediaSliderThumbWidth / 2;
- int addWidth = thumbCenter * (1.0 - 2.0 * currentPosition / rect.width());
- currentPosition += addWidth;
-
- // Draw white-ish highlight before current time.
- Color startColor = Color(195, 195, 195);
- Color endColor = Color(217, 217, 217);
- if (currentPosition > startPosition)
- paintSliderRangeHighlight(rect, style, context, startPosition, currentPosition, startColor, endColor);
-
- // Draw grey-ish highlight after current time.
- startColor = Color(60, 60, 60);
- endColor = Color(76, 76, 76);
-
- if (endPosition > currentPosition)
- paintSliderRangeHighlight(rect, style, context, currentPosition, endPosition, startColor, endColor);
-
- return true;
- }
-
- return true;
-}
-
-static bool paintMediaSliderThumb(RenderObject* object, const PaintInfo& paintInfo, const IntRect& rect)
-{
- ASSERT(object->node());
- HTMLMediaElement* mediaElement = toParentMediaElement(object->node()->shadowHost());
- if (!mediaElement)
- return false;
-
- if (!hasSource(mediaElement))
- return true;
-
- Image* mediaSliderThumb = getMediaSliderThumb();
- return paintMediaButton(paintInfo.context, rect, mediaSliderThumb);
-}
-
-const int mediaVolumeSliderThumbWidth = 24;
-
-static bool paintMediaVolumeSlider(RenderObject* object, const PaintInfo& paintInfo, const IntRect& rect)
-{
- HTMLMediaElement* mediaElement = toParentMediaElement(object);
- if (!mediaElement)
- return false;
-
- GraphicsContext* context = paintInfo.context;
- RenderStyle* style = object->style();
-
- paintRoundedSliderBackground(rect, style, context);
-
- // Calculate volume position for white background rectangle.
- float volume = mediaElement->volume();
- if (std::isnan(volume) || volume < 0)
- return true;
- if (volume > 1)
- volume = 1;
- if (!hasSource(mediaElement) || !mediaElement->hasAudio() || mediaElement->muted())
- volume = 0;
-
- // Calculate the position relative to the center of the thumb.
- float fillWidth = 0;
- if (volume > 0) {
- float thumbCenter = mediaVolumeSliderThumbWidth / 2;
- float zoomLevel = style->effectiveZoom();
- float positionWidth = volume * (rect.width() - (zoomLevel * thumbCenter));
- fillWidth = positionWidth + (zoomLevel * thumbCenter / 2);
- }
-
- Color startColor = Color(195, 195, 195);
- Color endColor = Color(217, 217, 217);
-
- paintSliderRangeHighlight(rect, style, context, 0.0, fillWidth, startColor, endColor);
-
- return true;
-}
-
-static bool paintMediaVolumeSliderThumb(RenderObject* object, const PaintInfo& paintInfo, const IntRect& rect)
-{
- ASSERT(object->node());
- HTMLMediaElement* mediaElement = toParentMediaElement(object->node()->shadowHost());
- if (!mediaElement)
- return false;
-
- if (!hasSource(mediaElement) || !mediaElement->hasAudio())
- return true;
-
- static Image* mediaVolumeSliderThumb = platformResource("mediaplayerVolumeSliderThumb");
- return paintMediaButton(paintInfo.context, rect, mediaVolumeSliderThumb);
-}
-
-static bool paintMediaFullscreenButton(RenderObject* object, const PaintInfo& paintInfo, const IntRect& rect)
-{
- HTMLMediaElement* mediaElement = toParentMediaElement(object);
- if (!mediaElement)
- return false;
-
- static Image* mediaFullscreenButton = platformResource("mediaplayerFullscreen");
- return paintMediaButton(paintInfo.context, rect, mediaFullscreenButton);
-}
-
-static bool paintMediaToggleClosedCaptionsButton(RenderObject* object, const PaintInfo& paintInfo, const IntRect& rect)
-{
- HTMLMediaElement* mediaElement = toParentMediaElement(object);
- if (!mediaElement)
- return false;
-
- static Image* mediaClosedCaptionButton = platformResource("mediaplayerClosedCaption");
- static Image* mediaClosedCaptionButtonDisabled = platformResource("mediaplayerClosedCaptionDisabled");
-
- if (mediaElement->webkitClosedCaptionsVisible())
- return paintMediaButton(paintInfo.context, rect, mediaClosedCaptionButton);
-
- return paintMediaButton(paintInfo.context, rect, mediaClosedCaptionButtonDisabled);
-}
-
-
-bool RenderMediaControlsChromium::paintMediaControlsPart(MediaControlElementType part, RenderObject* object, const PaintInfo& paintInfo, const IntRect& rect)
-{
- switch (part) {
- case MediaMuteButton:
- case MediaUnMuteButton:
- return paintMediaMuteButton(object, paintInfo, rect);
- case MediaPauseButton:
- case MediaPlayButton:
- return paintMediaPlayButton(object, paintInfo, rect);
- case MediaShowClosedCaptionsButton:
- return paintMediaToggleClosedCaptionsButton(object, paintInfo, rect);
- case MediaSlider:
- return paintMediaSlider(object, paintInfo, rect);
- case MediaSliderThumb:
- return paintMediaSliderThumb(object, paintInfo, rect);
- case MediaVolumeSlider:
- return paintMediaVolumeSlider(object, paintInfo, rect);
- case MediaVolumeSliderThumb:
- return paintMediaVolumeSliderThumb(object, paintInfo, rect);
- case MediaEnterFullscreenButton:
- case MediaExitFullscreenButton:
- return paintMediaFullscreenButton(object, paintInfo, rect);
- case MediaOverlayPlayButton:
- return paintMediaOverlayPlayButton(object, paintInfo, rect);
- case MediaVolumeSliderMuteButton:
- case MediaSeekBackButton:
- case MediaSeekForwardButton:
- case MediaVolumeSliderContainer:
- case MediaTimelineContainer:
- case MediaCurrentTimeDisplay:
- case MediaTimeRemainingDisplay:
- case MediaControlsPanel:
- case MediaRewindButton:
- case MediaReturnToRealtimeButton:
- case MediaStatusDisplay:
- case MediaHideClosedCaptionsButton:
- case MediaTextTrackDisplayContainer:
- case MediaTextTrackDisplay:
- case MediaFullScreenVolumeSlider:
- case MediaFullScreenVolumeSliderThumb:
- ASSERT_NOT_REACHED();
- break;
- }
- return false;
-}
-
-const int mediaSliderThumbHeight = 24;
-const int mediaVolumeSliderThumbHeight = 24;
-
-void RenderMediaControlsChromium::adjustMediaSliderThumbSize(RenderStyle* style)
-{
- static Image* mediaSliderThumb = platformResource("mediaplayerSliderThumb");
- static Image* mediaVolumeSliderThumb = platformResource("mediaplayerVolumeSliderThumb");
- int width = 0;
- int height = 0;
-
- Image* thumbImage = 0;
- if (style->appearance() == MediaSliderThumbPart) {
- thumbImage = mediaSliderThumb;
- width = mediaSliderThumbWidth;
- height = mediaSliderThumbHeight;
- } else if (style->appearance() == MediaVolumeSliderThumbPart) {
- thumbImage = mediaVolumeSliderThumb;
- width = mediaVolumeSliderThumbWidth;
- height = mediaVolumeSliderThumbHeight;
- }
-
- float zoomLevel = style->effectiveZoom();
- if (thumbImage) {
- style->setWidth(Length(static_cast<int>(width * zoomLevel), Fixed));
- style->setHeight(Length(static_cast<int>(height * zoomLevel), Fixed));
- }
-}
-
-static String formatChromiumMediaControlsTime(float time, float duration)
-{
- if (!std::isfinite(time))
- time = 0;
- if (!std::isfinite(duration))
- duration = 0;
- int seconds = static_cast<int>(fabsf(time));
- int hours = seconds / (60 * 60);
- int minutes = (seconds / 60) % 60;
- seconds %= 60;
-
- // duration defines the format of how the time is rendered
- int durationSecs = static_cast<int>(fabsf(duration));
- int durationHours = durationSecs / (60 * 60);
- int durationMins = (durationSecs / 60) % 60;
-
- if (durationHours || hours)
- return String::format("%s%01d:%02d:%02d", (time < 0 ? "-" : ""), hours, minutes, seconds);
- if (durationMins > 9)
- return String::format("%s%02d:%02d", (time < 0 ? "-" : ""), minutes, seconds);
-
- return String::format("%s%01d:%02d", (time < 0 ? "-" : ""), minutes, seconds);
-}
-
-String RenderMediaControlsChromium::formatMediaControlsTime(float time)
-{
- return formatChromiumMediaControlsTime(time, time);
-}
-
-String RenderMediaControlsChromium::formatMediaControlsCurrentTime(float currentTime, float duration)
-{
- return formatChromiumMediaControlsTime(currentTime, duration);
-}
-
-} // namespace WebCore
« no previous file with comments | « Source/core/rendering/RenderMediaControlsChromium.h ('k') | Source/core/rendering/RenderThemeChromiumAndroid.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698