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

Side by Side Diff: third_party/WebKit/Source/core/paint/MediaControlsPainter.cpp

Issue 1424733003: Paint media element's play button using padding. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: fixed mute button padding. Created 4 years, 9 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 unified diff | Download patch
OLDNEW
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 70 matching lines...) Expand 10 before | Expand all | Expand 10 after
81 // Return currentName or newName based on current or new playback. 81 // Return currentName or newName based on current or new playback.
82 return platformResource(RuntimeEnabledFeatures::newMediaPlaybackUiEnabled() ? newName : currentName); 82 return platformResource(RuntimeEnabledFeatures::newMediaPlaybackUiEnabled() ? newName : currentName);
83 } 83 }
84 84
85 static bool hasSource(const HTMLMediaElement* mediaElement) 85 static bool hasSource(const HTMLMediaElement* mediaElement)
86 { 86 {
87 return mediaElement->getNetworkState() != HTMLMediaElement::NETWORK_EMPTY 87 return mediaElement->getNetworkState() != HTMLMediaElement::NETWORK_EMPTY
88 && mediaElement->getNetworkState() != HTMLMediaElement::NETWORK_NO_SOURC E; 88 && mediaElement->getNetworkState() != HTMLMediaElement::NETWORK_NO_SOURC E;
89 } 89 }
90 90
91 static bool paintMediaButton(GraphicsContext& context, const IntRect& rect, Imag e* image, bool isEnabled = true) 91 static FloatRect adjustRectForPadding(IntRect rect, const LayoutObject* object)
92 { 92 {
93 if (!RuntimeEnabledFeatures::newMediaPlaybackUiEnabled()) 93 FloatRect adjustedRect(rect);
94 isEnabled = true; // New UI only. 94
95 if (!object)
96 return adjustedRect;
97
98 if (const ComputedStyle* style = object->style()) {
99 const float paddingLeft = style->paddingLeft().getFloatValue();
100 const float paddingTop = style->paddingTop().getFloatValue();
101 const float paddingRight = style->paddingRight().getFloatValue();
102 const float paddingBottom = style->paddingBottom().getFloatValue();
103 adjustedRect = FloatRect(rect.x() + paddingLeft,
104 rect.y() + paddingTop,
105 rect.width() - paddingLeft - paddingRight,
106 rect.height() - paddingTop - paddingBottom);
107 }
108
109 return adjustedRect;
110 }
111
112 static bool paintMediaButton(GraphicsContext& context, const IntRect& rect, Imag e* image, const LayoutObject* object, bool isEnabled)
113 {
114 if (!RuntimeEnabledFeatures::newMediaPlaybackUiEnabled()) {
115 context.drawImage(image, rect);
116 return true;
117 }
118
119 FloatRect drawRect = adjustRectForPadding(rect, object);
95 120
96 if (!isEnabled) 121 if (!isEnabled)
97 context.beginLayer(kDisabledAlpha); 122 context.beginLayer(kDisabledAlpha);
98 123
99 context.drawImage(image, rect); 124 context.drawImage(image, drawRect, FloatRect(FloatPoint(), FloatSize(image-> size())));
100 125
101 if (!isEnabled) 126 if (!isEnabled)
102 context.endLayer(); 127 context.endLayer();
103 128
104 return true; 129 return true;
105 } 130 }
106 131
132 static bool paintMediaButton(GraphicsContext& context, const IntRect& rect, Imag e* image, bool isEnabled = true)
133 {
134 return paintMediaButton(context, rect, image, 0, isEnabled);
135 }
136
107 bool MediaControlsPainter::paintMediaMuteButton(const LayoutObject& object, cons t PaintInfo& paintInfo, const IntRect& rect) 137 bool MediaControlsPainter::paintMediaMuteButton(const LayoutObject& object, cons t PaintInfo& paintInfo, const IntRect& rect)
108 { 138 {
109 const HTMLMediaElement* mediaElement = toParentMediaElement(object); 139 const HTMLMediaElement* mediaElement = toParentMediaElement(object);
110 if (!mediaElement) 140 if (!mediaElement)
111 return false; 141 return false;
112 142
113 // The new UI uses "muted" and "not muted" only. 143 // The new UI uses "muted" and "not muted" only.
114 static Image* soundLevel3 = platformResource("mediaplayerSoundLevel3", 144 static Image* soundLevel3 = platformResource("mediaplayerSoundLevel3",
115 "mediaplayerSoundLevel3New"); 145 "mediaplayerSoundLevel3New");
116 static Image* soundLevel2 = platformResource("mediaplayerSoundLevel2", 146 static Image* soundLevel2 = platformResource("mediaplayerSoundLevel2",
117 "mediaplayerSoundLevel3New"); 147 "mediaplayerSoundLevel3New");
118 static Image* soundLevel1 = platformResource("mediaplayerSoundLevel1", 148 static Image* soundLevel1 = platformResource("mediaplayerSoundLevel1",
119 "mediaplayerSoundLevel3New"); 149 "mediaplayerSoundLevel3New");
120 static Image* soundLevel0 = platformResource("mediaplayerSoundLevel0", 150 static Image* soundLevel0 = platformResource("mediaplayerSoundLevel0",
121 "mediaplayerSoundLevel0New"); 151 "mediaplayerSoundLevel0New");
122 static Image* soundDisabled = platformResource("mediaplayerSoundDisabled", 152 static Image* soundDisabled = platformResource("mediaplayerSoundDisabled",
123 "mediaplayerSoundLevel0New"); 153 "mediaplayerSoundLevel0New");
124 154
125 if (!hasSource(mediaElement) || !mediaElement->hasAudio()) 155 if (!hasSource(mediaElement) || !mediaElement->hasAudio())
126 return paintMediaButton(paintInfo.context, rect, soundDisabled, false); 156 return paintMediaButton(paintInfo.context, rect, soundDisabled, &object, false);
127 157
128 if (mediaElement->muted() || mediaElement->volume() <= 0) 158 if (mediaElement->muted() || mediaElement->volume() <= 0)
129 return paintMediaButton(paintInfo.context, rect, soundLevel0); 159 return paintMediaButton(paintInfo.context, rect, soundLevel0, &object, t rue);
130 160
131 if (mediaElement->volume() <= 0.33) 161 if (mediaElement->volume() <= 0.33)
132 return paintMediaButton(paintInfo.context, rect, soundLevel1); 162 return paintMediaButton(paintInfo.context, rect, soundLevel1, &object, t rue);
133 163
134 if (mediaElement->volume() <= 0.66) 164 if (mediaElement->volume() <= 0.66)
135 return paintMediaButton(paintInfo.context, rect, soundLevel2); 165 return paintMediaButton(paintInfo.context, rect, soundLevel2, &object, t rue);
136 166
137 return paintMediaButton(paintInfo.context, rect, soundLevel3); 167 return paintMediaButton(paintInfo.context, rect, soundLevel3, &object, true) ;
138 } 168 }
139 169
140 bool MediaControlsPainter::paintMediaPlayButton(const LayoutObject& object, cons t PaintInfo& paintInfo, const IntRect& rect) 170 bool MediaControlsPainter::paintMediaPlayButton(const LayoutObject& object, cons t PaintInfo& paintInfo, const IntRect& rect)
141 { 171 {
142 const HTMLMediaElement* mediaElement = toParentMediaElement(object); 172 const HTMLMediaElement* mediaElement = toParentMediaElement(object);
143 if (!mediaElement) 173 if (!mediaElement)
144 return false; 174 return false;
145 175
146 static Image* mediaPlay = platformResource("mediaplayerPlay", "mediaplayerPl ayNew"); 176 static Image* mediaPlay = platformResource("mediaplayerPlay", "mediaplayerPl ayNew");
147 static Image* mediaPause = platformResource("mediaplayerPause", "mediaplayer PauseNew"); 177 static Image* mediaPause = platformResource("mediaplayerPause", "mediaplayer PauseNew");
148 // For this case, the new UI draws the normal icon, but the entire panel 178 // For this case, the new UI draws the normal icon, but the entire panel
149 // grays out. 179 // grays out.
150 static Image* mediaPlayDisabled = platformResource("mediaplayerPlayDisabled" , "mediaplayerPlayNew"); 180 static Image* mediaPlayDisabled = platformResource("mediaplayerPlayDisabled" , "mediaplayerPlayNew");
151 181
152 if (!hasSource(mediaElement)) 182 if (!hasSource(mediaElement))
153 return paintMediaButton(paintInfo.context, rect, mediaPlayDisabled, fals e); 183 return paintMediaButton(paintInfo.context, rect, mediaPlayDisabled, &obj ect, false);
154 184
155 Image * image = !object.node()->isMediaControlElement() || mediaControlEleme ntType(object.node()) == MediaPlayButton ? mediaPlay : mediaPause; 185 Image * image = !object.node()->isMediaControlElement() || mediaControlEleme ntType(object.node()) == MediaPlayButton ? mediaPlay : mediaPause;
156 return paintMediaButton(paintInfo.context, rect, image); 186 return paintMediaButton(paintInfo.context, rect, image, &object, true);
157 } 187 }
158 188
159 bool MediaControlsPainter::paintMediaOverlayPlayButton(const LayoutObject& objec t, const PaintInfo& paintInfo, const IntRect& rect) 189 bool MediaControlsPainter::paintMediaOverlayPlayButton(const LayoutObject& objec t, const PaintInfo& paintInfo, const IntRect& rect)
160 { 190 {
161 const HTMLMediaElement* mediaElement = toParentMediaElement(object); 191 const HTMLMediaElement* mediaElement = toParentMediaElement(object);
162 if (!mediaElement) 192 if (!mediaElement)
163 return false; 193 return false;
164 194
165 if (!hasSource(mediaElement) || !mediaElement->paused()) 195 if (!hasSource(mediaElement) || !mediaElement->paused())
166 return false; 196 return false;
167 197
168 static Image* mediaOverlayPlay = platformResource("mediaplayerOverlayPlay", 198 static Image* mediaOverlayPlay = platformResource("mediaplayerOverlayPlay",
169 "mediaplayerOverlayPlayNew"); 199 "mediaplayerOverlayPlayNew");
170 200
171 IntRect buttonRect(rect); 201 IntRect buttonRect(rect);
172 if (RuntimeEnabledFeatures::newMediaPlaybackUiEnabled()) { 202 if (RuntimeEnabledFeatures::newMediaPlaybackUiEnabled()) {
173 // Overlay play button covers the entire player, so center and draw a 203 // Overlay play button covers the entire player, so center and draw a
174 // smaller button. Center in the entire element. 204 // smaller button. Center in the entire element.
205 // TODO(liberato): object.enclosingBox()?
175 const LayoutBox* box = mediaElement->layoutObject()->enclosingBox(); 206 const LayoutBox* box = mediaElement->layoutObject()->enclosingBox();
176 if (!box) 207 if (!box)
177 return false; 208 return false;
178 int mediaHeight = box->pixelSnappedHeight(); 209 int mediaHeight = box->pixelSnappedHeight();
179 buttonRect.setX(rect.center().x() - mediaOverlayPlayButtonWidthNew / 2); 210 buttonRect.setX(rect.center().x() - mediaOverlayPlayButtonWidthNew / 2);
180 buttonRect.setY(rect.center().y() - mediaOverlayPlayButtonHeightNew / 2 211 buttonRect.setY(rect.center().y() - mediaOverlayPlayButtonHeightNew / 2
181 + (mediaHeight - rect.height()) / 2); 212 + (mediaHeight - rect.height()) / 2);
182 buttonRect.setWidth(mediaOverlayPlayButtonWidthNew); 213 buttonRect.setWidth(mediaOverlayPlayButtonWidthNew);
183 buttonRect.setHeight(mediaOverlayPlayButtonHeightNew); 214 buttonRect.setHeight(mediaOverlayPlayButtonHeightNew);
184 } 215 }
(...skipping 294 matching lines...) Expand 10 before | Expand all | Expand 10 after
479 static Image* mediaEnterFullscreenButton = platformResource( 510 static Image* mediaEnterFullscreenButton = platformResource(
480 "mediaplayerFullscreen", 511 "mediaplayerFullscreen",
481 "mediaplayerEnterFullscreen"); 512 "mediaplayerEnterFullscreen");
482 static Image* mediaExitFullscreenButton = platformResource( 513 static Image* mediaExitFullscreenButton = platformResource(
483 "mediaplayerFullscreen", 514 "mediaplayerFullscreen",
484 "mediaplayerExitFullscreen"); 515 "mediaplayerExitFullscreen");
485 516
486 bool isEnabled = hasSource(mediaElement); 517 bool isEnabled = hasSource(mediaElement);
487 518
488 if (mediaControlElementType(object.node()) == MediaExitFullscreenButton) 519 if (mediaControlElementType(object.node()) == MediaExitFullscreenButton)
489 return paintMediaButton(paintInfo.context, rect, mediaExitFullscreenButt on, isEnabled); 520 return paintMediaButton(paintInfo.context, rect, mediaExitFullscreenButt on, &object, isEnabled);
490 return paintMediaButton(paintInfo.context, rect, mediaEnterFullscreenButton, isEnabled); 521 return paintMediaButton(paintInfo.context, rect, mediaEnterFullscreenButton, &object, isEnabled);
491 } 522 }
492 523
493 bool MediaControlsPainter::paintMediaToggleClosedCaptionsButton(const LayoutObje ct& object, const PaintInfo& paintInfo, const IntRect& rect) 524 bool MediaControlsPainter::paintMediaToggleClosedCaptionsButton(const LayoutObje ct& object, const PaintInfo& paintInfo, const IntRect& rect)
494 { 525 {
495 const HTMLMediaElement* mediaElement = toParentMediaElement(object); 526 const HTMLMediaElement* mediaElement = toParentMediaElement(object);
496 if (!mediaElement) 527 if (!mediaElement)
497 return false; 528 return false;
498 529
499 static Image* mediaClosedCaptionButton = platformResource( 530 static Image* mediaClosedCaptionButton = platformResource(
500 "mediaplayerClosedCaption", "mediaplayerClosedCaptionNew"); 531 "mediaplayerClosedCaption", "mediaplayerClosedCaptionNew");
501 static Image* mediaClosedCaptionButtonDisabled = platformResource( 532 static Image* mediaClosedCaptionButtonDisabled = platformResource(
502 "mediaplayerClosedCaptionDisabled", 533 "mediaplayerClosedCaptionDisabled",
503 "mediaplayerClosedCaptionDisabledNew"); 534 "mediaplayerClosedCaptionDisabledNew");
504 535
505 bool isEnabled = mediaElement->hasClosedCaptions(); 536 bool isEnabled = mediaElement->hasClosedCaptions();
506 537
507 if (mediaElement->closedCaptionsVisible()) 538 if (mediaElement->closedCaptionsVisible())
508 return paintMediaButton(paintInfo.context, rect, mediaClosedCaptionButto n, isEnabled); 539 return paintMediaButton(paintInfo.context, rect, mediaClosedCaptionButto n, &object, isEnabled);
509 540
510 return paintMediaButton(paintInfo.context, rect, mediaClosedCaptionButtonDis abled, isEnabled); 541 return paintMediaButton(paintInfo.context, rect, mediaClosedCaptionButtonDis abled, &object, isEnabled);
511 } 542 }
512 543
513 bool MediaControlsPainter::paintMediaCastButton(const LayoutObject& object, cons t PaintInfo& paintInfo, const IntRect& rect) 544 bool MediaControlsPainter::paintMediaCastButton(const LayoutObject& object, cons t PaintInfo& paintInfo, const IntRect& rect)
514 { 545 {
515 const HTMLMediaElement* mediaElement = toParentMediaElement(object); 546 const HTMLMediaElement* mediaElement = toParentMediaElement(object);
516 if (!mediaElement) 547 if (!mediaElement)
517 return false; 548 return false;
518 549
519 static Image* mediaCastOn = platformResource("mediaplayerCastOn", "mediaplay erCastOnNew"); 550 static Image* mediaCastOn = platformResource("mediaplayerCastOn", "mediaplay erCastOnNew");
520 static Image* mediaCastOff = platformResource("mediaplayerCastOff", "mediapl ayerCastOffNew"); 551 static Image* mediaCastOff = platformResource("mediaplayerCastOff", "mediapl ayerCastOffNew");
521 // To ensure that the overlaid cast button is visible when overlaid on pale videos we use a 552 // To ensure that the overlaid cast button is visible when overlaid on pale videos we use a
522 // different version of it for the overlaid case with a semi-opaque backgrou nd. 553 // different version of it for the overlaid case with a semi-opaque backgrou nd.
523 static Image* mediaOverlayCastOff = platformResource( 554 static Image* mediaOverlayCastOff = platformResource(
524 "mediaplayerOverlayCastOff", 555 "mediaplayerOverlayCastOff",
525 "mediaplayerOverlayCastOffNew"); 556 "mediaplayerOverlayCastOffNew");
526 557
527 bool isEnabled = mediaElement->hasRemoteRoutes(); 558 bool isEnabled = mediaElement->hasRemoteRoutes();
528 559
529 switch (mediaControlElementType(object.node())) { 560 switch (mediaControlElementType(object.node())) {
530 case MediaCastOnButton: 561 case MediaCastOnButton:
531 return paintMediaButton(paintInfo.context, rect, mediaCastOn, isEnabled) ; 562 return paintMediaButton(paintInfo.context, rect, mediaCastOn, &object, i sEnabled);
532 case MediaOverlayCastOnButton: 563 case MediaOverlayCastOnButton:
533 return paintMediaButton(paintInfo.context, rect, mediaCastOn); 564 return paintMediaButton(paintInfo.context, rect, mediaCastOn);
534 case MediaCastOffButton: 565 case MediaCastOffButton:
535 return paintMediaButton(paintInfo.context, rect, mediaCastOff, isEnabled ); 566 return paintMediaButton(paintInfo.context, rect, mediaCastOff, &object, isEnabled);
536 case MediaOverlayCastOffButton: 567 case MediaOverlayCastOffButton:
537 return paintMediaButton(paintInfo.context, rect, mediaOverlayCastOff); 568 return paintMediaButton(paintInfo.context, rect, mediaOverlayCastOff);
538 default: 569 default:
539 ASSERT_NOT_REACHED(); 570 ASSERT_NOT_REACHED();
540 return false; 571 return false;
541 } 572 }
542 } 573 }
543 574
544 void MediaControlsPainter::adjustMediaSliderThumbSize(ComputedStyle& style) 575 void MediaControlsPainter::adjustMediaSliderThumbSize(ComputedStyle& style)
545 { 576 {
(...skipping 23 matching lines...) Expand all
569 } 600 }
570 601
571 float zoomLevel = style.effectiveZoom(); 602 float zoomLevel = style.effectiveZoom();
572 if (thumbImage) { 603 if (thumbImage) {
573 style.setWidth(Length(static_cast<int>(width * zoomLevel), Fixed)); 604 style.setWidth(Length(static_cast<int>(width * zoomLevel), Fixed));
574 style.setHeight(Length(static_cast<int>(height * zoomLevel), Fixed)); 605 style.setHeight(Length(static_cast<int>(height * zoomLevel), Fixed));
575 } 606 }
576 } 607 }
577 608
578 } // namespace blink 609 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698