[whatwg] [canvas] inner shadows
Rik Cabanier
cabanier at gmail.com
Fri Nov 23 21:11:57 PST 2012
On Fri, Nov 23, 2012 at 8:58 PM, Ian Hickson <ian at hixie.ch> wrote:
> On Fri, 23 Nov 2012, Rik Cabanier wrote:
> > >
> > > Turns out it's relatively easy to do today in canvas; after you've
> > > drawn your shape and filled it, just add the following code:
> > >
> > > c.save();
> > > c.clip();
> > > c.moveTo(0,0);
> > > c.lineTo(0,height);
> > > c.lineTo(width,height);
> > > c.lineTo(width,0);
> > > c.closePath();
> > > c.shadowColor = 'black';
> > > c.shadowBlur = 30;
> > > c.fill();
> > > c.restore();
> >
> > I don't think that will work. Shadows are calculated before clipping so
> > they don't follow the clipping path.
>
> What matters is how they're painted, and that does follow the clipping
> path, as far as I can tell (step 4 of the drawing model).
>
What matters is the shape that is used to calculate the blur (step 1)
In your example, that shape is a rectangle so just the rectangle edges will
be blurred.
That slightly blurred rectangle is then composited with the clipping region
in step 4.
The end result is a solid rectangle in the shadowcolor that composites on
top of the shape.
>
>
> > Even if it was right, it would only apply to shapes and only if those
> > shapes didn't have strokes and were completely opaque.
>
> That's easy enough, though, you only need to make a shape that is what you
> want the inner shadow to go over, and then set the fill to black (or
> anything completely opaque).
How about the strokes?
> It's even easier with the new Path primitives
> since you can construct a combined path by stroking them all into one.
>
>
Unfortunately, the current path logic does not support unions.
It just does path accumulation which will not give you the desired result.
More information about the whatwg
mailing list