| Index: sky/engine/core/rendering/RenderImage.cpp
|
| diff --git a/sky/engine/core/rendering/RenderImage.cpp b/sky/engine/core/rendering/RenderImage.cpp
|
| index a4645cd59761627d087e7d2129344e60014b666e..d598f998a463afe81259931f9cde0763b590e374 100644
|
| --- a/sky/engine/core/rendering/RenderImage.cpp
|
| +++ b/sky/engine/core/rendering/RenderImage.cpp
|
| @@ -28,6 +28,7 @@
|
| #include "config.h"
|
| #include "core/rendering/RenderImage.h"
|
|
|
| +#include "core/HTMLNames.h"
|
| #include "core/editing/FrameSelection.h"
|
| #include "core/fetch/ImageResource.h"
|
| #include "core/fetch/ResourceLoader.h"
|
| @@ -72,6 +73,12 @@ void RenderImage::destroy()
|
| RenderReplaced::destroy();
|
| }
|
|
|
| +void RenderImage::intrinsicSizeChanged()
|
| +{
|
| + if (m_imageResource)
|
| + imageChanged(m_imageResource->imagePtr());
|
| +}
|
| +
|
| void RenderImage::setImageResource(PassOwnPtr<RenderImageResource> imageResource)
|
| {
|
| ASSERT(!m_imageResource);
|
| @@ -84,6 +91,14 @@ void RenderImage::imageChanged(WrappedImagePtr newImage, const IntRect* rect)
|
| if (documentBeingDestroyed())
|
| return;
|
|
|
| + // If the RenderImage was just created we don't have style() or a parent()
|
| + // yet so all we can do is update our intrinsic size. Once we're inserted
|
| + // the resulting layout will do the rest of the work.
|
| + if (!parent()) {
|
| + updateIntrinsicSizeIfNeeded(m_imageResource->intrinsicSize());
|
| + return;
|
| + }
|
| +
|
| if (hasBoxDecorationBackground() || hasMask())
|
| RenderReplaced::imageChanged(newImage, rect);
|
|
|
| @@ -119,17 +134,12 @@ void RenderImage::updateInnerContentRect()
|
|
|
| void RenderImage::paintInvalidationOrMarkForLayout(const IntRect* rect)
|
| {
|
| + ASSERT(isRooted());
|
| +
|
| LayoutSize oldIntrinsicSize = intrinsicSize();
|
| LayoutSize newIntrinsicSize = m_imageResource->intrinsicSize();
|
| updateIntrinsicSizeIfNeeded(newIntrinsicSize);
|
|
|
| - // In the case of generated image content using :before/:after/content, we might not be
|
| - // in the render tree yet. In that case, we just need to update our intrinsic size.
|
| - // layout() will be called after we are inserted in the tree which will take care of
|
| - // what we are doing here.
|
| - if (!containingBlock())
|
| - return;
|
| -
|
| bool imageSourceHasChangedSize = oldIntrinsicSize != newIntrinsicSize;
|
| if (imageSourceHasChangedSize)
|
| setPreferredLogicalWidthsDirty();
|
|
|