| 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 356 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 367 return state().hasFilter(canvas(), canvas()->size(), this); | 367 return state().hasFilter(canvas(), canvas()->size(), this); |
| 368 } | 368 } |
| 369 | 369 |
| 370 SkImageFilter* CanvasRenderingContext2D::stateGetFilter() | 370 SkImageFilter* CanvasRenderingContext2D::stateGetFilter() |
| 371 { | 371 { |
| 372 return state().getFilter(canvas(), canvas()->size(), this); | 372 return state().getFilter(canvas(), canvas()->size(), this); |
| 373 } | 373 } |
| 374 | 374 |
| 375 void CanvasRenderingContext2D::snapshotStateForFilter() | 375 void CanvasRenderingContext2D::snapshotStateForFilter() |
| 376 { | 376 { |
| 377 // The style resolution required for fonts is not available in frame-less do
cuments. | |
| 378 if (!canvas()->document().frame()) | |
| 379 return; | |
| 380 | |
| 381 modifiableState().setFontForFilter(accessFont()); | 377 modifiableState().setFontForFilter(accessFont()); |
| 382 } | 378 } |
| 383 | 379 |
| 384 SkCanvas* CanvasRenderingContext2D::drawingCanvas() const | 380 SkCanvas* CanvasRenderingContext2D::drawingCanvas() const |
| 385 { | 381 { |
| 386 if (isContextLost()) | 382 if (isContextLost()) |
| 387 return nullptr; | 383 return nullptr; |
| 388 return canvas()->drawingCanvas(); | 384 return canvas()->drawingCanvas(); |
| 389 } | 385 } |
| 390 | 386 |
| (...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 436 | 432 |
| 437 serializedFont.append(' '); | 433 serializedFont.append(' '); |
| 438 serializedFont.append(family); | 434 serializedFont.append(family); |
| 439 } | 435 } |
| 440 | 436 |
| 441 return serializedFont.toString(); | 437 return serializedFont.toString(); |
| 442 } | 438 } |
| 443 | 439 |
| 444 void CanvasRenderingContext2D::setFont(const String& newFont) | 440 void CanvasRenderingContext2D::setFont(const String& newFont) |
| 445 { | 441 { |
| 446 // The style resolution required for rendering text is not available in fram
e-less documents. | |
| 447 if (!canvas()->document().frame()) | |
| 448 return; | |
| 449 | |
| 450 canvas()->document().updateStyleAndLayoutTreeForNode(canvas()); | 442 canvas()->document().updateStyleAndLayoutTreeForNode(canvas()); |
| 451 | 443 |
| 452 // The following early exit is dependent on the cache not being empty | 444 // The following early exit is dependent on the cache not being empty |
| 453 // because an empty cache may indicate that a style change has occured | 445 // because an empty cache may indicate that a style change has occured |
| 454 // which would require that the font be re-resolved. This check has to | 446 // which would require that the font be re-resolved. This check has to |
| 455 // come after the layout tree update to flush pending style changes. | 447 // come after the layout tree update to flush pending style changes. |
| 456 if (newFont == state().unparsedFont() && state().hasRealizedFont() && m_font
sResolvedUsingCurrentStyle.size() > 0) | 448 if (newFont == state().unparsedFont() && state().hasRealizedFont() && m_font
sResolvedUsingCurrentStyle.size() > 0) |
| 457 return; | 449 return; |
| 458 | 450 |
| 459 CanvasFontCache* canvasFontCache = canvas()->document().canvasFontCache(); | 451 CanvasFontCache* canvasFontCache = canvas()->document().canvasFontCache(); |
| (...skipping 260 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 720 void CanvasRenderingContext2D::strokeText(const String& text, double x, double y
, double maxWidth) | 712 void CanvasRenderingContext2D::strokeText(const String& text, double x, double y
, double maxWidth) |
| 721 { | 713 { |
| 722 trackDrawCall(StrokeText); | 714 trackDrawCall(StrokeText); |
| 723 drawTextInternal(text, x, y, CanvasRenderingContext2DState::StrokePaintType,
&maxWidth); | 715 drawTextInternal(text, x, y, CanvasRenderingContext2DState::StrokePaintType,
&maxWidth); |
| 724 } | 716 } |
| 725 | 717 |
| 726 TextMetrics* CanvasRenderingContext2D::measureText(const String& text) | 718 TextMetrics* CanvasRenderingContext2D::measureText(const String& text) |
| 727 { | 719 { |
| 728 TextMetrics* metrics = TextMetrics::create(); | 720 TextMetrics* metrics = TextMetrics::create(); |
| 729 | 721 |
| 730 // The style resolution required for rendering text is not available in fram
e-less documents. | |
| 731 if (!canvas()->document().frame()) | |
| 732 return metrics; | |
| 733 | |
| 734 canvas()->document().updateStyleAndLayoutTreeForNode(canvas()); | 722 canvas()->document().updateStyleAndLayoutTreeForNode(canvas()); |
| 735 const Font& font = accessFont(); | 723 const Font& font = accessFont(); |
| 736 | 724 |
| 737 TextDirection direction; | 725 TextDirection direction; |
| 738 if (state().getDirection() == CanvasRenderingContext2DState::DirectionInheri
t) | 726 if (state().getDirection() == CanvasRenderingContext2DState::DirectionInheri
t) |
| 739 direction = determineDirectionality(text); | 727 direction = determineDirectionality(text); |
| 740 else | 728 else |
| 741 direction = toTextDirection(state().getDirection(), canvas()); | 729 direction = toTextDirection(state().getDirection(), canvas()); |
| 742 TextRun textRun(text, 0, 0, TextRun::AllowTrailingExpansion | TextRun::Forbi
dLeadingExpansion, direction, false); | 730 TextRun textRun(text, 0, 0, TextRun::AllowTrailingExpansion | TextRun::Forbi
dLeadingExpansion, direction, false); |
| 743 textRun.setNormalizeSpace(true); | 731 textRun.setNormalizeSpace(true); |
| (...skipping 21 matching lines...) Expand all Loading... |
| 765 metrics->setEmHeightDescent(0); | 753 metrics->setEmHeightDescent(0); |
| 766 | 754 |
| 767 metrics->setHangingBaseline(0.8f * ascent - baselineY); | 755 metrics->setHangingBaseline(0.8f * ascent - baselineY); |
| 768 metrics->setAlphabeticBaseline(-baselineY); | 756 metrics->setAlphabeticBaseline(-baselineY); |
| 769 metrics->setIdeographicBaseline(-descent - baselineY); | 757 metrics->setIdeographicBaseline(-descent - baselineY); |
| 770 return metrics; | 758 return metrics; |
| 771 } | 759 } |
| 772 | 760 |
| 773 void CanvasRenderingContext2D::drawTextInternal(const String& text, double x, do
uble y, CanvasRenderingContext2DState::PaintType paintType, double* maxWidth) | 761 void CanvasRenderingContext2D::drawTextInternal(const String& text, double x, do
uble y, CanvasRenderingContext2DState::PaintType paintType, double* maxWidth) |
| 774 { | 762 { |
| 775 // The style resolution required for rendering text is not available in fram
e-less documents. | |
| 776 if (!canvas()->document().frame()) | |
| 777 return; | |
| 778 | |
| 779 // accessFont needs the style to be up to date, but updating style can cause
script to run, | 763 // accessFont needs the style to be up to date, but updating style can cause
script to run, |
| 780 // (e.g. due to autofocus) which can free the canvas (set size to 0, for exa
mple), so update | 764 // (e.g. due to autofocus) which can free the canvas (set size to 0, for exa
mple), so update |
| 781 // style before grabbing the drawingCanvas. | 765 // style before grabbing the drawingCanvas. |
| 782 canvas()->document().updateStyleAndLayoutTreeForNode(canvas()); | 766 canvas()->document().updateStyleAndLayoutTreeForNode(canvas()); |
| 783 | 767 |
| 784 SkCanvas* c = drawingCanvas(); | 768 SkCanvas* c = drawingCanvas(); |
| 785 if (!c) | 769 if (!c) |
| 786 return; | 770 return; |
| 787 | 771 |
| 788 if (!std::isfinite(x) || !std::isfinite(y)) | 772 if (!std::isfinite(x) || !std::isfinite(y)) |
| (...skipping 308 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1097 return true; | 1081 return true; |
| 1098 } | 1082 } |
| 1099 | 1083 |
| 1100 void CanvasRenderingContext2D::resetUsageTracking() | 1084 void CanvasRenderingContext2D::resetUsageTracking() |
| 1101 { | 1085 { |
| 1102 UsageCounters newCounters; | 1086 UsageCounters newCounters; |
| 1103 m_usageCounters = newCounters; | 1087 m_usageCounters = newCounters; |
| 1104 } | 1088 } |
| 1105 | 1089 |
| 1106 } // namespace blink | 1090 } // namespace blink |
| OLD | NEW |