Chromium Code Reviews| Index: third_party/WebKit/Source/core/html/ImageDocument.cpp |
| diff --git a/third_party/WebKit/Source/core/html/ImageDocument.cpp b/third_party/WebKit/Source/core/html/ImageDocument.cpp |
| index 88826f4d3894c9781ee2ab8eba50a45a760c2b64..cb11741b4e4a06c4915233baccad8662e6bd1e8e 100644 |
| --- a/third_party/WebKit/Source/core/html/ImageDocument.cpp |
| +++ b/third_party/WebKit/Source/core/html/ImageDocument.cpp |
| @@ -201,7 +201,8 @@ ImageDocument::ImageDocument(const DocumentInit& initializer) |
| m_didShrinkImage(false), |
| m_shouldShrinkImage(shouldShrinkToFit()), |
| m_imageIsLoaded(false), |
| - m_checkerSize(0), |
| + m_styleCheckerSize(0), |
| + m_styleMouseCursorMode(Uninitialized), |
| m_shrinkToFitMode(frame()->settings()->viewportEnabled() ? Viewport |
| : Desktop) { |
| setCompatibilityMode(QuirksMode); |
| @@ -325,7 +326,7 @@ void ImageDocument::resizeImageToFit() { |
| m_imageElement->setWidth(static_cast<int>(imageSize.width() * scale)); |
| m_imageElement->setHeight(static_cast<int>(imageSize.height() * scale)); |
| - m_imageElement->setInlineStyleProperty(CSSPropertyCursor, CSSValueZoomIn); |
| + updateImageStyle(); |
| } |
| void ImageDocument::imageClicked(int x, int y) { |
| @@ -381,6 +382,7 @@ void ImageDocument::updateImageStyle() { |
| // show transparency more faithfully. The pattern is generated via CSS. |
| if (m_imageIsLoaded) { |
| int newCheckerSize = kBaseCheckerSize; |
| + MouseCursorMode newCursorMode = Default; |
| if (m_shrinkToFitMode == Viewport) { |
| double scale; |
| @@ -398,20 +400,32 @@ void ImageDocument::updateImageStyle() { |
| } |
| newCheckerSize = round(std::max(1.0, newCheckerSize / scale)); |
| + } else { |
| + // In desktop mode, the user can click on the image to zoom in or out. |
| + DCHECK_EQ(m_shrinkToFitMode, Desktop); |
| + if (imageFitsInWindow()) { |
| + newCursorMode = Default; |
| + } else { |
| + newCursorMode = m_shouldShrinkImage ? ZoomIn : ZoomOut; |
| + } |
| } |
| - // The only thing that can differ between updates is the checker size. |
| - if (newCheckerSize == m_checkerSize) |
| + // The only things that can differ between updates are checker size and |
| + // the type of cursor being displayed. |
| + if (newCheckerSize == m_styleCheckerSize && |
| + newCursorMode == m_styleMouseCursorMode) { |
| return; |
| - m_checkerSize = newCheckerSize; |
| + } |
| + m_styleCheckerSize = newCheckerSize; |
| + m_styleMouseCursorMode = newCursorMode; |
| imageStyle.append("background-position: 0px 0px, "); |
| - imageStyle.append(AtomicString::number(m_checkerSize)); |
| + imageStyle.append(AtomicString::number(m_styleCheckerSize)); |
| imageStyle.append("px "); |
| - imageStyle.append(AtomicString::number(m_checkerSize)); |
| + imageStyle.append(AtomicString::number(m_styleCheckerSize)); |
| imageStyle.append("px;"); |
| - int tileSize = m_checkerSize * 2; |
| + int tileSize = m_styleCheckerSize * 2; |
| imageStyle.append("background-size: "); |
| imageStyle.append(AtomicString::number(tileSize)); |
| imageStyle.append("px "); |
| @@ -425,6 +439,13 @@ void ImageDocument::updateImageStyle() { |
| "#eee 75%, #eee 100%)," |
| "linear-gradient(45deg, #eee 25%, transparent 25%, transparent 75%, " |
| "#eee 75%, #eee 100%);"); |
| + |
| + if (m_shrinkToFitMode == Desktop) { |
| + if (m_styleMouseCursorMode == ZoomIn) |
| + imageStyle.append("cursor: zoom-in; "); |
|
pdr.
2016/11/22 04:15:12
nit: is the trailing space needed?
gone
2016/11/22 18:51:29
Nope, removed.
|
| + else if (m_styleMouseCursorMode == ZoomOut) |
| + imageStyle.append("cursor: zoom-out; "); |
| + } |
| } |
| } |
| @@ -465,11 +486,7 @@ void ImageDocument::restoreImageSize() { |
| LayoutSize imageSize = cachedImageSize(m_imageElement); |
| m_imageElement->setWidth(imageSize.width().toInt()); |
| m_imageElement->setHeight(imageSize.height().toInt()); |
| - |
| - if (imageFitsInWindow()) |
| - m_imageElement->removeInlineStyleProperty(CSSPropertyCursor); |
| - else |
| - m_imageElement->setInlineStyleProperty(CSSPropertyCursor, CSSValueZoomOut); |
| + updateImageStyle(); |
| m_didShrinkImage = false; |
| } |
| @@ -525,11 +542,7 @@ void ImageDocument::windowSizeChanged() { |
| // If the image has been explicitly zoomed in, restore the cursor if the image |
| // fits and set it to a zoom out cursor if the image doesn't fit |
| if (!m_shouldShrinkImage) { |
| - if (fitsInWindow) |
| - m_imageElement->removeInlineStyleProperty(CSSPropertyCursor); |
| - else |
| - m_imageElement->setInlineStyleProperty(CSSPropertyCursor, |
| - CSSValueZoomOut); |
| + updateImageStyle(); |
| return; |
| } |