Bug 1454

Summary: GraphUI Scene: Elevate active (selected) shape (add z-offset) and select (pick) in Z descending order
Product: [JogAmp] GraphUI Reporter: Sven Gothel <sgothel>
Component: CoreAssignee: Sven Gothel <sgothel>
Status: RESOLVED FIXED    
Severity: normal    
Priority: P4    
Version: 2.6.0   
Hardware: All   
OS: all   
Type: FEATURE SCM Refs:
84b26f9efcd62cc8c41bf3cd867482080d16d7a0 9f900c7f88d70808e24ed8b48087126dad0c3188 4b8574c63e100f0ef8bb2ad292d71f612e6cfceb
Workaround: ---
Bug Depends on: 1458    
Bug Blocks: 1464    

Description Sven Gothel 2023-09-23 20:37:46 CEST
Picking (select) a shape shall process all shapes in Z descending order, 
i.e. top shape first. This is a bug currently.

Note: Picking (selecting) a shape using a (mouse-)pointer device
is active by mouse-moved and not only mouse-clicked.
Therefor, we select shapes by mouse-over.

The active selected shape shall have an elevated Z offset to be rendered on top
of the others on same plane.
- This avoids them being rendered below others while moving them around etc.
- This also avoids flickering of overlapping shapes with mouse over.
- This stabilizes the UI experience
Comment 1 Sven Gothel 2023-09-23 20:45:16 CEST
Feature added w/ commit 84b26f9efcd62cc8c41bf3cd867482080d16d7a0
Comment 2 Sven Gothel 2023-09-24 01:51:53 CEST
Resolution uses a multiple of current Z-Epsilon, see Bug 1458
Comment 3 Sven Gothel 2023-09-24 02:40:26 CEST
9f900c7f88d70808e24ed8b48087126dad0c3188
Bug 1454 - GraphUI Scene: Make active ZOffset scale configurable
Comment 4 Sven Gothel 2023-09-30 01:48:15 CEST
commit 4b8574c63e100f0ef8bb2ad292d71f612e6cfceb

    Bug 1454 + Bug 1464: Maintain a Shape local 'zOffset' and only consider it for sorting w/o actually modifying the position (enogh to be painted on top and for selection)
    
    Also use a simplified comparison using only float relational operations w/o NaN/Inf bit-stuff or epsilon,
    as it should be accurate enough for this cause.
    
    This shall also resolve Bug 1454, as we no more modify the position directly
    but the local zOffset field .. but this has to be seen (data race).