Chromium Code Reviews| 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 26 matching lines...) Expand all Loading... | |
| 37 #include "platform/graphics/Gradient.h" | 37 #include "platform/graphics/Gradient.h" |
| 38 #include "platform/graphics/GraphicsContext.h" | 38 #include "platform/graphics/GraphicsContext.h" |
| 39 | 39 |
| 40 namespace blink { | 40 namespace blink { |
| 41 | 41 |
| 42 static const double kCurrentTimeBufferedDelta = 1.0; | 42 static const double kCurrentTimeBufferedDelta = 1.0; |
| 43 | 43 |
| 44 typedef WTF::HashMap<const char*, Image*> MediaControlImageMap; | 44 typedef WTF::HashMap<const char*, Image*> MediaControlImageMap; |
| 45 static MediaControlImageMap* gMediaControlImageMap = 0; | 45 static MediaControlImageMap* gMediaControlImageMap = 0; |
| 46 | 46 |
| 47 // Current UI slider thumbs sizes. | 47 // Slider thumb sizes, shard between time and volume. |
| 48 static const int mediaSliderThumbWidth = 32; | |
| 49 static const int mediaSliderThumbHeight = 24; | |
| 50 static const int mediaVolumeSliderThumbHeight = 24; | |
| 51 static const int mediaVolumeSliderThumbWidth = 24; | |
| 52 | |
| 53 // New UI slider thumb sizes, shard between time and volume. | |
| 54 static const int mediaSliderThumbTouchWidthNew = 36; // Touch zone size. | 48 static const int mediaSliderThumbTouchWidthNew = 36; // Touch zone size. |
|
foolip
2016/10/24 11:31:50
Drop New suffixes here.
mlamouri (slow - plz ping)
2016/10/24 12:37:23
Done in the last CLs (with renaming).
| |
| 55 static const int mediaSliderThumbTouchHeightNew = 48; | 49 static const int mediaSliderThumbTouchHeightNew = 48; |
| 56 static const int mediaSliderThumbPaintWidthNew = 12; // Painted area. | 50 static const int mediaSliderThumbPaintWidthNew = 12; // Painted area. |
| 57 static const int mediaSliderThumbPaintHeightNew = 12; | 51 static const int mediaSliderThumbPaintHeightNew = 12; |
| 58 | 52 |
| 59 // New UI overlay play button size. | 53 // Overlay play button size. |
| 60 static const int mediaOverlayPlayButtonWidthNew = 48; | 54 static const int mediaOverlayPlayButtonWidthNew = 48; |
| 61 static const int mediaOverlayPlayButtonHeightNew = 48; | 55 static const int mediaOverlayPlayButtonHeightNew = 48; |
| 62 | 56 |
| 63 // Alpha for disabled elements. | 57 // Alpha for disabled elements. |
| 64 static const float kDisabledAlpha = 0.4; | 58 static const float kDisabledAlpha = 0.4; |
| 65 | 59 |
| 66 static Image* platformResource(const char* name) { | 60 static Image* platformResource(const char* name) { |
| 67 if (!gMediaControlImageMap) | 61 if (!gMediaControlImageMap) |
| 68 gMediaControlImageMap = new MediaControlImageMap(); | 62 gMediaControlImageMap = new MediaControlImageMap(); |
| 69 if (Image* image = gMediaControlImageMap->get(name)) | 63 if (Image* image = gMediaControlImageMap->get(name)) |
| 70 return image; | 64 return image; |
| 71 if (Image* image = Image::loadPlatformResource(name).leakRef()) { | 65 if (Image* image = Image::loadPlatformResource(name).leakRef()) { |
| 72 gMediaControlImageMap->set(name, image); | 66 gMediaControlImageMap->set(name, image); |
| 73 return image; | 67 return image; |
| 74 } | 68 } |
| 75 ASSERT_NOT_REACHED(); | 69 ASSERT_NOT_REACHED(); |
| 76 return 0; | 70 return 0; |
| 77 } | 71 } |
| 78 | 72 |
| 79 static Image* platformResource(const char* currentName, const char* newName) { | |
| 80 // Return currentName or newName based on current or new playback. | |
| 81 return platformResource(RuntimeEnabledFeatures::newMediaPlaybackUiEnabled() | |
| 82 ? newName | |
| 83 : currentName); | |
| 84 } | |
| 85 | |
| 86 static bool hasSource(const HTMLMediaElement* mediaElement) { | 73 static bool hasSource(const HTMLMediaElement* mediaElement) { |
| 87 return mediaElement->getNetworkState() != HTMLMediaElement::kNetworkEmpty && | 74 return mediaElement->getNetworkState() != HTMLMediaElement::kNetworkEmpty && |
| 88 mediaElement->getNetworkState() != HTMLMediaElement::kNetworkNoSource; | 75 mediaElement->getNetworkState() != HTMLMediaElement::kNetworkNoSource; |
| 89 } | 76 } |
| 90 | 77 |
| 91 static FloatRect adjustRectForPadding(IntRect rect, | 78 static FloatRect adjustRectForPadding(IntRect rect, |
| 92 const LayoutObject* object) { | 79 const LayoutObject* object) { |
| 93 FloatRect adjustedRect(rect); | 80 FloatRect adjustedRect(rect); |
| 94 | 81 |
| 95 if (!object) | 82 if (!object) |
| (...skipping 11 matching lines...) Expand all Loading... | |
| 107 } | 94 } |
| 108 | 95 |
| 109 return adjustedRect; | 96 return adjustedRect; |
| 110 } | 97 } |
| 111 | 98 |
| 112 static bool paintMediaButton(GraphicsContext& context, | 99 static bool paintMediaButton(GraphicsContext& context, |
| 113 const IntRect& rect, | 100 const IntRect& rect, |
| 114 Image* image, | 101 Image* image, |
| 115 const LayoutObject* object, | 102 const LayoutObject* object, |
| 116 bool isEnabled) { | 103 bool isEnabled) { |
| 117 if (!RuntimeEnabledFeatures::newMediaPlaybackUiEnabled()) { | |
| 118 context.drawImage(image, rect); | |
| 119 return true; | |
| 120 } | |
| 121 | |
| 122 FloatRect drawRect = adjustRectForPadding(rect, object); | 104 FloatRect drawRect = adjustRectForPadding(rect, object); |
| 123 | 105 |
| 124 if (!isEnabled) | 106 if (!isEnabled) |
| 125 context.beginLayer(kDisabledAlpha); | 107 context.beginLayer(kDisabledAlpha); |
| 126 | 108 |
| 127 context.drawImage(image, drawRect); | 109 context.drawImage(image, drawRect); |
| 128 | 110 |
| 129 if (!isEnabled) | 111 if (!isEnabled) |
| 130 context.endLayer(); | 112 context.endLayer(); |
| 131 | 113 |
| 132 return true; | 114 return true; |
| 133 } | 115 } |
| 134 | 116 |
| 135 static bool paintMediaButton(GraphicsContext& context, | 117 static bool paintMediaButton(GraphicsContext& context, |
| 136 const IntRect& rect, | 118 const IntRect& rect, |
| 137 Image* image, | 119 Image* image, |
| 138 bool isEnabled = true) { | 120 bool isEnabled = true) { |
| 139 return paintMediaButton(context, rect, image, 0, isEnabled); | 121 return paintMediaButton(context, rect, image, 0, isEnabled); |
| 140 } | 122 } |
| 141 | 123 |
| 142 bool MediaControlsPainter::paintMediaMuteButton(const LayoutObject& object, | 124 bool MediaControlsPainter::paintMediaMuteButton(const LayoutObject& object, |
| 143 const PaintInfo& paintInfo, | 125 const PaintInfo& paintInfo, |
| 144 const IntRect& rect) { | 126 const IntRect& rect) { |
| 145 const HTMLMediaElement* mediaElement = toParentMediaElement(object); | 127 const HTMLMediaElement* mediaElement = toParentMediaElement(object); |
| 146 if (!mediaElement) | 128 if (!mediaElement) |
| 147 return false; | 129 return false; |
| 148 | 130 |
| 149 // The new UI uses "muted" and "not muted" only. | 131 // The new UI uses "muted" and "not muted" only. |
| 150 static Image* soundLevel3 = | 132 static Image* soundLevel3 = platformResource("mediaplayerSoundLevel3New"); |
|
foolip
2016/10/24 11:31:50
In a follow up, it would be good to rename all of
mlamouri (slow - plz ping)
2016/10/24 12:37:23
Ditto.
| |
| 151 platformResource("mediaplayerSoundLevel3", "mediaplayerSoundLevel3New"); | 133 static Image* soundLevel2 = platformResource("mediaplayerSoundLevel3New"); |
| 152 static Image* soundLevel2 = | 134 static Image* soundLevel1 = platformResource("mediaplayerSoundLevel3New"); |
| 153 platformResource("mediaplayerSoundLevel2", "mediaplayerSoundLevel3New"); | 135 static Image* soundLevel0 = platformResource("mediaplayerSoundLevel0New"); |
| 154 static Image* soundLevel1 = | 136 static Image* soundDisabled = platformResource("mediaplayerSoundLevel0New"); |
| 155 platformResource("mediaplayerSoundLevel1", "mediaplayerSoundLevel3New"); | |
| 156 static Image* soundLevel0 = | |
| 157 platformResource("mediaplayerSoundLevel0", "mediaplayerSoundLevel0New"); | |
| 158 static Image* soundDisabled = | |
| 159 platformResource("mediaplayerSoundDisabled", "mediaplayerSoundLevel0New"); | |
| 160 | 137 |
| 161 if (!hasSource(mediaElement) || !mediaElement->hasAudio()) | 138 if (!hasSource(mediaElement) || !mediaElement->hasAudio()) |
| 162 return paintMediaButton(paintInfo.context, rect, soundDisabled, &object, | 139 return paintMediaButton(paintInfo.context, rect, soundDisabled, &object, |
| 163 false); | 140 false); |
| 164 | 141 |
| 165 if (mediaElement->muted() || mediaElement->volume() <= 0) | 142 if (mediaElement->muted() || mediaElement->volume() <= 0) |
| 166 return paintMediaButton(paintInfo.context, rect, soundLevel0, &object, | 143 return paintMediaButton(paintInfo.context, rect, soundLevel0, &object, |
| 167 true); | 144 true); |
| 168 | 145 |
| 169 if (mediaElement->volume() <= 0.33) | 146 if (mediaElement->volume() <= 0.33) |
| 170 return paintMediaButton(paintInfo.context, rect, soundLevel1, &object, | 147 return paintMediaButton(paintInfo.context, rect, soundLevel1, &object, |
| 171 true); | 148 true); |
| 172 | 149 |
| 173 if (mediaElement->volume() <= 0.66) | 150 if (mediaElement->volume() <= 0.66) |
| 174 return paintMediaButton(paintInfo.context, rect, soundLevel2, &object, | 151 return paintMediaButton(paintInfo.context, rect, soundLevel2, &object, |
| 175 true); | 152 true); |
| 176 | 153 |
| 177 return paintMediaButton(paintInfo.context, rect, soundLevel3, &object, true); | 154 return paintMediaButton(paintInfo.context, rect, soundLevel3, &object, true); |
| 178 } | 155 } |
| 179 | 156 |
| 180 bool MediaControlsPainter::paintMediaPlayButton(const LayoutObject& object, | 157 bool MediaControlsPainter::paintMediaPlayButton(const LayoutObject& object, |
| 181 const PaintInfo& paintInfo, | 158 const PaintInfo& paintInfo, |
| 182 const IntRect& rect) { | 159 const IntRect& rect) { |
| 183 const HTMLMediaElement* mediaElement = toParentMediaElement(object); | 160 const HTMLMediaElement* mediaElement = toParentMediaElement(object); |
| 184 if (!mediaElement) | 161 if (!mediaElement) |
| 185 return false; | 162 return false; |
| 186 | 163 |
| 187 static Image* mediaPlay = | 164 static Image* mediaPlay = platformResource("mediaplayerPlayNew"); |
| 188 platformResource("mediaplayerPlay", "mediaplayerPlayNew"); | 165 static Image* mediaPause = platformResource("mediaplayerPauseNew"); |
| 189 static Image* mediaPause = | |
| 190 platformResource("mediaplayerPause", "mediaplayerPauseNew"); | |
| 191 // For this case, the new UI draws the normal icon, but the entire panel | 166 // For this case, the new UI draws the normal icon, but the entire panel |
| 192 // grays out. | 167 // grays out. |
| 193 static Image* mediaPlayDisabled = | 168 static Image* mediaPlayDisabled = platformResource("mediaplayerPlayNew"); |
| 194 platformResource("mediaplayerPlayDisabled", "mediaplayerPlayNew"); | |
| 195 | 169 |
| 196 if (!hasSource(mediaElement)) | 170 if (!hasSource(mediaElement)) |
| 197 return paintMediaButton(paintInfo.context, rect, mediaPlayDisabled, &object, | 171 return paintMediaButton(paintInfo.context, rect, mediaPlayDisabled, &object, |
| 198 false); | 172 false); |
| 199 | 173 |
| 200 Image* image = | 174 Image* image = |
| 201 !object.node()->isMediaControlElement() || | 175 !object.node()->isMediaControlElement() || |
| 202 mediaControlElementType(object.node()) == MediaPlayButton | 176 mediaControlElementType(object.node()) == MediaPlayButton |
| 203 ? mediaPlay | 177 ? mediaPlay |
| 204 : mediaPause; | 178 : mediaPause; |
| 205 return paintMediaButton(paintInfo.context, rect, image, &object, true); | 179 return paintMediaButton(paintInfo.context, rect, image, &object, true); |
| 206 } | 180 } |
| 207 | 181 |
| 208 bool MediaControlsPainter::paintMediaOverlayPlayButton( | 182 bool MediaControlsPainter::paintMediaOverlayPlayButton( |
| 209 const LayoutObject& object, | 183 const LayoutObject& object, |
| 210 const PaintInfo& paintInfo, | 184 const PaintInfo& paintInfo, |
| 211 const IntRect& rect) { | 185 const IntRect& rect) { |
| 212 const HTMLMediaElement* mediaElement = toParentMediaElement(object); | 186 const HTMLMediaElement* mediaElement = toParentMediaElement(object); |
| 213 if (!mediaElement) | 187 if (!mediaElement) |
| 214 return false; | 188 return false; |
| 215 | 189 |
| 216 if (!hasSource(mediaElement) || !mediaElement->paused()) | 190 if (!hasSource(mediaElement) || !mediaElement->paused()) |
| 217 return false; | 191 return false; |
| 218 | 192 |
| 219 static Image* mediaOverlayPlay = | 193 static Image* mediaOverlayPlay = |
| 220 platformResource("mediaplayerOverlayPlay", "mediaplayerOverlayPlayNew"); | 194 platformResource("mediaplayerOverlayPlayNew"); |
| 221 | 195 |
| 222 IntRect buttonRect(rect); | 196 IntRect buttonRect(rect); |
| 223 if (RuntimeEnabledFeatures::newMediaPlaybackUiEnabled()) { | 197 |
| 224 // Overlay play button covers the entire player, so center and draw a | 198 // Overlay play button covers the entire player, so center and draw a |
| 225 // smaller button. Center in the entire element. | 199 // smaller button. Center in the entire element. |
| 226 // TODO(liberato): object.enclosingBox()? | 200 // TODO(liberato): object.enclosingBox()? |
| 227 const LayoutBox* box = mediaElement->layoutObject()->enclosingBox(); | 201 const LayoutBox* box = mediaElement->layoutObject()->enclosingBox(); |
| 228 if (!box) | 202 if (!box) |
| 229 return false; | 203 return false; |
| 230 int mediaHeight = box->pixelSnappedHeight(); | 204 int mediaHeight = box->pixelSnappedHeight(); |
| 231 buttonRect.setX(rect.center().x() - mediaOverlayPlayButtonWidthNew / 2); | 205 buttonRect.setX(rect.center().x() - mediaOverlayPlayButtonWidthNew / 2); |
| 232 buttonRect.setY(rect.center().y() - mediaOverlayPlayButtonHeightNew / 2 + | 206 buttonRect.setY(rect.center().y() - mediaOverlayPlayButtonHeightNew / 2 + |
| 233 (mediaHeight - rect.height()) / 2); | 207 (mediaHeight - rect.height()) / 2); |
| 234 buttonRect.setWidth(mediaOverlayPlayButtonWidthNew); | 208 buttonRect.setWidth(mediaOverlayPlayButtonWidthNew); |
| 235 buttonRect.setHeight(mediaOverlayPlayButtonHeightNew); | 209 buttonRect.setHeight(mediaOverlayPlayButtonHeightNew); |
| 236 } | |
| 237 | 210 |
| 238 return paintMediaButton(paintInfo.context, buttonRect, mediaOverlayPlay); | 211 return paintMediaButton(paintInfo.context, buttonRect, mediaOverlayPlay); |
| 239 } | 212 } |
| 240 | 213 |
| 241 static Image* getMediaSliderThumb() { | |
| 242 static Image* mediaSliderThumb = | |
| 243 platformResource("mediaplayerSliderThumb", "mediaplayerSliderThumbNew"); | |
| 244 return mediaSliderThumb; | |
| 245 } | |
| 246 | |
| 247 static void paintRoundedSliderBackground(const IntRect& rect, | 214 static void paintRoundedSliderBackground(const IntRect& rect, |
| 248 const ComputedStyle& style, | 215 const ComputedStyle& style, |
| 249 GraphicsContext& context, | 216 GraphicsContext& context, |
| 250 Color sliderBackgroundColor) { | 217 Color sliderBackgroundColor) { |
| 251 float borderRadius = rect.height() / 2; | 218 float borderRadius = rect.height() / 2; |
| 252 FloatSize radii(borderRadius, borderRadius); | 219 FloatSize radii(borderRadius, borderRadius); |
| 253 | 220 |
| 254 context.fillRoundedRect(FloatRoundedRect(rect, radii, radii, radii, radii), | 221 context.fillRoundedRect(FloatRoundedRect(rect, radii, radii, radii, radii), |
| 255 sliderBackgroundColor); | 222 sliderBackgroundColor); |
| 256 } | 223 } |
| (...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 323 bool MediaControlsPainter::paintMediaSlider(const LayoutObject& object, | 290 bool MediaControlsPainter::paintMediaSlider(const LayoutObject& object, |
| 324 const PaintInfo& paintInfo, | 291 const PaintInfo& paintInfo, |
| 325 const IntRect& rect) { | 292 const IntRect& rect) { |
| 326 const HTMLMediaElement* mediaElement = toParentMediaElement(object); | 293 const HTMLMediaElement* mediaElement = toParentMediaElement(object); |
| 327 if (!mediaElement) | 294 if (!mediaElement) |
| 328 return false; | 295 return false; |
| 329 | 296 |
| 330 GraphicsContext& context = paintInfo.context; | 297 GraphicsContext& context = paintInfo.context; |
| 331 | 298 |
| 332 // Should we paint the slider partially transparent? | 299 // Should we paint the slider partially transparent? |
| 333 bool drawUiGrayed = !hasSource(mediaElement) && | 300 bool drawUiGrayed = !hasSource(mediaElement); |
| 334 RuntimeEnabledFeatures::newMediaPlaybackUiEnabled(); | |
| 335 if (drawUiGrayed) | 301 if (drawUiGrayed) |
| 336 context.beginLayer(kDisabledAlpha); | 302 context.beginLayer(kDisabledAlpha); |
| 337 | 303 |
| 338 paintMediaSliderInternal(object, paintInfo, rect); | 304 paintMediaSliderInternal(object, paintInfo, rect); |
| 339 | 305 |
| 340 if (drawUiGrayed) | 306 if (drawUiGrayed) |
| 341 context.endLayer(); | 307 context.endLayer(); |
| 342 | 308 |
| 343 return true; | 309 return true; |
| 344 } | 310 } |
| 345 | 311 |
| 346 void MediaControlsPainter::paintMediaSliderInternal(const LayoutObject& object, | 312 void MediaControlsPainter::paintMediaSliderInternal(const LayoutObject& object, |
| 347 const PaintInfo& paintInfo, | 313 const PaintInfo& paintInfo, |
| 348 const IntRect& rect) { | 314 const IntRect& rect) { |
| 349 const bool useNewUi = RuntimeEnabledFeatures::newMediaPlaybackUiEnabled(); | |
| 350 const HTMLMediaElement* mediaElement = toParentMediaElement(object); | 315 const HTMLMediaElement* mediaElement = toParentMediaElement(object); |
| 351 if (!mediaElement) | 316 if (!mediaElement) |
| 352 return; | 317 return; |
| 353 | 318 |
| 354 const ComputedStyle& style = object.styleRef(); | 319 const ComputedStyle& style = object.styleRef(); |
| 355 GraphicsContext& context = paintInfo.context; | 320 GraphicsContext& context = paintInfo.context; |
| 356 | 321 |
| 357 // Paint the slider bar in the "no data buffered" state. | 322 // Paint the slider bar in the "no data buffered" state. |
| 358 Color sliderBackgroundColor; | 323 paintRoundedSliderBackground(rect, style, context, Color(0xda, 0xda, 0xda)); |
| 359 if (!useNewUi) | |
| 360 sliderBackgroundColor = Color(11, 11, 11); | |
| 361 else | |
| 362 sliderBackgroundColor = Color(0xda, 0xda, 0xda); | |
| 363 | |
| 364 paintRoundedSliderBackground(rect, style, context, sliderBackgroundColor); | |
| 365 | 324 |
| 366 // Draw the buffered range. Since the element may have multiple buffered | 325 // Draw the buffered range. Since the element may have multiple buffered |
| 367 // ranges and it'd be distracting/'busy' to show all of them, show only the | 326 // ranges and it'd be distracting/'busy' to show all of them, show only the |
| 368 // buffered range containing the current play head. | 327 // buffered range containing the current play head. |
| 369 TimeRanges* bufferedTimeRanges = mediaElement->buffered(); | 328 TimeRanges* bufferedTimeRanges = mediaElement->buffered(); |
| 370 float duration = mediaElement->duration(); | 329 float duration = mediaElement->duration(); |
| 371 float currentTime = mediaElement->currentTime(); | 330 float currentTime = mediaElement->currentTime(); |
| 372 if (std::isnan(duration) || std::isinf(duration) || !duration || | 331 if (std::isnan(duration) || std::isinf(duration) || !duration || |
| 373 std::isnan(currentTime)) | 332 std::isnan(currentTime)) |
| 374 return; | 333 return; |
| 375 | 334 |
| 376 for (unsigned i = 0; i < bufferedTimeRanges->length(); ++i) { | 335 for (unsigned i = 0; i < bufferedTimeRanges->length(); ++i) { |
| 377 float start = bufferedTimeRanges->start(i, ASSERT_NO_EXCEPTION); | 336 float start = bufferedTimeRanges->start(i, ASSERT_NO_EXCEPTION); |
| 378 float end = bufferedTimeRanges->end(i, ASSERT_NO_EXCEPTION); | 337 float end = bufferedTimeRanges->end(i, ASSERT_NO_EXCEPTION); |
| 379 // The delta is there to avoid corner cases when buffered | 338 // The delta is there to avoid corner cases when buffered |
| 380 // ranges is out of sync with current time because of | 339 // ranges is out of sync with current time because of |
| 381 // asynchronous media pipeline and current time caching in | 340 // asynchronous media pipeline and current time caching in |
| 382 // HTMLMediaElement. | 341 // HTMLMediaElement. |
| 383 // This is related to https://www.w3.org/Bugs/Public/show_bug.cgi?id=28125 | 342 // This is related to https://www.w3.org/Bugs/Public/show_bug.cgi?id=28125 |
| 384 // FIXME: Remove this workaround when WebMediaPlayer | 343 // FIXME: Remove this workaround when WebMediaPlayer |
| 385 // has an asynchronous pause interface. | 344 // has an asynchronous pause interface. |
| 386 if (std::isnan(start) || std::isnan(end) || | 345 if (std::isnan(start) || std::isnan(end) || |
| 387 start > currentTime + kCurrentTimeBufferedDelta || end < currentTime) | 346 start > currentTime + kCurrentTimeBufferedDelta || end < currentTime) |
| 388 continue; | 347 continue; |
| 389 int startPosition = int(start * rect.width() / duration); | 348 int startPosition = int(start * rect.width() / duration); |
| 390 int currentPosition = int(currentTime * rect.width() / duration); | 349 int currentPosition = int(currentTime * rect.width() / duration); |
| 391 int endPosition = int(end * rect.width() / duration); | 350 int endPosition = int(end * rect.width() / duration); |
| 392 | 351 |
| 393 if (!useNewUi) { | 352 // Draw highlight before current time. |
| 394 // Add half the thumb width proportionally adjusted to the current | 353 Color startColor = Color(0x42, 0x85, 0xf4); |
| 395 // painting position. | 354 Color endColor = Color(0x42, 0x85, 0xf4); |
| 396 int thumbCenter = mediaSliderThumbWidth / 2; | 355 |
| 397 int addWidth = thumbCenter * (1.0 - 2.0 * currentPosition / rect.width()); | 356 if (currentPosition > startPosition) { |
| 398 currentPosition += addWidth; | 357 paintSliderRangeHighlight(rect, style, context, startPosition, |
| 358 currentPosition, startColor, endColor); | |
| 399 } | 359 } |
| 400 | 360 |
| 401 // Draw highlight before current time. | 361 // Draw dark grey highlight after current time. |
| 402 Color startColor; | 362 startColor = endColor = Color(0x5a, 0x5a, 0x5a); |
| 403 Color endColor; | |
| 404 if (!useNewUi) { | |
| 405 startColor = Color(195, 195, 195); // white-ish. | |
| 406 endColor = Color(217, 217, 217); | |
| 407 } else { | |
| 408 startColor = endColor = Color(0x42, 0x85, 0xf4); // blue. | |
| 409 } | |
| 410 | 363 |
| 411 if (currentPosition > startPosition) | 364 if (endPosition > currentPosition) { |
| 412 paintSliderRangeHighlight(rect, style, context, startPosition, | |
| 413 currentPosition, startColor, endColor); | |
| 414 | |
| 415 // Draw grey-ish highlight after current time. | |
| 416 if (!useNewUi) { | |
| 417 startColor = Color(60, 60, 60); | |
| 418 endColor = Color(76, 76, 76); | |
| 419 } else { | |
| 420 startColor = endColor = Color(0x5a, 0x5a, 0x5a); // dark grey | |
| 421 } | |
| 422 | |
| 423 if (endPosition > currentPosition) | |
| 424 paintSliderRangeHighlight(rect, style, context, currentPosition, | 365 paintSliderRangeHighlight(rect, style, context, currentPosition, |
| 425 endPosition, startColor, endColor); | 366 endPosition, startColor, endColor); |
| 426 | 367 } |
| 427 return; | 368 return; |
| 428 } | 369 } |
| 429 } | 370 } |
| 430 | 371 |
| 431 void MediaControlsPainter::adjustMediaSliderThumbPaintSize( | 372 void MediaControlsPainter::adjustMediaSliderThumbPaintSize( |
| 432 const IntRect& rect, | 373 const IntRect& rect, |
| 433 const ComputedStyle& style, | 374 const ComputedStyle& style, |
| 434 IntRect& rectOut) { | 375 IntRect& rectOut) { |
| 435 // Adjust the rectangle to be centered, the right size for the image. | 376 // Adjust the rectangle to be centered, the right size for the image. |
| 436 // We do this because it's quite hard to get the thumb touch target | 377 // We do this because it's quite hard to get the thumb touch target |
| 437 // to match. So, we provide the touch target size with | 378 // to match. So, we provide the touch target size with |
| 438 // adjustMediaSliderThumbSize(), and scale it back when we paint. | 379 // adjustMediaSliderThumbSize(), and scale it back when we paint. |
| 439 rectOut = rect; | 380 rectOut = rect; |
| 440 | 381 |
| 441 if (!RuntimeEnabledFeatures::newMediaPlaybackUiEnabled()) { | 382 const float zoomLevel = style.effectiveZoom(); |
| 442 // ...except for the old UI. | 383 const float zoomedPaintWidth = mediaSliderThumbPaintWidthNew * zoomLevel; |
| 443 return; | 384 const float zoomedPaintHeight = mediaSliderThumbPaintHeightNew * zoomLevel; |
| 444 } | |
| 445 | |
| 446 float zoomLevel = style.effectiveZoom(); | |
| 447 float zoomedPaintWidth = mediaSliderThumbPaintWidthNew * zoomLevel; | |
| 448 float zoomedPaintHeight = mediaSliderThumbPaintHeightNew * zoomLevel; | |
| 449 | 385 |
| 450 rectOut.setX(rect.center().x() - zoomedPaintWidth / 2); | 386 rectOut.setX(rect.center().x() - zoomedPaintWidth / 2); |
| 451 rectOut.setY(rect.center().y() - zoomedPaintHeight / 2); | 387 rectOut.setY(rect.center().y() - zoomedPaintHeight / 2); |
| 452 rectOut.setWidth(zoomedPaintWidth); | 388 rectOut.setWidth(zoomedPaintWidth); |
| 453 rectOut.setHeight(zoomedPaintHeight); | 389 rectOut.setHeight(zoomedPaintHeight); |
| 454 } | 390 } |
| 455 | 391 |
| 456 bool MediaControlsPainter::paintMediaSliderThumb(const LayoutObject& object, | 392 bool MediaControlsPainter::paintMediaSliderThumb(const LayoutObject& object, |
| 457 const PaintInfo& paintInfo, | 393 const PaintInfo& paintInfo, |
| 458 const IntRect& rect) { | 394 const IntRect& rect) { |
| 459 if (!object.node()) | 395 if (!object.node()) |
| 460 return false; | 396 return false; |
| 461 | 397 |
| 462 const HTMLMediaElement* mediaElement = | 398 const HTMLMediaElement* mediaElement = |
| 463 toParentMediaElement(object.node()->ownerShadowHost()); | 399 toParentMediaElement(object.node()->ownerShadowHost()); |
| 464 if (!mediaElement) | 400 if (!mediaElement) |
| 465 return false; | 401 return false; |
| 466 | 402 |
| 467 if (!hasSource(mediaElement)) | 403 if (!hasSource(mediaElement)) |
| 468 return true; | 404 return true; |
| 469 | 405 |
| 470 Image* mediaSliderThumb = getMediaSliderThumb(); | 406 Image* mediaSliderThumb = platformResource("mediaplayerSliderThumbNew"); |
|
foolip
2016/10/24 11:31:50
static here to match other and previous behavior i
mlamouri (slow - plz ping)
2016/10/24 12:37:23
Done.
| |
| 471 IntRect paintRect; | 407 IntRect paintRect; |
| 472 const ComputedStyle& style = object.styleRef(); | 408 const ComputedStyle& style = object.styleRef(); |
| 473 adjustMediaSliderThumbPaintSize(rect, style, paintRect); | 409 adjustMediaSliderThumbPaintSize(rect, style, paintRect); |
| 474 return paintMediaButton(paintInfo.context, paintRect, mediaSliderThumb); | 410 return paintMediaButton(paintInfo.context, paintRect, mediaSliderThumb); |
| 475 } | 411 } |
| 476 | 412 |
| 477 bool MediaControlsPainter::paintMediaVolumeSlider(const LayoutObject& object, | 413 bool MediaControlsPainter::paintMediaVolumeSlider(const LayoutObject& object, |
| 478 const PaintInfo& paintInfo, | 414 const PaintInfo& paintInfo, |
| 479 const IntRect& rect) { | 415 const IntRect& rect) { |
| 480 const HTMLMediaElement* mediaElement = toParentMediaElement(object); | 416 const HTMLMediaElement* mediaElement = toParentMediaElement(object); |
| 481 if (!mediaElement) | 417 if (!mediaElement) |
| 482 return false; | 418 return false; |
| 483 | 419 |
| 484 GraphicsContext& context = paintInfo.context; | 420 GraphicsContext& context = paintInfo.context; |
| 485 const ComputedStyle& style = object.styleRef(); | 421 const ComputedStyle& style = object.styleRef(); |
| 486 | 422 |
| 487 // Paint the slider bar. | 423 // Paint the slider bar. |
| 488 Color sliderBackgroundColor; | 424 paintRoundedSliderBackground(rect, style, context, Color(0x5a, 0x5a, 0x5a)); |
| 489 if (!RuntimeEnabledFeatures::newMediaPlaybackUiEnabled()) | |
| 490 sliderBackgroundColor = Color(11, 11, 11); | |
| 491 else | |
| 492 sliderBackgroundColor = Color(0x5a, 0x5a, 0x5a); // dark grey | |
| 493 paintRoundedSliderBackground(rect, style, context, sliderBackgroundColor); | |
| 494 | 425 |
| 495 // Calculate volume position for white background rectangle. | 426 // Calculate volume position for white background rectangle. |
| 496 float volume = mediaElement->volume(); | 427 float volume = mediaElement->volume(); |
| 497 if (std::isnan(volume) || volume < 0) | 428 if (std::isnan(volume) || volume < 0) |
| 498 return true; | 429 return true; |
| 499 if (volume > 1) | 430 if (volume > 1) |
| 500 volume = 1; | 431 volume = 1; |
| 501 if (!hasSource(mediaElement) || !mediaElement->hasAudio() || | 432 if (!hasSource(mediaElement) || !mediaElement->hasAudio() || |
| 502 mediaElement->muted()) | 433 mediaElement->muted()) |
| 503 volume = 0; | 434 volume = 0; |
| 504 | 435 |
| 505 // Calculate the position relative to the center of the thumb. | 436 // Calculate the position relative to the center of the thumb. |
| 506 float fillWidth = 0; | 437 const float fillWidth = volume * rect.width(); |
| 507 if (!RuntimeEnabledFeatures::newMediaPlaybackUiEnabled()) { | 438 static const Color startColor = Color(0x42, 0x85, 0xf4); |
|
foolip
2016/10/24 11:31:50
No other Color instances are static. Intentional c
mlamouri (slow - plz ping)
2016/10/24 12:37:23
Yes. These colour are always the same. The other p
| |
| 508 if (volume > 0) { | 439 static const Color endColor = Color(217, 217, 217); |
| 509 float thumbCenter = mediaVolumeSliderThumbWidth / 2; | |
| 510 float zoomLevel = style.effectiveZoom(); | |
| 511 float positionWidth = volume * (rect.width() - (zoomLevel * thumbCenter)); | |
| 512 fillWidth = positionWidth + (zoomLevel * thumbCenter / 2); | |
| 513 } | |
| 514 } else { | |
| 515 fillWidth = volume * rect.width(); | |
| 516 } | |
| 517 | |
| 518 Color startColor = Color(195, 195, 195); | |
| 519 Color endColor = Color(217, 217, 217); | |
| 520 if (RuntimeEnabledFeatures::newMediaPlaybackUiEnabled()) | |
| 521 startColor = endColor = Color(0x42, 0x85, 0xf4); // blue. | |
| 522 | |
| 523 paintSliderRangeHighlight(rect, style, context, 0.0, fillWidth, startColor, | 440 paintSliderRangeHighlight(rect, style, context, 0.0, fillWidth, startColor, |
| 524 endColor); | 441 endColor); |
| 525 | 442 |
| 526 return true; | 443 return true; |
| 527 } | 444 } |
| 528 | 445 |
| 529 bool MediaControlsPainter::paintMediaVolumeSliderThumb( | 446 bool MediaControlsPainter::paintMediaVolumeSliderThumb( |
| 530 const LayoutObject& object, | 447 const LayoutObject& object, |
| 531 const PaintInfo& paintInfo, | 448 const PaintInfo& paintInfo, |
| 532 const IntRect& rect) { | 449 const IntRect& rect) { |
| 533 if (!object.node()) | 450 if (!object.node()) |
| 534 return false; | 451 return false; |
| 535 | 452 |
| 536 const HTMLMediaElement* mediaElement = | 453 const HTMLMediaElement* mediaElement = |
| 537 toParentMediaElement(object.node()->ownerShadowHost()); | 454 toParentMediaElement(object.node()->ownerShadowHost()); |
| 538 if (!mediaElement) | 455 if (!mediaElement) |
| 539 return false; | 456 return false; |
| 540 | 457 |
| 541 if (!hasSource(mediaElement) || !mediaElement->hasAudio()) | 458 if (!hasSource(mediaElement) || !mediaElement->hasAudio()) |
| 542 return true; | 459 return true; |
| 543 | 460 |
| 544 static Image* mediaVolumeSliderThumb = platformResource( | 461 static Image* mediaVolumeSliderThumb = |
| 545 "mediaplayerVolumeSliderThumb", "mediaplayerVolumeSliderThumbNew"); | 462 platformResource("mediaplayerVolumeSliderThumbNew"); |
| 546 | 463 |
| 547 IntRect paintRect; | 464 IntRect paintRect; |
| 548 const ComputedStyle& style = object.styleRef(); | 465 const ComputedStyle& style = object.styleRef(); |
| 549 adjustMediaSliderThumbPaintSize(rect, style, paintRect); | 466 adjustMediaSliderThumbPaintSize(rect, style, paintRect); |
| 550 return paintMediaButton(paintInfo.context, paintRect, mediaVolumeSliderThumb); | 467 return paintMediaButton(paintInfo.context, paintRect, mediaVolumeSliderThumb); |
| 551 } | 468 } |
| 552 | 469 |
| 553 bool MediaControlsPainter::paintMediaFullscreenButton( | 470 bool MediaControlsPainter::paintMediaFullscreenButton( |
| 554 const LayoutObject& object, | 471 const LayoutObject& object, |
| 555 const PaintInfo& paintInfo, | 472 const PaintInfo& paintInfo, |
| 556 const IntRect& rect) { | 473 const IntRect& rect) { |
| 557 const HTMLMediaElement* mediaElement = toParentMediaElement(object); | 474 const HTMLMediaElement* mediaElement = toParentMediaElement(object); |
| 558 if (!mediaElement) | 475 if (!mediaElement) |
| 559 return false; | 476 return false; |
| 560 | 477 |
| 561 // With the new player UI, we have separate assets for enter / exit | 478 // With the new player UI, we have separate assets for enter / exit |
| 562 // fullscreen mode. | 479 // fullscreen mode. |
| 563 static Image* mediaEnterFullscreenButton = | 480 static Image* mediaEnterFullscreenButton = |
| 564 platformResource("mediaplayerFullscreen", "mediaplayerEnterFullscreen"); | 481 platformResource("mediaplayerEnterFullscreen"); |
| 565 static Image* mediaExitFullscreenButton = | 482 static Image* mediaExitFullscreenButton = |
| 566 platformResource("mediaplayerFullscreen", "mediaplayerExitFullscreen"); | 483 platformResource("mediaplayerExitFullscreen"); |
| 567 | 484 |
| 568 bool isEnabled = hasSource(mediaElement); | 485 bool isEnabled = hasSource(mediaElement); |
| 569 | 486 |
| 570 if (mediaControlElementType(object.node()) == MediaExitFullscreenButton) | 487 if (mediaControlElementType(object.node()) == MediaExitFullscreenButton) |
| 571 return paintMediaButton(paintInfo.context, rect, mediaExitFullscreenButton, | 488 return paintMediaButton(paintInfo.context, rect, mediaExitFullscreenButton, |
| 572 &object, isEnabled); | 489 &object, isEnabled); |
| 573 return paintMediaButton(paintInfo.context, rect, mediaEnterFullscreenButton, | 490 return paintMediaButton(paintInfo.context, rect, mediaEnterFullscreenButton, |
| 574 &object, isEnabled); | 491 &object, isEnabled); |
| 575 } | 492 } |
| 576 | 493 |
| 577 bool MediaControlsPainter::paintMediaToggleClosedCaptionsButton( | 494 bool MediaControlsPainter::paintMediaToggleClosedCaptionsButton( |
| 578 const LayoutObject& object, | 495 const LayoutObject& object, |
| 579 const PaintInfo& paintInfo, | 496 const PaintInfo& paintInfo, |
| 580 const IntRect& rect) { | 497 const IntRect& rect) { |
| 581 const HTMLMediaElement* mediaElement = toParentMediaElement(object); | 498 const HTMLMediaElement* mediaElement = toParentMediaElement(object); |
| 582 if (!mediaElement) | 499 if (!mediaElement) |
| 583 return false; | 500 return false; |
| 584 | 501 |
| 585 static Image* mediaClosedCaptionButton = platformResource( | 502 static Image* mediaClosedCaptionButton = |
| 586 "mediaplayerClosedCaption", "mediaplayerClosedCaptionNew"); | 503 platformResource("mediaplayerClosedCaptionNew"); |
| 587 static Image* mediaClosedCaptionButtonDisabled = | 504 static Image* mediaClosedCaptionButtonDisabled = |
| 588 platformResource("mediaplayerClosedCaptionDisabled", | 505 platformResource("mediaplayerClosedCaptionDisabledNew"); |
| 589 "mediaplayerClosedCaptionDisabledNew"); | |
| 590 | 506 |
| 591 bool isEnabled = mediaElement->hasClosedCaptions(); | 507 bool isEnabled = mediaElement->hasClosedCaptions(); |
| 592 | 508 |
| 593 if (mediaElement->textTracksVisible()) | 509 if (mediaElement->textTracksVisible()) |
| 594 return paintMediaButton(paintInfo.context, rect, mediaClosedCaptionButton, | 510 return paintMediaButton(paintInfo.context, rect, mediaClosedCaptionButton, |
| 595 &object, isEnabled); | 511 &object, isEnabled); |
| 596 | 512 |
| 597 return paintMediaButton(paintInfo.context, rect, | 513 return paintMediaButton(paintInfo.context, rect, |
| 598 mediaClosedCaptionButtonDisabled, &object, isEnabled); | 514 mediaClosedCaptionButtonDisabled, &object, isEnabled); |
| 599 } | 515 } |
| 600 | 516 |
| 601 bool MediaControlsPainter::paintMediaCastButton(const LayoutObject& object, | 517 bool MediaControlsPainter::paintMediaCastButton(const LayoutObject& object, |
| 602 const PaintInfo& paintInfo, | 518 const PaintInfo& paintInfo, |
| 603 const IntRect& rect) { | 519 const IntRect& rect) { |
| 604 const HTMLMediaElement* mediaElement = toParentMediaElement(object); | 520 const HTMLMediaElement* mediaElement = toParentMediaElement(object); |
| 605 if (!mediaElement) | 521 if (!mediaElement) |
| 606 return false; | 522 return false; |
| 607 | 523 |
| 608 static Image* mediaCastOn = | 524 static Image* mediaCastOn = platformResource("mediaplayerCastOnNew"); |
| 609 platformResource("mediaplayerCastOn", "mediaplayerCastOnNew"); | 525 static Image* mediaCastOff = platformResource("mediaplayerCastOffNew"); |
| 610 static Image* mediaCastOff = | |
| 611 platformResource("mediaplayerCastOff", "mediaplayerCastOffNew"); | |
| 612 // To ensure that the overlaid cast button is visible when overlaid on pale | 526 // To ensure that the overlaid cast button is visible when overlaid on pale |
| 613 // videos we use a different version of it for the overlaid case with a | 527 // videos we use a different version of it for the overlaid case with a |
| 614 // semi-opaque background. | 528 // semi-opaque background. |
| 615 static Image* mediaOverlayCastOff = platformResource( | 529 static Image* mediaOverlayCastOff = |
| 616 "mediaplayerOverlayCastOff", "mediaplayerOverlayCastOffNew"); | 530 platformResource("mediaplayerOverlayCastOffNew"); |
| 617 | 531 |
| 618 bool isEnabled = mediaElement->hasRemoteRoutes(); | 532 bool isEnabled = mediaElement->hasRemoteRoutes(); |
| 619 | 533 |
| 620 switch (mediaControlElementType(object.node())) { | 534 switch (mediaControlElementType(object.node())) { |
| 621 case MediaCastOnButton: | 535 case MediaCastOnButton: |
| 622 return paintMediaButton(paintInfo.context, rect, mediaCastOn, &object, | 536 return paintMediaButton(paintInfo.context, rect, mediaCastOn, &object, |
| 623 isEnabled); | 537 isEnabled); |
| 624 case MediaOverlayCastOnButton: | 538 case MediaOverlayCastOnButton: |
| 625 return paintMediaButton(paintInfo.context, rect, mediaCastOn); | 539 return paintMediaButton(paintInfo.context, rect, mediaCastOn); |
| 626 case MediaCastOffButton: | 540 case MediaCastOffButton: |
| 627 return paintMediaButton(paintInfo.context, rect, mediaCastOff, &object, | 541 return paintMediaButton(paintInfo.context, rect, mediaCastOff, &object, |
| 628 isEnabled); | 542 isEnabled); |
| 629 case MediaOverlayCastOffButton: | 543 case MediaOverlayCastOffButton: |
| 630 return paintMediaButton(paintInfo.context, rect, mediaOverlayCastOff); | 544 return paintMediaButton(paintInfo.context, rect, mediaOverlayCastOff); |
| 631 default: | 545 default: |
| 632 ASSERT_NOT_REACHED(); | 546 ASSERT_NOT_REACHED(); |
| 633 return false; | 547 return false; |
| 634 } | 548 } |
| 635 } | 549 } |
| 636 | 550 |
| 637 bool MediaControlsPainter::paintMediaTrackSelectionCheckmark( | 551 bool MediaControlsPainter::paintMediaTrackSelectionCheckmark( |
| 638 const LayoutObject& object, | 552 const LayoutObject& object, |
| 639 const PaintInfo& paintInfo, | 553 const PaintInfo& paintInfo, |
| 640 const IntRect& rect) { | 554 const IntRect& rect) { |
| 641 const HTMLMediaElement* mediaElement = toParentMediaElement(object); | 555 const HTMLMediaElement* mediaElement = toParentMediaElement(object); |
| 642 if (!mediaElement) | 556 if (!mediaElement) |
| 643 return false; | 557 return false; |
| 644 | 558 |
| 645 static Image* mediaTrackSelectionCheckmark = | 559 static Image* mediaTrackSelectionCheckmark = |
| 646 platformResource("mediaplayerTrackSelectionCheckmark", | 560 platformResource("mediaplayerTrackSelectionCheckmarkNew"); |
| 647 "mediaplayerTrackSelectionCheckmarkNew"); | |
| 648 return paintMediaButton(paintInfo.context, rect, | 561 return paintMediaButton(paintInfo.context, rect, |
| 649 mediaTrackSelectionCheckmark); | 562 mediaTrackSelectionCheckmark); |
| 650 } | 563 } |
| 651 | 564 |
| 652 bool MediaControlsPainter::paintMediaClosedCaptionsIcon( | 565 bool MediaControlsPainter::paintMediaClosedCaptionsIcon( |
| 653 const LayoutObject& object, | 566 const LayoutObject& object, |
| 654 const PaintInfo& paintInfo, | 567 const PaintInfo& paintInfo, |
| 655 const IntRect& rect) { | 568 const IntRect& rect) { |
| 656 const HTMLMediaElement* mediaElement = toParentMediaElement(object); | 569 const HTMLMediaElement* mediaElement = toParentMediaElement(object); |
| 657 if (!mediaElement) | 570 if (!mediaElement) |
| 658 return false; | 571 return false; |
| 659 | 572 |
| 660 static Image* mediaClosedCaptionsIcon = platformResource( | 573 static Image* mediaClosedCaptionsIcon = |
| 661 "mediaplayerClosedCaptionsIcon", "mediaplayerClosedCaptionsIconNew"); | 574 platformResource("mediaplayerClosedCaptionsIconNew"); |
| 662 return paintMediaButton(paintInfo.context, rect, mediaClosedCaptionsIcon); | 575 return paintMediaButton(paintInfo.context, rect, mediaClosedCaptionsIcon); |
| 663 } | 576 } |
| 664 | 577 |
| 665 bool MediaControlsPainter::paintMediaSubtitlesIcon(const LayoutObject& object, | 578 bool MediaControlsPainter::paintMediaSubtitlesIcon(const LayoutObject& object, |
| 666 const PaintInfo& paintInfo, | 579 const PaintInfo& paintInfo, |
| 667 const IntRect& rect) { | 580 const IntRect& rect) { |
| 668 const HTMLMediaElement* mediaElement = toParentMediaElement(object); | 581 const HTMLMediaElement* mediaElement = toParentMediaElement(object); |
| 669 if (!mediaElement) | 582 if (!mediaElement) |
| 670 return false; | 583 return false; |
| 671 | 584 |
| 672 static Image* mediaSubtitlesIcon = platformResource( | 585 static Image* mediaSubtitlesIcon = |
| 673 "mediaplayerSubtitlesIcon", "mediaplayerSubtitlesIconNew"); | 586 platformResource("mediaplayerSubtitlesIconNew"); |
| 674 return paintMediaButton(paintInfo.context, rect, mediaSubtitlesIcon); | 587 return paintMediaButton(paintInfo.context, rect, mediaSubtitlesIcon); |
| 675 } | 588 } |
| 676 | 589 |
| 677 bool MediaControlsPainter::paintMediaOverflowMenu(const LayoutObject& object, | 590 bool MediaControlsPainter::paintMediaOverflowMenu(const LayoutObject& object, |
| 678 const PaintInfo& paintInfo, | 591 const PaintInfo& paintInfo, |
| 679 const IntRect& rect) { | 592 const IntRect& rect) { |
| 680 const HTMLMediaElement* mediaElement = toParentMediaElement(object); | 593 const HTMLMediaElement* mediaElement = toParentMediaElement(object); |
| 681 if (!mediaElement) | 594 if (!mediaElement) |
| 682 return false; | 595 return false; |
| 683 | 596 |
| (...skipping 11 matching lines...) Expand all Loading... | |
| 695 return false; | 608 return false; |
| 696 | 609 |
| 697 bool isEnabled = hasSource(mediaElement); | 610 bool isEnabled = hasSource(mediaElement); |
| 698 | 611 |
| 699 static Image* mediaDownloadIcon = platformResource("mediaplayerDownloadIcon"); | 612 static Image* mediaDownloadIcon = platformResource("mediaplayerDownloadIcon"); |
| 700 return paintMediaButton(paintInfo.context, rect, mediaDownloadIcon, &object, | 613 return paintMediaButton(paintInfo.context, rect, mediaDownloadIcon, &object, |
| 701 isEnabled); | 614 isEnabled); |
| 702 } | 615 } |
| 703 | 616 |
| 704 void MediaControlsPainter::adjustMediaSliderThumbSize(ComputedStyle& style) { | 617 void MediaControlsPainter::adjustMediaSliderThumbSize(ComputedStyle& style) { |
| 705 static Image* mediaSliderThumb = | 618 const float zoomLevel = style.effectiveZoom(); |
| 706 platformResource("mediaplayerSliderThumb", "mediaplayerSliderThumbNew"); | |
| 707 static Image* mediaVolumeSliderThumb = platformResource( | |
| 708 "mediaplayerVolumeSliderThumb", "mediaplayerVolumeSliderThumbNew"); | |
| 709 int width = 0; | |
| 710 int height = 0; | |
| 711 | 619 |
| 712 Image* thumbImage = 0; | 620 style.setWidth(Length( |
| 713 | 621 static_cast<int>(mediaSliderThumbTouchWidthNew * zoomLevel), Fixed)); |
| 714 if (RuntimeEnabledFeatures::newMediaPlaybackUiEnabled()) { | 622 style.setHeight(Length( |
| 715 // Volume and time sliders are the same. | 623 static_cast<int>(mediaSliderThumbTouchHeightNew * zoomLevel), Fixed)); |
| 716 thumbImage = mediaSliderThumb; | |
| 717 width = mediaSliderThumbTouchWidthNew; | |
| 718 height = mediaSliderThumbTouchHeightNew; | |
| 719 } else if (style.appearance() == MediaSliderThumbPart) { | |
| 720 thumbImage = mediaSliderThumb; | |
| 721 width = mediaSliderThumbWidth; | |
| 722 height = mediaSliderThumbHeight; | |
| 723 } else if (style.appearance() == MediaVolumeSliderThumbPart) { | |
| 724 thumbImage = mediaVolumeSliderThumb; | |
| 725 width = mediaVolumeSliderThumbWidth; | |
| 726 height = mediaVolumeSliderThumbHeight; | |
| 727 } | |
| 728 | |
| 729 float zoomLevel = style.effectiveZoom(); | |
| 730 if (thumbImage) { | |
| 731 style.setWidth(Length(static_cast<int>(width * zoomLevel), Fixed)); | |
| 732 style.setHeight(Length(static_cast<int>(height * zoomLevel), Fixed)); | |
| 733 } | |
| 734 } | 624 } |
| 735 | 625 |
| 736 } // namespace blink | 626 } // namespace blink |
| OLD | NEW |