OLD | NEW |
1 /* | 1 /* |
2 * Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012 Apple Inc.
All rights reserved. | 2 * Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012 Apple Inc.
All rights reserved. |
3 * Copyright (C) 2008, 2010 Nokia Corporation and/or its subsidiary(-ies) | 3 * Copyright (C) 2008, 2010 Nokia Corporation and/or its subsidiary(-ies) |
4 * Copyright (C) 2007 Alp Toker <alp@atoker.com> | 4 * Copyright (C) 2007 Alp Toker <alp@atoker.com> |
5 * Copyright (C) 2008 Eric Seidel <eric@webkit.org> | 5 * Copyright (C) 2008 Eric Seidel <eric@webkit.org> |
6 * Copyright (C) 2008 Dirk Schulze <krit@webkit.org> | 6 * Copyright (C) 2008 Dirk Schulze <krit@webkit.org> |
7 * Copyright (C) 2010 Torch Mobile (Beijing) Co. Ltd. All rights reserved. | 7 * Copyright (C) 2010 Torch Mobile (Beijing) Co. Ltd. All rights reserved. |
8 * Copyright (C) 2012, 2013 Intel Corporation. All rights reserved. | 8 * Copyright (C) 2012, 2013 Intel Corporation. All rights reserved. |
9 * Copyright (C) 2013 Adobe Systems Incorporated. All rights reserved. | 9 * Copyright (C) 2013 Adobe Systems Incorporated. All rights reserved. |
10 * | 10 * |
(...skipping 1393 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1404 bool wasDrawingShadows = shouldDrawShadows(); | 1404 bool wasDrawingShadows = shouldDrawShadows(); |
1405 realizeSaves(0); | 1405 realizeSaves(0); |
1406 modifiableState().m_shadowOffset = offset; | 1406 modifiableState().m_shadowOffset = offset; |
1407 modifiableState().m_shadowBlur = blur; | 1407 modifiableState().m_shadowBlur = blur; |
1408 modifiableState().m_shadowColor = color; | 1408 modifiableState().m_shadowColor = color; |
1409 if (!wasDrawingShadows && !shouldDrawShadows()) | 1409 if (!wasDrawingShadows && !shouldDrawShadows()) |
1410 return; | 1410 return; |
1411 applyShadow(); | 1411 applyShadow(); |
1412 } | 1412 } |
1413 | 1413 |
1414 void CanvasRenderingContext2D::applyShadow() | 1414 void CanvasRenderingContext2D::applyShadow(ShadowMode shadowMode) |
1415 { | 1415 { |
1416 GraphicsContext* c = drawingContext(); | 1416 GraphicsContext* c = drawingContext(); |
1417 if (!c) | 1417 if (!c) |
1418 return; | 1418 return; |
1419 | 1419 |
1420 if (shouldDrawShadows()) { | 1420 if (shouldDrawShadows()) { |
1421 c->setShadow(state().m_shadowOffset, state().m_shadowBlur, state().m_sha
dowColor, | 1421 c->setShadow(state().m_shadowOffset, state().m_shadowBlur, state().m_sha
dowColor, |
1422 DrawLooperBuilder::ShadowIgnoresTransforms); | 1422 DrawLooperBuilder::ShadowIgnoresTransforms, DrawLooperBuilder::Shado
wRespectsAlpha, shadowMode); |
1423 } else { | 1423 } else { |
1424 c->clearShadow(); | 1424 c->clearShadow(); |
1425 } | 1425 } |
1426 } | 1426 } |
1427 | 1427 |
1428 bool CanvasRenderingContext2D::shouldDrawShadows() const | 1428 bool CanvasRenderingContext2D::shouldDrawShadows() const |
1429 { | 1429 { |
1430 return alphaChannel(state().m_shadowColor) && (state().m_shadowBlur || !stat
e().m_shadowOffset.isZero()); | 1430 return alphaChannel(state().m_shadowColor) && (state().m_shadowBlur || !stat
e().m_shadowOffset.isZero()); |
1431 } | 1431 } |
1432 | 1432 |
(...skipping 206 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1639 { | 1639 { |
1640 context->fillPath(path); | 1640 context->fillPath(path); |
1641 } | 1641 } |
1642 | 1642 |
1643 template<class T> void CanvasRenderingContext2D::fullCanvasCompositedFill(const
T& area) | 1643 template<class T> void CanvasRenderingContext2D::fullCanvasCompositedFill(const
T& area) |
1644 { | 1644 { |
1645 ASSERT(isFullCanvasCompositeMode(state().m_globalComposite)); | 1645 ASSERT(isFullCanvasCompositeMode(state().m_globalComposite)); |
1646 | 1646 |
1647 GraphicsContext* c = drawingContext(); | 1647 GraphicsContext* c = drawingContext(); |
1648 ASSERT(c); | 1648 ASSERT(c); |
| 1649 |
| 1650 CompositeOperator previousOperator = c->compositeOperation(); |
| 1651 if (shouldDrawShadows()) { |
| 1652 // unroll into two independently composited passes if drawing shadows |
| 1653 c->beginLayer(1, state().m_globalComposite); |
| 1654 c->setCompositeOperation(CompositeSourceOver); |
| 1655 applyShadow(DrawShadowOnly); |
| 1656 fillPrimitive(area, c); |
| 1657 c->setCompositeOperation(previousOperator); |
| 1658 c->endLayer(); |
| 1659 } |
| 1660 |
1649 c->beginLayer(1, state().m_globalComposite); | 1661 c->beginLayer(1, state().m_globalComposite); |
1650 CompositeOperator previousOperator = c->compositeOperation(); | 1662 applyShadow(DrawForegroundOnly); |
1651 c->setCompositeOperation(CompositeSourceOver); | 1663 c->setCompositeOperation(CompositeSourceOver); |
1652 fillPrimitive(area, c); | 1664 fillPrimitive(area, c); |
1653 c->setCompositeOperation(previousOperator); | 1665 c->setCompositeOperation(previousOperator); |
1654 c->endLayer(); | 1666 c->endLayer(); |
| 1667 applyShadow(DrawShadowAndForeground); // go back to normal shadows |
1655 } | 1668 } |
1656 | 1669 |
1657 static void strokePrimitive(const FloatRect& rect, GraphicsContext* context) | 1670 static void strokePrimitive(const FloatRect& rect, GraphicsContext* context) |
1658 { | 1671 { |
1659 context->strokeRect(rect); | 1672 context->strokeRect(rect); |
1660 } | 1673 } |
1661 | 1674 |
1662 static void strokePrimitive(const Path& path, GraphicsContext* context) | 1675 static void strokePrimitive(const Path& path, GraphicsContext* context) |
1663 { | 1676 { |
1664 context->strokePath(path); | 1677 context->strokePath(path); |
1665 } | 1678 } |
1666 | 1679 |
1667 template<class T> void CanvasRenderingContext2D::fullCanvasCompositedStroke(cons
t T& area) | 1680 template<class T> void CanvasRenderingContext2D::fullCanvasCompositedStroke(cons
t T& area) |
1668 { | 1681 { |
1669 ASSERT(isFullCanvasCompositeMode(state().m_globalComposite)); | 1682 ASSERT(isFullCanvasCompositeMode(state().m_globalComposite)); |
1670 | 1683 |
1671 GraphicsContext* c = drawingContext(); | 1684 GraphicsContext* c = drawingContext(); |
1672 ASSERT(c); | 1685 ASSERT(c); |
| 1686 |
| 1687 CompositeOperator previousOperator = c->compositeOperation(); |
| 1688 if (shouldDrawShadows()) { |
| 1689 // unroll into two independently composited passes if drawing shadows |
| 1690 c->beginLayer(1, state().m_globalComposite); |
| 1691 c->setCompositeOperation(CompositeSourceOver); |
| 1692 applyShadow(DrawShadowOnly); |
| 1693 strokePrimitive(area, c); |
| 1694 c->setCompositeOperation(previousOperator); |
| 1695 c->endLayer(); |
| 1696 } |
| 1697 |
1673 c->beginLayer(1, state().m_globalComposite); | 1698 c->beginLayer(1, state().m_globalComposite); |
1674 CompositeOperator previousOperator = c->compositeOperation(); | 1699 applyShadow(DrawForegroundOnly); |
1675 c->setCompositeOperation(CompositeSourceOver); | 1700 c->setCompositeOperation(CompositeSourceOver); |
1676 strokePrimitive(area, c); | 1701 strokePrimitive(area, c); |
1677 c->setCompositeOperation(previousOperator); | 1702 c->setCompositeOperation(previousOperator); |
1678 c->endLayer(); | 1703 c->endLayer(); |
| 1704 applyShadow(DrawShadowAndForeground); // go back to normal shadows |
1679 } | 1705 } |
1680 | 1706 |
1681 PassRefPtrWillBeRawPtr<CanvasGradient> CanvasRenderingContext2D::createLinearGra
dient(float x0, float y0, float x1, float y1) | 1707 PassRefPtrWillBeRawPtr<CanvasGradient> CanvasRenderingContext2D::createLinearGra
dient(float x0, float y0, float x1, float y1) |
1682 { | 1708 { |
1683 RefPtrWillBeRawPtr<CanvasGradient> gradient = CanvasGradient::create(FloatPo
int(x0, y0), FloatPoint(x1, y1)); | 1709 RefPtrWillBeRawPtr<CanvasGradient> gradient = CanvasGradient::create(FloatPo
int(x0, y0), FloatPoint(x1, y1)); |
1684 return gradient.release(); | 1710 return gradient.release(); |
1685 } | 1711 } |
1686 | 1712 |
1687 PassRefPtrWillBeRawPtr<CanvasGradient> CanvasRenderingContext2D::createRadialGra
dient(float x0, float y0, float r0, float x1, float y1, float r1, ExceptionState
& exceptionState) | 1713 PassRefPtrWillBeRawPtr<CanvasGradient> CanvasRenderingContext2D::createRadialGra
dient(float x0, float y0, float r0, float x1, float y1, float r1, ExceptionState
& exceptionState) |
1688 { | 1714 { |
(...skipping 774 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2463 | 2489 |
2464 unsigned CanvasRenderingContext2D::hitRegionsCount() const | 2490 unsigned CanvasRenderingContext2D::hitRegionsCount() const |
2465 { | 2491 { |
2466 if (m_hitRegionManager) | 2492 if (m_hitRegionManager) |
2467 return m_hitRegionManager->getHitRegionsCount(); | 2493 return m_hitRegionManager->getHitRegionsCount(); |
2468 | 2494 |
2469 return 0; | 2495 return 0; |
2470 } | 2496 } |
2471 | 2497 |
2472 } // namespace blink | 2498 } // namespace blink |
OLD | NEW |