| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright (C) 2004, 2006, 2007 Apple Inc. All rights reserved. | 2 * Copyright (C) 2004, 2006, 2007 Apple Inc. All rights reserved. |
| 3 * Copyright (C) 2007 Alp Toker <alp@atoker.com> | 3 * Copyright (C) 2007 Alp Toker <alp@atoker.com> |
| 4 * Copyright (C) 2010 Torch Mobile (Beijing) Co. Ltd. All rights reserved. | 4 * Copyright (C) 2010 Torch Mobile (Beijing) Co. Ltd. All rights reserved. |
| 5 * | 5 * |
| 6 * Redistribution and use in source and binary forms, with or without | 6 * Redistribution and use in source and binary forms, with or without |
| 7 * modification, are permitted provided that the following conditions | 7 * modification, are permitted provided that the following conditions |
| 8 * are met: | 8 * are met: |
| 9 * 1. Redistributions of source code must retain the above copyright | 9 * 1. Redistributions of source code must retain the above copyright |
| 10 * notice, this list of conditions and the following disclaimer. | 10 * notice, this list of conditions and the following disclaimer. |
| (...skipping 573 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 584 return adoptPtr(new UnacceleratedImageBufferSurface(deviceSize, opac
ityMode)); | 584 return adoptPtr(new UnacceleratedImageBufferSurface(deviceSize, opac
ityMode)); |
| 585 return adoptPtr(new WebGLImageBufferSurface(deviceSize, opacityMode)); | 585 return adoptPtr(new WebGLImageBufferSurface(deviceSize, opacityMode)); |
| 586 } | 586 } |
| 587 | 587 |
| 588 OwnPtr<RecordingImageBufferFallbackSurfaceFactory> surfaceFactory = createSu
rfaceFactory(deviceSize, msaaSampleCount); | 588 OwnPtr<RecordingImageBufferFallbackSurfaceFactory> surfaceFactory = createSu
rfaceFactory(deviceSize, msaaSampleCount); |
| 589 | 589 |
| 590 if (shouldUseDisplayList(deviceSize)) { | 590 if (shouldUseDisplayList(deviceSize)) { |
| 591 OwnPtr<ImageBufferSurface> surface = adoptPtr(new RecordingImageBufferSu
rface(deviceSize, surfaceFactory.release(), opacityMode)); | 591 OwnPtr<ImageBufferSurface> surface = adoptPtr(new RecordingImageBufferSu
rface(deviceSize, surfaceFactory.release(), opacityMode)); |
| 592 if (surface->isValid()) | 592 if (surface->isValid()) |
| 593 return surface.release(); | 593 return surface.release(); |
| 594 surfaceFactory = createSurfaceFactory(deviceSize, msaaSampleCount); // r
ecreate because old previous one was released | 594 surfaceFactory = createSurfaceFactory(deviceSize, msaaSampleCount); // r
ecreate because previous one was released |
| 595 } | 595 } |
| 596 | 596 |
| 597 return surfaceFactory->createSurface(deviceSize, opacityMode); | 597 return surfaceFactory->createSurface(deviceSize, opacityMode); |
| 598 } | 598 } |
| 599 | 599 |
| 600 void HTMLCanvasElement::createImageBuffer() | 600 void HTMLCanvasElement::createImageBuffer() |
| 601 { | 601 { |
| 602 createImageBufferInternal(); | 602 createImageBufferInternal(nullptr); |
| 603 if (m_didFailToCreateImageBuffer && m_context->is2d()) | 603 if (m_didFailToCreateImageBuffer && m_context->is2d()) |
| 604 toCanvasRenderingContext2D(m_context.get())->loseContext(); | 604 toCanvasRenderingContext2D(m_context.get())->loseContext(); |
| 605 } | 605 } |
| 606 | 606 |
| 607 void HTMLCanvasElement::createImageBufferInternal() | 607 void HTMLCanvasElement::createImageBufferInternal(PassOwnPtr<ImageBufferSurface>
externalSurface) |
| 608 { | 608 { |
| 609 ASSERT(!m_imageBuffer); | 609 ASSERT(!m_imageBuffer); |
| 610 ASSERT(!m_contextStateSaver); | 610 ASSERT(!m_contextStateSaver); |
| 611 | 611 |
| 612 m_didFailToCreateImageBuffer = true; | 612 m_didFailToCreateImageBuffer = true; |
| 613 m_imageBufferIsClear = true; | 613 m_imageBufferIsClear = true; |
| 614 | 614 |
| 615 if (!canCreateImageBuffer(size())) | 615 if (!canCreateImageBuffer(size())) |
| 616 return; | 616 return; |
| 617 | 617 |
| 618 int msaaSampleCount; | 618 int msaaSampleCount = 0; |
| 619 OwnPtr<ImageBufferSurface> surface = createImageBufferSurface(size(), &msaaS
ampleCount); | 619 OwnPtr<ImageBufferSurface> surface; |
| 620 if (externalSurface) { |
| 621 surface = externalSurface; |
| 622 } else { |
| 623 surface = createImageBufferSurface(size(), &msaaSampleCount); |
| 624 } |
| 620 m_imageBuffer = ImageBuffer::create(surface.release()); | 625 m_imageBuffer = ImageBuffer::create(surface.release()); |
| 621 if (!m_imageBuffer) | 626 if (!m_imageBuffer) |
| 622 return; | 627 return; |
| 623 m_imageBuffer->setClient(this); | 628 m_imageBuffer->setClient(this); |
| 624 | 629 |
| 625 document().updateRenderTreeIfNeeded(); | 630 document().updateRenderTreeIfNeeded(); |
| 626 RenderStyle* style = computedStyle(); | 631 RenderStyle* style = computedStyle(); |
| 627 m_imageBuffer->setFilterLevel((style && (style->imageRendering() == ImageRen
deringPixelated)) ? SkPaint::kNone_FilterLevel : SkPaint::kLow_FilterLevel); | 632 m_imageBuffer->setFilterLevel((style && (style->imageRendering() == ImageRen
deringPixelated)) ? SkPaint::kNone_FilterLevel : SkPaint::kLow_FilterLevel); |
| 628 | 633 |
| 629 m_didFailToCreateImageBuffer = false; | 634 m_didFailToCreateImageBuffer = false; |
| (...skipping 95 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 725 } | 730 } |
| 726 | 731 |
| 727 ImageBuffer* HTMLCanvasElement::buffer() const | 732 ImageBuffer* HTMLCanvasElement::buffer() const |
| 728 { | 733 { |
| 729 ASSERT(m_context); | 734 ASSERT(m_context); |
| 730 if (!hasImageBuffer() && !m_didFailToCreateImageBuffer) | 735 if (!hasImageBuffer() && !m_didFailToCreateImageBuffer) |
| 731 const_cast<HTMLCanvasElement*>(this)->createImageBuffer(); | 736 const_cast<HTMLCanvasElement*>(this)->createImageBuffer(); |
| 732 return m_imageBuffer.get(); | 737 return m_imageBuffer.get(); |
| 733 } | 738 } |
| 734 | 739 |
| 740 void HTMLCanvasElement::createImageBufferUsingSurface(PassOwnPtr<ImageBufferSurf
ace> surface) |
| 741 { |
| 742 discardImageBuffer(); |
| 743 createImageBufferInternal(surface); |
| 744 } |
| 745 |
| 735 void HTMLCanvasElement::ensureUnacceleratedImageBuffer() | 746 void HTMLCanvasElement::ensureUnacceleratedImageBuffer() |
| 736 { | 747 { |
| 737 ASSERT(m_context); | 748 ASSERT(m_context); |
| 738 if ((hasImageBuffer() && !m_imageBuffer->isAccelerated()) || m_didFailToCrea
teImageBuffer) | 749 if ((hasImageBuffer() && !m_imageBuffer->isAccelerated()) || m_didFailToCrea
teImageBuffer) |
| 739 return; | 750 return; |
| 740 discardImageBuffer(); | 751 discardImageBuffer(); |
| 741 OpacityMode opacityMode = m_context->hasAlpha() ? NonOpaque : Opaque; | 752 OpacityMode opacityMode = m_context->hasAlpha() ? NonOpaque : Opaque; |
| 742 m_imageBuffer = ImageBuffer::create(size(), opacityMode); | 753 m_imageBuffer = ImageBuffer::create(size(), opacityMode); |
| 743 m_didFailToCreateImageBuffer = !m_imageBuffer; | 754 m_didFailToCreateImageBuffer = !m_imageBuffer; |
| 744 } | 755 } |
| (...skipping 103 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 848 bool HTMLCanvasElement::wouldTaintOrigin(SecurityOrigin*) const | 859 bool HTMLCanvasElement::wouldTaintOrigin(SecurityOrigin*) const |
| 849 { | 860 { |
| 850 return !originClean(); | 861 return !originClean(); |
| 851 } | 862 } |
| 852 | 863 |
| 853 FloatSize HTMLCanvasElement::sourceSize() const | 864 FloatSize HTMLCanvasElement::sourceSize() const |
| 854 { | 865 { |
| 855 return FloatSize(width(), height()); | 866 return FloatSize(width(), height()); |
| 856 } | 867 } |
| 857 | 868 |
| 869 bool HTMLCanvasElement::isOpaque() const |
| 870 { |
| 871 return m_context && !m_context->hasAlpha(); |
| 858 } | 872 } |
| 873 |
| 874 } // blink |
| OLD | NEW |