Index: third_party/WebKit/Source/core/layout/LayoutThemeDefault.cpp |
diff --git a/third_party/WebKit/Source/core/layout/LayoutThemeDefault.cpp b/third_party/WebKit/Source/core/layout/LayoutThemeDefault.cpp |
index 728b3e37c9154cbce2370da8ca8ef454da67350f..bd9f1cd71bb32755e9d2604f1d10468cfbdb8059 100644 |
--- a/third_party/WebKit/Source/core/layout/LayoutThemeDefault.cpp |
+++ b/third_party/WebKit/Source/core/layout/LayoutThemeDefault.cpp |
@@ -336,35 +336,41 @@ int LayoutThemeDefault::popupInternalPaddingBottom( |
} |
int LayoutThemeDefault::menuListArrowWidthInDIP() const { |
- if (m_menuListArrowWidthInDIP > 0) |
- return m_menuListArrowWidthInDIP; |
int width = Platform::current() |
->themeEngine() |
->getSize(WebThemeEngine::PartScrollbarUpArrow) |
.width; |
- const_cast<LayoutThemeDefault*>(this)->m_menuListArrowWidthInDIP = |
- width > 0 ? width : 15; |
- return m_menuListArrowWidthInDIP; |
+ return width > 0 ? width : 15; |
} |
float LayoutThemeDefault::clampedMenuListArrowPaddingSize( |
const HostWindow* host, |
const ComputedStyle& style) const { |
+ if (m_cachedMenuListArrowPaddingSize > 0 && |
+ style.effectiveZoom() == m_cachedMenuListArrowZoomLevel) |
+ return m_cachedMenuListArrowPaddingSize; |
+ m_cachedMenuListArrowZoomLevel = style.effectiveZoom(); |
int originalSize = menuListArrowWidthInDIP(); |
int scaledSize = |
host ? host->windowToViewportScalar(originalSize) : originalSize; |
// The result should not be samller than the scrollbar thickness in order to |
// secure space for scrollbar in popup. |
float deviceScale = 1.0f * scaledSize / originalSize; |
- if (style.effectiveZoom() < deviceScale) |
- return scaledSize; |
- // The value should be zoomed though scrollbars aren't scaled by zoom. |
- // crbug.com/432795. |
- return originalSize * style.effectiveZoom(); |
+ float size; |
+ if (m_cachedMenuListArrowZoomLevel < deviceScale) { |
+ size = scaledSize; |
+ } else { |
+ // The value should be zoomed though scrollbars aren't scaled by zoom. |
+ // crbug.com/432795. |
+ size = originalSize * m_cachedMenuListArrowZoomLevel; |
+ } |
+ m_cachedMenuListArrowPaddingSize = size; |
+ return size; |
} |
void LayoutThemeDefault::didChangeThemeEngine() { |
- m_menuListArrowWidthInDIP = 0; |
+ m_cachedMenuListArrowZoomLevel = 0; |
+ m_cachedMenuListArrowPaddingSize = 0; |
} |
// static |