Closed
Bug 1164767
Opened 10 years ago
Closed 10 years ago
modify async scrollbar positioning code to deal with containerless root scrollables
Categories
(Core :: Panning and Zooming, defect)
Core
Panning and Zooming
Tracking
()
RESOLVED
FIXED
mozilla41
Tracking | Status | |
---|---|---|
firefox41 | --- | fixed |
People
(Reporter: tnikkel, Assigned: tnikkel)
References
Details
Attachments
(1 file)
7.31 KB,
patch
|
botond
:
review+
|
Details | Diff | Splinter Review |
No description provided.
Assignee | ||
Comment 1•10 years ago
|
||
Attachment #8605672 -
Flags: review?(botond)
Comment 2•10 years ago
|
||
Comment on attachment 8605672 [details] [diff] [review]
patch
Review of attachment 8605672 [details] [diff] [review]:
-----------------------------------------------------------------
::: gfx/layers/composite/AsyncCompositionManager.cpp
@@ +829,5 @@
> // layers on the ancestor chain from the scrollbar layer up to but not
> // including the layer with the async transform. Otherwise the scrollbar
> // shifts but gets clipped and so appears to flicker.
> for (Layer* ancestor = aScrollbar; ancestor != aContent.GetLayer(); ancestor = ancestor->GetParent()) {
> TransformClipRect(ancestor, compensation);
If we're IsRootScrollable() but not aScrollbarIsDescendant, do we not still want to apply the resolution-cancelling transform to the clip rect?
Comment 3•10 years ago
|
||
Comment on attachment 8605672 [details] [diff] [review]
patch
Review of attachment 8605672 [details] [diff] [review]:
-----------------------------------------------------------------
(In reply to Botond Ballo [:botond] from comment #2)
> If we're IsRootScrollable() but not aScrollbarIsDescendant, do we not still
> want to apply the resolution-cancelling transform to the clip rect?
After a long IRC discussion, I think we settled on the fact that we actually do *not* want to apply the resolution-cancelling transform to the clip rect ever. (Said application was introduced in bug 1043859 where it "rode along" with a change to apply the resolution-cancelling transform (then called the "non-transient async transform") to the scrollbar layer's transform, the latter change was necessary for correctness.)
That still makes this patch slightly incorrect, but not in the way I thought. I think it should go something like:
if (metrics.IsRootScrollable()) {
compensation =
Matrix4x4::Scaling(metrics.GetPresShellResolution(),
metrics.GetPresShellResolution(),
1.0f).Inverse();
}
if (aScrollbarIsDescendant) {
Matrix4x4 asyncUntransform = (asyncTransform * apzc->GetOverscrollTransform()).Inverse();
Matrix4x4 contentTransform = aContent.GetTransform();
Matrix4x4 contentUntransform = contentTransform.Inverse();
Matrix4x4 asyncCompensation = contentTransform
* asyncUntransform
* contentUntransform;
for (Layer* ancestor = aScrollbar; ancestor != aContent.GetLayer(); ancestor = ancestor->GetParent()) {
TransformClipRect(ancestor, asyncCompensation);
}
compensation = compensation * asyncCompensation;
}
transform = transform * compensation;
(the important change being that we don't apply the part of 'compensation' that was potentially set in the 'IsRootScrollable()' block, to the clip).
I'm happy with fixing this in a follow-up if you prefer.
Attachment #8605672 -
Flags: review?(botond) → review+
Assignee | ||
Comment 5•10 years ago
|
||
(In reply to Botond Ballo [:botond] from comment #3)
> I'm happy with fixing this in a follow-up if you prefer.
Bug 1165536 is the follow-up for this. I prefer to make the change to the existing behaviour is a separate bug in case it causes regressions.
Comment 6•10 years ago
|
||
Status: NEW → RESOLVED
Closed: 10 years ago
status-firefox41:
--- → fixed
Resolution: --- → FIXED
Target Milestone: --- → mozilla41
You need to log in
before you can comment on or make changes to this bug.
Description
•