| 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 189 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 200 | 200 |
| 201 void CanvasRenderingContext2D::tryRestoreContextEvent(Timer<CanvasRenderingConte
xt2D>* timer) | 201 void CanvasRenderingContext2D::tryRestoreContextEvent(Timer<CanvasRenderingConte
xt2D>* timer) |
| 202 { | 202 { |
| 203 if (!m_isContextLost) { | 203 if (!m_isContextLost) { |
| 204 // Canvas was already restored (possibly thanks to a resize), so stop tr
ying. | 204 // Canvas was already restored (possibly thanks to a resize), so stop tr
ying. |
| 205 m_tryRestoreContextEventTimer.stop(); | 205 m_tryRestoreContextEventTimer.stop(); |
| 206 return; | 206 return; |
| 207 } | 207 } |
| 208 if (canvas()->hasImageBuffer() && canvas()->buffer()->restoreSurface()) { | 208 if (canvas()->hasImageBuffer() && canvas()->buffer()->restoreSurface()) { |
| 209 m_tryRestoreContextEventTimer.stop(); | 209 m_tryRestoreContextEventTimer.stop(); |
| 210 dispatchContextRestoredEvent(0); | 210 dispatchContextRestoredEvent(nullptr); |
| 211 } | 211 } |
| 212 | 212 |
| 213 if (++m_tryRestoreContextAttemptCount > MaxTryRestoreContextAttempts) | 213 if (++m_tryRestoreContextAttemptCount > MaxTryRestoreContextAttempts) |
| 214 canvas()->discardImageBuffer(); | 214 canvas()->discardImageBuffer(); |
| 215 | 215 |
| 216 if (!canvas()->hasImageBuffer()) { | 216 if (!canvas()->hasImageBuffer()) { |
| 217 // final attempt: allocate a brand new image buffer instead of restoring | 217 // final attempt: allocate a brand new image buffer instead of restoring |
| 218 timer->stop(); | 218 timer->stop(); |
| 219 if (canvas()->buffer()) | 219 if (canvas()->buffer()) |
| 220 dispatchContextRestoredEvent(0); | 220 dispatchContextRestoredEvent(nullptr); |
| 221 } | 221 } |
| 222 } | 222 } |
| 223 | 223 |
| 224 void CanvasRenderingContext2D::dispatchContextRestoredEvent(Timer<CanvasRenderin
gContext2D>*) | 224 void CanvasRenderingContext2D::dispatchContextRestoredEvent(Timer<CanvasRenderin
gContext2D>*) |
| 225 { | 225 { |
| 226 if (!m_isContextLost) | 226 if (!m_isContextLost) |
| 227 return; | 227 return; |
| 228 reset(); | 228 reset(); |
| 229 m_isContextLost = false; | 229 m_isContextLost = false; |
| 230 if (contextLostRestoredEventsEnabled()) { | 230 if (contextLostRestoredEventsEnabled()) { |
| (...skipping 329 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 560 { | 560 { |
| 561 return state().m_shadowOffset.width(); | 561 return state().m_shadowOffset.width(); |
| 562 } | 562 } |
| 563 | 563 |
| 564 void CanvasRenderingContext2D::setShadowOffsetX(float x) | 564 void CanvasRenderingContext2D::setShadowOffsetX(float x) |
| 565 { | 565 { |
| 566 if (!std::isfinite(x)) | 566 if (!std::isfinite(x)) |
| 567 return; | 567 return; |
| 568 if (state().m_shadowOffset.width() == x) | 568 if (state().m_shadowOffset.width() == x) |
| 569 return; | 569 return; |
| 570 realizeSaves(0); | 570 realizeSaves(nullptr); |
| 571 modifiableState().m_shadowOffset.setWidth(x); | 571 modifiableState().m_shadowOffset.setWidth(x); |
| 572 applyShadow(); | 572 applyShadow(); |
| 573 } | 573 } |
| 574 | 574 |
| 575 float CanvasRenderingContext2D::shadowOffsetY() const | 575 float CanvasRenderingContext2D::shadowOffsetY() const |
| 576 { | 576 { |
| 577 return state().m_shadowOffset.height(); | 577 return state().m_shadowOffset.height(); |
| 578 } | 578 } |
| 579 | 579 |
| 580 void CanvasRenderingContext2D::setShadowOffsetY(float y) | 580 void CanvasRenderingContext2D::setShadowOffsetY(float y) |
| 581 { | 581 { |
| 582 if (!std::isfinite(y)) | 582 if (!std::isfinite(y)) |
| 583 return; | 583 return; |
| 584 if (state().m_shadowOffset.height() == y) | 584 if (state().m_shadowOffset.height() == y) |
| 585 return; | 585 return; |
| 586 realizeSaves(0); | 586 realizeSaves(nullptr); |
| 587 modifiableState().m_shadowOffset.setHeight(y); | 587 modifiableState().m_shadowOffset.setHeight(y); |
| 588 applyShadow(); | 588 applyShadow(); |
| 589 } | 589 } |
| 590 | 590 |
| 591 float CanvasRenderingContext2D::shadowBlur() const | 591 float CanvasRenderingContext2D::shadowBlur() const |
| 592 { | 592 { |
| 593 return state().m_shadowBlur; | 593 return state().m_shadowBlur; |
| 594 } | 594 } |
| 595 | 595 |
| 596 void CanvasRenderingContext2D::setShadowBlur(float blur) | 596 void CanvasRenderingContext2D::setShadowBlur(float blur) |
| 597 { | 597 { |
| 598 if (!std::isfinite(blur) || blur < 0) | 598 if (!std::isfinite(blur) || blur < 0) |
| 599 return; | 599 return; |
| 600 if (state().m_shadowBlur == blur) | 600 if (state().m_shadowBlur == blur) |
| 601 return; | 601 return; |
| 602 realizeSaves(0); | 602 realizeSaves(nullptr); |
| 603 modifiableState().m_shadowBlur = blur; | 603 modifiableState().m_shadowBlur = blur; |
| 604 applyShadow(); | 604 applyShadow(); |
| 605 } | 605 } |
| 606 | 606 |
| 607 String CanvasRenderingContext2D::shadowColor() const | 607 String CanvasRenderingContext2D::shadowColor() const |
| 608 { | 608 { |
| 609 return Color(state().m_shadowColor).serialized(); | 609 return Color(state().m_shadowColor).serialized(); |
| 610 } | 610 } |
| 611 | 611 |
| 612 void CanvasRenderingContext2D::setShadowColor(const String& color) | 612 void CanvasRenderingContext2D::setShadowColor(const String& color) |
| 613 { | 613 { |
| 614 RGBA32 rgba; | 614 RGBA32 rgba; |
| 615 if (!parseColorOrCurrentColor(rgba, color, canvas())) | 615 if (!parseColorOrCurrentColor(rgba, color, canvas())) |
| 616 return; | 616 return; |
| 617 if (state().m_shadowColor == rgba) | 617 if (state().m_shadowColor == rgba) |
| 618 return; | 618 return; |
| 619 realizeSaves(0); | 619 realizeSaves(nullptr); |
| 620 modifiableState().m_shadowColor = rgba; | 620 modifiableState().m_shadowColor = rgba; |
| 621 applyShadow(); | 621 applyShadow(); |
| 622 } | 622 } |
| 623 | 623 |
| 624 const Vector<float>& CanvasRenderingContext2D::getLineDash() const | 624 const Vector<float>& CanvasRenderingContext2D::getLineDash() const |
| 625 { | 625 { |
| 626 return state().m_lineDash; | 626 return state().m_lineDash; |
| 627 } | 627 } |
| 628 | 628 |
| 629 static bool lineDashSequenceIsValid(const Vector<float>& dash) | 629 static bool lineDashSequenceIsValid(const Vector<float>& dash) |
| 630 { | 630 { |
| 631 for (size_t i = 0; i < dash.size(); i++) { | 631 for (size_t i = 0; i < dash.size(); i++) { |
| 632 if (!std::isfinite(dash[i]) || dash[i] < 0) | 632 if (!std::isfinite(dash[i]) || dash[i] < 0) |
| 633 return false; | 633 return false; |
| 634 } | 634 } |
| 635 return true; | 635 return true; |
| 636 } | 636 } |
| 637 | 637 |
| 638 void CanvasRenderingContext2D::setLineDash(const Vector<float>& dash) | 638 void CanvasRenderingContext2D::setLineDash(const Vector<float>& dash) |
| 639 { | 639 { |
| 640 if (!lineDashSequenceIsValid(dash)) | 640 if (!lineDashSequenceIsValid(dash)) |
| 641 return; | 641 return; |
| 642 | 642 |
| 643 realizeSaves(0); | 643 realizeSaves(nullptr); |
| 644 modifiableState().m_lineDash = dash; | 644 modifiableState().m_lineDash = dash; |
| 645 // Spec requires the concatenation of two copies the dash list when the | 645 // Spec requires the concatenation of two copies the dash list when the |
| 646 // number of elements is odd | 646 // number of elements is odd |
| 647 if (dash.size() % 2) | 647 if (dash.size() % 2) |
| 648 modifiableState().m_lineDash.appendVector(dash); | 648 modifiableState().m_lineDash.appendVector(dash); |
| 649 | 649 |
| 650 applyLineDash(); | 650 applyLineDash(); |
| 651 } | 651 } |
| 652 | 652 |
| 653 float CanvasRenderingContext2D::lineDashOffset() const | 653 float CanvasRenderingContext2D::lineDashOffset() const |
| 654 { | 654 { |
| 655 return state().m_lineDashOffset; | 655 return state().m_lineDashOffset; |
| 656 } | 656 } |
| 657 | 657 |
| 658 void CanvasRenderingContext2D::setLineDashOffset(float offset) | 658 void CanvasRenderingContext2D::setLineDashOffset(float offset) |
| 659 { | 659 { |
| 660 if (!std::isfinite(offset) || state().m_lineDashOffset == offset) | 660 if (!std::isfinite(offset) || state().m_lineDashOffset == offset) |
| 661 return; | 661 return; |
| 662 | 662 |
| 663 realizeSaves(0); | 663 realizeSaves(nullptr); |
| 664 modifiableState().m_lineDashOffset = offset; | 664 modifiableState().m_lineDashOffset = offset; |
| 665 applyLineDash(); | 665 applyLineDash(); |
| 666 } | 666 } |
| 667 | 667 |
| 668 void CanvasRenderingContext2D::applyLineDash() const | 668 void CanvasRenderingContext2D::applyLineDash() const |
| 669 { | 669 { |
| 670 GraphicsContext* c = drawingContext(); | 670 GraphicsContext* c = drawingContext(); |
| 671 if (!c) | 671 if (!c) |
| 672 return; | 672 return; |
| 673 DashArray convertedLineDash(state().m_lineDash.size()); | 673 DashArray convertedLineDash(state().m_lineDash.size()); |
| (...skipping 200 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 874 return; | 874 return; |
| 875 | 875 |
| 876 resetTransform(); | 876 resetTransform(); |
| 877 transform(m11, m12, m21, m22, dx, dy); | 877 transform(m11, m12, m21, m22, dx, dy); |
| 878 } | 878 } |
| 879 | 879 |
| 880 void CanvasRenderingContext2D::setStrokeColor(const String& color) | 880 void CanvasRenderingContext2D::setStrokeColor(const String& color) |
| 881 { | 881 { |
| 882 if (color == state().m_unparsedStrokeColor) | 882 if (color == state().m_unparsedStrokeColor) |
| 883 return; | 883 return; |
| 884 realizeSaves(0); | 884 realizeSaves(nullptr); |
| 885 setStrokeStyle(CanvasStyle::createFromString(color)); | 885 setStrokeStyle(CanvasStyle::createFromString(color)); |
| 886 modifiableState().m_unparsedStrokeColor = color; | 886 modifiableState().m_unparsedStrokeColor = color; |
| 887 } | 887 } |
| 888 | 888 |
| 889 void CanvasRenderingContext2D::setStrokeColor(float grayLevel) | 889 void CanvasRenderingContext2D::setStrokeColor(float grayLevel) |
| 890 { | 890 { |
| 891 if (state().m_strokeStyle && state().m_strokeStyle->isEquivalentRGBA(grayLev
el, grayLevel, grayLevel, 1.0f)) | 891 if (state().m_strokeStyle && state().m_strokeStyle->isEquivalentRGBA(grayLev
el, grayLevel, grayLevel, 1.0f)) |
| 892 return; | 892 return; |
| 893 setStrokeStyle(CanvasStyle::createFromGrayLevelWithAlpha(grayLevel, 1.0f)); | 893 setStrokeStyle(CanvasStyle::createFromGrayLevelWithAlpha(grayLevel, 1.0f)); |
| 894 } | 894 } |
| (...skipping 21 matching lines...) Expand all Loading... |
| 916 { | 916 { |
| 917 if (state().m_strokeStyle && state().m_strokeStyle->isEquivalentCMYKA(c, m,
y, k, a)) | 917 if (state().m_strokeStyle && state().m_strokeStyle->isEquivalentCMYKA(c, m,
y, k, a)) |
| 918 return; | 918 return; |
| 919 setStrokeStyle(CanvasStyle::createFromCMYKAChannels(c, m, y, k, a)); | 919 setStrokeStyle(CanvasStyle::createFromCMYKAChannels(c, m, y, k, a)); |
| 920 } | 920 } |
| 921 | 921 |
| 922 void CanvasRenderingContext2D::setFillColor(const String& color) | 922 void CanvasRenderingContext2D::setFillColor(const String& color) |
| 923 { | 923 { |
| 924 if (color == state().m_unparsedFillColor) | 924 if (color == state().m_unparsedFillColor) |
| 925 return; | 925 return; |
| 926 realizeSaves(0); | 926 realizeSaves(nullptr); |
| 927 setFillStyle(CanvasStyle::createFromString(color)); | 927 setFillStyle(CanvasStyle::createFromString(color)); |
| 928 modifiableState().m_unparsedFillColor = color; | 928 modifiableState().m_unparsedFillColor = color; |
| 929 } | 929 } |
| 930 | 930 |
| 931 void CanvasRenderingContext2D::setFillColor(float grayLevel) | 931 void CanvasRenderingContext2D::setFillColor(float grayLevel) |
| 932 { | 932 { |
| 933 if (state().m_fillStyle && state().m_fillStyle->isEquivalentRGBA(grayLevel,
grayLevel, grayLevel, 1.0f)) | 933 if (state().m_fillStyle && state().m_fillStyle->isEquivalentRGBA(grayLevel,
grayLevel, grayLevel, 1.0f)) |
| 934 return; | 934 return; |
| 935 setFillStyle(CanvasStyle::createFromGrayLevelWithAlpha(grayLevel, 1.0f)); | 935 setFillStyle(CanvasStyle::createFromGrayLevelWithAlpha(grayLevel, 1.0f)); |
| 936 } | 936 } |
| (...skipping 484 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1421 void CanvasRenderingContext2D::clearShadow() | 1421 void CanvasRenderingContext2D::clearShadow() |
| 1422 { | 1422 { |
| 1423 setShadow(FloatSize(), 0, Color::transparent); | 1423 setShadow(FloatSize(), 0, Color::transparent); |
| 1424 } | 1424 } |
| 1425 | 1425 |
| 1426 void CanvasRenderingContext2D::setShadow(const FloatSize& offset, float blur, RG
BA32 color) | 1426 void CanvasRenderingContext2D::setShadow(const FloatSize& offset, float blur, RG
BA32 color) |
| 1427 { | 1427 { |
| 1428 if (state().m_shadowOffset == offset && state().m_shadowBlur == blur && stat
e().m_shadowColor == color) | 1428 if (state().m_shadowOffset == offset && state().m_shadowBlur == blur && stat
e().m_shadowColor == color) |
| 1429 return; | 1429 return; |
| 1430 bool wasDrawingShadows = shouldDrawShadows(); | 1430 bool wasDrawingShadows = shouldDrawShadows(); |
| 1431 realizeSaves(0); | 1431 realizeSaves(nullptr); |
| 1432 modifiableState().m_shadowOffset = offset; | 1432 modifiableState().m_shadowOffset = offset; |
| 1433 modifiableState().m_shadowBlur = blur; | 1433 modifiableState().m_shadowBlur = blur; |
| 1434 modifiableState().m_shadowColor = color; | 1434 modifiableState().m_shadowColor = color; |
| 1435 if (!wasDrawingShadows && !shouldDrawShadows()) | 1435 if (!wasDrawingShadows && !shouldDrawShadows()) |
| 1436 return; | 1436 return; |
| 1437 applyShadow(); | 1437 applyShadow(); |
| 1438 } | 1438 } |
| 1439 | 1439 |
| 1440 void CanvasRenderingContext2D::applyShadow(ShadowMode shadowMode) | 1440 void CanvasRenderingContext2D::applyShadow(ShadowMode shadowMode) |
| 1441 { | 1441 { |
| (...skipping 310 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1752 { | 1752 { |
| 1753 if (dirtyRect.isEmpty()) | 1753 if (dirtyRect.isEmpty()) |
| 1754 return; | 1754 return; |
| 1755 | 1755 |
| 1756 canvas()->didDraw(dirtyRect); | 1756 canvas()->didDraw(dirtyRect); |
| 1757 } | 1757 } |
| 1758 | 1758 |
| 1759 GraphicsContext* CanvasRenderingContext2D::drawingContext() const | 1759 GraphicsContext* CanvasRenderingContext2D::drawingContext() const |
| 1760 { | 1760 { |
| 1761 if (isContextLost()) | 1761 if (isContextLost()) |
| 1762 return 0; | 1762 return nullptr; |
| 1763 return canvas()->drawingContext(); | 1763 return canvas()->drawingContext(); |
| 1764 } | 1764 } |
| 1765 | 1765 |
| 1766 static PassRefPtrWillBeRawPtr<ImageData> createEmptyImageData(const IntSize& siz
e) | 1766 static PassRefPtrWillBeRawPtr<ImageData> createEmptyImageData(const IntSize& siz
e) |
| 1767 { | 1767 { |
| 1768 if (RefPtrWillBeRawPtr<ImageData> data = ImageData::create(size)) { | 1768 if (RefPtrWillBeRawPtr<ImageData> data = ImageData::create(size)) { |
| 1769 data->data()->zeroFill(); | 1769 data->data()->zeroFill(); |
| 1770 return data.release(); | 1770 return data.release(); |
| 1771 } | 1771 } |
| 1772 | 1772 |
| (...skipping 166 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1939 | 1939 |
| 1940 String fontValue = parsedStyle->getPropertyValue(CSSPropertyFont); | 1940 String fontValue = parsedStyle->getPropertyValue(CSSPropertyFont); |
| 1941 | 1941 |
| 1942 // According to http://lists.w3.org/Archives/Public/public-html/2009Jul/0947
.html, | 1942 // According to http://lists.w3.org/Archives/Public/public-html/2009Jul/0947
.html, |
| 1943 // the "inherit" and "initial" values must be ignored. | 1943 // the "inherit" and "initial" values must be ignored. |
| 1944 if (fontValue == "inherit" || fontValue == "initial") | 1944 if (fontValue == "inherit" || fontValue == "initial") |
| 1945 return; | 1945 return; |
| 1946 | 1946 |
| 1947 // The parse succeeded. | 1947 // The parse succeeded. |
| 1948 String newFontSafeCopy(newFont); // Create a string copy since newFont can b
e deleted inside realizeSaves. | 1948 String newFontSafeCopy(newFont); // Create a string copy since newFont can b
e deleted inside realizeSaves. |
| 1949 realizeSaves(0); | 1949 realizeSaves(nullptr); |
| 1950 modifiableState().m_unparsedFont = newFontSafeCopy; | 1950 modifiableState().m_unparsedFont = newFontSafeCopy; |
| 1951 | 1951 |
| 1952 // Map the <canvas> font into the text style. If the font uses keywords like
larger/smaller, these will work | 1952 // Map the <canvas> font into the text style. If the font uses keywords like
larger/smaller, these will work |
| 1953 // relative to the canvas. | 1953 // relative to the canvas. |
| 1954 RefPtr<RenderStyle> newStyle = RenderStyle::create(); | 1954 RefPtr<RenderStyle> newStyle = RenderStyle::create(); |
| 1955 canvas()->document().updateRenderTreeIfNeeded(); | 1955 canvas()->document().updateRenderTreeIfNeeded(); |
| 1956 if (RenderStyle* computedStyle = canvas()->computedStyle()) { | 1956 if (RenderStyle* computedStyle = canvas()->computedStyle()) { |
| 1957 FontDescription elementFontDescription(computedStyle->fontDescription())
; | 1957 FontDescription elementFontDescription(computedStyle->fontDescription())
; |
| 1958 // Reset the computed size to avoid inheriting the zoom factor from the
<canvas> element. | 1958 // Reset the computed size to avoid inheriting the zoom factor from the
<canvas> element. |
| 1959 elementFontDescription.setComputedSize(elementFontDescription.specifiedS
ize()); | 1959 elementFontDescription.setComputedSize(elementFontDescription.specifiedS
ize()); |
| (...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2000 return textAlignName(state().m_textAlign); | 2000 return textAlignName(state().m_textAlign); |
| 2001 } | 2001 } |
| 2002 | 2002 |
| 2003 void CanvasRenderingContext2D::setTextAlign(const String& s) | 2003 void CanvasRenderingContext2D::setTextAlign(const String& s) |
| 2004 { | 2004 { |
| 2005 TextAlign align; | 2005 TextAlign align; |
| 2006 if (!parseTextAlign(s, align)) | 2006 if (!parseTextAlign(s, align)) |
| 2007 return; | 2007 return; |
| 2008 if (state().m_textAlign == align) | 2008 if (state().m_textAlign == align) |
| 2009 return; | 2009 return; |
| 2010 realizeSaves(0); | 2010 realizeSaves(nullptr); |
| 2011 modifiableState().m_textAlign = align; | 2011 modifiableState().m_textAlign = align; |
| 2012 } | 2012 } |
| 2013 | 2013 |
| 2014 String CanvasRenderingContext2D::textBaseline() const | 2014 String CanvasRenderingContext2D::textBaseline() const |
| 2015 { | 2015 { |
| 2016 return textBaselineName(state().m_textBaseline); | 2016 return textBaselineName(state().m_textBaseline); |
| 2017 } | 2017 } |
| 2018 | 2018 |
| 2019 void CanvasRenderingContext2D::setTextBaseline(const String& s) | 2019 void CanvasRenderingContext2D::setTextBaseline(const String& s) |
| 2020 { | 2020 { |
| 2021 TextBaseline baseline; | 2021 TextBaseline baseline; |
| 2022 if (!parseTextBaseline(s, baseline)) | 2022 if (!parseTextBaseline(s, baseline)) |
| 2023 return; | 2023 return; |
| 2024 if (state().m_textBaseline == baseline) | 2024 if (state().m_textBaseline == baseline) |
| 2025 return; | 2025 return; |
| 2026 realizeSaves(0); | 2026 realizeSaves(nullptr); |
| 2027 modifiableState().m_textBaseline = baseline; | 2027 modifiableState().m_textBaseline = baseline; |
| 2028 } | 2028 } |
| 2029 | 2029 |
| 2030 inline TextDirection CanvasRenderingContext2D::toTextDirection(Direction directi
on, RenderStyle** computedStyle) const | 2030 inline TextDirection CanvasRenderingContext2D::toTextDirection(Direction directi
on, RenderStyle** computedStyle) const |
| 2031 { | 2031 { |
| 2032 RenderStyle* style = (computedStyle || direction == DirectionInherit) ? canv
as()->computedStyle() : nullptr; | 2032 RenderStyle* style = (computedStyle || direction == DirectionInherit) ? canv
as()->computedStyle() : nullptr; |
| 2033 if (computedStyle) | 2033 if (computedStyle) |
| 2034 *computedStyle = style; | 2034 *computedStyle = style; |
| 2035 switch (direction) { | 2035 switch (direction) { |
| 2036 case DirectionInherit: | 2036 case DirectionInherit: |
| (...skipping 22 matching lines...) Expand all Loading... |
| 2059 else if (directionString == rtl) | 2059 else if (directionString == rtl) |
| 2060 direction = DirectionRTL; | 2060 direction = DirectionRTL; |
| 2061 else if (directionString == ltr) | 2061 else if (directionString == ltr) |
| 2062 direction = DirectionLTR; | 2062 direction = DirectionLTR; |
| 2063 else | 2063 else |
| 2064 return; | 2064 return; |
| 2065 | 2065 |
| 2066 if (state().m_direction == direction) | 2066 if (state().m_direction == direction) |
| 2067 return; | 2067 return; |
| 2068 | 2068 |
| 2069 realizeSaves(0); | 2069 realizeSaves(nullptr); |
| 2070 modifiableState().m_direction = direction; | 2070 modifiableState().m_direction = direction; |
| 2071 } | 2071 } |
| 2072 | 2072 |
| 2073 void CanvasRenderingContext2D::fillText(const String& text, float x, float y) | 2073 void CanvasRenderingContext2D::fillText(const String& text, float x, float y) |
| 2074 { | 2074 { |
| 2075 drawTextInternal(text, x, y, true); | 2075 drawTextInternal(text, x, y, true); |
| 2076 } | 2076 } |
| 2077 | 2077 |
| 2078 void CanvasRenderingContext2D::fillText(const String& text, float x, float y, fl
oat maxWidth) | 2078 void CanvasRenderingContext2D::fillText(const String& text, float x, float y, fl
oat maxWidth) |
| 2079 { | 2079 { |
| (...skipping 356 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2436 { | 2436 { |
| 2437 if (m_hitRegionManager) | 2437 if (m_hitRegionManager) |
| 2438 m_hitRegionManager->removeAllHitRegions(); | 2438 m_hitRegionManager->removeAllHitRegions(); |
| 2439 } | 2439 } |
| 2440 | 2440 |
| 2441 HitRegion* CanvasRenderingContext2D::hitRegionAtPoint(const LayoutPoint& point) | 2441 HitRegion* CanvasRenderingContext2D::hitRegionAtPoint(const LayoutPoint& point) |
| 2442 { | 2442 { |
| 2443 if (m_hitRegionManager) | 2443 if (m_hitRegionManager) |
| 2444 return m_hitRegionManager->getHitRegionAtPoint(point); | 2444 return m_hitRegionManager->getHitRegionAtPoint(point); |
| 2445 | 2445 |
| 2446 return 0; | 2446 return nullptr; |
| 2447 } | 2447 } |
| 2448 | 2448 |
| 2449 unsigned CanvasRenderingContext2D::hitRegionsCount() const | 2449 unsigned CanvasRenderingContext2D::hitRegionsCount() const |
| 2450 { | 2450 { |
| 2451 if (m_hitRegionManager) | 2451 if (m_hitRegionManager) |
| 2452 return m_hitRegionManager->getHitRegionsCount(); | 2452 return m_hitRegionManager->getHitRegionsCount(); |
| 2453 | 2453 |
| 2454 return 0; | 2454 return 0; |
| 2455 } | 2455 } |
| 2456 | 2456 |
| 2457 } // namespace blink | 2457 } // namespace blink |
| OLD | NEW |