Changeset 44810 in webkit


Ignore:
Timestamp:
Jun 18, 2009 11:53:51 AM (15 years ago)
Author:
krit@webkit.org
Message:

2009-06-18 Dirk Schulze <krit@webkit.org>

Reviewed by Oliver Hunt.

Share code between filterEffects
https://bugs.webkit.org/show_bug.cgi?id=26479

Share more code of filter effects. The imageBuffer creation can move to
FilterEffect ant every effect asks for the GraphicsContext. Move the
drawingRect calculation to FilterEffect.

  • platform/graphics/filters/FilterEffect.cpp: (WebCore::FilterEffect::calculateDrawingRect): (WebCore::FilterEffect::getEffectContext):
  • platform/graphics/filters/FilterEffect.h:
  • platform/graphics/filters/SourceGraphic.cpp: (WebCore::SourceGraphic::apply):
  • svg/graphics/filters/SVGFEFlood.cpp: (WebCore::FEFlood::apply):
  • svg/graphics/filters/SVGFEOffset.cpp: (WebCore::FEOffset::apply):
Location:
trunk/WebCore
Files:
6 edited

Legend:

Unmodified
Added
Removed
  • trunk/WebCore/ChangeLog

    r44809 r44810  
     12009-06-18  Dirk Schulze  <krit@webkit.org>
     2
     3        Reviewed by Oliver Hunt.
     4
     5        Share code between filterEffects
     6        [https://bugs.webkit.org/show_bug.cgi?id=26479]
     7
     8        Share more code of filter effects. The imageBuffer creation can move to
     9        FilterEffect ant every effect asks for the GraphicsContext. Move the
     10        drawingRect calculation to FilterEffect.
     11
     12        * platform/graphics/filters/FilterEffect.cpp:
     13        (WebCore::FilterEffect::calculateDrawingRect):
     14        (WebCore::FilterEffect::getEffectContext):
     15        * platform/graphics/filters/FilterEffect.h:
     16        * platform/graphics/filters/SourceGraphic.cpp:
     17        (WebCore::SourceGraphic::apply):
     18        * svg/graphics/filters/SVGFEFlood.cpp:
     19        (WebCore::FEFlood::apply):
     20        * svg/graphics/filters/SVGFEOffset.cpp:
     21        (WebCore::FEOffset::apply):
     22
    1232009-06-18  Simon Fraser  <simon.fraser@apple.com>
    224
  • trunk/WebCore/platform/graphics/filters/FilterEffect.cpp

    r44655 r44810  
    6060}
    6161
     62FloatRect FilterEffect::calculateDrawingRect(const FloatRect& srcRect)
     63{
     64    FloatPoint startPoint = FloatPoint(srcRect.x() - subRegion().x(), srcRect.y() - subRegion().y());
     65    FloatRect drawingRect = FloatRect(startPoint, srcRect.size());
     66    return drawingRect;
     67}
     68
     69GraphicsContext* FilterEffect::getEffectContext()
     70{
     71    IntRect bufferRect = enclosingIntRect(subRegion());
     72    m_effectBuffer = ImageBuffer::create(bufferRect.size(), false);
     73    return m_effectBuffer->context();
     74}
     75
    6276TextStream& FilterEffect::externalRepresentation(TextStream& ts) const
    6377{
  • trunk/WebCore/platform/graphics/filters/FilterEffect.h

    r44655 r44810  
    2525#include "Filter.h"
    2626#include "FloatRect.h"
     27#include "GraphicsContext.h"
    2728#include "ImageBuffer.h"
    2829#include "TextStream.h"
     
    7576        FloatRect calculateUnionOfChildEffectSubregions(Filter*, FilterEffect*);
    7677
     78        GraphicsContext* getEffectContext();
     79        FloatRect calculateDrawingRect(const FloatRect&);
     80
    7781        virtual FloatRect uniteChildEffectSubregions(Filter* filter) { return filter->filterRegion(); }
    7882        virtual FloatRect calculateEffectRect(Filter*);
  • trunk/WebCore/platform/graphics/filters/SourceGraphic.cpp

    r44655 r44810  
    5555void SourceGraphic::apply(Filter* filter)
    5656{
    57     IntRect bufferRect = enclosingIntRect(subRegion());
    58     OwnPtr<ImageBuffer> filterGraphic(ImageBuffer::create(bufferRect.size(), false));
    59 
    60     if (!filterGraphic.get())
     57    GraphicsContext* filterContext = getEffectContext();
     58    if (!filterContext)
    6159        return;
    6260
    63     GraphicsContext* filterContext = filterGraphic->context();
    6461    filterContext->drawImage(filter->sourceImage()->image(), IntPoint());
    65 
    66     setEffectBuffer(filterGraphic.release());
    6762}
    6863
  • trunk/WebCore/svg/graphics/filters/SVGFEFlood.cpp

    r44655 r44810  
    6767void FEFlood::apply(Filter*)
    6868{
    69     IntRect bufferRect = enclosingIntRect(subRegion());
    70     OwnPtr<ImageBuffer> filterGraphic(ImageBuffer::create(bufferRect.size(), false));
    71 
    72     if (!filterGraphic)
     69    GraphicsContext* filterContext = getEffectContext();
     70    if (!filterContext)
    7371        return;
    7472
    7573    Color color = colorWithOverrideAlpha(floodColor().rgb(), floodOpacity());
    76     GraphicsContext* filterContext = filterGraphic->context();
    7774    filterContext->fillRect(FloatRect(FloatPoint(), subRegion().size()), color);
    78 
    79     setEffectBuffer(filterGraphic.release());
    8075}
    8176
  • trunk/WebCore/svg/graphics/filters/SVGFEOffset.cpp

    r44655 r44810  
    7171        return;
    7272
    73     IntRect bufferRect = enclosingIntRect(subRegion());
    74     OwnPtr<ImageBuffer> filterGraphic(ImageBuffer::create(bufferRect.size(), false));
    75 
    76     if (!filterGraphic)
     73    GraphicsContext* filterContext = getEffectContext();
     74    if (!filterContext)
    7775        return;
    7876
     
    8280                                  m_in->subRegion().height());
    8381
    84     GraphicsContext* filterContext = filterGraphic->context();
    8582    filterContext->drawImage(m_in->resultImage()->image(), dstRect);
    86     setEffectBuffer(filterGraphic.release());
    8783}
    8884
Note: See TracChangeset for help on using the changeset viewer.