On Wed, 5 Jul 2023 19:45:39 GMT, John Hendrikx <jhendr...@openjdk.org> wrote:

>> Andy Goryachev has updated the pull request with a new target base due to a 
>> merge or a rebase. The incremental webrev excludes the unrelated changes 
>> brought in by the merge/rebase. The pull request contains ten additional 
>> commits since the last revision:
>> 
>>  - whitespace
>>  - Merge remote-tracking branch 'origin/master' into 8299753.resize
>>  - review comments
>>  - review comments
>>  - whitespace
>>  - removed obsolete tester
>>  - Merge remote-tracking branch 'origin/master' into 8299753.resize
>>  - cleanup
>>  - new algorithm
>
>> > My observation is that this algorithm seems unable to provide a proper 
>> > user resizing experience as it seems to discard important information it 
>> > would need to do so.
>> 
>> please elaborate, or point to a specific problem. It is entirely possible 
>> that a better algorithm might exist, but it might be out of scope _at the 
>> moment_, as this is a follow-up for a specific issue.
> 
> It's hard to point to a specific problem when most of the algorithm used 
> would be unnecessary if it used the initial conditions + current resize 
> position as its basis for calculating the column sizes.  My problem with this 
> implementation is that it takes what is fundamentally a very simple algorithm 
> (columns have sizes X,Y,Z and Y is resized 10 pixels larger, what should the 
> layout be?) and turns it into a frame rate dependent, mouse movement 
> dependent delta calculation.  The initial conditions are discarded, and so a 
> single drag resize of 10 pixels is NOT the same as a drag resize that 
> captured several individual steps (1 +  2 +  3  + 4 pixels), while it really 
> should be...
> 
> On top of that, if indeed the algorithm is flawed, as I think it is, then 
> there is no way to really fix it apart from some cosmetic changes.  This then 
> would be a lot of wasted effort.  As I noted, there is no JUnit test for this 
> code as of yet, and for such a complicated algorithm to be verified to be 
> correct, I think it would need one to pass review.  If we're willing to 
> forego that, then I suppose a casual fix is in the cards, but I can't really 
> see whether or not it would be correct (within its fundamental limitations) 
> without extensive manual testing.
> 
>> > The `SMALL_DELTA` constant that changes behavior on how large a "drag" was 
>> > registered is a red flag; this shouldn't matter. The sizes should always 
>> > be based on what they were initially (at the start of the drag), and where 
>> > the cursor is currently, regardless of what path the cursor took to get 
>> > there (ie. there should be no memory effects, the algorithm should only 
>> > need the initial sizes + current position).
>> 
>> This is not my experience. Specifically, the difference in behavior between 
>> small changes (when the users resizes the columns slowly and we get small 
>> deltas of 1 pixel) and large changes (e.g. when initially resizing the 
>> table, or the user moves the mouse quickly) are significant.
> 
> Yes, it would be needed with this algorithm as it is dependent on mouse 
> cursor speed and frame rate as it has no idea of what the initial positions 
> were and how it arrived...

Thank you for a detailed write up, @hjohn .

One thing to note: the new code is a modification of the earlier work on 
constrained column resize policies, that logic is unaffected.  The only 
difference is to recognize the fact that in an over-constrained situation sone 
constraints must be relaxed, and that eliminates multiple passes.

Another consideration is that we are not re-writing Tree/TableView skin column 
resizing code.  The fact that the current public APIs do not provide us with 
the initial condition and instead invoke the policy resize methods giving small 
deltas is a limitation this PR is not going to address.

-------------

PR Comment: https://git.openjdk.org/jfx/pull/1156#issuecomment-1622420462

Reply via email to