diff options
Diffstat (limited to 'WebCore/rendering/RenderMediaControlsChromium.cpp')
-rw-r--r-- | WebCore/rendering/RenderMediaControlsChromium.cpp | 39 |
1 files changed, 27 insertions, 12 deletions
diff --git a/WebCore/rendering/RenderMediaControlsChromium.cpp b/WebCore/rendering/RenderMediaControlsChromium.cpp index bba2fa2..56fbec4 100644 --- a/WebCore/rendering/RenderMediaControlsChromium.cpp +++ b/WebCore/rendering/RenderMediaControlsChromium.cpp @@ -54,14 +54,16 @@ static Image* platformResource(const char* name) 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) { - // Create a destination rectangle for the image that is centered in the drawing rectangle, rounded left, and down. IntRect imageRect = image->rect(); - imageRect.setY(rect.y() + (rect.height() - image->height() + 1) / 2); - imageRect.setX(rect.x() + (rect.width() - image->width() + 1) / 2); - - context->drawImage(image, imageRect); + context->drawImage(image, rect); return true; } @@ -75,7 +77,7 @@ static bool paintMediaMuteButton(RenderObject* object, const RenderObject::Paint static Image* soundNone = platformResource("mediaSoundNone"); static Image* soundDisabled = platformResource("mediaSoundDisabled"); - if (mediaElement->networkState() == HTMLMediaElement::NETWORK_NO_SOURCE || !mediaElement->hasAudio()) + if (!hasSource(mediaElement) || !mediaElement->hasAudio()) return paintMediaButton(paintInfo.context, rect, soundDisabled); return paintMediaButton(paintInfo.context, rect, mediaElement->muted() ? soundNone: soundFull); @@ -91,7 +93,7 @@ static bool paintMediaPlayButton(RenderObject* object, const RenderObject::Paint static Image* mediaPause = platformResource("mediaPause"); static Image* mediaPlayDisabled = platformResource("mediaPlayDisabled"); - if (mediaElement->networkState() == HTMLMediaElement::NETWORK_NO_SOURCE) + if (!hasSource(mediaElement)) return paintMediaButton(paintInfo.context, rect, mediaPlayDisabled); return paintMediaButton(paintInfo.context, rect, mediaElement->paused() ? mediaPlay : mediaPause); @@ -110,6 +112,7 @@ static bool paintMediaSlider(RenderObject* object, const RenderObject::PaintInfo // FIXME: this should be a rounded rect but need to fix GraphicsContextSkia first. // https://bugs.webkit.org/show_bug.cgi?id=30143 context->save(); + context->setShouldAntialias(true); context->setStrokeStyle(SolidStroke); context->setStrokeColor(style->borderLeftColor()); context->setStrokeThickness(style->borderLeftWidth()); @@ -119,10 +122,9 @@ static bool paintMediaSlider(RenderObject* object, const RenderObject::PaintInfo // Draw the buffered ranges. // FIXME: Draw multiple ranges if there are multiple buffered ranges. - // FIXME: percentLoaded() doesn't always hit 1.0 so we're using round(). IntRect bufferedRect = rect; bufferedRect.inflate(-style->borderLeftWidth()); - bufferedRect.setWidth(round((bufferedRect.width() * mediaElement->percentLoaded()))); + bufferedRect.setWidth((bufferedRect.width() * mediaElement->percentLoaded())); // Don't bother drawing an empty area. if (!bufferedRect.isEmpty()) { @@ -138,7 +140,7 @@ static bool paintMediaSlider(RenderObject* object, const RenderObject::PaintInfo context->save(); context->setStrokeStyle(NoStroke); context->setFillGradient(gradient); - context->drawRect(bufferedRect); + context->fillRect(bufferedRect); context->restore(); } @@ -150,6 +152,13 @@ static bool paintMediaSliderThumb(RenderObject* object, const RenderObject::Pain if (!object->parent()->isSlider()) return false; + HTMLMediaElement* mediaElement = toParentMediaElement(object->parent()); + if (!mediaElement) + return false; + + if (!hasSource(mediaElement)) + return true; + static Image* mediaSliderThumb = platformResource("mediaSliderThumb"); return paintMediaButton(paintInfo.context, rect, mediaSliderThumb); } @@ -231,6 +240,8 @@ bool RenderMediaControlsChromium::shouldRenderMediaControlPart(ControlPart part, case MediaCurrentTimePart: case MediaTimeRemainingPart: return true; + default: + ; } return false; } @@ -261,6 +272,9 @@ bool RenderMediaControlsChromium::paintMediaControlsPart(MediaControlElementType case MediaCurrentTimeDisplay: case MediaTimeRemainingDisplay: case MediaControlsPanel: + case MediaRewindButton: + case MediaReturnToRealtimeButton: + case MediaStatusDisplay: ASSERT_NOT_REACHED(); break; } @@ -278,9 +292,10 @@ void RenderMediaControlsChromium::adjustMediaSliderThumbSize(RenderObject* objec else if (object->style()->appearance() == MediaVolumeSliderThumbPart) thumbImage = mediaVolumeSliderThumb; + float zoomLevel = object->style()->effectiveZoom(); if (thumbImage) { - object->style()->setWidth(Length(thumbImage->width(), Fixed)); - object->style()->setHeight(Length(thumbImage->height(), Fixed)); + object->style()->setWidth(Length(static_cast<int>(thumbImage->width() * zoomLevel), Fixed)); + object->style()->setHeight(Length(static_cast<int>(thumbImage->height() * zoomLevel), Fixed)); } } |