WebKit Bugzilla
New
Browse
Log In
×
Sign in with GitHub
or
Remember my login
Create Account
·
Forgot Password
Forgotten password account recovery
RESOLVED FIXED
124620
[css shapes] Parse new ellipse shape syntax
https://bugs.webkit.org/show_bug.cgi?id=124620
Summary
[css shapes] Parse new ellipse shape syntax
Bem Jones-Bey
Reported
2013-11-19 17:02:31 PST
Support parsing the new ellipse shape syntax
Attachments
Patch
(51.09 KB, patch)
2013-12-01 14:47 PST
,
Rob Buis
no flags
Details
Formatted Diff
Diff
Patch
(50.86 KB, patch)
2013-12-02 10:48 PST
,
Rob Buis
no flags
Details
Formatted Diff
Diff
Patch
(50.94 KB, patch)
2013-12-02 11:18 PST
,
Rob Buis
no flags
Details
Formatted Diff
Diff
Patch
(51.02 KB, patch)
2013-12-02 11:46 PST
,
Rob Buis
no flags
Details
Formatted Diff
Diff
Patch
(51.02 KB, patch)
2013-12-02 12:02 PST
,
Rob Buis
no flags
Details
Formatted Diff
Diff
Show Obsolete
(4)
View All
Add attachment
proposed patch, testcase, etc.
Rob Buis
Comment 1
2013-11-29 14:56:51 PST
(In reply to
comment #0
)
> Support parsing the new ellipse shape syntax
Hi Bem, I am interested in taking this bug, I hope you don't mind? My patch is far along.
Rob Buis
Comment 2
2013-12-01 14:47:29 PST
Created
attachment 218124
[details]
Patch
Dirk Schulze
Comment 3
2013-12-02 02:10:35 PST
Comment on
attachment 218124
[details]
Patch View in context:
https://bugs.webkit.org/attachment.cgi?id=218124&action=review
Overall great patch. Still some requests. r-
> Source/WebCore/css/BasicShapeFunctions.cpp:114 > + return 0;
Is this even necessary? The compiler should be smart enough to detect that the switch needs to run though all types, no?
> Source/WebCore/css/BasicShapeFunctions.cpp:250 > + if (radius) {
could you make an early return instead? if (!radius) return BasicShapeRadius(BasicShapeRadius::ClosestSide);
> Source/WebCore/css/BasicShapeFunctions.cpp:259 > + break;
This would be a return as well, but still more readable IMO.
> Source/WebCore/css/CSSBasicShapes.cpp:191 > + result.reserveCapacity((sizeof(opening) - 1) + (4 * (sizeof(separator) - 1)) + 1 + radiusX.length() + radiusY.length() + sizeof(at) + centerX.length() + centerY.length());
I don't think that this is particular useful. I had this discussion with Bear before IIRC. StringBuilder should already be quite fast. This complicates the code more.
> Source/WebCore/css/CSSParser.cpp:5574 > + for (CSSParserValue* argument = args->current(); argument; argument = args->next()) {
Didn't we use while loops in the past? I don't particularly care but while(argument) { argument = args->next(); } seems more readable. Guess it is a matter of taste. You can keep it.
> Source/WebCore/css/CSSParser.cpp:5593 > + if (argument->id == CSSValueAt) {
This could be an early return and a comment that we assume an at value now. // At this point we expect an 'at' if (argument->id != CSSValueAt) return 0;
> Source/WebCore/css/CSSParser.cpp:5598 > + if (centerX && centerY) {
This could be an early return: if (!centerX || !centerY) return 0;
> Source/WebCore/rendering/shapes/Shape.cpp:173 > + // FIXME implement layout.
bug 124619
Change // FIXME implement layout.
bug 124619
to // FIXME: Layout implementation needed. See bug
https://bugs.webkit.org/show_bug.cgi?id=124619
> Source/WebCore/rendering/shapes/Shape.cpp:174 > + shape = createRectangleShape(FloatRect(0, 0, boxWidth, boxHeight), FloatSize(0, 0));
s/FloatSize(0, 0)/FloatSize()/ (IIRC FloatSize defaults to 0,0)
> Source/WebCore/rendering/style/BasicShapes.cpp:186 > + // FIXME Complete implementation of path.
Bug 124619
.
// FIXME Complete implementation of path.
Bug 124619
. // FIXME: The implementation of path is incomplete. See
https://bugs.webkit.org/show_bug.cgi?id=124619
Though I am not sure what that actually means. We do not support creating clip paths with this patch? So -webkit-clip-path: would support the new syntax, but the path is not created? If so, can you state that and create a new bug for that please? 124619 is not about paths.
> Source/WebCore/rendering/style/BasicShapes.cpp:204 > + radiusY * 2 > + ));
braces in the same line.
> LayoutTests/fast/shapes/parsing/parsing-shape-inside-expected.txt:-33 > -PASS getCSSText("-webkit-shape-inside", "circle(at 10px)") is "circle(at 10px 50%)" > -PASS getComputedStyleValue("-webkit-shape-inside", "circle(at 10px)") is "circle(closest-side at 10px 50%)"
Why removing these passes?
> LayoutTests/fast/shapes/parsing/parsing-shape-inside-expected.txt:-133 > -PASS getCSSText("-webkit-shape-inside", "ellipse()") is "" > -PASS getComputedStyleValue("-webkit-shape-inside", "ellipse()") is "auto" > -PASS getCSSText("-webkit-shape-inside", "ellipse(10px)") is "" > -PASS getComputedStyleValue("-webkit-shape-inside", "ellipse(10px)") is "auto"
Ditto.
> LayoutTests/fast/shapes/parsing/parsing-shape-outside-expected.txt:-33 > -PASS getCSSText("-webkit-shape-outside", "circle(at 10px)") is "circle(at 10px 50%)" > -PASS getComputedStyleValue("-webkit-shape-outside", "circle(at 10px)") is "circle(closest-side at 10px 50%)"
Ditto.
> LayoutTests/fast/shapes/parsing/parsing-shape-outside-expected.txt:-131 > -PASS getCSSText("-webkit-shape-outside", "ellipse()") is "" > -PASS getComputedStyleValue("-webkit-shape-outside", "ellipse()") is "auto" > -PASS getCSSText("-webkit-shape-outside", "ellipse(10px)") is "" > -PASS getComputedStyleValue("-webkit-shape-outside", "ellipse(10px)") is "auto"
Ditto.
> LayoutTests/fast/shapes/parsing/parsing-test-utils.js:-24 > - ["circle(at 10px)", "circle(at 10px 50%)", "circle(closest-side at 10px 50%)"],
Ah, duplication. I take the question back.
> LayoutTests/fast/shapes/parsing/parsing-test-utils.js:31 > + "ellipse(10px, 20px, 30px, 40px)", // FIXME remove with deprecated ellipse
Sentences please. // FIXME: Remove this test once we do not support the deprecated CSS Shapes syntax anymore.
Rob Buis
Comment 4
2013-12-02 10:44:42 PST
Comment on
attachment 218124
[details]
Patch View in context:
https://bugs.webkit.org/attachment.cgi?id=218124&action=review
>> Source/WebCore/css/BasicShapeFunctions.cpp:114 >> + return 0; > > Is this even necessary? The compiler should be smart enough to detect that the switch needs to run though all types, no?
Here I would just like to do the same thing as before my patch, i.e. not change existing behavior for circle.
>> Source/WebCore/css/BasicShapeFunctions.cpp:250 >> + if (radius) { > > could you make an early return instead? > > if (!radius) > return BasicShapeRadius(BasicShapeRadius::ClosestSide);
Fixed.
>> Source/WebCore/css/BasicShapeFunctions.cpp:259 >> + break; > > This would be a return as well, but still more readable IMO.
Fixed.
>> Source/WebCore/css/CSSBasicShapes.cpp:191 >> + result.reserveCapacity((sizeof(opening) - 1) + (4 * (sizeof(separator) - 1)) + 1 + radiusX.length() + radiusY.length() + sizeof(at) + centerX.length() + centerY.length()); > > I don't think that this is particular useful. I had this discussion with Bear before IIRC. StringBuilder should already be quite fast. This complicates the code more.
Probably correct, removed.
>> Source/WebCore/css/CSSParser.cpp:5574 >> + for (CSSParserValue* argument = args->current(); argument; argument = args->next()) { > > Didn't we use while loops in the past? I don't particularly care but > > while(argument) { > argument = args->next(); > } > seems more readable. Guess it is a matter of taste. You can keep it.
Kept as is.
>> Source/WebCore/css/CSSParser.cpp:5593 >> + if (argument->id == CSSValueAt) { > > This could be an early return and a comment that we assume an at value now. > > // At this point we expect an 'at' > if (argument->id != CSSValueAt) > return 0;
Fixed.
>> Source/WebCore/css/CSSParser.cpp:5598 >> + if (centerX && centerY) { > > This could be an early return: > > if (!centerX || !centerY) > return 0;
Fixed.
>> Source/WebCore/rendering/shapes/Shape.cpp:173 >> + // FIXME implement layout.
bug 124619
> > Change > > // FIXME implement layout.
bug 124619
> > to > > // FIXME: Layout implementation needed. See bug
https://bugs.webkit.org/show_bug.cgi?id=124619
Fixed.
>> Source/WebCore/rendering/shapes/Shape.cpp:174 >> + shape = createRectangleShape(FloatRect(0, 0, boxWidth, boxHeight), FloatSize(0, 0)); > > s/FloatSize(0, 0)/FloatSize()/ (IIRC FloatSize defaults to 0,0)
Fixed.
>> Source/WebCore/rendering/style/BasicShapes.cpp:186 >> + // FIXME Complete implementation of path.
Bug 124619
. > > // FIXME Complete implementation of path.
Bug 124619
. > > // FIXME: The implementation of path is incomplete. See
https://bugs.webkit.org/show_bug.cgi?id=124619
> > Though I am not sure what that actually means. We do not support creating clip paths with this patch? So -webkit-clip-path: would support the new syntax, but the path is not created? If so, can you state that and create a new bug for that please? 124619 is not about paths.
You are right, I made a new bug for this.
>> Source/WebCore/rendering/style/BasicShapes.cpp:204 >> + )); > > braces in the same line.
Fixed.
>> LayoutTests/fast/shapes/parsing/parsing-test-utils.js:-24 >> - ["circle(at 10px)", "circle(at 10px 50%)", "circle(closest-side at 10px 50%)"], > > Ah, duplication. I take the question back.
Ok :)
>> LayoutTests/fast/shapes/parsing/parsing-test-utils.js:31 >> + "ellipse(10px, 20px, 30px, 40px)", // FIXME remove with deprecated ellipse > > Sentences please. > // FIXME: Remove this test once we do not support the deprecated CSS Shapes syntax anymore.
Fixed, and also the other occurrences.
Rob Buis
Comment 5
2013-12-02 10:48:09 PST
Created
attachment 218185
[details]
Patch
Bem Jones-Bey
Comment 6
2013-12-02 10:55:53 PST
Comment on
attachment 218185
[details]
Patch View in context:
https://bugs.webkit.org/attachment.cgi?id=218185&action=review
Hey Rob, I just got back from vacation. Thanks for putting together this patch. I have a few comments myself:
> Source/WebCore/css/BasicShapeFunctions.cpp:103 > +static PassRefPtr<CSSPrimitiveValue> BasicShapeRadiusToCSSValue(const RenderStyle* style, CSSValuePool& pool, const BasicShapeRadius& radius)
This should start with a lower case letter: basicShapeRadiusToCSSValue
> Source/WebCore/css/BasicShapeFunctions.cpp:248 > +static BasicShapeRadius CSSValueToBasicShapeRadius(const RenderStyle* style, const RenderStyle* rootStyle, PassRefPtr<CSSPrimitiveValue> radius)
This should start with a lower case letter: cssValueToBasicShapeRadius.
Bem Jones-Bey
Comment 7
2013-12-02 10:59:05 PST
(In reply to
comment #4
)
> (From update of
attachment 218124
[details]
) > View in context:
https://bugs.webkit.org/attachment.cgi?id=218124&action=review
> > >> Source/WebCore/css/BasicShapeFunctions.cpp:114 > >> + return 0; > > > > Is this even necessary? The compiler should be smart enough to detect that the switch needs to run though all types, no? > > Here I would just like to do the same thing as before my patch, i.e. not change existing behavior for circle.
In this case, I'd agree with Dirk and argue for removing that return; I personally think it's better to have the compiler complain if the return is missing rather than have the code quietly do something that isn't correct. (If you do need to add the return 0 to silence the compilet, I'd put an ASSERT_UNREACHED()) before it.
Bem Jones-Bey
Comment 8
2013-12-02 11:10:14 PST
Comment on
attachment 218185
[details]
Patch View in context:
https://bugs.webkit.org/attachment.cgi?id=218185&action=review
Missed a couple comments on the first look.
> Source/WebCore/css/CSSBasicShapes.cpp:190 > + result.append(opening);
You should use appendLiteral here.
> Source/WebCore/css/CSSBasicShapes.cpp:198 > + result.append(separator);
Ditto.
> Source/WebCore/css/CSSBasicShapes.cpp:205 > + result.append(separator);
Ditto.
> Source/WebCore/css/CSSBasicShapes.cpp:206 > + result.append(at);
Ditto.
> Source/WebCore/css/CSSBasicShapes.cpp:207 > + result.append(separator);
Ditto.
> Source/WebCore/css/CSSBasicShapes.cpp:209 > + result.append(separator);
Ditto.
> Source/WebCore/css/CSSBasicShapes.cpp:212 > + result.append(")");
Ditto.
> Source/WebCore/css/CSSBasicShapes.cpp:214 > + result.append(separator);
Ditto.
Bem Jones-Bey
Comment 9
2013-12-02 11:10:16 PST
Comment on
attachment 218185
[details]
Patch View in context:
https://bugs.webkit.org/attachment.cgi?id=218185&action=review
Missed a couple comments on the first look.
> Source/WebCore/css/CSSBasicShapes.cpp:190 > + result.append(opening);
You should use appendLiteral here.
> Source/WebCore/css/CSSBasicShapes.cpp:198 > + result.append(separator);
Ditto.
> Source/WebCore/css/CSSBasicShapes.cpp:205 > + result.append(separator);
Ditto.
> Source/WebCore/css/CSSBasicShapes.cpp:206 > + result.append(at);
Ditto.
> Source/WebCore/css/CSSBasicShapes.cpp:207 > + result.append(separator);
Ditto.
> Source/WebCore/css/CSSBasicShapes.cpp:209 > + result.append(separator);
Ditto.
> Source/WebCore/css/CSSBasicShapes.cpp:212 > + result.append(")");
Ditto.
> Source/WebCore/css/CSSBasicShapes.cpp:214 > + result.append(separator);
Ditto.
Rob Buis
Comment 10
2013-12-02 11:18:05 PST
Created
attachment 218195
[details]
Patch
Bem Jones-Bey
Comment 11
2013-12-02 11:26:18 PST
Comment on
attachment 218195
[details]
Patch View in context:
https://bugs.webkit.org/attachment.cgi?id=218195&action=review
lgtm, just a nit on a comment.
> Source/WebCore/css/CSSParser.cpp:5569 > + // ellipse(radius at <position>
Strictly speaking, this should be: // ellipse(radiusX radiusY) // ellipse(radiusX radiusY at <position>)
Dirk Schulze
Comment 12
2013-12-02 11:34:59 PST
Comment on
attachment 218195
[details]
Patch Wit the blessing of Bem: r=me :) But please fix the nits that Bem pointed out.
Bem Jones-Bey
Comment 13
2013-12-02 11:36:54 PST
(In reply to
comment #12
)
> (From update of
attachment 218195
[details]
) > Wit the blessing of Bem: r=me :) But please fix the nits that Bem pointed out.
I told him that I didn't mind if he fixed them in a future patch, so I'm happy if he lands this one as is.
Rob Buis
Comment 14
2013-12-02 11:46:41 PST
Created
attachment 218203
[details]
Patch
Rob Buis
Comment 15
2013-12-02 12:02:09 PST
Created
attachment 218205
[details]
Patch
WebKit Commit Bot
Comment 16
2013-12-02 12:49:26 PST
Comment on
attachment 218205
[details]
Patch Clearing flags on attachment: 218205 Committed
r159954
: <
http://trac.webkit.org/changeset/159954
>
WebKit Commit Bot
Comment 17
2013-12-02 12:49:29 PST
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