[
https://issues.apache.org/jira/browse/FLEX-33879?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Justin Mclean resolved FLEX-33879.
----------------------------------
Resolution: Not A Problem
> LayoutBase->getScrollPositionDeltaToElementHelper isn't ideal
> -------------------------------------------------------------
>
> Key: FLEX-33879
> URL: https://issues.apache.org/jira/browse/FLEX-33879
> Project: Apache Flex
> Issue Type: Bug
> Components: Spark: Layout
> Affects Versions: Apache Flex 4.11.0
> Reporter: Danko Kozar
> Assignee: Justin Mclean
> Priority: Minor
> Labels: LayoutBase, Spark, bug, easyfix, easytest, layout,
> scrolling
> Fix For: Apache Flex 4.12.0
>
> Original Estimate: 0.25h
> Remaining Estimate: 0.25h
>
> LayoutBase.getScrollPositionDeltaToElementHelper() method should return a
> point where x and y are representing the horizontal and vertical scroll
> needed.
> This calculation is used by data classes such as List.
> When having a List with vertical layout - changing the selected index using
> the UP/DOWN keys should scroll the view only if the selected element is NOT
> fully contain inside the scroll rectangle in Y DIRECTION.
> If it is contained - no scroll is needed - so it has to return the (0, 0)
> point.
> However, I managed to make it scroll even if the element was fully contained.
> When using the "horizontalAlign = HorizontalAlign.CONTENT_JUSTIFY" on actual
> data group, the items are having the same size as the container.
> Here's the code that actually works bad (LayoutBase, starting at the line
> 1552):
> ---------------------------------------------------------------------------------
> // scrollR "contains" elementR in just one dimension
> if ((elementR.left >= scrollR.left) && (elementR.right <= scrollR.right))
> dx = 0;
> else if ((elementR.bottom <= scrollR.bottom) && (elementR.top >= scrollR.top))
> dy = 0;
> ---------------------------------------------------------------------------------
> What happens here is: since the elementR has the equal width as scrollR,
> their left and right are both equal, so the first check passes (sets dx = 0,
> which is OK) and the second check (the "else if") is never done.
> This results in not resetting the dy, so its value remains as calculated in
> the previous nby the same method (based on the "edge distance" calculation,
> i.e. it's always some number).
> I believe the "else if" should be changed to "if" so allowing the dy to reset
> itself if the element is being fully contained in y direction.
> It currently works fine in most cases because it relies on tiny 1 pixel
> distance between the item and the data group, but it could break any moment
> if the developer makes the item width equal to the data group width.
> Note that it works BETTER with horizontally oriented list, simply because the
> first check is for X and it always goes to the second check (the X-check is
> privileged, and really shouldn't be).
> It's the same with another pair of checks checking if the element is bigger
> that scroll rectangle (starting at the line 1558).
> So, the valid code (in total) should be (lines 1552-1562):
> ---------------------------------------------------------------------------------
> // scrollR "contains" elementR in just one dimension
> if ((elementR.left >= scrollR.left) && (elementR.right <= scrollR.right))
> dx = 0;
> if ((elementR.bottom <= scrollR.bottom) && (elementR.top >= scrollR.top))
> dy = 0;
> // elementR "contains" scrollR in just one dimension
> if ((elementR.left <= scrollR.left) && (elementR.right >= scrollR.right))
> dx = 0;
> if ((elementR.bottom >= scrollR.bottom) && (elementR.top <= scrollR.top))
> dy = 0;
> ---------------------------------------------------------------------------------
> Cheers,
> Danko
--
This message was sent by Atlassian JIRA
(v6.1#6144)