Open
Bug 1388985
Opened 8 years ago
Updated 3 years ago
css clip-path with basic-shape rendering should respect box-decoration-break
Categories
(Core :: Web Painting, enhancement, P2)
Core
Web Painting
Tracking
()
NEW
Tracking | Status | |
---|---|---|
firefox57 | --- | fix-optional |
People
(Reporter: lochang, Unassigned)
References
Details
Attachments
(3 files, 1 obsolete file)
+++ This bug was initially created as a clone of Bug #1319406 +++
According to CSS Fragmentation Module Level 3:
https://drafts.csswg.org/css-break/#break-decoration
When a break (page/column/region/line) splits a box, the box-decoration-break property controls
* how the background positioning area [CSS3BG] (and mask positioning area [CSS-MASKING-1], shape reference box [CSS-SHAPES-1], etc.) is derived from or duplicated across the box fragments and how the element’s background is drawn within them.
Depend on the value of box-decoration-break, we should generate the shape of clip-path differently. Currently, both slice and clone only clip the first continuation frame.
We only apply basic-shape onto the first continuation. Do you check the behavior of chrome or safari?
Reporter | ||
Comment 2•8 years ago
|
||
(In reply to C.J. Ku[:cjku](UTC+8) from comment #1)
> We only apply basic-shape onto the first continuation. Do you check the
> behavior of chrome or safari?
Chrome clip only first frame as well. Safari doesn't clip anything.
Comment hidden (mozreview-request) |
Comment hidden (mozreview-request) |
Comment hidden (mozreview-request) |
Reporter | ||
Updated•8 years ago
|
Attachment #8896207 -
Attachment is obsolete: true
Comment hidden (mozreview-request) |
Comment hidden (mozreview-request) |
Comment on attachment 8896098 [details]
Bug 1388985 Part 1 - Compute box for clip-path: basic shape based on first frame according to the value of box-decoration-break.
https://reviewboard.mozilla.org/r/167380/#review172700
::: layout/svg/nsCSSClipPathInstance.cpp:74
(Diff revision 4)
> return path->ContainsPoint(ToPoint(aPoint) * pixelRatio, Matrix());
> }
>
> already_AddRefed<Path>
> -nsCSSClipPathInstance::CreateClipPath(DrawTarget* aDrawTarget)
> +nsCSSClipPathInstance::CreateClipPath(DrawTarget* aDrawTarget, nsIFrame* aFrame)
> {
What's the difference between aFrame and nsCSSClipPathInstance::mFrame?
Comment on attachment 8896098 [details]
Bug 1388985 Part 1 - Compute box for clip-path: basic shape based on first frame according to the value of box-decoration-break.
https://reviewboard.mozilla.org/r/167380/#review172702
::: layout/svg/nsCSSClipPathInstance.cpp:80
(Diff revision 4)
> - nsRect r =
> - nsLayoutUtils::ComputeGeometryBox(mTargetFrame,
> - mClipPathStyle.GetReferenceBox());
> + uint32_t flags =
> + (aFrame->StyleBorder()->mBoxDecorationBreak == StyleBoxDecorationBreak::Clone)
> + ? nsSVGUtils::eBBoxIncludeFillGeometry |
> + nsSVGUtils::eIncludeOnlyCurrentFrameForNonSVGElement
> + : nsSVGUtils::eBBoxIncludeFillGeometry;
> + gfxRect bbox = nsSVGUtils::GetBBox(aFrame, flags);
You should not use nsSVGUtils::GetBBox directly here since it does not handle clip-path: reference-box
Attachment #8896098 -
Flags: review?(cku) → review-
Comment hidden (mozreview-request) |
Comment 11•8 years ago
|
||
mozreview-review |
Comment on attachment 8896098 [details]
Bug 1388985 Part 1 - Compute box for clip-path: basic shape based on first frame according to the value of box-decoration-break.
https://reviewboard.mozilla.org/r/167380/#review174790
::: layout/svg/nsCSSClipPathInstance.cpp:83
(Diff revision 5)
>
> + // If mTargetFrame is a continuation frame, compute the box based on
> + // first frame according to different values of box-decoration-break.
> + nsIFrame* firstFrame =
> + nsLayoutUtils::FirstContinuationOrIBSplitSibling(mTargetFrame);
> + if (firstFrame != mTargetFrame) {
what if "firstFrame == mTargetFrame" and "mTargetFrame->StyleBorder()->mBoxDecorationBreak == slice"? We still need to union bbox of all continuations, right?
::: layout/svg/nsCSSClipPathInstance.cpp:93
(Diff revision 5)
> + r.MoveTo(r.TopLeft() + offsetToFirstFrame);
> + } else {
> + nsRect firstComputedRect =
> + nsLayoutUtils::ComputeGeometryBox(firstFrame,
> + mClipPathStyle.GetReferenceBox());
> + gfxRect bbox = nsSVGUtils::GetBBox(mTargetFrame);
What if you have tree, or above, continuations?
Attachment #8896098 -
Flags: review?(cku) → review-
Updated•8 years ago
|
status-firefox57:
--- → fix-optional
Assignee | ||
Updated•7 years ago
|
Component: Layout: View Rendering → Layout: Web Painting
Comment 12•3 years ago
|
||
The bug assignee didn't login in Bugzilla in the last 7 months.
:miko, could you have a look please?
For more information, please visit auto_nag documentation.
Assignee: lochang → nobody
Status: ASSIGNED → NEW
Flags: needinfo?(mikokm)
Comment 13•3 years ago
|
||
The clipping is slightly different compared to Chrome.
Flags: needinfo?(mikokm)
Updated•3 years ago
|
Severity: normal → S3
You need to log in
before you can comment on or make changes to this bug.
Description
•