OLD | NEW |
1 /* | 1 /* |
2 * Copyright (C) 2009 Apple Inc. | 2 * Copyright (C) 2009 Apple Inc. |
3 * Copyright (C) 2009 Google Inc. | 3 * Copyright (C) 2009 Google Inc. |
4 * All rights reserved. | 4 * All rights reserved. |
5 * | 5 * |
6 * Redistribution and use in source and binary forms, with or without | 6 * Redistribution and use in source and binary forms, with or without |
7 * modification, are permitted provided that the following conditions | 7 * modification, are permitted provided that the following conditions |
8 * are met: | 8 * are met: |
9 * 1. Redistributions of source code must retain the above copyright | 9 * 1. Redistributions of source code must retain the above copyright |
10 * notice, this list of conditions and the following disclaimer. | 10 * notice, this list of conditions and the following disclaimer. |
(...skipping 244 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
255 sliderBackgroundColor); | 255 sliderBackgroundColor); |
256 } | 256 } |
257 | 257 |
258 static void paintSliderRangeHighlight(const IntRect& rect, | 258 static void paintSliderRangeHighlight(const IntRect& rect, |
259 const ComputedStyle& style, | 259 const ComputedStyle& style, |
260 GraphicsContext& context, | 260 GraphicsContext& context, |
261 int startPosition, | 261 int startPosition, |
262 int endPosition, | 262 int endPosition, |
263 Color startColor, | 263 Color startColor, |
264 Color endColor) { | 264 Color endColor) { |
265 // Calculate border radius; need to avoid being smaller than half the slider h
eight | 265 // Calculate border radius; need to avoid being smaller than half the slider |
266 // because of https://bugs.webkit.org/show_bug.cgi?id=30143. | 266 // height because of https://bugs.webkit.org/show_bug.cgi?id=30143. |
267 float borderRadius = rect.height() / 2.0f; | 267 float borderRadius = rect.height() / 2.0f; |
268 FloatSize radii(borderRadius, borderRadius); | 268 FloatSize radii(borderRadius, borderRadius); |
269 | 269 |
270 // Calculate highlight rectangle and edge dimensions. | 270 // Calculate highlight rectangle and edge dimensions. |
271 int startOffset = startPosition; | 271 int startOffset = startPosition; |
272 int endOffset = rect.width() - endPosition; | 272 int endOffset = rect.width() - endPosition; |
273 int rangeWidth = endPosition - startPosition; | 273 int rangeWidth = endPosition - startPosition; |
274 | 274 |
275 if (rangeWidth <= 0) | 275 if (rangeWidth <= 0) |
276 return; | 276 return; |
277 | 277 |
278 // Make sure the range width is bigger than border radius at the edges to reta
in rounded corners. | 278 // Make sure the range width is bigger than border radius at the edges to |
| 279 // retain rounded corners. |
279 if (startOffset < borderRadius && rangeWidth < borderRadius) | 280 if (startOffset < borderRadius && rangeWidth < borderRadius) |
280 rangeWidth = borderRadius; | 281 rangeWidth = borderRadius; |
281 if (endOffset < borderRadius && rangeWidth < borderRadius) | 282 if (endOffset < borderRadius && rangeWidth < borderRadius) |
282 rangeWidth = borderRadius; | 283 rangeWidth = borderRadius; |
283 | 284 |
284 // Set rectangle to highlight range. | 285 // Set rectangle to highlight range. |
285 IntRect highlightRect = rect; | 286 IntRect highlightRect = rect; |
286 highlightRect.move(startOffset, 0); | 287 highlightRect.move(startOffset, 0); |
287 highlightRect.setWidth(rangeWidth); | 288 highlightRect.setWidth(rangeWidth); |
288 | 289 |
289 // Don't bother drawing an empty area. | 290 // Don't bother drawing an empty area. |
290 if (highlightRect.isEmpty()) | 291 if (highlightRect.isEmpty()) |
291 return; | 292 return; |
292 | 293 |
293 // Calculate white-grey gradient. | 294 // Calculate white-grey gradient. |
294 FloatPoint sliderTopLeft = highlightRect.location(); | 295 FloatPoint sliderTopLeft = highlightRect.location(); |
295 FloatPoint sliderBottomLeft = sliderTopLeft; | 296 FloatPoint sliderBottomLeft = sliderTopLeft; |
296 sliderBottomLeft.move(0, highlightRect.height()); | 297 sliderBottomLeft.move(0, highlightRect.height()); |
297 RefPtr<Gradient> gradient = Gradient::create(sliderTopLeft, sliderBottomLeft); | 298 RefPtr<Gradient> gradient = Gradient::create(sliderTopLeft, sliderBottomLeft); |
298 gradient->addColorStop(0.0, startColor); | 299 gradient->addColorStop(0.0, startColor); |
299 gradient->addColorStop(1.0, endColor); | 300 gradient->addColorStop(1.0, endColor); |
300 | 301 |
301 // Fill highlight rectangle with gradient, potentially rounded if on left or r
ight edge. | 302 // Fill highlight rectangle with gradient, potentially rounded if on left or |
| 303 // right edge. |
302 SkPaint gradientPaint(context.fillPaint()); | 304 SkPaint gradientPaint(context.fillPaint()); |
303 gradient->applyToPaint(gradientPaint, SkMatrix::I()); | 305 gradient->applyToPaint(gradientPaint, SkMatrix::I()); |
304 | 306 |
305 if (startOffset < borderRadius && endOffset < borderRadius) | 307 if (startOffset < borderRadius && endOffset < borderRadius) |
306 context.drawRRect( | 308 context.drawRRect( |
307 FloatRoundedRect(highlightRect, radii, radii, radii, radii), | 309 FloatRoundedRect(highlightRect, radii, radii, radii, radii), |
308 gradientPaint); | 310 gradientPaint); |
309 else if (startOffset < borderRadius) | 311 else if (startOffset < borderRadius) |
310 context.drawRRect(FloatRoundedRect(highlightRect, radii, FloatSize(0, 0), | 312 context.drawRRect(FloatRoundedRect(highlightRect, radii, FloatSize(0, 0), |
311 radii, FloatSize(0, 0)), | 313 radii, FloatSize(0, 0)), |
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
354 | 356 |
355 // Paint the slider bar in the "no data buffered" state. | 357 // Paint the slider bar in the "no data buffered" state. |
356 Color sliderBackgroundColor; | 358 Color sliderBackgroundColor; |
357 if (!useNewUi) | 359 if (!useNewUi) |
358 sliderBackgroundColor = Color(11, 11, 11); | 360 sliderBackgroundColor = Color(11, 11, 11); |
359 else | 361 else |
360 sliderBackgroundColor = Color(0xda, 0xda, 0xda); | 362 sliderBackgroundColor = Color(0xda, 0xda, 0xda); |
361 | 363 |
362 paintRoundedSliderBackground(rect, style, context, sliderBackgroundColor); | 364 paintRoundedSliderBackground(rect, style, context, sliderBackgroundColor); |
363 | 365 |
364 // Draw the buffered range. Since the element may have multiple buffered range
s and it'd be | 366 // Draw the buffered range. Since the element may have multiple buffered |
365 // distracting/'busy' to show all of them, show only the buffered range contai
ning the current play head. | 367 // ranges and it'd be distracting/'busy' to show all of them, show only the |
| 368 // buffered range containing the current play head. |
366 TimeRanges* bufferedTimeRanges = mediaElement->buffered(); | 369 TimeRanges* bufferedTimeRanges = mediaElement->buffered(); |
367 float duration = mediaElement->duration(); | 370 float duration = mediaElement->duration(); |
368 float currentTime = mediaElement->currentTime(); | 371 float currentTime = mediaElement->currentTime(); |
369 if (std::isnan(duration) || std::isinf(duration) || !duration || | 372 if (std::isnan(duration) || std::isinf(duration) || !duration || |
370 std::isnan(currentTime)) | 373 std::isnan(currentTime)) |
371 return; | 374 return; |
372 | 375 |
373 for (unsigned i = 0; i < bufferedTimeRanges->length(); ++i) { | 376 for (unsigned i = 0; i < bufferedTimeRanges->length(); ++i) { |
374 float start = bufferedTimeRanges->start(i, ASSERT_NO_EXCEPTION); | 377 float start = bufferedTimeRanges->start(i, ASSERT_NO_EXCEPTION); |
375 float end = bufferedTimeRanges->end(i, ASSERT_NO_EXCEPTION); | 378 float end = bufferedTimeRanges->end(i, ASSERT_NO_EXCEPTION); |
376 // The delta is there to avoid corner cases when buffered | 379 // The delta is there to avoid corner cases when buffered |
377 // ranges is out of sync with current time because of | 380 // ranges is out of sync with current time because of |
378 // asynchronous media pipeline and current time caching in | 381 // asynchronous media pipeline and current time caching in |
379 // HTMLMediaElement. | 382 // HTMLMediaElement. |
380 // This is related to https://www.w3.org/Bugs/Public/show_bug.cgi?id=28125 | 383 // This is related to https://www.w3.org/Bugs/Public/show_bug.cgi?id=28125 |
381 // FIXME: Remove this workaround when WebMediaPlayer | 384 // FIXME: Remove this workaround when WebMediaPlayer |
382 // has an asynchronous pause interface. | 385 // has an asynchronous pause interface. |
383 if (std::isnan(start) || std::isnan(end) || | 386 if (std::isnan(start) || std::isnan(end) || |
384 start > currentTime + kCurrentTimeBufferedDelta || end < currentTime) | 387 start > currentTime + kCurrentTimeBufferedDelta || end < currentTime) |
385 continue; | 388 continue; |
386 int startPosition = int(start * rect.width() / duration); | 389 int startPosition = int(start * rect.width() / duration); |
387 int currentPosition = int(currentTime * rect.width() / duration); | 390 int currentPosition = int(currentTime * rect.width() / duration); |
388 int endPosition = int(end * rect.width() / duration); | 391 int endPosition = int(end * rect.width() / duration); |
389 | 392 |
390 if (!useNewUi) { | 393 if (!useNewUi) { |
391 // Add half the thumb width proportionally adjusted to the current paintin
g position. | 394 // Add half the thumb width proportionally adjusted to the current |
| 395 // painting position. |
392 int thumbCenter = mediaSliderThumbWidth / 2; | 396 int thumbCenter = mediaSliderThumbWidth / 2; |
393 int addWidth = thumbCenter * (1.0 - 2.0 * currentPosition / rect.width()); | 397 int addWidth = thumbCenter * (1.0 - 2.0 * currentPosition / rect.width()); |
394 currentPosition += addWidth; | 398 currentPosition += addWidth; |
395 } | 399 } |
396 | 400 |
397 // Draw highlight before current time. | 401 // Draw highlight before current time. |
398 Color startColor; | 402 Color startColor; |
399 Color endColor; | 403 Color endColor; |
400 if (!useNewUi) { | 404 if (!useNewUi) { |
401 startColor = Color(195, 195, 195); // white-ish. | 405 startColor = Color(195, 195, 195); // white-ish. |
(...skipping 196 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
598 const PaintInfo& paintInfo, | 602 const PaintInfo& paintInfo, |
599 const IntRect& rect) { | 603 const IntRect& rect) { |
600 const HTMLMediaElement* mediaElement = toParentMediaElement(object); | 604 const HTMLMediaElement* mediaElement = toParentMediaElement(object); |
601 if (!mediaElement) | 605 if (!mediaElement) |
602 return false; | 606 return false; |
603 | 607 |
604 static Image* mediaCastOn = | 608 static Image* mediaCastOn = |
605 platformResource("mediaplayerCastOn", "mediaplayerCastOnNew"); | 609 platformResource("mediaplayerCastOn", "mediaplayerCastOnNew"); |
606 static Image* mediaCastOff = | 610 static Image* mediaCastOff = |
607 platformResource("mediaplayerCastOff", "mediaplayerCastOffNew"); | 611 platformResource("mediaplayerCastOff", "mediaplayerCastOffNew"); |
608 // To ensure that the overlaid cast button is visible when overlaid on pale vi
deos we use a | 612 // To ensure that the overlaid cast button is visible when overlaid on pale |
609 // different version of it for the overlaid case with a semi-opaque background
. | 613 // videos we use a different version of it for the overlaid case with a |
| 614 // semi-opaque background. |
610 static Image* mediaOverlayCastOff = platformResource( | 615 static Image* mediaOverlayCastOff = platformResource( |
611 "mediaplayerOverlayCastOff", "mediaplayerOverlayCastOffNew"); | 616 "mediaplayerOverlayCastOff", "mediaplayerOverlayCastOffNew"); |
612 | 617 |
613 bool isEnabled = mediaElement->hasRemoteRoutes(); | 618 bool isEnabled = mediaElement->hasRemoteRoutes(); |
614 | 619 |
615 switch (mediaControlElementType(object.node())) { | 620 switch (mediaControlElementType(object.node())) { |
616 case MediaCastOnButton: | 621 case MediaCastOnButton: |
617 return paintMediaButton(paintInfo.context, rect, mediaCastOn, &object, | 622 return paintMediaButton(paintInfo.context, rect, mediaCastOn, &object, |
618 isEnabled); | 623 isEnabled); |
619 case MediaOverlayCastOnButton: | 624 case MediaOverlayCastOnButton: |
(...skipping 102 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
722 } | 727 } |
723 | 728 |
724 float zoomLevel = style.effectiveZoom(); | 729 float zoomLevel = style.effectiveZoom(); |
725 if (thumbImage) { | 730 if (thumbImage) { |
726 style.setWidth(Length(static_cast<int>(width * zoomLevel), Fixed)); | 731 style.setWidth(Length(static_cast<int>(width * zoomLevel), Fixed)); |
727 style.setHeight(Length(static_cast<int>(height * zoomLevel), Fixed)); | 732 style.setHeight(Length(static_cast<int>(height * zoomLevel), Fixed)); |
728 } | 733 } |
729 } | 734 } |
730 | 735 |
731 } // namespace blink | 736 } // namespace blink |
OLD | NEW |