Changeset 63025 in webkit
- Timestamp:
- Jul 9, 2010 6:26:56 PM (14 years ago)
- Location:
- trunk/WebCore
- Files:
-
- 2 deleted
- 9 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/WebCore/CMakeLists.txt
r62998 r63025 759 759 dom/BeforeTextInsertedEvent.cpp 760 760 dom/BeforeUnloadEvent.cpp 761 dom/CanvasSurface.cpp762 761 dom/CDATASection.cpp 763 762 dom/CharacterData.cpp -
trunk/WebCore/ChangeLog
r63022 r63025 1 2010-07-09 James Robinson <jamesr@chromium.org> 2 3 Reviewed by Darin Adler. 4 5 Removes CanvasSurface and moves all of its functionality to HTMLCanvasElement. 6 https://bugs.webkit.org/show_bug.cgi?id=42005 7 8 http://trac.webkit.org/changeset/55201 introduced a new base class for HTMLCanvasElement called CanvasSurface. 9 The intention was that this would allow for code sharing with the then-proposed OffscreenCanvas. However, 10 there is no OffscreenCanvas and there's unlikely to be one soon. Additionally CanvasSurface breaks 11 encapsulation pretty badly by doing "static_cast<HTMLCanvasElement* const>(this)". Until an abstraction is 12 really needed we should just use HTMLCanvasElement when we want to talk about a canvas. 13 14 This patch moves all of CanvasSurface's functionality back up to HTMLCanvasElement and reorders the header 15 to be a bit more logical. 16 17 Refactor with no behavior change, thus no new tests. 18 19 * CMakeLists.txt: 20 * GNUmakefile.am: 21 * WebCore.gypi: 22 * WebCore.pro: 23 * WebCore.vcproj/WebCore.vcproj: 24 * WebCore.xcodeproj/project.pbxproj: 25 * dom/CanvasSurface.cpp: Removed. 26 * dom/CanvasSurface.h: Removed. 27 * html/HTMLCanvasElement.cpp: 28 (WebCore::HTMLCanvasElement::HTMLCanvasElement): 29 (WebCore::HTMLCanvasElement::willDraw): 30 (WebCore::HTMLCanvasElement::setSurfaceSize): 31 (WebCore::HTMLCanvasElement::toDataURL): 32 (WebCore::HTMLCanvasElement::convertLogicalToDevice): 33 (WebCore::HTMLCanvasElement::securityOrigin): 34 (WebCore::HTMLCanvasElement::styleSelector): 35 (WebCore::HTMLCanvasElement::createImageBuffer): 36 (WebCore::HTMLCanvasElement::drawingContext): 37 (WebCore::HTMLCanvasElement::buffer): 38 (WebCore::HTMLCanvasElement::baseTransform): 39 * html/HTMLCanvasElement.h: 40 (WebCore::HTMLCanvasElement::setObserver): 41 (WebCore::HTMLCanvasElement::width): 42 (WebCore::HTMLCanvasElement::height): 43 (WebCore::HTMLCanvasElement::size): 44 (WebCore::HTMLCanvasElement::toDataURL): 45 (WebCore::HTMLCanvasElement::setOriginTainted): 46 (WebCore::HTMLCanvasElement::originClean): 47 (WebCore::HTMLCanvasElement::hasCreatedImageBuffer): 48 1 49 2010-07-09 Simon Fraser <simon.fraser@apple.com> 2 50 -
trunk/WebCore/GNUmakefile.am
r62876 r63025 756 756 WebCore/dom/CSSMappedAttributeDeclaration.cpp \ 757 757 WebCore/dom/CSSMappedAttributeDeclaration.h \ 758 WebCore/dom/CanvasSurface.cpp \759 WebCore/dom/CanvasSurface.h \760 758 WebCore/dom/CharacterData.cpp \ 761 759 WebCore/dom/CharacterData.h \ -
trunk/WebCore/WebCore.gypi
r62876 r63025 1077 1077 'dom/CSSMappedAttributeDeclaration.cpp', 1078 1078 'dom/CSSMappedAttributeDeclaration.h', 1079 'dom/CanvasSurface.cpp',1080 'dom/CanvasSurface.h',1081 1079 'dom/CharacterData.cpp', 1082 1080 'dom/CharacterData.h', -
trunk/WebCore/WebCore.pro
r62953 r63025 448 448 dom/BeforeUnloadEvent.cpp \ 449 449 dom/CDATASection.cpp \ 450 dom/CanvasSurface.cpp \451 450 dom/CharacterData.cpp \ 452 451 dom/CheckedRadioButtons.cpp \ -
trunk/WebCore/WebCore.vcproj/WebCore.vcproj
r62792 r63025 32238 32238 </File> 32239 32239 <File 32240 RelativePath="..\dom\CanvasSurface.cpp"32241 >32242 </File>32243 <File32244 RelativePath="..\dom\CanvasSurface.h"32245 >32246 </File>32247 <File32248 32240 RelativePath="..\dom\CDATASection.cpp" 32249 32241 > -
trunk/WebCore/WebCore.xcodeproj/project.pbxproj
r62876 r63025 206 206 0B9056F80F2685F30095FF6A /* WorkerThreadableLoader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0B9056F60F2685F30095FF6A /* WorkerThreadableLoader.cpp */; }; 207 207 0B9056F90F2685F30095FF6A /* WorkerThreadableLoader.h in Headers */ = {isa = PBXBuildFile; fileRef = 0B9056F70F2685F30095FF6A /* WorkerThreadableLoader.h */; settings = {ATTRIBUTES = (); }; }; 208 0BC2C7771134A8FC000B2F61 /* CanvasSurface.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0BC2C7751134A8FC000B2F61 /* CanvasSurface.cpp */; };209 0BC2C7781134A8FC000B2F61 /* CanvasSurface.h in Headers */ = {isa = PBXBuildFile; fileRef = 0BC2C7761134A8FC000B2F61 /* CanvasSurface.h */; };210 208 0BE030A20F3112FB003C1A46 /* RenderLineBoxList.h in Headers */ = {isa = PBXBuildFile; fileRef = 0BE030A10F3112FB003C1A46 /* RenderLineBoxList.h */; settings = {ATTRIBUTES = (Private, ); }; }; 211 209 0C3F1F5A10C8871200D72CE1 /* WebGLUniformLocation.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0C3F1F5710C8871200D72CE1 /* WebGLUniformLocation.cpp */; }; … … 5811 5809 0B9056F60F2685F30095FF6A /* WorkerThreadableLoader.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = WorkerThreadableLoader.cpp; sourceTree = "<group>"; }; 5812 5810 0B9056F70F2685F30095FF6A /* WorkerThreadableLoader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WorkerThreadableLoader.h; sourceTree = "<group>"; }; 5813 0BC2C7751134A8FC000B2F61 /* CanvasSurface.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CanvasSurface.cpp; sourceTree = "<group>"; };5814 0BC2C7761134A8FC000B2F61 /* CanvasSurface.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CanvasSurface.h; sourceTree = "<group>"; };5815 5811 0BE030A10F3112FB003C1A46 /* RenderLineBoxList.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RenderLineBoxList.h; sourceTree = "<group>"; }; 5816 5812 0C3F1F5710C8871200D72CE1 /* WebGLUniformLocation.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = WebGLUniformLocation.cpp; path = canvas/WebGLUniformLocation.cpp; sourceTree = "<group>"; }; … … 16795 16791 85031B260A44EFC700F992E0 /* BeforeUnloadEvent.cpp */, 16796 16792 85031B270A44EFC700F992E0 /* BeforeUnloadEvent.h */, 16797 0BC2C7751134A8FC000B2F61 /* CanvasSurface.cpp */,16798 0BC2C7761134A8FC000B2F61 /* CanvasSurface.h */,16799 16793 6550B693099DF0270090D781 /* CDATASection.cpp */, 16800 16794 6550B694099DF0270090D781 /* CDATASection.h */, … … 17204 17198 49484FCB102CF23C00187DD3 /* CanvasRenderingContext2D.h in Headers */, 17205 17199 49484FCE102CF23C00187DD3 /* CanvasStyle.h in Headers */, 17206 0BC2C7781134A8FC000B2F61 /* CanvasSurface.h in Headers */,17207 17200 6550B69E099DF0270090D781 /* CDATASection.h in Headers */, 17208 17201 514185EE0CD65F0400763C99 /* ChangeVersionWrapper.h in Headers */, … … 20123 20116 49484FCA102CF23C00187DD3 /* CanvasRenderingContext2D.cpp in Sources */, 20124 20117 49484FCD102CF23C00187DD3 /* CanvasStyle.cpp in Sources */, 20125 0BC2C7771134A8FC000B2F61 /* CanvasSurface.cpp in Sources */,20126 20118 6550B69D099DF0270090D781 /* CDATASection.cpp in Sources */, 20127 20119 514185EF0CD65F0400763C99 /* ChangeVersionWrapper.cpp in Sources */, -
trunk/WebCore/html/HTMLCanvasElement.cpp
r62299 r63025 41 41 #include "HTMLNames.h" 42 42 #include "ImageBuffer.h" 43 #include "MIMETypeRegistry.h" 43 44 #include "Page.h" 44 45 #include "RenderHTMLCanvas.h" … … 56 57 using namespace HTMLNames; 57 58 59 // These values come from the WhatWG spec. 60 static const int DefaultWidth = 300; 61 static const int DefaultHeight = 150; 62 63 // Firefox limits width/height to 32767 pixels, but slows down dramatically before it 64 // reaches that limit. We limit by area instead, giving us larger maximum dimensions, 65 // in exchange for a smaller maximum canvas size. 66 static const float MaxCanvasArea = 32768 * 8192; // Maximum canvas area in CSS pixels 67 58 68 HTMLCanvasElement::HTMLCanvasElement(const QualifiedName& tagName, Document* document) 59 69 : HTMLElement(tagName, document) 60 , CanvasSurface(document->frame() ? document->frame()->page()->chrome()->scaleFactor() : 1)61 70 , m_observer(0) 71 , m_size(DefaultWidth, DefaultHeight) 62 72 , m_ignoreReset(false) 73 , m_pageScaleFactor(document->frame() ? document->frame()->page()->chrome()->scaleFactor() : 1) 74 , m_originClean(true) 75 , m_hasCreatedImageBuffer(false) 63 76 { 64 77 ASSERT(hasTagName(canvasTag)); … … 187 200 void HTMLCanvasElement::willDraw(const FloatRect& rect) 188 201 { 189 CanvasSurface::willDraw(rect); 202 if (m_imageBuffer) 203 m_imageBuffer->clearImage(); 190 204 191 205 if (RenderBox* ro = renderBox()) { … … 291 305 } 292 306 293 } 307 void HTMLCanvasElement::setSurfaceSize(const IntSize& size) 308 { 309 m_size = size; 310 m_hasCreatedImageBuffer = false; 311 m_imageBuffer.clear(); 312 } 313 314 String HTMLCanvasElement::toDataURL(const String& mimeType, const double* quality, ExceptionCode& ec) 315 { 316 if (!m_originClean) { 317 ec = SECURITY_ERR; 318 return String(); 319 } 320 321 if (m_size.isEmpty() || !buffer()) 322 return String("data:,"); 323 324 String lowercaseMimeType = mimeType.lower(); 325 326 // FIXME: Make isSupportedImageMIMETypeForEncoding threadsafe (to allow this method to be used on a worker thread). 327 if (mimeType.isNull() || !MIMETypeRegistry::isSupportedImageMIMETypeForEncoding(lowercaseMimeType)) 328 return buffer()->toDataURL("image/png"); 329 330 return buffer()->toDataURL(lowercaseMimeType, quality); 331 } 332 333 IntRect HTMLCanvasElement::convertLogicalToDevice(const FloatRect& logicalRect) const 334 { 335 return IntRect(convertLogicalToDevice(logicalRect.location()), convertLogicalToDevice(logicalRect.size())); 336 } 337 338 IntSize HTMLCanvasElement::convertLogicalToDevice(const FloatSize& logicalSize) const 339 { 340 float wf = ceilf(logicalSize.width() * m_pageScaleFactor); 341 float hf = ceilf(logicalSize.height() * m_pageScaleFactor); 342 343 if (!(wf >= 1 && hf >= 1 && wf * hf <= MaxCanvasArea)) 344 return IntSize(); 345 346 return IntSize(static_cast<unsigned>(wf), static_cast<unsigned>(hf)); 347 } 348 349 IntPoint HTMLCanvasElement::convertLogicalToDevice(const FloatPoint& logicalPos) const 350 { 351 float xf = logicalPos.x() * m_pageScaleFactor; 352 float yf = logicalPos.y() * m_pageScaleFactor; 353 354 return IntPoint(static_cast<unsigned>(xf), static_cast<unsigned>(yf)); 355 } 356 357 const SecurityOrigin& HTMLCanvasElement::securityOrigin() const 358 { 359 return *document()->securityOrigin(); 360 } 361 362 CSSStyleSelector* HTMLCanvasElement::styleSelector() 363 { 364 return document()->styleSelector(); 365 } 366 367 void HTMLCanvasElement::createImageBuffer() const 368 { 369 ASSERT(!m_imageBuffer); 370 371 m_hasCreatedImageBuffer = true; 372 373 FloatSize unscaledSize(width(), height()); 374 IntSize size = convertLogicalToDevice(unscaledSize); 375 if (!size.width() || !size.height()) 376 return; 377 378 m_imageBuffer = ImageBuffer::create(size); 379 // The convertLogicalToDevice MaxCanvasArea check should prevent common cases 380 // where ImageBuffer::create() returns 0, however we could still be low on memory. 381 if (!m_imageBuffer) 382 return; 383 m_imageBuffer->context()->scale(FloatSize(size.width() / unscaledSize.width(), size.height() / unscaledSize.height())); 384 m_imageBuffer->context()->setShadowsIgnoreTransforms(true); 385 } 386 387 GraphicsContext* HTMLCanvasElement::drawingContext() const 388 { 389 return buffer() ? m_imageBuffer->context() : 0; 390 } 391 392 ImageBuffer* HTMLCanvasElement::buffer() const 393 { 394 if (!m_hasCreatedImageBuffer) 395 createImageBuffer(); 396 return m_imageBuffer.get(); 397 } 398 399 AffineTransform HTMLCanvasElement::baseTransform() const 400 { 401 ASSERT(m_hasCreatedImageBuffer); 402 FloatSize unscaledSize(width(), height()); 403 IntSize size = convertLogicalToDevice(unscaledSize); 404 AffineTransform transform; 405 if (size.width() && size.height()) 406 transform.scaleNonUniform(size.width() / unscaledSize.width(), size.height() / unscaledSize.height()); 407 transform.multiply(m_imageBuffer->baseTransform()); 408 return transform; 409 } 410 411 } -
trunk/WebCore/html/HTMLCanvasElement.h
r62016 r63025 29 29 #define HTMLCanvasElement_h 30 30 31 #include "CanvasSurface.h"32 31 #include "FloatRect.h" 33 32 #include "HTMLElement.h" … … 44 43 class GraphicsContext; 45 44 class HTMLCanvasElement; 45 class ImageBuffer; 46 46 class IntSize; 47 47 … … 55 55 }; 56 56 57 class HTMLCanvasElement : public HTMLElement , public CanvasSurface{57 class HTMLCanvasElement : public HTMLElement { 58 58 public: 59 59 static PassRefPtr<HTMLCanvasElement> create(Document*); … … 61 61 virtual ~HTMLCanvasElement(); 62 62 63 void setObserver(CanvasObserver* observer) { m_observer = observer; } 64 65 // Attributes and functions exposed to script 66 int width() const { return size().width(); } 67 int height() const { return size().height(); } 68 69 const IntSize& size() const { return m_size; } 70 63 71 void setWidth(int); 64 72 void setHeight(int); 65 66 CanvasRenderingContext* getContext(const String&, CanvasContextAttributes* attributes = 0);67 73 68 74 void setSize(const IntSize& newSize) … … 77 83 } 78 84 79 virtual void willDraw(const FloatRect&); 85 CanvasRenderingContext* getContext(const String&, CanvasContextAttributes* attributes = 0); 86 87 String toDataURL(const String& mimeType, const double* quality, ExceptionCode&); 88 String toDataURL(const String& mimeType, ExceptionCode& ec) { return toDataURL(mimeType, 0, ec); } 89 90 // Used for rendering 91 void willDraw(const FloatRect&); 80 92 81 93 void paint(GraphicsContext*, const IntRect&); 82 94 83 void setObserver(CanvasObserver* observer) { m_observer = observer; }95 GraphicsContext* drawingContext() const; 84 96 85 97 CanvasRenderingContext* renderingContext() const { return m_context.get(); } 86 98 87 RenderBox* renderBox() const { return HTMLElement::renderBox(); } 88 RenderStyle* computedStyle() { return HTMLElement::computedStyle(); } 99 ImageBuffer* buffer() const; 100 101 IntRect convertLogicalToDevice(const FloatRect&) const; 102 IntSize convertLogicalToDevice(const FloatSize&) const; 103 IntPoint convertLogicalToDevice(const FloatPoint&) const; 104 105 const SecurityOrigin& securityOrigin() const; 106 void setOriginTainted() { m_originClean = false; } 107 bool originClean() const { return m_originClean; } 108 109 CSSStyleSelector* styleSelector(); 110 111 AffineTransform baseTransform() const; 89 112 90 113 #if ENABLE(3D_CANVAS) … … 107 130 void reset(); 108 131 109 bool m_rendererIsCanvas; 132 void createImageBuffer() const; 133 134 void setSurfaceSize(const IntSize&); 135 bool hasCreatedImageBuffer() const { return m_hasCreatedImageBuffer; } 136 137 CanvasObserver* m_observer; 138 139 IntSize m_size; 110 140 111 141 OwnPtr<CanvasRenderingContext> m_context; 112 CanvasObserver* m_observer; 142 143 bool m_rendererIsCanvas; 113 144 114 145 bool m_ignoreReset; 115 146 FloatRect m_dirtyRect; 147 148 float m_pageScaleFactor; 149 bool m_originClean; 150 151 // m_createdImageBuffer means we tried to malloc the buffer. We didn't necessarily get it. 152 mutable bool m_hasCreatedImageBuffer; 153 mutable OwnPtr<ImageBuffer> m_imageBuffer; 116 154 }; 117 155
Note: See TracChangeset
for help on using the changeset viewer.