[Webkit-unassigned] [Bug 135268] Compute and store snap point positions
bugzilla-daemon at webkit.org
bugzilla-daemon at webkit.org
Tue Aug 12 09:05:20 PDT 2014
https://bugs.webkit.org/show_bug.cgi?id=135268
--- Comment #12 from Wenson Hsieh <wenson_hsieh at apple.com> 2014-08-12 09:05:22 PST ---
(From update of attachment 236405)
View in context: https://bugs.webkit.org/attachment.cgi?id=236405&action=review
Thank you Simon and Zalan for the reviews! The logic is now contained in AxisScrollSnapOffsets, so I won't need Element and ScrollableArea to know about classes they shouldn't.
>> Source/WebCore/page/FrameView.cpp:860
>> + updateSnapAxisFromElementAndStyle(axis, body, renderView(), body->renderer()->style());
>
> To get document scroll snapping, are authors expected to style the body element? Maybe this is a spec issue; what if they specify scroll snap points on <html>?
I'll contact Ted about this. Thanks!
>> Source/WebCore/page/scrolling/AxisScrollSnapOffsets.cpp:43
>> +void AxisScrollSnapOffsets::appendChildSnapOffsetsToVector(HTMLElement* parent, ScrollEventAxis axis, Vector<LayoutUnit>& snapOffsetSubsequence)
>
> HTMLElement& ?
Fixed.
>> Source/WebCore/page/scrolling/AxisScrollSnapOffsets.cpp:57
>> + }
>
> Please add a FIXME that this is temporary code.
Ah, right -- added a FIXME.
>> Source/WebCore/page/scrolling/AxisScrollSnapOffsets.cpp:65
>> +void AxisScrollSnapOffsets::updateFromOffsets(LayoutUnit viewSize, LayoutUnit scrollSize, const Vector<LayoutUnit>& snapOffsetSubsequence, LayoutUnit destinationOffset, bool hasRepeat, LayoutUnit repeatOffset)
>
> AxisScrollSnapOffsets::updateFromOffsets is awkward. updateFromStyle()? Can it just take a RenderStyle&?
I agree -- using RenderStyle makes things a bit simpler.
>> Source/WebCore/page/scrolling/AxisScrollSnapOffsets.cpp:146
>> + }
>
> Can't you just compare the Vectors?
Removed the operator==. I'll keep this in mind for the next patch though.
>> Source/WebCore/page/scrolling/AxisScrollSnapOffsets.h:31
>> +#include "HTMLElement.h"
>
> class HTMLElement instead?
Changed to forward declaration.
>> Source/WebCore/page/scrolling/AxisScrollSnapOffsets.h:47
>> + LayoutUnit closestSnapPosition(LayoutUnit, float = 0) const;
>
> Could you add the argument names? There's no way to tell what those LayoutUnits are for by looking at the .h file.
Fixed.
>>> Source/WebCore/page/scrolling/AxisScrollSnapOffsets.h:52
>>> + Vector<LayoutUnit> offsets;
>>
>> private? m_offsets?
>
> Yes.
Made it private.
>> Source/WebCore/page/scrolling/AxisScrollSnapOffsets.h:53
>> + bool dirty;
>
> not used.
Removed.
>> Source/WebCore/platform/ScrollableArea.cpp:45
>> +#include "Element.h"
>
> HTMLElement.h includes Element.h (indirectly)
Got it. Removed Element.h
>> Source/WebCore/platform/ScrollableArea.cpp:49
>> +#endif
>
> Bunch of layering violations here. ScrollableArea should not know anything about elements or renderers.
Got it. Moved bulk of logic to AxisScrollSnapOffsets.
>> Source/WebCore/platform/ScrollableArea.cpp:59
>> +#endif
>
> not used?
Used to add pointers to the snap axes in ScrollableArea.
>> Source/WebCore/platform/ScrollableArea.cpp:207
>> +void ScrollableArea::updateSnapAxisFromElementAndStyle(ScrollEventAxis axis, Element* scrollingElement, RenderBox* box, const RenderStyle& style)
>
> Element& RenderBox& ?
Fixed.
>> Source/WebCore/platform/ScrollableArea.h:31
>> +#include "AxisScrollSnapOffsets.h"
>
> wrong order.
Changed to use just a forward declaration.
>> Source/WebCore/platform/ScrollableArea.h:47
>> +class AxisScrollSnapOffsets;
>
> already included.
Removed.
>> Source/WebCore/platform/ScrollableArea.h:72
>> + virtual void updateSnapAxis(ScrollEventAxis) { };
>
> The name could be better; you're updating offsets for an axis, not the axis itself.
> Also, this means you're doing TWO tree walks per update (one per axis). You should do both axes at the same time.
Changed to updateSnapOffsets(). Also changed to make sure only 1 tree walk happens iff at least 1 axis depends on elements.
>> Source/WebCore/platform/ScrollableArea.h:279
>> + void updateSnapAxisFromElementAndStyle(ScrollEventAxis, Element*, RenderBox*, const RenderStyle&);
>
> To resolve this layering violation, you either have to make this virtual, or compute the offsets externally and put them onto ScrollableArea.
Moved logic to AxisScrollSnapOffsets.
>> Source/WebCore/platform/ScrollableArea.h:298
>> + mutable OwnPtr<AxisScrollSnapOffsets> m_verticalSnapAxis;
>
> Why mutable?
> Better names would be m_horizontalSnapOffsets etc.
It was mutable because my getter was marked const but created a new snap offset list if it didn't exist (I looked to scrollAnimator() const for reference -- m_scrollAnimator is also a mutable OwnPtr). I've changed the getter to not use const.
--
Configure bugmail: https://bugs.webkit.org/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
You are the assignee for the bug.
More information about the webkit-unassigned
mailing list