Changeset 97727 in webkit


Ignore:
Timestamp:
Oct 18, 2011 1:39:18 AM (13 years ago)
Author:
Nikolas Zimmermann
Message:

2011-10-18 Nikolas Zimmermann <nzimmermann@rim.com>

Prepare SVGImage intrinsic size negotiation: Add intrinsic size & ratio calculation functionality to Image
https://bugs.webkit.org/show_bug.cgi?id=70314

Reviewed by Antti Koivisto.

Add a "void computeIntrinsicDimension(Length& intrinsicWidth, Lengt& intrinsicHeight, FloatSize& intrinsicRatio)" helper method
to Image/GeneratedImage/SVGImage and make it accessible through StyleImage.

For a regular Image the intrinsicWidth/Height contains just a Length(size().width(), Fixed). In contrary SVGImages pass on the
style()->width()/height() values from the render style of the RenderSVGRoot renderer. These information are needed to implement
the size negotiation between embedded SVG images and the embedder.

No new tests, as this new functionality is not yet used.

  • loader/cache/CachedImage.cpp: (WebCore::CachedImage::computeIntrinsicDimensions):
  • loader/cache/CachedImage.h:
  • platform/graphics/GeneratedImage.cpp: (WebCore::GeneratedImage::computeIntrinsicDimensions):
  • platform/graphics/GeneratedImage.h:
  • platform/graphics/Image.cpp: (WebCore::Image::computeIntrinsicDimensions):
  • platform/graphics/Image.h:
  • platform/graphics/cg/PDFDocumentImage.cpp: (WebCore::PDFDocumentImage::computeIntrinsicDimensions):
  • platform/graphics/cg/PDFDocumentImage.h:
  • rendering/style/StyleCachedImage.cpp: (WebCore::StyleCachedImage::computeIntrinsicDimensions):
  • rendering/style/StyleCachedImage.h:
  • rendering/style/StyleGeneratedImage.cpp: (WebCore::StyleGeneratedImage::computeIntrinsicDimensions):
  • rendering/style/StyleGeneratedImage.h:
  • rendering/style/StyleImage.h:
  • rendering/style/StylePendingImage.h: (WebCore::StylePendingImage::computeIntrinsicDimensions):
  • svg/graphics/SVGImage.cpp: (WebCore::SVGImage::computeIntrinsicDimensions):
  • svg/graphics/SVGImage.h:
Location:
trunk/Source/WebCore
Files:
17 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebCore/ChangeLog

    r97726 r97727  
     12011-10-18  Nikolas Zimmermann  <nzimmermann@rim.com>
     2
     3        Prepare SVGImage intrinsic size negotiation: Add intrinsic size & ratio calculation functionality to Image
     4        https://bugs.webkit.org/show_bug.cgi?id=70314
     5
     6        Reviewed by Antti Koivisto.
     7
     8        Add a "void computeIntrinsicDimension(Length& intrinsicWidth, Lengt& intrinsicHeight, FloatSize& intrinsicRatio)" helper method
     9        to Image/GeneratedImage/SVGImage and make it accessible through StyleImage.
     10
     11        For a regular Image the intrinsicWidth/Height contains just a Length(size().width(), Fixed). In contrary SVGImages pass on the
     12        style()->width()/height() values from the render style of the RenderSVGRoot renderer. These information are needed to implement
     13        the size negotiation between embedded SVG images and the embedder.
     14
     15        No new tests, as this new functionality is not yet used.
     16
     17        * loader/cache/CachedImage.cpp:
     18        (WebCore::CachedImage::computeIntrinsicDimensions):
     19        * loader/cache/CachedImage.h:
     20        * platform/graphics/GeneratedImage.cpp:
     21        (WebCore::GeneratedImage::computeIntrinsicDimensions):
     22        * platform/graphics/GeneratedImage.h:
     23        * platform/graphics/Image.cpp:
     24        (WebCore::Image::computeIntrinsicDimensions):
     25        * platform/graphics/Image.h:
     26        * platform/graphics/cg/PDFDocumentImage.cpp:
     27        (WebCore::PDFDocumentImage::computeIntrinsicDimensions):
     28        * platform/graphics/cg/PDFDocumentImage.h:
     29        * rendering/style/StyleCachedImage.cpp:
     30        (WebCore::StyleCachedImage::computeIntrinsicDimensions):
     31        * rendering/style/StyleCachedImage.h:
     32        * rendering/style/StyleGeneratedImage.cpp:
     33        (WebCore::StyleGeneratedImage::computeIntrinsicDimensions):
     34        * rendering/style/StyleGeneratedImage.h:
     35        * rendering/style/StyleImage.h:
     36        * rendering/style/StylePendingImage.h:
     37        (WebCore::StylePendingImage::computeIntrinsicDimensions):
     38        * svg/graphics/SVGImage.cpp:
     39        (WebCore::SVGImage::computeIntrinsicDimensions):
     40        * svg/graphics/SVGImage.h:
     41
    1422011-10-17  Alexander Pavlov  <apavlov@chromium.org>
    243
  • trunk/Source/WebCore/loader/cache/CachedImage.cpp

    r97491 r97727  
    240240        height = max(1, height);
    241241    return IntSize(width, height);
     242}
     243
     244void CachedImage::computeIntrinsicDimensions(const RenderObject* renderer, Length& intrinsicWidth, Length& intrinsicHeight, FloatSize& intrinsicRatio)
     245{
     246    if (Image* image = lookupImageForRenderer(renderer))
     247        image->computeIntrinsicDimensions(intrinsicWidth, intrinsicHeight, intrinsicRatio);
    242248}
    243249
  • trunk/Source/WebCore/loader/cache/CachedImage.h

    r97448 r97727  
    3535
    3636class CachedResourceLoader;
     37class Length;
     38class FloatSize;
    3739class MemoryCache;
    3840class RenderObject;
     
    6567    // This method takes a zoom multiplier that can be used to increase the natural size of the image by the zoom.
    6668    IntSize imageSizeForRenderer(const RenderObject*, float multiplier); // returns the size of the complete image.
     69    void computeIntrinsicDimensions(const RenderObject*, Length& intrinsicWidth, Length& intrinsicHeight, FloatSize& intrinsicRatio);
    6770
    6871    virtual void didAddClient(CachedResourceClient*);
  • trunk/Source/WebCore/platform/graphics/GeneratedImage.cpp

    r95901 r97727  
    3030#include "GraphicsContext.h"
    3131#include "ImageBuffer.h"
    32 
    33 using namespace std;
     32#include "Length.h"
    3433
    3534namespace WebCore {
     
    6867}
    6968
     69void GeneratedImage::computeIntrinsicDimensions(Length& intrinsicWidth, Length& intrinsicHeight, FloatSize& intrinsicRatio)
     70{
     71    Image::computeIntrinsicDimensions(intrinsicWidth, intrinsicHeight, intrinsicRatio);
     72    intrinsicRatio = FloatSize();
    7073}
     74
     75}
  • trunk/Source/WebCore/platform/graphics/GeneratedImage.h

    r95901 r97727  
    4545    virtual bool hasSingleSecurityOrigin() const { return true; }
    4646
    47     // These are only used for SVGGeneratedImage right now
    4847    virtual void setContainerSize(const IntSize& size) { m_size = size; }
    4948    virtual bool usesContainerSize() const { return true; }
    5049    virtual bool hasRelativeWidth() const { return true; }
    5150    virtual bool hasRelativeHeight() const { return true; }
     51    virtual void computeIntrinsicDimensions(Length& intrinsicWidth, Length& intrinsicHeight, FloatSize& intrinsicRatio);
    5252
    5353    virtual IntSize size() const { return m_size; }
  • trunk/Source/WebCore/platform/graphics/Image.cpp

    r95129 r97727  
    3232#include "GraphicsContext.h"
    3333#include "IntRect.h"
     34#include "Length.h"
    3435#include "MIMETypeRegistry.h"
    3536#include "SharedBuffer.h"
     
    167168}
    168169
     170void Image::computeIntrinsicDimensions(Length& intrinsicWidth, Length& intrinsicHeight, FloatSize& intrinsicRatio)
     171{
     172    intrinsicRatio = size();
     173    intrinsicWidth = Length(intrinsicRatio.width(), Fixed);
     174    intrinsicHeight = Length(intrinsicRatio.height(), Fixed);
     175}
    169176
    170177}
  • trunk/Source/WebCore/platform/graphics/Image.h

    r97448 r97727  
    7272class FloatSize;
    7373class GraphicsContext;
     74class Length;
    7475class SharedBuffer;
    7576
     
    99100    bool isNull() const { return size().isEmpty(); }
    100101
    101     // These are only used for SVGImage right now
    102102    virtual void setContainerSize(const IntSize&) { }
    103103    virtual bool usesContainerSize() const { return false; }
    104104    virtual bool hasRelativeWidth() const { return false; }
    105105    virtual bool hasRelativeHeight() const { return false; }
     106    virtual void computeIntrinsicDimensions(Length& intrinsicWidth, Length& intrinsicHeight, FloatSize& intrinsicRatio);
    106107
    107108    virtual IntSize size() const = 0;
  • trunk/Source/WebCore/platform/graphics/cg/PDFDocumentImage.cpp

    r85501 r97727  
    3232#include "GraphicsContext.h"
    3333#include "ImageObserver.h"
     34#include "Length.h"
    3435#include "SharedBuffer.h"
    3536#include <CoreGraphics/CGContext.h>
     
    7475   
    7576    return IntSize((int)(fabsf(rotWidth) + 0.5f), (int)(fabsf(rotHeight) + 0.5f));
     77}
     78
     79void PDFDocumentImage::computeIntrinsicDimensions(Length& intrinsicWidth, Length& intrinsicHeight, FloatSize& intrinsicRatio)
     80{
     81    // FIXME: If we want size negotiation with PDF documents as-image, this is the place to implement it (https://bugs.webkit.org/show_bug.cgi?id=12095).
     82    Image::computeIntrinsicDimensions(intrinsicWidth, intrinsicHeight, intrinsicRatio);
     83    intrinsicRatio = FloatSize();
    7684}
    7785
  • trunk/Source/WebCore/platform/graphics/cg/PDFDocumentImage.h

    r85501 r97727  
    6060        virtual unsigned decodedSize() const { return 0; }
    6161
     62        virtual void computeIntrinsicDimensions(Length& intrinsicWidth, Length& intrinsicHeight, FloatSize& intrinsicRatio);
    6263        virtual IntSize size() const;
    6364
  • trunk/Source/WebCore/rendering/style/StyleCachedImage.cpp

    r97448 r97727  
    6565}
    6666
     67void StyleCachedImage::computeIntrinsicDimensions(const RenderObject* renderer, Length& intrinsicWidth, Length& intrinsicHeight, FloatSize& intrinsicRatio)
     68{
     69    m_image->computeIntrinsicDimensions(renderer, intrinsicWidth, intrinsicHeight, intrinsicRatio);
     70}
     71
    6772bool StyleCachedImage::usesImageContainerSize() const
    6873{
  • trunk/Source/WebCore/rendering/style/StyleCachedImage.h

    r97448 r97727  
    4747    virtual bool imageHasRelativeWidth() const;
    4848    virtual bool imageHasRelativeHeight() const;
     49    virtual void computeIntrinsicDimensions(const RenderObject*, Length& intrinsicWidth, Length& intrinsicHeight, FloatSize& intrinsicRatio);
    4950    virtual bool usesImageContainerSize() const;
    5051    virtual void setContainerSizeForRenderer(const RenderObject*, const IntSize&);
  • trunk/Source/WebCore/rendering/style/StyleGeneratedImage.cpp

    r97448 r97727  
    5959}
    6060
     61void StyleGeneratedImage::computeIntrinsicDimensions(const RenderObject* renderer, Length& intrinsicWidth, Length& intrinsicHeight, FloatSize& intrinsicRatio)
     62{
     63    IntSize size = imageSize(renderer, 1);
     64    intrinsicWidth = Length(size.width(), Fixed);
     65    intrinsicHeight = Length(size.height(), Fixed);
     66    intrinsicRatio = size;
     67}
     68
    6169void StyleGeneratedImage::addClient(RenderObject* renderer)
    6270{
  • trunk/Source/WebCore/rendering/style/StyleGeneratedImage.h

    r97448 r97727  
    4646    virtual bool imageHasRelativeWidth() const { return !m_fixedSize; }
    4747    virtual bool imageHasRelativeHeight() const { return !m_fixedSize; }
     48    virtual void computeIntrinsicDimensions(const RenderObject*, Length& intrinsicWidth, Length& intrinsicHeight, FloatSize& intrinsicRatio);
    4849    virtual bool usesImageContainerSize() const { return !m_fixedSize; }
    4950    virtual void setContainerSizeForRenderer(const RenderObject*, const IntSize& containerSize) { m_containerSize = containerSize; }
  • trunk/Source/WebCore/rendering/style/StyleImage.h

    r97448 r97727  
    5454    virtual bool errorOccurred() const { return false; }
    5555    virtual IntSize imageSize(const RenderObject*, float multiplier) const = 0;
     56    virtual void computeIntrinsicDimensions(const RenderObject*, Length& intrinsicWidth, Length& intrinsicHeight, FloatSize& intrinsicRatio) = 0;
    5657    virtual bool imageHasRelativeWidth() const = 0;
    5758    virtual bool imageHasRelativeHeight() const = 0;
  • trunk/Source/WebCore/rendering/style/StylePendingImage.h

    r97448 r97727  
    4848    virtual bool imageHasRelativeWidth() const { return false; }
    4949    virtual bool imageHasRelativeHeight() const { return false; }
     50    virtual void computeIntrinsicDimensions(const RenderObject*, Length& /* intrinsicWidth */ , Length& /* intrinsicHeight */, FloatSize& /* intrinsicRatio */) { }
    5051    virtual bool usesImageContainerSize() const { return false; }
    5152    virtual void setContainerSizeForRenderer(const RenderObject*, const IntSize&) { }
  • trunk/Source/WebCore/svg/graphics/SVGImage.cpp

    r97448 r97727  
    214214}
    215215
     216void SVGImage::computeIntrinsicDimensions(Length& intrinsicWidth, Length& intrinsicHeight, FloatSize& intrinsicRatio)
     217{
     218    if (!m_page)
     219        return;
     220    Frame* frame = m_page->mainFrame();
     221    SVGSVGElement* rootElement = static_cast<SVGDocument*>(frame->document())->rootElement();
     222    if (!rootElement)
     223        return;
     224    RenderBox* renderer = toRenderBox(rootElement->renderer());
     225    if (!renderer)
     226        return;
     227
     228    intrinsicWidth = renderer->style()->width();
     229    intrinsicHeight = renderer->style()->height();
     230    // FIXME: Add intrinsicRatio calculation from webkit.org/b/47156.
     231    intrinsicRatio = FloatSize();
     232}
     233
    216234NativeImagePtr SVGImage::nativeImageForCurrentFrame()
    217235{
  • trunk/Source/WebCore/svg/graphics/SVGImage.h

    r97448 r97727  
    5656    virtual bool hasRelativeWidth() const;
    5757    virtual bool hasRelativeHeight() const;
     58    virtual void computeIntrinsicDimensions(Length& intrinsicWidth, Length& intrinsicHeight, FloatSize& intrinsicRatio);
    5859
    5960    virtual IntSize size() const;
Note: See TracChangeset for help on using the changeset viewer.