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

Unified Diff: third_party/WebKit/Source/core/html/shadow/MediaControls.cpp

Issue 2704013002: Media Controls: cache the minimum width in order to reduce incorrect width usage. (Closed)
Patch Set: Created 3 years, 10 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: third_party/WebKit/Source/core/html/shadow/MediaControls.cpp
diff --git a/third_party/WebKit/Source/core/html/shadow/MediaControls.cpp b/third_party/WebKit/Source/core/html/shadow/MediaControls.cpp
index ad9607accff4eecd9e1c52ca347c46f62c5da3fd..ce548e6fb81533cb98e640b01ebc93480a4c7559 100644
--- a/third_party/WebKit/Source/core/html/shadow/MediaControls.cpp
+++ b/third_party/WebKit/Source/core/html/shadow/MediaControls.cpp
@@ -822,28 +822,10 @@ void MediaControls::computeWhichControlsFit() {
m_durationDisplay.get(),
};
- int usedWidth = 0;
-
// TODO(mlamouri): we need a more dynamic way to find out the width of an
// element.
const int sliderMargin = 36; // Sliders have 18px margin on each side.
- // Assume that all controls require 48px, unless we can get the computed
- // style for the play button. Since the play button or overflow is always
- // shown, one of the two buttons should be available the first time we're
- // called after layout. This will
- // also be the first time we have m_panelWidth!=0, so it won't matter if
- // we get this wrong before that.
- int minimumWidth = 48;
- if (m_playButton->layoutObject() && m_playButton->layoutObject()->style()) {
- const ComputedStyle* style = m_playButton->layoutObject()->style();
- minimumWidth = ceil(style->width().pixels() / style->effectiveZoom());
- } else if (m_overflowMenu->layoutObject() &&
- m_overflowMenu->layoutObject()->style()) {
- const ComputedStyle* style = m_overflowMenu->layoutObject()->style();
- minimumWidth = ceil(style->width().pixels() / style->effectiveZoom());
- }
-
if (!m_panelWidth) {
// No layout yet -- hide everything, then make them show up later.
// This prevents the wrong controls from being shown briefly
@@ -856,12 +838,27 @@ void MediaControls::computeWhichControlsFit() {
return;
}
+ // Assume that all controls require 48px, unless we can get the computed
+ // style for a button. The minimumWidth is recorded and re-use for future
+ // MediaControls instances and future calls to this method given that at the
+ // moment the controls button width is per plataform.
+ // TODO(mlamouri): improve the mechanism without bandaid.
+ static int minimumWidth = 48;
+ if (m_playButton->layoutObject() && m_playButton->layoutObject()->style()) {
+ const ComputedStyle* style = m_playButton->layoutObject()->style();
+ minimumWidth = ceil(style->width().pixels() / style->effectiveZoom());
+ } else if (m_overflowMenu->layoutObject() &&
+ m_overflowMenu->layoutObject()->style()) {
+ const ComputedStyle* style = m_overflowMenu->layoutObject()->style();
+ minimumWidth = ceil(style->width().pixels() / style->effectiveZoom());
+ }
+
// Insert an overflow menu. However, if we see that the overflow menu
// doesn't end up containing at least two elements, we will not display it
// but instead make place for the first element that was dropped.
m_overflowMenu->setDoesFit(true);
m_overflowMenu->setIsWanted(true);
- usedWidth = minimumWidth;
+ int usedWidth = minimumWidth;
std::list<MediaControlElement*> overflowElements;
MediaControlElement* firstDisplacedElement = nullptr;

Powered by Google App Engine
This is Rietveld 408576698