WebKit Bugzilla
New
Browse
Log In
×
Sign in with GitHub
or
Remember my login
Create Account
·
Forgot Password
Forgotten password account recovery
RESOLVED FIXED
Bug 95479
[CSS Exclusions] shape-inside line segment layout should be based on line position and height
https://bugs.webkit.org/show_bug.cgi?id=95479
Summary
[CSS Exclusions] shape-inside line segment layout should be based on line pos...
Hans Muller
Reported
2012-08-30 10:50:14 PDT
Currently the CSS exclusions shape-inside support in WrapShapeInfo::computeSegmentsForLine(), WrapShapeInfo::lineState(), and the LineWidth constructor (RenderBlockLineLayout.cpp) only reflect a line's top edge. A line only "fits" inside an exclusion shape if its entire bounding rectangle fits within the shape.
Attachments
Initial patch
(12.04 KB, patch)
2012-09-19 14:27 PDT
,
Bear Travis
no flags
Details
Formatted Diff
Diff
Updated patch
(12.08 KB, patch)
2012-09-20 10:55 PDT
,
Bear Travis
no flags
Details
Formatted Diff
Diff
Updating patch
(11.25 KB, patch)
2012-09-24 17:33 PDT
,
Bear Travis
no flags
Details
Formatted Diff
Diff
Updating changelog
(12.09 KB, patch)
2012-09-25 13:30 PDT
,
Bear Travis
leviw
: review+
leviw
: commit-queue-
Details
Formatted Diff
Diff
Adding links to changelog
(11.76 KB, patch)
2012-09-25 14:12 PDT
,
Bear Travis
no flags
Details
Formatted Diff
Diff
Show Obsolete
(4)
View All
Add attachment
proposed patch, testcase, etc.
Bear Travis
Comment 1
2012-09-19 14:27:23 PDT
Created
attachment 164778
[details]
Initial patch Adding line bottom to segment and line state calculations.
Bear Travis
Comment 2
2012-09-19 14:46:07 PDT
***
Bug 97042
has been marked as a duplicate of this bug. ***
WebKit Review Bot
Comment 3
2012-09-19 17:37:59 PDT
Comment on
attachment 164778
[details]
Initial patch
Attachment 164778
[details]
did not pass chromium-ews (chromium-xvfb): Output:
http://queues.webkit.org/results/13903679
New failing tests: fast/exclusions/shape-inside/shape-inside-rounded-rectangle.html
Hans Muller
Comment 4
2012-09-20 09:32:44 PDT
(In reply to
comment #1
)
> Created an attachment (id=164778) [details] > Initial patch > > Adding line bottom to segment and line state calculations.
Source/WebCore/rendering/ExclusionRectangle.cpp:76 The patch for
https://bugs.webkit.org/show_bug.cgi?id=96156
also includes the ExclusionRectangle change. Source/WebCore/rendering/RenderBlockLineLayout.cpp:85 (wrapShapeInfo && wrapShapeInfo->lineState() & WrapShapeInfo::LINE_INSIDE_SHAPE && wrapShapeInfo->hasSegments()) An inline function like bool wrapShapeInfoHasSegments(WrapShapeInfo*) might be a useful simplification. Also: not clear why you're checking the lineState() is needed, isn't hasSegments() enough? Source/WebCore/rendering/RenderBlockLineLayout.cpp:86,87 // All interior shape positions should have at least one segment, // unless they extend beyond the edges of the shape. Maybe "shape positions" isn't the right term here. I think that what you mean is that if both the top and bottom edges of a line are within a shape, then there should be at least one segment. However that's definitely not true for polygons, and it will not be true when ExclusionShape objects correspond to sets of primitive shapes. I wouldn't characterize these exceptions as "they extend beyond the edges of the shape". Maybe just letting the code speak for itself here would be enough. Source/WebCore/rendering/RenderBlockLineLayout.cpp:809,810 logicalLeft = max<float>(roundToInt(wrapShapeInfo->segments()[0].logicalLeft), logicalLeft); logicalRight = min<float>(floorToInt(wrapShapeInfo->segments()[0].logicalRight), logicalRight); A pair of inlines whose names clarified what the min/max round/floor int/float means in these expressions, might improve readability. Source/WebCore/rendering/WrapShapeInfo.h Maybe, instead of making the enums and lineState() public, it would be better to just provide a set of inline functions that cover the tests needed elsewhere? bool lineOverlapsShapeBoundsTop() bool lineOverlapsShapeBoundsBottom() bool lineIsWithinShapeBounds() etc..
Bear Travis
Comment 5
2012-09-20 10:55:24 PDT
Created
attachment 164945
[details]
Updated patch Incorporating Hans' feedback, and fixing the test failure. Line positions within a shape are no longer guaranteed to have line segments. Removing the appropriate comments and tests. Changing lineState tests to use boolean inlines, right now just lineOverlapsShapeBounds. Removing lineState. Going to leave the pixel snapping logicalLeft/Right code in place and file a bug for it (
bug 97236
).
Bear Travis
Comment 6
2012-09-24 17:33:54 PDT
Created
attachment 165476
[details]
Updating patch Merging with master branch
Levi Weintraub
Comment 7
2012-09-25 11:07:16 PDT
Comment on
attachment 165476
[details]
Updating patch View in context:
https://bugs.webkit.org/attachment.cgi?id=165476&action=review
> Source/WebCore/rendering/WrapShapeInfo.cpp:112 > + if (lineOverlapsShapeBounds()) { > ASSERT(m_shape); > - m_shape->getIncludedIntervals(lineTop, lineTop, m_segments); // FIXME:
Bug 95479
, workaround for now > + m_shape->getIncludedIntervals(lineTop, std::min(lineBottom, shapeLogicalBottom()), m_segments);
So this will call getIncludedIntervals when the line intersects but is outside of the shape. Help me understand why?
Bear Travis
Comment 8
2012-09-25 12:31:29 PDT
Linking to
bug 96125
, which is the bug for correctly laying out lines that overflow the shape-inside. Overflow for shape-inside is under active specification. This patch allows the last line to overflow the shape-inside, but that behavior may need to change as the specification develops. See
http://dev.w3.org/csswg/css3-exclusions/#shape-inside-property
Bear Travis
Comment 9
2012-09-25 13:30:47 PDT
Created
attachment 165660
[details]
Updating changelog Making the changelog more descriptive.
Levi Weintraub
Comment 10
2012-09-25 13:54:23 PDT
Comment on
attachment 165660
[details]
Updating changelog Apparently I'm a ChangeLog reviewer :) Please add a link to that spec on overflow to the ChangeLog as well so someone glancing can find this without reading the bug. Then I think we're good to go.
Bear Travis
Comment 11
2012-09-25 14:12:40 PDT
Created
attachment 165667
[details]
Adding links to changelog
WebKit Review Bot
Comment 12
2012-09-25 20:38:38 PDT
Comment on
attachment 165667
[details]
Adding links to changelog Clearing flags on attachment: 165667 Committed
r129590
: <
http://trac.webkit.org/changeset/129590
>
WebKit Review Bot
Comment 13
2012-09-25 20:38:43 PDT
All reviewed patches have been landed. Closing bug.
Note
You need to
log in
before you can comment on or make changes to this bug.
Top of Page
Format For Printing
XML
Clone This Bug