Changeset 21211 in webkit
- Timestamp:
- May 1, 2007 3:10:41 PM (17 years ago)
- Location:
- trunk
- Files:
-
- 4 added
- 14 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/LayoutTests/ChangeLog
r21208 r21211 1 2007-05-01 Darin Adler <darin@apple.com> 2 3 Reviewed by Hyatt. 4 5 - test for http://bugs.webkit.org/show_bug.cgi?id=13559 6 REGRESSION: Canvas aspect ratio is incorrect 7 8 * fast/canvas/canvas-size-change-after-layout-expected.checksum: Added. 9 * fast/canvas/canvas-size-change-after-layout-expected.png: Added. 10 * fast/canvas/canvas-size-change-after-layout-expected.txt: Added. 11 * fast/canvas/canvas-size-change-after-layout.html: Added. 12 1 13 2007-05-01 Darin Adler <darin@apple.com> 2 14 -
trunk/WebCore/ChangeLog
r21209 r21211 1 2007-05-01 Darin Adler <darin@apple.com> 2 3 Reviewed by Hyatt. 4 5 - fix http://bugs.webkit.org/show_bug.cgi?id=13559 6 REGRESSION: Canvas aspect ratio is incorrect 7 8 - remove intrinsicWidth/Height functions from RenderObject 9 10 Test: fast/canvas/canvas-size-change-after-layout.html 11 12 * html/HTMLCanvasElement.cpp: 13 (WebCore::HTMLCanvasElement::createRenderer): Removed code to set 14 the intrinsic size, because the renderer now takes care of this 15 in its constructor. 16 (WebCore::HTMLCanvasElement::reset): Instead of calling the 17 setIntrinsicWidth/Height functions, call canvasSizeChanged, which 18 takes care of layout, but only if the size actually changed. Also 19 call repaint if the contents of the canvas changed. 20 21 * rendering/RenderApplet.h: 22 * rendering/RenderApplet.cpp: (WebCore::RenderApplet::intrinsicSize): 23 Override the new intrinsicSize function. This override still doesn't 24 make sense, so left a FIXME in here. 25 26 * rendering/RenderBox.h: Added an intrinsicSize function here to replace 27 the intrinsicWidth/Height functions removed from RenderObject. 28 * rendering/RenderBox.cpp: 29 (WebCore::RenderBox::calcReplacedWidthUsing): Use intrinsicSize instead 30 of intrinsicWidth. 31 (WebCore::RenderBox::calcReplacedHeightUsing): Ditto, but for height. 32 33 * rendering/RenderHTMLCanvas.h: Changed the constructor parameter to be 34 an HTMLCanvasElement* instead of Node*. Also added a canvasSizeChanged 35 function. 36 * rendering/RenderHTMLCanvas.cpp: 37 (WebCore::RenderHTMLCanvas::RenderHTMLCanvas): Pass an initial intrinsic 38 size based on the current size of the canvas element. This is now the 39 responsibility of the renderer and the DOM element calls the canvasSizeChanged 40 function when the size changes. 41 (WebCore::RenderHTMLCanvas::paint): Removed checks of the type of the element, 42 and used the node() function because we don't have to worry about the anonymous 43 case in this class. 44 (WebCore::RenderHTMLCanvas::canvasSizeChanged): Added. Changes the size and 45 then calls setNeedsLayout and setPrefWidthsDirty as needed. I based the logic 46 here on careful reading of RenderImage::imageChanged. 47 48 * rendering/RenderImage.cpp: 49 (WebCore::RenderImage::RenderImage): Pass a default intrinsic size of 0,0 50 instead of calling setIntrinsicWidth/Height. 51 (WebCore::RenderImage::setImageSizeForAltText): Call the new intrinsic size 52 functions instead of the width/height ones. Simplifies the logic since we 53 handle both dimensions at once. 54 (WebCore::RenderImage::imageChanged): Ditto. 55 (WebCore::RenderImage::layout): Ditto. 56 (WebCore::RenderImage::calcAspectRatioWidth): Ditto. 57 (WebCore::RenderImage::calcAspectRatioHeight): Ditto. 58 59 * rendering/RenderObject.h: Removed intrinsicWidth/Height virtual functions. 60 61 * rendering/RenderReplaced.h: Replaced intrinsicWidth, intrinsicHeight, 62 setIntrinsicWidth, setIntrinsicHeight, m_intrinsicWidth, and m_intrinsicHeight 63 with intrinsicSize, setIntrinsicSize, and m_intrinsicSize. 64 * rendering/RenderReplaced.cpp: 65 (WebCore::RenderReplaced::RenderReplaced): Added a second contructor that takes 66 an intrinsic size parameter. Also updated constructor since the intrinsic size 67 is now an IntSize instead of two integers. 68 (WebCore::RenderReplaced::intrinsicSize): Added. No point in making this inline 69 because it's a virtual function. 70 (WebCore::RenderReplaced::setIntrinsicSize): Added. Didn't make this inline, 71 partly because in the future we might want this to be more than just a simple 72 setter function, factoring in common code used in both RenderImage and 73 RenderHTMLCanvas. 74 75 * rendering/RenderWidget.h: Removed a stray using declaration that wasn't needed. 76 1 77 2007-05-01 David Hyatt <hyatt@apple.com> 2 78 -
trunk/WebCore/html/HTMLCanvasElement.cpp
r20170 r21211 99 99 if (document()->frame() && document()->frame()->settings()->isJavaScriptEnabled()) { 100 100 m_rendererIsCanvas = true; 101 RenderHTMLCanvas* r = new (arena) RenderHTMLCanvas(this); 102 r->setIntrinsicWidth(width()); 103 r->setIntrinsicHeight(height()); 104 return r; 101 return new (arena) RenderHTMLCanvas(this); 105 102 } 106 103 … … 148 145 if (!ok) 149 146 h = defaultHeight; 147 148 IntSize oldSize = m_size; 150 149 m_size = IntSize(w, h); 151 150 152 if (RenderObject* ro = renderer()) 153 if (m_rendererIsCanvas) { 154 RenderHTMLCanvas* r = static_cast<RenderHTMLCanvas*>(ro); 155 r->setIntrinsicWidth(w); 156 r->setIntrinsicHeight(h); 157 r->repaint(); 158 } 159 151 bool hadDrawingContext = m_createdDrawingContext; 160 152 m_createdDrawingContext = false; 161 153 fastFree(m_data); … … 163 155 delete m_drawingContext; 164 156 m_drawingContext = 0; 157 158 if (RenderObject* ro = renderer()) 159 if (m_rendererIsCanvas) { 160 if (oldSize != m_size) 161 static_cast<RenderHTMLCanvas*>(ro)->canvasSizeChanged(); 162 if (hadDrawingContext) 163 ro->repaint(); 164 } 165 165 } 166 166 -
trunk/WebCore/rendering/RenderApplet.cpp
r21093 r21211 48 48 } 49 49 50 int RenderApplet::intrinsicWidth() const50 IntSize RenderApplet::intrinsicSize() const 51 51 { 52 // FIXME: This doesn't make sense. 53 // After some research we can probably remove this entirely and just call 54 // setIntrinsicWidth in the constructor. 55 return m_widget ? 50 : 150; 56 } 57 58 int RenderApplet::intrinsicHeight() const 59 { 60 // FIXME: This doesn't make sense. 61 // After some research we can probably remove this entirely and just call 62 // setIntrinsicHeight in the constructor. 63 return m_widget ? 50 : 150; 52 // FIXME: This doesn't make sense. We can't just start returning 53 // a different size once we've created the widget and expect 54 // layout and sizing to be correct. We should remove this and 55 // pass the appropriate intrinsic size in the constructor. 56 return m_widget ? IntSize(50, 50) : IntSize(150, 150); 64 57 } 65 58 -
trunk/WebCore/rendering/RenderApplet.h
r17448 r21211 1 1 /* 2 * This file is part of the HTML widget for KDE.3 *4 2 * Copyright (C) 1999 Lars Knoll (knoll@kde.org) 5 * Copyright (C) 2006 Apple Computer, Inc.3 * Copyright (C) 2006, 2007 Apple Inc. All rights reserved. 6 4 * 7 5 * This library is free software; you can redistribute it and/or … … 42 40 43 41 virtual void layout(); 44 virtual int intrinsicWidth() const; 45 virtual int intrinsicHeight() const; 42 virtual IntSize intrinsicSize() const; 46 43 47 44 void createWidgetIfNecessary(); -
trunk/WebCore/rendering/RenderBox.cpp
r21183 r21211 1411 1411 // fall through 1412 1412 default: 1413 return intrinsic Width();1413 return intrinsicSize().width(); 1414 1414 } 1415 1415 } … … 1450 1450 } 1451 1451 default: 1452 return intrinsic Height();1452 return intrinsicSize().height(); 1453 1453 } 1454 1454 } -
trunk/WebCore/rendering/RenderBox.h
r21183 r21211 112 112 return style()->htmlHacks() && style()->height().isAuto() && !isFloatingOrPositioned() && (isRoot() || isBody()); 113 113 } 114 115 virtual IntSize intrinsicSize() const { return IntSize(); } 114 116 115 117 // Whether or not the element shrinks to its intrinsic width (rather than filling the width -
trunk/WebCore/rendering/RenderHTMLCanvas.cpp
r21183 r21211 1 1 /* 2 * Copyright (C) 2004, 2006 Apple Computer, Inc.All rights reserved.2 * Copyright (C) 2004, 2006, 2007 Apple Inc. All rights reserved. 3 3 * 4 4 * Redistribution and use in source and binary forms, with or without … … 37 37 using namespace HTMLNames; 38 38 39 RenderHTMLCanvas::RenderHTMLCanvas( Node* node)40 : RenderReplaced( node)39 RenderHTMLCanvas::RenderHTMLCanvas(HTMLCanvasElement* element) 40 : RenderReplaced(element, element->size()) 41 41 { 42 42 } … … 69 69 } 70 70 71 if (element() && element()->hasTagName(canvasTag)) 72 static_cast<HTMLCanvasElement*>(element())->paint(paintInfo.context, 73 IntRect(x + borderLeft() + paddingLeft(), y + borderTop() + paddingTop(), contentWidth(), contentHeight())); 71 static_cast<HTMLCanvasElement*>(node())->paint(paintInfo.context, 72 IntRect(x + borderLeft() + paddingLeft(), y + borderTop() + paddingTop(), contentWidth(), contentHeight())); 74 73 75 74 if (drawSelectionTint) … … 96 95 } 97 96 97 void RenderHTMLCanvas::canvasSizeChanged() 98 { 99 IntSize size = static_cast<HTMLCanvasElement*>(node())->size(); 100 if (size == intrinsicSize()) 101 return; 102 103 setIntrinsicSize(size); 104 105 if (!prefWidthsDirty()) 106 setPrefWidthsDirty(true); 107 108 IntSize oldSize = IntSize(m_width, m_height); 109 calcWidth(); 110 calcHeight(); 111 if (oldSize == IntSize(m_width, m_height)) 112 return; 113 114 if (!selfNeedsLayout()) 115 setNeedsLayout(true); 116 } 117 98 118 } // namespace WebCore -
trunk/WebCore/rendering/RenderHTMLCanvas.h
r17448 r21211 1 1 /* 2 * Copyright (C) 2004, 2006 Apple Computer, Inc.All rights reserved.2 * Copyright (C) 2004, 2006, 2007 Apple Inc. All rights reserved. 3 3 * 4 4 * Redistribution and use in source and binary forms, with or without … … 31 31 namespace WebCore { 32 32 33 class HTMLCanvasElement; 34 33 35 class RenderHTMLCanvas : public RenderReplaced { 34 36 public: 35 RenderHTMLCanvas( Node*);37 RenderHTMLCanvas(HTMLCanvasElement*); 36 38 37 39 virtual const char* renderName() const { return "RenderHTMLCanvas"; } … … 39 41 virtual void paint(PaintInfo&, int tx, int ty); 40 42 virtual void layout(); 43 44 void canvasSizeChanged(); 41 45 }; 42 46 -
trunk/WebCore/rendering/RenderImage.cpp
r21183 r21211 47 47 48 48 RenderImage::RenderImage(Node* node) 49 : RenderReplaced(node )49 : RenderReplaced(node, IntSize(0, 0)) 50 50 , m_cachedImage(0) 51 51 , m_isAnonymousImage(false) 52 52 { 53 setIntrinsicWidth(0);54 setIntrinsicHeight(0);55 53 updateAltText(); 56 54 } … … 110 108 } 111 109 112 bool imageSizeChanged = false; 113 114 if (imageWidth != intrinsicWidth()) { 115 setIntrinsicWidth(imageWidth); 116 imageSizeChanged = true; 117 } 118 if (imageHeight != intrinsicHeight()) { 119 setIntrinsicHeight(imageHeight); 120 imageSizeChanged = true; 121 } 122 123 return imageSizeChanged; 110 IntSize imageSize = IntSize(imageWidth, imageHeight); 111 if (imageSize == intrinsicSize()) 112 return false; 113 114 setIntrinsicSize(imageSize); 115 return true; 124 116 } 125 117 … … 144 136 145 137 // Image dimensions have been changed, see what needs to be done 146 if (newImage->imageSize().width() != intrinsicWidth() || newImage->imageSize().height() != intrinsicHeight() || imageSizeChanged) { 147 if (!newImage->errorOccurred()) { 148 setIntrinsicWidth(newImage->imageSize().width()); 149 setIntrinsicHeight(newImage->imageSize().height()); 150 } 138 if (newImage->imageSize() != intrinsicSize() || imageSizeChanged) { 139 if (!newImage->errorOccurred()) 140 setIntrinsicSize(newImage->imageSize()); 151 141 152 142 // In the case of generated image content using :before/:after, we might not be in the … … 314 304 315 305 // minimum height 316 m_height = m_cachedImage && m_cachedImage->errorOccurred() ? intrinsic Height() : 0;306 m_height = m_cachedImage && m_cachedImage->errorOccurred() ? intrinsicSize().height() : 0; 317 307 318 308 calcWidth(); … … 417 407 int RenderImage::calcAspectRatioWidth() const 418 408 { 419 if (!intrinsicHeight()) 409 IntSize size = intrinsicSize(); 410 if (!size.height()) 420 411 return 0; 421 412 if (!m_cachedImage || m_cachedImage->errorOccurred()) 422 return intrinsicWidth(); // Don't bother scaling.423 return RenderReplaced::calcReplacedHeight() * intrinsicWidth() / intrinsicHeight();413 return size.width(); // Don't bother scaling. 414 return RenderReplaced::calcReplacedHeight() * size.width() / size.height(); 424 415 } 425 416 426 417 int RenderImage::calcAspectRatioHeight() const 427 418 { 428 if (!intrinsicWidth()) 419 IntSize size = intrinsicSize(); 420 if (!size.width()) 429 421 return 0; 430 422 if (!m_cachedImage || m_cachedImage->errorOccurred()) 431 return intrinsicHeight(); // Don't bother scaling.432 return RenderReplaced::calcReplacedWidth() * intrinsicHeight() / intrinsicWidth();423 return size.height(); // Don't bother scaling. 424 return RenderReplaced::calcReplacedWidth() * size.height() / size.width(); 433 425 } 434 426 -
trunk/WebCore/rendering/RenderObject.h
r21120 r21211 531 531 int contentHeight() const { return clientHeight() - paddingTop() - paddingBottom(); } 532 532 533 // intrinsic extend of replaced elements. undefined otherwise534 virtual int intrinsicWidth() const { return 0; }535 virtual int intrinsicHeight() const { return 0; }536 537 533 // used by flexible boxes to impose a flexed width/height override 538 534 virtual int overrideSize() const { return 0; } -
trunk/WebCore/rendering/RenderReplaced.cpp
r21079 r21211 1 /** 2 * This file is part of the HTML widget for KDE. 3 * 1 /* 4 2 * Copyright (C) 1999 Lars Knoll (knoll@kde.org) 5 3 * Copyright (C) 2000 Dirk Mueller (mueller@kde.org) 6 * Copyright (C) 2004, 2006 Apple Computer, Inc.4 * Copyright (C) 2004, 2006,2 007 Apple Inc. All rights reserved. 7 5 * 8 6 * This library is free software; you can redistribute it and/or … … 22 20 * 23 21 */ 22 24 23 #include "config.h" 25 24 #include "RenderReplaced.h" … … 34 33 RenderReplaced::RenderReplaced(Node* node) 35 34 : RenderBox(node) 36 , m_intrinsicWidth(300) 37 , m_intrinsicHeight(150) 35 , m_intrinsicSize(300, 150) 36 , m_selectionState(SelectionNone) 37 { 38 setReplaced(true); 39 } 40 41 RenderReplaced::RenderReplaced(Node* node, const IntSize& intrinsicSize) 42 : RenderBox(node) 43 , m_intrinsicSize(intrinsicSize) 38 44 , m_selectionState(SelectionNone) 39 45 { … … 210 216 } 211 217 212 } 218 IntSize RenderReplaced::intrinsicSize() const 219 { 220 return m_intrinsicSize; 221 } 222 223 void RenderReplaced::setIntrinsicSize(const IntSize& size) 224 { 225 m_intrinsicSize = size; 226 } 227 228 } -
trunk/WebCore/rendering/RenderReplaced.h
r21079 r21211 1 1 /* 2 2 * Copyright (C) 1999 Lars Knoll (knoll@kde.org) 3 * Copyright (C) 2004, 2005, 2006 Apple Computer,Inc.3 * Copyright (C) 2004, 2005, 2006, 2007 Apple Inc. 4 4 * 5 5 * This library is free software; you can redistribute it and/or … … 30 30 public: 31 31 RenderReplaced(Node*); 32 RenderReplaced(Node*, const IntSize& intrinsicSize); 32 33 33 34 virtual const char* renderName() const { return "RenderReplaced"; } … … 40 41 virtual void paint(PaintInfo&, int tx, int ty) = 0; 41 42 42 virtual int intrinsicWidth() const { return m_intrinsicWidth; } 43 virtual int intrinsicHeight() const { return m_intrinsicHeight; } 44 45 void setIntrinsicWidth(int w) { m_intrinsicWidth = w; } 46 void setIntrinsicHeight(int h) { m_intrinsicHeight = h; } 43 virtual IntSize intrinsicSize() const; 47 44 48 45 virtual int caretMinOffset() const; … … 59 56 60 57 protected: 58 void setIntrinsicSize(const IntSize&); 59 61 60 bool shouldPaint(PaintInfo&, int& tx, int& ty); 62 61 63 62 private: 64 int m_intrinsicWidth; 65 int m_intrinsicHeight; 63 IntSize m_intrinsicSize; 66 64 67 65 unsigned m_selectionState : 3; // SelectionState -
trunk/WebCore/rendering/RenderWidget.h
r18677 r21211 57 57 virtual void setWidget(Widget*); 58 58 59 using RenderReplaced::element;60 61 59 private: 62 60 void resizeWidget(Widget*, int w, int h);
Note: See TracChangeset
for help on using the changeset viewer.