Bug 805 - Basic Graph-UI Widgets - I
Summary: Basic Graph-UI Widgets - I
Alias: None
Product: GraphUI
Classification: JogAmp
Component: Core (show other bugs)
Version: 2.6.0
Hardware: All all
: --- enhancement
Assignee: Sven Gothel
Depends on: 1485 1486 1487 1488 1489 1490 1491 1492 1493 1494 1495 1496 1497 1498 1499 1501
Blocks: 1483
  Show dependency treegraph
Reported: 2013-08-05 15:57 CEST by Sven Gothel
Modified: 2024-02-14 00:45 CET (History)
0 users

See Also:
SCM Refs:
a4fc84cba410e7e7082e8fd097cb0185d0aac1a2 121260d2b7bc4f57a16ca53ed1b08082d7977bbe 47f5e083ba79ac02590a452149e31bf433109346 c306094e8dbba3c9e77953daaf8054731f327923 feb3d34be097bcbef5ebc40342b405a832ac581f a782f343aeecbfdb640198bcc73794a90f63730d fdedf6cff64efc1d7ab554c2bf084392a099ef0f b5e6a852451f2a78a1783ca8fbd704005fbafd07 c6e39c6e313a34688ca0164d7a34b6465e92396f 6dbd73108ec0b2f829674c07771c232395034157 c6e83daaf04541907fa5ac36f1cd06c2c65e2882 0250b2e5a8cbf91e94d50fd9860c62b28a1fcc17 7f91a60a0f5d7043d44fd22639d27aaefa1dc1a4 d7cb4a77b71cb3703ff7ac0667c5a97f29a5bdb4 2bd66b50f21fd21e2102ac75cf4ce6cf875aca4d 447a98a0dcb7add50d77c1d8392e670bffb358ec 0999b85e467c27737784a89f933d70863d027a36 f06fe57b0ae738870a61700ff2c65680102d9e73 3336d930e991679eadaa1ff4068cb8d23562b42c 018f2633ba8f7106439ec70829d2444abf0c389b 4a9f20330309a4a788e13ca7388b5663cd9f85c3 a516c694031e77c0e94d30f769c66495c4bf72ea 95de4407faf91f30ccecb3af1aad4242172a6e0f 4358310d3233f38d154c03ffbf1fed71891aeaf3 9ff736464e0d2762c424bab66bc6d03ccc6e6d11 0dd2b17f1dd484d22d68828bfb61558be09a4bfa 347739f9589b1f846e2a0db33b554ff34b2ce984 6ec212e0348fc9028e2afc6a298c49890566bf2d
Workaround: ---


Note You need to log in before you can comment on or make changes to this bug.
Description Sven Gothel 2013-08-05 15:57:05 CEST
Basic Graph-UI Elements - I, shall provide a first set of basic UI elements like
buttons, labels, text input fields, combo boxes etc.

They shall be exposed as an immediate mode API,
similar to AWT / Swing.

They shall be implemented using the programmable Graph-UI,
i.e. via SVG specification files (Bug 804).
Comment 1 Sven Gothel 2023-12-18 09:57:07 CET
Produced 1st widget MediaUI01, serving as a use-case testbed to 
complete GraphUI functionality to be capable of creating UI widgets.

commit a4fc84cba410e7e7082e8fd097cb0185d0aac1a2
    Bug 805: GraphUI Group: Add 'widget-mode' used to utilize a group as one visible UI widget element (activation, visibility)
    Enabled widget behavior for a group causes
    - the whole group to be shown on top on (mouse over) activation of one of its elements via getAdjustedZ()
    - this group's onActivation(Listener) to handle all it's elements activation events
    - isActive() of this group and its sub-groups to return true if one of its elements is active


commit 121260d2b7bc4f57a16ca53ed1b08082d7977bbe
Bug 805: GraphUI Scene/Shape Pick-Active/Interaction: Pick shall complete traversion for most inner interactive shape; ..


commit 47f5e083ba79ac02590a452149e31bf433109346
    Bug 805: GraphUI: Add Group.replaceShape(..) and Shape.getParent()


commit c306094e8dbba3c9e77953daaf8054731f327923
    Bug 805: GraphUI: Add MediaUI01 widtget (MediaButton w/ full feature controls), used in demos UIMediaGrid0[01]
Comment 2 Sven Gothel 2023-12-19 17:41:44 CET
commit feb3d34be097bcbef5ebc40342b405a832ac581f

Bug 805: GraphUI: Add Widget 'marker' (a Group), derived by {MediaUI01 -> MediaPlayer} and new RangeSlider

- A widget specifies specific UI semantics including individual controls.
- Being a {@link Group}, implementations provide shape(s) and its instance can be added to the user's scene.
- Due to the specific nature of widgets,
  individual controls/listener may be provided with semantic values.


MediaPlayer exposes a RangeSlider for current position (view and control).
Comment 3 Sven Gothel 2023-12-19 17:55:14 CET
(In reply to Sven Gothel from comment #2)

Hence GraphUI is ready to implement these so called widgets, 
i.e. higher level UI elements based on Group and Shape(s) 
and using more convenient CSS like layouting (padding, gap, ..).

See examples
- RangeSlider https://jogamp.org/cgit/jogl.git/tree/src/graphui/classes/com/jogamp/graph/ui/widgets/RangeSlider.java#n46
- MediaPlayer https://jogamp.org/cgit/jogl.git/tree/src/graphui/classes/com/jogamp/graph/ui/widgets/MediaPlayer.java#n71
Comment 4 Sven Gothel 2023-12-19 18:03:45 CET
(In reply to Sven Gothel from comment #3)
MediaPlayer screenshot: 
Comment 5 Sven Gothel 2023-12-24 19:19:15 CET
(In reply to Sven Gothel from comment #4)

commit c6e39c6e313a34688ca0164d7a34b6465e92396f
    GraphUI RangeSlider Widget: Add rectangular page-sized knob mode using a 'page size' of covered view.  Resolve color-setup.
    Tested with FontView01

commit b5e6a852451f2a78a1783ca8fbd704005fbafd07
    GraphUI MediaPlayer Widget: Issue playStream(..) and setTextureUnit(..) by caller, reducing specification

commit fdedf6cff64efc1d7ab554c2bf084392a099ef0f
    GraphUI Shape: Allow overriding of setColor(..) and setPressedColorMod(..)

commit a782f343aeecbfdb640198bcc73794a90f63730d
    GraphUI Scene/Shape: Add KeyListener for activeShape
Comment 6 Sven Gothel 2024-01-07 04:59:28 CET
commit e9e1732dc6691cb72920f25b1fb8431e94c7b561

    GraphUI MediaPlayer / GLMediaPlayer: Add current chapter-title to info-field
Comment 7 Sven Gothel 2024-01-07 04:59:58 CET
commit fa973b03fc1d6af5696cee27e1824c45da3150b4

    GraphUI Shape: Enable Tooltip (currently text only) to be displayed after delay w/o mouse-move (1s)
    For efficiency, all Tooltip instances is hooked to Scene via Shape as well as its
    singleton pop-up HUD tip after delay and no mouse move.
    TooltipText is a simple text Button implementation,
    but other more fancy HUD tips can be implemented.
    Shape adds
    - 'public Tooltip setToolTip(final CharSequence text, final Font font, final float scaleY, final Scene scene)'
    Demoed within MediaPlayer widget.
Comment 8 Sven Gothel 2024-01-07 21:30:29 CET
commit d80762bdaf79a852cde2391479bb066968ae573c

    GraphUI Shape: Ease Tooltip managment via Scene: Only started Tooltip is required to tick(), drop List<Tooltip>


commit 6dbd73108ec0b2f829674c07771c232395034157

    GraphUI Tooltip: Simplify integration w/ Scene + Shape; Use Shape.setToolTip(Tooltip) for generic usage; Add TooltipText colors.
    Shape also takes care of setting Tooltip's tool-Shape (itself),
    simplifying Tooltip ctor and having it more independent from Scene/Shape.
    Tooltip also drop Scene reference, as it shall be passed from Scene caller
    at Tooltip.createTip(..)

Comment 9 Sven Gothel 2024-01-15 18:13:49 CET
Added Graph Clipping Bug 1485 as a requirement for certain Group Widgets,
clipping its children Region.
Comment 10 Sven Gothel 2024-01-15 18:14:53 CET
- GraphUI Tooltip: Simplify integration w/ Scene + Shape; 
  Use Shape.setToolTip(Tooltip) for generic usage; Add TooltipText colors.
  commit 6dbd73108ec0b2f829674c07771c232395034157

- Graph VBORegion2PVBAAES2: 
  Fix Rescale (MAX texSize): renderFboHeight shall use winHeight (typo)
  commit c6e83daaf04541907fa5ac36f1cd06c2c65e2882
Comment 11 Sven Gothel 2024-01-15 18:16:33 CET
- GraphUI RangeSlider: Position page-sized knob (variant) 
  with value at page-start position.
  commit 0250b2e5a8cbf91e94d50fd9860c62b28a1fcc17

- GraphUI RangeSlider: Add SliderAdapter (convenience) 
  and use a listener-array (was 1 instance)
  commit 7f91a60a0f5d7043d44fd22639d27aaefa1dc1a4
Comment 12 Sven Gothel 2024-01-15 18:22:33 CET
- Graph/GraphUI AA-Quality (shader): Region: Add DEFAULT_AA_QUALITY and clipping for for aaQuality/sampleCount; 
  TextRegionUtil: Pass quality parameter in draw-functions
  commit d7cb4a77b71cb3703ff7ac0667c5a97f29a5bdb4

- GraphUI Shape: Add receiveKeyEvents() and receiveMouseEvents() allowing a Shape to receive forwarded events from another Shape; 
  Added receive*Events() specialisation for RangeSlider
  commit 2bd66b50f21fd21e2102ac75cf4ce6cf875aca4d
Comment 13 Sven Gothel 2024-01-15 18:23:29 CET
- GraphUI: Added RangedGroup Widget, displaying a clipped content Group 
  with optional horizontal and/or vertical RangeSlider; 
  FontView01 now uses RangedGroup scrolling GlyphGrid smooth per-pixel
  commit 447a98a0dcb7add50d77c1d8392e670bffb358ec

Comment 14 Sven Gothel 2024-01-16 00:46:43 CET
(In reply to Sven Gothel from comment #13)

GraphUI Clipping + Culling Enhancement

commit 0999b85e467c27737784a89f933d70863d027a36
- GraphUI Group Clipping setClip{OnBox->OnBounds}(): 
-- Add Vec3f cullingScale factor for the clip-box to discard rendering completely..

   Enable AABBox clipping on getBounds() for this group and its shapes as follows:
    - Discard Shape rendering if completely outside of the 'clip-box * cullingScale'
    - Otherwise perform pixel-accurate clipping inside the shader on 'clip-box'

-- Add Group.setClipBBox(..)
   Similar as setClipOnBounds(..) but w/ explicit Mv premul-mat AABBox

commit f06fe57b0ae738870a61700ff2c65680102d9e73
- GraphUI Enhance Clipping: Drop pixel clipping 
  if `clip-box >= clip-box*cullingScale` (Group). 
    Group.setClip{BBox, OnBounds}() set 'cullingScale' drops pixel clipping if `clip-box >= clip-box*cullingScale`.
    - Discard Shape rendering if completely outside of `clip-box*cullingScale`
    - Otherwise perform pixel-accurate clipping inside the shader within [`clip-box` .. `clip-box*cullingScale`]
    - If `clip-box >= clip-box*cullingScale` for all axis, no pixel-accurate clipping is performed as shapes are culled before

- RangedGroup: Pass through `clipCullingScale` to cull fully outside shapes

- Apply in FontView01 Demo..
-- Using RangedGroup 'clipCullingScale' w/ culling >= 2*cell-size outside of clipping box (vertical only)
-- Allows to drop the manually coded setVisible() hack and simplifies overall usage!
-- This to not issue _initial_ rendering (draw) of all 14k+ Regions (Glyph-Count * 2) at once (resources, startup-performance)
Comment 15 Sven Gothel 2024-01-16 08:07:18 CET
(In reply to Sven Gothel from comment #14)

commit 3336d930e991679eadaa1ff4068cb8d23562b42c

GraphUI Enhance Clipping: Drop 'cullingScale' param, a simple intersection-test against 'clipBox' to discard whole shapes if completely outside is enough.
Commit f06fe57b0ae738870a61700ff2c65680102d9e73 turns out addition of using `clipbBox*cullingScale` for the AABBox contains test
was not required to render the new Glyphs in the FontView01 demo 'in time'.
A simple intersection-test against 'clipBox' to discard shapes if completely outside is enough, hence dropping the 'cullingScale' parameter - simplifying.

- Discard Shape rendering if not intersecting `clip-box`
- Otherwise perform pixel-accurate clipping inside the shader to `clip-box`
Comment 16 Sven Gothel 2024-01-20 05:23:53 CET
Bug 1487 replaced AABBox based clipping using proper Frustum planes,
hence rotation etc in Mv space (3D) is working
Comment 17 Sven Gothel 2024-01-20 05:24:54 CET
commit 018f2633ba8f7106439ec70829d2444abf0c389b

GraphUI Tooltip*: Allow user to trigger display via now(); Ensure TooltipShape.DestroyCallback gets passed the user provided Shape only
Comment 18 Sven Gothel 2024-01-20 05:25:30 CET
commit 4a9f20330309a4a788e13ca7388b5663cd9f85c3

GraphUI Demo Fontview: Demonstrate Clipping w/ rotation; Reuse GlyphShape for grid, info-box and tooltip
Added TooltipText for help and TooltipShape for GlyphShape.
Notable: The actual {@link GlyphShape} created for the glyph-grid {@link Group}
is reused as-is in the bigger info-grid as well as for the {@link TooltipShape}.
This is possible only if not modifying the scale or position of the {@link GlyphShape},
achieved by simply wrapping it in a {@link Group}.
The latter gets scaled and translated when dropped
into a {@link Group} with {@link Group.Layout}.
This is a good example for a Directed Acyclic Graph (DAG).
Comment 19 Sven Gothel 2024-01-22 03:10:30 CET
Added Bug 1488, Bug 1489 and Bug 1490 addressing performance regressions / issues to be resolved.
Comment 20 Sven Gothel 2024-01-22 08:38:05 CET
commit 6c11c32f4081e9029eeed281d317894bd179f1e3
Simplify TooltipShape: Create own wrapper Group to not mutate user given Shape (if reused in DAG); Fix FontView01 TooltipShape instance, use NoOp DestroyCallback
Comment 21 Sven Gothel 2024-01-25 08:57:56 CET
GraphUI Tooltip: Use delayMS for no time-based alarm (only used for now()); FontView01: Use TooltipShape for GlyphShape only with mouse click -> Tooltip.now()

GraphUI RangeSlider/RangedGroup: Fix overall integration, adding more API comments; UIMediaGrid01 now uses RangedGroup

GraphUI MediaPlayer: Fix Zoom behavior; Disable DEBUG output
Comment 22 Sven Gothel 2024-01-25 10:00:29 CET
Bug 1491 - GLMediaPlayer: Remove resource restrictions and locking with shared GLContext (*GraphicsDevice)
Comment 23 Sven Gothel 2024-01-25 11:46:51 CET
Bug 1491 Comment 5:
See a demos w/ > 200 GLMediaPlayer instance running in a GraphUI Ranged Group,
having 36 instances being visible and displaying new decoded images.

Comment 24 Sven Gothel 2024-01-28 08:21:39 CET
(In reply to Sven Gothel from comment #23)
Full-Feature & High-Performance GraphUI GLMediaPlayer Video Player
Demonstrating new audio and subtitle selection and rendering as well as a performance demo w/ 348 GLMediaPlayer instance running in a GraphUI RangedGroup, having 16 and 36 instances being visible and displaying new decoded images. A little teaser in our Graph Type Rendering and UI saga.

Comment 25 Sven Gothel 2024-01-31 10:52:29 CET
Bug 1492 - GLMediaPlayer: Support Tracking, Showing and Switching of Audio & Subtitle Tracks
Comment 26 Sven Gothel 2024-01-31 10:59:26 CET
Bug 1493 - GLMediaPlayer/GraphUI: Support Displaying Text/ASS Subtitles
Comment 27 Sven Gothel 2024-01-31 11:03:19 CET
Bug 1494 - GLMediaPlayer/GraphUI: Support Displaying Bitmap'ed Subtitles (PGS ..)
Comment 28 Sven Gothel 2024-01-31 11:42:12 CET
Bug 1495 - GraphUI Shape: Only updateMat() if marked dirty once in applyMatToMv() and getMat(*)
Comment 29 Sven Gothel 2024-01-31 11:47:34 CET
Bug 1496 - GraphUI Shape: Allow markShapeDirty() and markStateDirty() to be lock free
Comment 30 Sven Gothel 2024-02-02 07:26:48 CET
commit 9ff736464e0d2762c424bab66bc6d03ccc6e6d11 (HEAD -> jausoft_01)

    Bug 805: Graph/GraphUI TextureSequence Scale: Move Region.COLORTEXTURE_LETTERBOX_RENDERING_BIT to TextureSequence and add enabling/disabling of aratio adjustment + letter-box back-color
    TextureSequence color-texture params fetched from Graph VBORegion* and fed into shader.
    This allows more flexibility in aspect-ratio adjustment as well as setting a clipping background color for
    the added letter-box space.
Comment 31 Sven Gothel 2024-02-02 08:53:24 CET
commit 0dd2b17f1dd484d22d68828bfb61558be09a4bfa

    GLMediaPlayerImpl: Allow one frame to be shown paused when issuing seek(), i.e. 'oneVideoFrameOnce'.
    This allows a player to see the current seek'ed position while paused.
Comment 32 Sven Gothel 2024-02-03 03:01:50 CET
Bug 1497 - Merge Bernhard Haumacher's typecast work, providing documentation as well as Cmap table fix
Comment 33 Sven Gothel 2024-02-05 12:16:31 CET
Bug 1498 - GraphUI: Fix Picking Traversal throughout Groups in Z-Descending Order, testing Children and fallback to Group if positive
Comment 34 Sven Gothel 2024-02-05 12:22:46 CET
commit 347739f9589b1f846e2a0db33b554ff34b2ce984

    Bug 805: GraphUI MediaPlayer: Add 'Aspect Ratio Crop' Button; Have Chapter Pre/Next Buttons; Toggle HUD head info box (full or brief)


commit 6ec212e0348fc9028e2afc6a298c49890566bf2d
    Bug 805: GraphUI Demos: Adopt changes to FontView01 + UIMediaGrid01, dropping UIMediaGrid00

Comment 35 Sven Gothel 2024-02-07 14:44:25 CET
Bug 1499 - GraphUI: Add Time-Code & optional Still-Images as mouse-over on time RangeSlider

Comment 36 Sven Gothel 2024-02-14 00:45:19 CET
Resolved: Bug 1501 - Graph: Resolve Tessellation Bugs (Delaunay Triangulation)