Skip to content

Commit

Permalink
2009-11-23 Dirk Schulze <krit@webkit.org>
Browse files Browse the repository at this point in the history
        Reviewed by Oliver Hunt.

        [Cairo] support blurred test-shadow
        [https://bugs.webkit.org/show_bug.cgi?id=31797]

        Support for blurred text-shadows on Cairo. This patch
        reuses the code of blurred box-shadows, introduced in
        bug 26102. For a full textshadow support, a filters enabled
        build is needed.

        * platform/graphics/cairo/FontCairo.cpp:
        (WebCore::Font::drawGlyphs):


Canonical link: https://commits.webkit.org/42751@main
git-svn-id: https://svn.webkit.org/repository/webkit/trunk@51322 268f45cc-cd09-0410-ab3c-d52691b4dbfc
  • Loading branch information
dirkschulze committed Nov 23, 2009
1 parent 35c6f79 commit 5798a8d
Show file tree
Hide file tree
Showing 2 changed files with 45 additions and 0 deletions.
15 changes: 15 additions & 0 deletions WebCore/ChangeLog
@@ -1,3 +1,18 @@
2009-11-23 Dirk Schulze <krit@webkit.org>

Reviewed by Oliver Hunt.

[Cairo] support blurred test-shadow
[https://bugs.webkit.org/show_bug.cgi?id=31797]

Support for blurred text-shadows on Cairo. This patch
reuses the code of blurred box-shadows, introduced in
bug 26102. For a full textshadow support, a filters enabled
build is needed.

* platform/graphics/cairo/FontCairo.cpp:
(WebCore::Font::drawGlyphs):

2009-11-23 Jens Alfke <snej@chromium.org>

Reviewed by Geoffrey Garen.
Expand Down
30 changes: 30 additions & 0 deletions WebCore/platform/graphics/cairo/FontCairo.cpp
Expand Up @@ -32,6 +32,7 @@
#include "GlyphBuffer.h"
#include "Gradient.h"
#include "GraphicsContext.h"
#include "ImageBuffer.h"
#include "Pattern.h"
#include "SimpleFontData.h"
#include "TransformationMatrix.h"
Expand Down Expand Up @@ -85,6 +86,34 @@ void Font::drawGlyphs(GraphicsContext* context, const SimpleFontData* font, cons
shadowFillColor.getRGBA(red, green, blue, alpha);
cairo_set_source_rgba(cr, red, green, blue, alpha);

#if ENABLE(FILTERS)
cairo_text_extents_t extents;
cairo_scaled_font_glyph_extents(font->platformData().scaledFont(), glyphs, numGlyphs, &extents);

FloatRect rect(FloatPoint(), FloatSize(extents.width, extents.height));
IntSize shadowBufferSize;
FloatRect shadowRect;
float kernelSize = 0.f;
GraphicsContext::calculateShadowBufferDimensions(shadowBufferSize, shadowRect, kernelSize, rect, shadowSize, shadowBlur);

// Draw shadow into a new ImageBuffer
OwnPtr<ImageBuffer> shadowBuffer = ImageBuffer::create(shadowBufferSize);
GraphicsContext* shadowContext = shadowBuffer->context();
cairo_t* shadowCr = shadowContext->platformContext();

cairo_translate(shadowCr, kernelSize, extents.height + kernelSize);

cairo_set_scaled_font(shadowCr, font->platformData().scaledFont());
cairo_show_glyphs(shadowCr, glyphs, numGlyphs);
if (font->syntheticBoldOffset()) {
cairo_save(shadowCr);
cairo_translate(shadowCr, font->syntheticBoldOffset(), 0);
cairo_show_glyphs(shadowCr, glyphs, numGlyphs);
cairo_restore(shadowCr);
}
cairo_translate(cr, 0.0, -extents.height);
context->createPlatformShadow(shadowBuffer.release(), shadowColor, shadowRect, kernelSize);
#else
cairo_translate(cr, shadowSize.width(), shadowSize.height());
cairo_show_glyphs(cr, glyphs, numGlyphs);
if (font->syntheticBoldOffset()) {
Expand All @@ -93,6 +122,7 @@ void Font::drawGlyphs(GraphicsContext* context, const SimpleFontData* font, cons
cairo_show_glyphs(cr, glyphs, numGlyphs);
cairo_restore(cr);
}
#endif

cairo_restore(cr);
}
Expand Down

0 comments on commit 5798a8d

Please sign in to comment.