Commit Graph

294 Commits

Author SHA1 Message Date
cku
35a71bbf75 Bug 1345853 - Part 1. Pass DrawResult from nsSVGPatternFrame::PaintPattern back to nsDisplaySVGGeometry::Paint. r=mstange,tnikkel
I did many change in many files in this patch. But the goal is pretty simple: To
pass the return value of nsSVGPatternFrame::PaintPattern back to the caller
(nsDisplaySVGGeometry). My suggestion is to review this patch right from
nsSVGPatternFrame.cpp.

I made two mistakes in bug 1258510
1. We should not return directly at [1]. RemoveStateBits at l418 will be skip.
2. nsSVGPatternFrame::PaintPattern should return both SourceSurface and draw
result, so that we can update UpdateDrawResult in display item.

All the other changes are to
1. make sure the return value of nsSVGPatternFrame::PaintPattern goes back to
nsDisplaySVGGeometry::Paint correctly.
2. Since the return value of nsSVGPatternFrame::PaintPattern change, we need
modify all existed callers.

I also filed bug 1346124 for handle the returning value of PaintMarkers.

[1] https://hg.mozilla.org/mozilla-central/file/c0700bedb4f7/layout/svg/nsSVGPatternFrame.cpp#l415

MozReview-Commit-ID: Iq9RPQ6Omz0
2017-03-21 10:12:23 +08:00
Robert Longson
8964358c22 Bug 1349865 - use RAII to set/unset NS_FRAME_DRAWING_AS_PAINTSERVER state bit r=jwatt 2017-03-24 18:07:26 +00:00
cku
924d426016 Bug 1343139 - Part 1. Implement nsStyleSVGReset::HasMask. r=heycam
Implement this unil function to improve readability
MozReview-Commit-ID: FLKOGyq180W
2017-03-07 13:43:21 +08:00
cku
2daf26af3d Bug 1348564 - Part 3. More comment in nsSVGIntegrationUtils::GetSVGBBoxForNonSVGFrame. r=jwatt
MozReview-Commit-ID: Gq9vLmqrcjy
2017-03-22 15:53:55 +08:00
Jonathan Watt
8e9411768a Bug 1349244 - Rename nsISVGChildFrame to nsSVGDisplayableFrame to reduce confusion. r=longsonr
MozReview-Commit-ID: IQCv2ebZbwk
2017-02-09 18:24:31 +00:00
Sebastian Hengst
fa3180dce9 Backed out changeset 836d16519edf (bug 1345853) for frequently failing its own test pattern-big-image.html. r=backout 2017-03-17 21:54:01 +01:00
cku
8e6b56bc1e Bug 1345853 - Part 1. Pass DrawResult from nsSVGPatternFrame::PaintPattern back to nsDisplaySVGGeometry::Paint. r=mstange,tnikkel
I did many change in many files in this patch. But the goal is pretty simple: To
pass the return value of nsSVGPatternFrame::PaintPattern back to the caller
(nsDisplaySVGGeometry). My suggestion is to review this patch right from
nsSVGPatternFrame.cpp.

I made two mistakes in bug 1258510
1. We should not return directly at [1]. RemoveStateBits at l418 will be skip.
2. nsSVGPatternFrame::PaintPattern should return both SourceSurface and draw
result, so that we can update UpdateDrawResult in display item.

All the other changes are to
1. make sure the return value of nsSVGPatternFrame::PaintPattern goes back to
nsDisplaySVGGeometry::Paint correctly.
2. Since the return value of nsSVGPatternFrame::PaintPattern change, we need
modify all existed callers.

I also filed bug 1346124 for handle the returning value of PaintMarkers.

[1] https://hg.mozilla.org/mozilla-central/file/c0700bedb4f7/layout/svg/nsSVGPatternFrame.cpp#l415

MozReview-Commit-ID: Iq9RPQ6Omz0
2017-03-16 12:17:19 +08:00
cku
ca5914f694 Bug 1320036 - Part 1. Correct objectBoundingBox region of a filter applied to an outer SVG element. r=jwatt
MozReview-Commit-ID: 8frACVe2gFE
2017-03-15 18:36:53 +08:00
cku
528bcef79c Bug 1340257 - Part 2. Revert the change in bug 842114. r=cjku
MozReview-Commit-ID: Kqyt4AHwpJL
2017-02-22 16:27:40 +08:00
cku
780eea788a Bug 1340257 - Part 1. Remove Assertion failure: mightHaveNoneSVGMask. r=heycam
After fighting with this assertion several months, I decided to remove it for
two reasons:

This assertion allows PreEffectBBoxProperty not being cached only under specific
condition. But the condition is wider then we expect.

1.
PreEffectsBBoxProperty is cached by nsIFrame::FinishAndStoreOverflow(this
function calls ComputeEffectsRect which cache this property actually) and
it is called from nsXXXFrame::Reflow on demand. Yes, *on demand*, not always.
And this is the fist reason that why I think we should just remove
this assertion.

For example, nsBlockFrame::Reflow calls FinishAndStoreOverflow to store this
property. But like BRFrame, it does not call FinishAndStoreOverflow at all.
In anohter word, if you apply any SVG effect to a BRFrame, you will always hit
this assertion. Here is an example:
  <br style="filter: saturate(0%);"/>

So, if we still want to keep this assertion, we may need to create a list which
list all frame types that cache PreEffectsBBoxProperty, and do this check only if
the type of aFrame is listed. This is error prone since we may introduce a
new frame type at any time and forget to update this table.

2.
So, I think it's better just removing this assertion. The assertion that we
really need is the next one(2nd one):
MOZ_ASSERT(!preTransformOverflows,
           "GetVisualOverflowRect() won't return the pre-effects rect!");
Since hitting that assertion, the 2nd one, means caller will retrieve wrong
effect region. Hitting the first assertion only means we do not cache
PreEffectsBBoxProperty, it's pretty normal and not hurt anything. This is the
second reason that I think we should remvoe this assertion.

MozReview-Commit-ID: JfiYTiP2laG
2017-02-22 15:56:53 +08:00
cku
cc474474cc Bug 1340992 - Demote MOZ_ASSERT to NS_ASSERTION before root cause addressed. r=me
MozReview-Commit-ID: I8goOZdPs9d
2017-02-21 17:44:22 +08:00
cku
dc8858b1b5 Bug 824300 - Part 1. Correct assert condition and promote NS_ASSERTION to MOZ_ASSERT r=heycam
MozReview-Commit-ID: 1FHD2xhQ3x4
2017-02-04 20:43:08 +08:00
cku
2741b0f57f Bug 842114 - Part 1. Correct assert condition and promote NS_ASSERTION to MOZ_ASSERT. r=heycam
Except during restyle process, we should skip this checking in reflow as well.
But what really should do is to skip this checking if this function is called
from ComputeEffectsRect. The reason is explained in the beginning of
ComputePostEffectsVisualOverflowRect.

Also promote NS_ASSERTION to MOZ_ASSERTION in this patch.

MozReview-Commit-ID: 3CuKkdR4kTK
2017-02-03 21:37:08 +08:00
Cameron McCormack
87f3ad6dfb Bug 1297899 - Part 6: Move RestyleManagerHandle functionality into RestyleManager. r=bholley
MozReview-Commit-ID: 7lsti0bGzNr
2017-02-13 11:21:33 +08:00
Cameron McCormack
61f5edfdb9 Bug 1297899 - Part 1: Rename RestyleManager.{h,cpp} to GeckoRestyleManager.{h,cpp}. r=bholley
MozReview-Commit-ID: 1v0ufuGFtiD
2017-02-13 11:21:30 +08:00
Daniel Holbert
bee7fa0be8 Bug 1339609: Add #include for gfxPrefs.h to all source code that calls gfxPrefs APIs. r=jgilbert
MozReview-Commit-ID: GxWehmDYB3t
2017-02-14 14:01:59 -08:00
cku
0d2bf429be Bug 1224207 - Part 7. (Main) Pass frame transform info down to nsFilterInstance. r=mstange
The biggest change is located in
nsFilterInstance::ComputeUserSpaceToFilterSpaceScale.

Originally, nsSVGUtils::GetCanvasTM is used. This function returns combination
of svg-transform, e.g. <rect transform="translate(30,40)" />, and
css-to-dev-scale-transform. That why we do not see this bug in a transformed
svg element.

For example, the following svg can be rendered correctly on FF:
<svg xmlns="http://www.w3.org/2000/svg">
<defs>
  <filter id="blurMe">
    <feGaussianBlur in="SourceGraphic" stdDeviation="1"/>
  </filter>
</defs>
  <!-- nsSVGUtils::GetCanvasTM return transform="scale(3)" correctly -->
  <text x="0" y="35" font-size="35" transform="scale(3)" filter="url(#blurMe)">
    Hello, out there
  </text>
</svg>

Unfortunately, this function does not report css-transform at all. So, I
replaced it by mPaintTransfom, which is passed from the caller. So now it's the
caller's responsibility to pass a UserSpace-To-DeviceSpace transform into
nsFilterInstance. And, we actually change the meaning of mPaintTransform in this
patch. Before this patch, mPaintTransform means css-to-dev-px scaling transform;
After this patch it means "userspace-to-filterspace-scaling * css-to-dev-scaling"
transform.

All the other modifictions are to respect the change in
nsFilterInstance::ComputeUserSpaceToFilterSpaceScale.

MozReview-Commit-ID: LwNUAMo98M
2017-02-07 11:51:34 +08:00
cku
fa06d27be0 Bug 1224207 - Part 6. Move GetCSSPxToDevPxMatrix to nsSVGUtils. r=mstange
To use GetCSSPxToDevPxMatrix in nsFilterInstance, pull this untility function down
to nsSVGUtils; Otherwise, we have to include nsSVGIntegrationUtils header in
nsFilterIntance, which is ok but not good I think.

MozReview-Commit-ID: 6SGtwj4EE1S
2017-01-24 23:22:43 +08:00
cku
6aa07bc16b Bug 1224207 - Part 2. Fine tune RegularFramePaintCallback. r=mstange
1. Pass offset in device pixel unit instead of app unit.
2. Keep old context of the basic manager before replacing.

MozReview-Commit-ID: IoYFTU35aw6
2017-01-23 02:51:23 +08:00
cku
4d4d0093fe Bug 1224207 - Part 1. Split SetupContext into ComputeEffectOffset and TranslateToUserSpace. r=mstange
We need ComputeEffectOffset along in the following patch.
MozReview-Commit-ID: GoIZ07IqoQ3
2017-01-23 02:36:41 +08:00
Iris Hsiao
8ec4557f01 Backed out 8 changesets (bug 1224207) for Win8 Reftest failures
Backed out changeset 2fce8d53b105 (bug 1224207)
Backed out changeset c31e96bf56d0 (bug 1224207)
Backed out changeset 587cde853b75 (bug 1224207)
Backed out changeset 7faefd871e00 (bug 1224207)
Backed out changeset 15f62c3ec366 (bug 1224207)
Backed out changeset 9448e628569e (bug 1224207)
Backed out changeset 958379e4f61c (bug 1224207)
Backed out changeset d23079bc188e (bug 1224207)
2017-02-08 17:53:07 +08:00
cku
ee29235376 Bug 1224207 - Part 7. (Main) Pass frame transform info down to nsFilterInstance. r=mstange
The biggest change is located in
nsFilterInstance::ComputeUserSpaceToFilterSpaceScale.

Originally, nsSVGUtils::GetCanvasTM is used. This function returns combination
of svg-transform, e.g. <rect transform="translate(30,40)" />, and
css-to-dev-scale-transform. That why we do not see this bug in a transformed
svg element.

For example, the following svg can be rendered correctly on FF:
<svg xmlns="http://www.w3.org/2000/svg">
<defs>
  <filter id="blurMe">
    <feGaussianBlur in="SourceGraphic" stdDeviation="1"/>
  </filter>
</defs>
  <!-- nsSVGUtils::GetCanvasTM return transform="scale(3)" correctly -->
  <text x="0" y="35" font-size="35" transform="scale(3)" filter="url(#blurMe)">
    Hello, out there
  </text>
</svg>

Unfortunately, this function does not report css-transform at all. So, I
replaced it by mPaintTransfom, which is passed from the caller. So now it's the
caller's responsibility to pass a UserSpace-To-DeviceSpace transform into
nsFilterInstance. And, we actually change the meaning of mPaintTransform in this
patch. Before this patch, mPaintTransform means css-to-dev-px scaling transform;
After this patch it means "userspace-to-filterspace-scaling * css-to-dev-scaling"
transform.

All the other modifictions are to respect the change in
nsFilterInstance::ComputeUserSpaceToFilterSpaceScale.

MozReview-Commit-ID: LwNUAMo98M
2017-02-07 11:51:34 +08:00
cku
bbcf69236e Bug 1224207 - Part 6. Move GetCSSPxToDevPxMatrix to nsSVGUtils. r=mstange
To use GetCSSPxToDevPxMatrix in nsFilterInstance, pull this untility function down
to nsSVGUtils; Otherwise, we have to include nsSVGIntegrationUtils header in
nsFilterIntance, which is ok but not good I think.

MozReview-Commit-ID: 6SGtwj4EE1S
2017-01-24 23:22:43 +08:00
cku
3c4e7018d9 Bug 1224207 - Part 2. Fine tune RegularFramePaintCallback. r=mstange
1. Pass offset in device pixel unit instead of app unit.
2. Keep old context of the basic manager before replacing.

MozReview-Commit-ID: IoYFTU35aw6
2017-01-23 02:51:23 +08:00
cku
d43ed6256a Bug 1224207 - Part 1. Split SetupContext into ComputeEffectOffset and TranslateToUserSpace. r=mstange
We need ComputeEffectOffset along in the following patch.
MozReview-Commit-ID: GoIZ07IqoQ3
2017-01-23 02:36:41 +08:00
cku
5769adfc42 Bug 1334554 - Handle the return value of nsFilterInstance::PaintFilteredFrame r=mstange
MozReview-Commit-ID: 79gddAmRjnp
2017-01-28 02:54:38 +08:00
cku
855e701842 Bug 1325038 - Part 1. Correct assertion logic. r=heycam
In the test case of bug 1324809:
1. A span is been broken into two continuation frames: FA and FB. FA is the first
connituation
2. Adding a filter effect to this span.
3. FA::FinishAndStoreOverflow is called. This function will call ComputeEffect:
  if (nsSVGIntegrationUtils::UsingEffectsForFrame(aFrame)) {
    aFrame->Properties().
    Set(nsIFrame::PreEffectsBBoxProperty(), new nsRect(r)); // Now FA has
                                                            // PreEffectsBBoxProperty
                                                            // but FB does not
                                                            // have yet.
    // ComputePostEffectsVisualOverflowRect will iterate all continuations from
    // FA to FB. At this moment, FB does not carry PreEffectsBBoxProperty,
    // assertion failure.
    r = nsSVGIntegrationUtils::ComputePostEffectsVisualOverflowRect(aFrame, r);
  }
4. FB::FinishAndStoreOverflow is called. But already too late.


MozReview-Commit-ID: 2c8OFzSLhfD
***
merge

MozReview-Commit-ID: C0lYQkKCYT6
2017-01-12 16:38:48 +08:00
Phil Ringnalda
a271853af3 Backed out 2 changesets (bug 1325038) for unexpected assertions in filter-on-continuation-box-ref.html
CLOSED TREE

Backed out changeset f1690763f5a4 (bug 1325038)
Backed out changeset 9d8c6f724256 (bug 1325038)
2017-01-11 19:21:14 -08:00
cku
700f7f2b1e Bug 1325038 - Part 1. Correct assertion logic. r=heycam
In the test case of bug 1324809:
1. A span is been broken into two continuation frames: FA and FB. FA is the first
connituation
2. Adding a filter effect to this span.
3. FA::FinishAndStoreOverflow is called. This function will call ComputeEffect:
  if (nsSVGIntegrationUtils::UsingEffectsForFrame(aFrame)) {
    aFrame->Properties().
    Set(nsIFrame::PreEffectsBBoxProperty(), new nsRect(r)); // Now FA has
                                                            // PreEffectsBBoxProperty
                                                            // but FB does not
                                                            // have yet.
    // ComputePostEffectsVisualOverflowRect will iterate all continuations from
    // FA to FB. At this moment, FB does not carry PreEffectsBBoxProperty,
    // assertion failure.
    r = nsSVGIntegrationUtils::ComputePostEffectsVisualOverflowRect(aFrame, r);
  }
4. FB::FinishAndStoreOverflow is called. But already too late.


MozReview-Commit-ID: 2c8OFzSLhfD
2017-01-10 23:18:56 +08:00
cku
b6ed3576f5 Bug 1323912 - Part 5. Apply opacity in mask layer painting path. r=mstange
MozReview-Commit-ID: HX2Tcum2smO
2017-01-03 17:12:32 +08:00
cku
725d48adc6 Bug 1323912 - Part 4. Apply opacity in indirect image mask painting path. r=mstange
MozReview-Commit-ID: IKKKMccyMsO
2017-01-03 16:35:17 +08:00
cku
12a995df35 Bug 1323912 - Part 1. Rename PaintBackground to PaintStyleImageLayer. r=mstange
MozReview-Commit-ID: GWuII34t0j7
2017-01-03 11:57:13 +08:00
Iris Hsiao
2ded520eac Backed out changeset a44640701558 (bug 1323912) 2017-01-04 21:47:16 -05:00
Iris Hsiao
b35115b089 Backed out changeset a2f133998adf (bug 1323912) 2017-01-04 21:47:05 -05:00
Iris Hsiao
b00442e28a Backed out changeset b3ad53915c5e (bug 1323912) 2017-01-04 21:47:01 -05:00
cku
53ff99c13c Bug 1323912 - Part 5. Apply opacity in mask layer painting path. r=mstange
MozReview-Commit-ID: HX2Tcum2smO
2017-01-03 17:12:32 +08:00
cku
6252ac3e54 Bug 1323912 - Part 4. Apply opacity in indirect image mask painting path. r=mstange
MozReview-Commit-ID: IKKKMccyMsO
2017-01-03 16:35:17 +08:00
cku
e3a8231bed Bug 1323912 - Part 1. Rename PaintBackground to PaintStyleImageLayer. r=mstange
MozReview-Commit-ID: GWuII34t0j7
2017-01-03 11:57:13 +08:00
cku
9259537340 Bug 1324174 - Simplify context management logic in nsSVGIntegrationUtils::PaintMask. r=mstange
MozReview-Commit-ID: BwPSFlfqN8e
2016-12-30 02:07:04 +08:00
cku
52d9c5e88a Bug 1314001 - (followup) give different color to different kind of mask. r=me
MozReview-Commit-ID: 5NtefGdSrUT
2016-12-30 03:35:36 +08:00
Phil Ringnalda
a414bba38f Backed out changeset 6a9a6e524a7b (bug 1314001) for Windows -werror bustage
MozReview-Commit-ID: Gzhx80yqTnG
2016-12-28 22:00:49 -08:00
cku
25df213907 Bug 1314001 - (followup) give different color to different kind of mask. r=me
MozReview-Commit-ID: Ko9MyTzMhL2
2016-12-29 11:36:39 +08:00
cku
57564e1bb6 Bug 1313276 - Part 2. Add comment for bug 1323912. r=mstange
MozReview-Commit-ID: CetQxWIr1sq
2016-12-16 12:52:21 +08:00
cku
5ac207a1d5 Bug 1313276 - Part 1. Draw clip-path-basic-shape onto mask layer. r=mstange
MozReview-Commit-ID: ICZiy84AFfi
2016-12-16 10:56:07 +08:00
Sebastian Hengst
fbac665b18 Backed out changeset d539253e91ae (bug 1313276) for failing own test paint-on-maskLayer-1c.html on Android debug. r=backout 2016-12-22 20:16:20 +01:00
Sebastian Hengst
e8f9ea768d Backed out changeset d90a8fc45b74 (bug 1313276) 2016-12-22 20:15:40 +01:00
cku
b8aecad6fe Bug 1313276 - Part 2. Add comment for bug 1323912. r=mstange
MozReview-Commit-ID: CetQxWIr1sq
2016-12-16 12:52:21 +08:00
cku
99b1a46b4b Bug 1313276 - Part 1. Draw clip-path-basic-shape onto mask layer. r=mstange
MozReview-Commit-ID: ICZiy84AFfi
2016-12-16 10:56:07 +08:00
cku
afce2e8c9c Bug 1324809 - Part 1. Fix wrong clip region while painting filter. r=mstange
MozReview-Commit-ID: Cqjo7VwtnlK
2016-12-21 16:21:23 +08:00
cku
1455483b84 Bug 1318266 - Part 1. Paint trivial clip-path onto mask layer. r=mstange
MozReview-Commit-ID: G2ghy7qGf5N
2016-11-04 15:33:38 +08:00