aboutsummaryrefslogtreecommitdiffstats
path: root/src/graphui/classes/com
Commit message (Collapse)AuthorAgeFilesLines
* Bug 1489: Lock-Free Double-Buffered 'renderedShapes' causes data-race ↵Sven Göthel2024-02-172-63/+98
| | | | | | | | | | | | | | | between rendering & input-edt, use synchronized tripple-buffering Tripple-buffering _almost_ produces zero data-race collisions, however .. it still does rarely -> hence synchronize on the used ArrayList<>. This adds a minimal chance for blocking the input-EDT, but gives correct code & results. Double-buffered 'renderedShapes' was introduced to resolve Bug 1489 in commit 5f9fb7159fa33bc979e5050d384b6939658049bd This solution is tested by passing '-swapInterval 0' via CommandlineOptions for FontView01, UIMediaGrid01 .., i.e. rendering faster than picking and hence provoking the data-race condition.
* Bug 1501: Graph Shape: onInit(ListenerBool) -> onDraw(DrawListener) w/ added ↵Sven Göthel2024-02-134-18/+37
| | | | | | capability for code injection to render Besides the one-shot on-init functionality, this allows us to re-render the shape differently.
* Remove unused imports ...Sven Göthel2024-02-121-1/+0
|
* GraphUI MediaPlayer: Add HUDShape on time-slider @ mouse-over with ↵Sven Göthel2024-02-071-74/+167
| | | | time-string and still-images (optional) .. using HUDShape
* GraphUI: Add HUDShape, a convenient HUD shape to be exposed in the scene ↵Sven Göthel2024-02-071-0/+262
| | | | using inner object size/pos, similar like TooltipShape
* GraphUI Tooltip*: Remove unused paramter in createTip() and clarify namesSven Göthel2024-02-074-63/+102
|
* GraphUI Shape: Add MouseEvent to MoveListener; RangeSlider: Add rel obj ↵Sven Göthel2024-02-074-52/+117
| | | | position + NEWT MouseEvent to listener, renamed {Slider->Change}Listener and add PeekListener for mouse-over events
* GraphUI RangeSlider: Fix 'activeOldMod' -> static to memberSven Göthel2024-02-051-1/+1
|
* GraphUI: Add Shape.IO_DISCARDED and update it @ Scene/Group draw(); Prepare ↵Sven Göthel2024-02-053-5/+27
| | | | | | | | | | | for experimental occlusion-culling TreeTool's cullShapes(), actually a naive dumm occlusion test (*RENAME IT*), would need to realize whether the shape/groups actually cover shapes below, i.e. are not on same Z-Axis and transparent. Hence, this is disabled in code and we rely on the Z buffer still, just an idea ..
* Bug 1498: Refine Top-Level Widget Mode: Handle active-state by Scene, ↵Sven Göthel2024-02-053-47/+43
| | | | | | | | | | | simplify and reduce runtime costs Refines commit 43a7899fedf2a570d20b03848bf15710f30b7f26 Scene handles top-level active state via releaseActiveShape() and setActive(), now calling into setActiveTopLevel() -> dispatchActivationEvent(). Drop child's addActivationListener(forwardActivation) and isActive() override.
* GraphUI MediaPlayer: Elevate the ctrlSlider a little (and add it behind ↵Sven Göthel2024-02-051-1/+3
| | | | ctrlBlend) to remove the occlusion by the blending box
* Bug 805: GraphUI MediaPlayer: Add 'Aspect Ratio Crop' Button; Have Chapter ↵Sven Göthel2024-02-051-45/+109
| | | | Pre/Next Buttons; Toggle HUD head info box (full or brief)
* Bug 1498: GraphUI: Fix Picking Traversal throughout Groups in Z-Descending ↵Sven Göthel2024-02-054-197/+246
| | | | | | | | | | | | | | | | | | | | | | | | | | | | Order, testing Children and fallback to Group if positive Picking algo in Z-Ascending order worked only by chance, as it picked up any bottom node. +++ Proper algo is in Z-Descending order to block occluded (child) nodes: for-all s : shapes p1 = testPicking(s) if ( s is Container ) { p2 = testPicking(s.childs) if( null != p2 ) { p1 = p2; // override w/ child prio } } return p1 } Further, testPicking(shape) shall only return a positive shape, if the event dispatching check (mouse-over, click, ..) signals end-of-traversal - as originally intended. Overall philosophy is to pick the 'deepest' child of a group if responding, otherwise the next higher interactive group.
* Bug 1498: Change Top-Level Widget Mode: Register a top-level Group in Scene, ↵Sven Göthel2024-02-055-56/+109
| | | | | | | | | | | | | | | | | | | | | | | where its zOffset gets adjusted when activated.. .. instead of having a non-working complicated callback orgy setup. This also takes away the getAdjustedZ() overloading burden (or better uglyness) etc. Hence Group's setWidgetMode(boolean) became: - enableTopLevelWidget(Scene) - disableTopLevelWidget() The forwardActivation listener is still applied to all children as well as isActive() is also still overloaded for same required behavior. However, none of the children is set in 'widget mode' as well as the Group is simply added to (or removed from) the Scene's top-level Group list - the holder. Scene's setActiveShape(Shape) and releaseActiveShape() handle the top-level Group if affected, i.e. adding or zero'ing its ZOffset.
* Bug 1498: GraphUI: Adopt RangedSlider to new picking (coming up), simplifies ↵Sven Göthel2024-02-041-40/+16
| | | | code.
* GraphUI Cleanup: Use TreeTool directly (Reduce virtl-funcs); Fix typos; Use ↵Sven Göthel2024-02-0410-193/+69
| | | | | | PointerListener for onClicked(), add onHover(); Subsequent commits will fix complete cleanup where code was changed mostly regarding other issues.
* GraphUI RangeSlider: Active {Page -> Knob} Color modulation now affects the ↵Sven Göthel2024-02-041-24/+22
| | | | knob for round-knob and page-size knob
* Bug 1493: Enhance Text/ASS subtitle layout: Split too wide text into ↵Sven Göthel2024-02-041-8/+36
| | | | | | | | multiple lines (max 4) fitting into box, trimming it beforehand Not always are Text/ASS subtitles well formed with newline character. Use new StringUtil to re-layout if their width doesn't fit into the box, by trimming all whitespace and splitting them into up-to 4 lines.
* GraphUI Button: Fix API doc typoSven Göthel2024-02-041-1/+1
|
* GraphUI: Fix func-name, rename ↵Sven Göthel2024-02-042-3/+3
| | | | TexSeqButton.use{AspectRation->ARatio}Letterbox() matching TextureSequence
* GraphUI RangedGroup: Keep position @ validate()Sven Göthel2024-02-041-1/+3
| | | | | | | Positional change could occurre in case the content has changed. However, our positional slider would not reflect this and the sliding view should stay stable. Test: UIMediaGrid01 having one player tile zoomed and returned.
* Tooltip[Text]: Use a slightly round button, change to grayscale colors ↵Sven Göthel2024-02-042-14/+20
| | | | matching our buildin-theme and have the tips placed just above center of the toop (not above it)
* Graph/GraphUI: Move getDefault*() to FontFactory and add ↵Sven Göthel2024-02-033-49/+40
| | | | {get,set}FallbackFont() + Font.getBestCoverage(..); Use fallback-font in MediaButton in case chosen font doesn't match (foreign languages, e.g. 'zho' Chinese .. )
* Bug 1493 - Text/ASS Subtitle via MediaButton/MediaPlayer Alignment defaults ↵Sven Göthel2024-02-023-21/+43
| | | | | | to CenterHoriz, also support Left. MediaButton: Also cleanup local vars in layout
* Bug 1494 - GLMediaPlayer/GraphUI: Support Displaying Bitmap'ed Subtitles ↵Sven Göthel2024-02-022-127/+278
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | (PGS ..) via FFMPEGFMediaPlayer/FFmpeg FFMPEGFMediaPlayer related changes: - Add libswscale (6th FFmpeg lib used) for sws_getCachedContext(), sws_scale() and sws_freeContext(), used natively to convert the palette'ed bitmap into RGBA colorspace -> GL texture - Handling AVSubtitleRect.type SUBTITLE_BITMAP -- only handled if libswscale is available -- config/adjust texture object -- sws_scale palette'ed bitmap to texture -- intermediate memory is cached, may be resized and free'ed at destroy -- texture objects are managed and passed from GLMediaPlayerImpl, as they are also forwarded to player client via SubBitmapEvent - Passing the AVCodecID to GLMediaPlayerImpl, converted to our CodecID enum. - Unifying creation and opening of AVCodecContext with 'createOpenedAVCodecContext(..)' +++ SubtitleEvent* - SubTextEvent now also handles ASS.Dialogue (FFmpeg 4) besides ASS.Event (FFmpeg 5, 6, ..). +++ GLMediaPlayerImpl - Added ringbuffer subTexFree, managing Texture for bitmap'ed subtitles -- Uses 1 bitmap-subtitle Texture per used textureCount in cache, as one bitmap-subtile can be displayed per frame. Could be potentially reduced to just 2 .. but resources used are relatively low here. - Validating subTexFree + videoFramesFree usage, use blocking get/put ringbuffer due to utilization from different threads. - Receives subtitle content from native getNextPacket0() via callback, creates SubtitleEvent instance and passes it to a SubtitleEventListener - if exists. (See MediaButton example) -- SubBitmapEvent also gets its special SubBitmapEvent.TextureOwner to handle client releasing the event and allowing us to put back the Texture resource to 'subTexFree'. This passing through of the Texture object is probably a weakness of this lifecycle and requires the client to ensure SubtitleEvent.release() gets called. See MediaButton example! - Exposing CodecID, allowing clients like MediaButton to handle SubtitleEvent content according to codec
* Bug 805: Graph/GraphUI TextureSequence Scale: Move ↵Sven Göthel2024-02-011-5/+30
| | | | | | | | | 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.
* Bug 1495: GraphUI Shape: Fix updateMat() API docSven Göthel2024-01-311-3/+2
|
* GraphUI: Only issue Shape.mark*Dirty() if values were updated or data ↵Sven Göthel2024-01-313-8/+14
| | | | available; JOGL ImageSequence: Add addFrame(GL, TextureFrame), remove*Frame() and isSequenceAnimating()
* Bug 1496 - GraphUI Shape: Allow markShapeDirty() and markStateDirty() to be ↵Sven Göthel2024-01-311-11/+8
| | | | lock free
* Bug 1495: GraphUI Shape: Only updateMat() if marked dirty once in ↵Sven Göthel2024-01-311-34/+64
| | | | | | | | applyMatToMv() and getMat(*) It is sufficient to mark the internal iMat dirty when mutating the source values (pos, ..) and calling updateMat() only once when used in applyMatToMv() and getMat(*). iMatIdent can also be set to true within updateMat() IF neither mutations occured, i.e. no translocation, scale or rotation.
* Utilize PTS.getCurrent() where applicableSven Göthel2024-01-312-6/+6
|
* GLMediaPlayer: Split GLMediaFrameListener (rarely used) from ↵Sven Göthel2024-01-312-9/+0
| | | | | | | | | | GLMediaEventListener, easing listener callbacks; Prepare SubtitleEventListener generalization (Bug 1494) Moves pushSound(), pushSubtitle*() from FFMPEGMediaPlayer to GLMediaPlayerImpl, as it is handled in a generic way - even though currently only called by native FFMPEGMediaPlayer implementation. Note: This patch is incomplete, i.e. not even compile clean. But choses as-is to semantically split the work to ease review.
* GraphUI MediaButton: Add blending below subtitle, allow setting ↵Sven Göthel2024-01-292-18/+69
| | | | color/blending and subLineDY; MediaPlayer: Add full infoLine toggle with click on infoBox
* FFMPEGMediaPlayer/GraphUI MediaButton: AVSubtitles's start/end are relative ↵Sven Göthel2024-01-281-20/+32
| | | | to pts [ms] (fixed); Use ASSEventLine packets within proper pts only.
* Cleanup GLMediaPlayer.EventMask.Bit handling in GLMediaEventListener ↵Sven Göthel2024-01-281-2/+1
| | | | implementations: Either Uninit, Init, Pause or Play (exclusive)
* GraphUI MediaButton: Clear cached subtitle data on uninit and init from ↵Sven Göthel2024-01-281-2/+12
| | | | GLMediaPlayer
* GraphUI MediaPlayer: Remove debug message (Behavior to disable border if ↵Sven Göthel2024-01-281-1/+0
| | | | zoomSize == 1, full-screen)
* GraphUI MediaButton/MediaPlayer-Widget: Add working subtitle (text + ↵Sven Göthel2024-01-282-6/+174
| | | | ass/saa) support via GLMediaPlayer/FFMPEGMediaPlayer
* GraphUI Misc Cleanup: Move get*Font() helper to Scene; Allow ↵Sven Göthel2024-01-283-19/+24
| | | | GraphShape.drawImpl0(..) override;
* GraphUI Group: Don't draw border is set invisibleSven Göthel2024-01-281-2/+2
|
* GraphUI MediaPlayer: Disable always DEBUG hackSven Göthel2024-01-271-1/+1
|
* GraphUI MediaPlayer: Bump Chapter tooltip scaleSven Göthel2024-01-271-1/+1
|
* GLMediaPlayer: Support tile metadataSven Göthel2024-01-271-17/+3
|
* GraphUI MediaPlayer Widget: Support switching audio and subtitle streams, ↵Sven Göthel2024-01-271-7/+54
| | | | show their language as a button - press to switch to next
* GraphUI MediaPlayer: seek from display-thread, don't act on ↵Sven Göthel2024-01-271-13/+8
| | | | SliderAdapter.clicked() as dragged is always called
* GraphUI MediaPlayer: Cleanup infoLabel layout; Add sticky HUD (always-on) ↵Sven Göthel2024-01-261-40/+77
| | | | button; Fix tooltip help; Make slower-speed reduce by half if <= 1
* GraphUI RangeSlider: Use a modulating color for rect page frame for visible ↵Sven Göthel2024-01-261-4/+41
| | | | response when active
* GraphUI Shape: API doc for colors; add makeShapeDirty() on setColor(); add ↵Sven Göthel2024-01-261-9/+68
| | | | activeRGBAModulateOn.
* GraphUI Layout: Emphasize whether a value/parameter is scaled or unscaled in ↵Sven Göthel2024-01-266-72/+76
| | | | API doc to ease usage
* Math Vec*: Rename {scale->mul}(..) for non-scalar types (n-dim); Add div(..)Sven Göthel2024-01-263-8/+8
|