From fbe53676f33e4bdf140efcb3f5ca706e55e3d773 Mon Sep 17 00:00:00 2001 From: marcoschmickler Date: Sun, 14 Jun 2026 00:01:09 +0200 Subject: [PATCH] svideo changes --- kplayer/video/SVideoHelpView.swift | 146 +++++++++++++++++++++++++++++ kplayer/video/svideohelp.md | 90 ++++++++++++++++++ 2 files changed, 236 insertions(+) create mode 100644 kplayer/video/SVideoHelpView.swift create mode 100644 kplayer/video/svideohelp.md diff --git a/kplayer/video/SVideoHelpView.swift b/kplayer/video/SVideoHelpView.swift new file mode 100644 index 0000000..1f1da62 --- /dev/null +++ b/kplayer/video/SVideoHelpView.swift @@ -0,0 +1,146 @@ +// +// Created by Marco Schmickler +// Copyright (c) 2024 Marco Schmickler. All rights reserved. +// + +import SwiftUI + +struct SVideoHelpView: View { + var completionHandler: () -> Void + + var body: some View { + NavigationView { + ScrollView { + if let text = helpAttributedString() { + Text(text) + .padding() + .frame(maxWidth: .infinity, alignment: .leading) + } else { + Text(helpMarkdown) + .padding() + .frame(maxWidth: .infinity, alignment: .leading) + } + } + .navigationTitle("Video Help") + .navigationBarTitleDisplayMode(.inline) + .toolbar { + ToolbarItem(placement: .navigationBarTrailing) { + Button("Done", action: completionHandler) + } + } + } + } + + private func helpAttributedString() -> AttributedString? { + try? AttributedString(markdown: helpMarkdown, + options: .init(interpretedSyntax: .inlineOnlyPreservingWhitespace)) + } + + private let helpMarkdown = """ + # KPlayer Video Help + + ## Gestures + + **Double tap** — Toggle fullscreen: hides all controls and overlays + + **Triple tap** — Take snapshot; exits fullscreen if active + + **Long press** — Pause / resume + + **Pinch** — Zoom in or out (always active) + + ### Drag while playing + + **Swipe right/left** — Seek ±30 s; ±10 s in fullscreen; ±5 s / ±8 s in slow or zoom mode + + **Swipe down/up** — Next / previous item (requires *jump* mode; disabled in fullscreen) + + **Drag lower area** — Pan (in zoom, small, or fullscreen mode) + + ### Drag while paused + + **Upper zone** — Fine scrub (high precision) + + **Lower zone** — Coarse scrub; or pan when zoomed / small / fullscreen + + --- + + ## Toolbar Buttons + + **next / cancel** — Close player; saves in edit mode + + **[time]** — Position relative to clip start. Tap to open/close the More panel + + **[tag]** — Apply the current tag (yellow = applied) + + **♥** — Toggle favourite + + **loop5** — Loop a 5-second window from the current position + + **cfg** — Open settings + + **save** — Export clip to folder 1, 2, or 3 + + **embd** — Show/hide embedded side-by-side video overlay + + **?** — This help screen + + --- + + ## More Panel + + Tap the time button to open or close. + + **tilt** — Gyroscope-controlled horizontal pan + + **slow** — Half speed; also shrinks seek jumps to ±5 s / ±8 s + + **zoom** — Auto-pan and zoom using saved keyframes + + **jump** — Vertical swipe skips to next / previous item (disabled in fullscreen) + + **small** — Crop-preview overlay; unlocks pan in lower drag zone + + **loop** — Loop within clip start/end markers + + **flip** — Rotate video 180° + + **lores** — Secondary zoom/offset for low-resolution sources + + **[speed]** — Cycle speed: 0.25× → 0.5× → 1× → 2× + + **pause** — Pause / resume + + **black** — Mark item deleted and close (requires confirmation) + + **trunc** — Truncate at current position (requires confirmation) + + **cut** — Cut / trim operation + + **start** — Tap: seek to clip start. Long press: set clip start here + + **end** — Tap: seek to clip end. Long press: set clip end here + + --- + + ## Fullscreen Mode + + Double tap enters fullscreen: toolbar and controls are hidden. Zoom and pan remain active. Double tap again or triple tap (which also takes a snapshot) to exit. + + Jump mode is disabled in fullscreen — vertical swipes do not skip items. + + --- + + ## Edit Mode + + Enable via cfg → Edit. + + **frame** — Save current zoom/pan as a keyframe + + **snap** — Screenshot to clipboard + + **start** (long press) — Set clip start to current position + + **end** (long press) — Set clip end to current position + """ +} diff --git a/kplayer/video/svideohelp.md b/kplayer/video/svideohelp.md new file mode 100644 index 0000000..62a5d79 --- /dev/null +++ b/kplayer/video/svideohelp.md @@ -0,0 +1,90 @@ +# KPlayer Video Help + +## Gestures + +| Gesture | Action | +|---|---| +| **Double tap** | Toggle fullscreen — hides all controls and overlays | +| **Triple tap** | Take snapshot; exits fullscreen if active | +| **Long press** | Pause / resume | +| **Pinch** | Zoom in or out (always active) | + +### Drag — while **playing** + +| Gesture | Action | +|---|---| +| Swipe right | Seek forward 30 s; 10 s in fullscreen; 5 s in slow/zoom mode | +| Swipe left | Seek back 30 s; 10 s in fullscreen; 8 s in slow/zoom mode | +| Swipe down | Next item in list (requires **jump** mode; disabled in fullscreen) | +| Swipe up | Previous item in list (requires **jump** mode; disabled in fullscreen) | +| Drag from lower area | Pan (requires zoom, small, or fullscreen mode) | + +### Drag — while **paused** + +| Start position | Action | +|---|---| +| Upper zone | Fine scrub (high precision, ÷100) | +| Lower zone | Coarse scrub (faster, ÷30) | +| Lower zone in zoom/small/fullscreen | Pan | + +--- + +## Toolbar Buttons + +| Button | Action | +|---|---| +| **next** / **cancel** | Close player. In edit mode saves changes; long name shows confirm dialog | +| **[time]** | Time relative to clip start. Tap to toggle the **More** panel | +| **[tag]** | Apply the current tag to this item (turns yellow when applied) | +| **♥** | Toggle favourite | +| **loop5** | Loop a 5-second window from the current position | +| **cfg** | Open settings | +| **save** | Export clip to folder 1, 2, or 3 | +| **embd** | Show/hide embedded side-by-side video overlay | +| **?** | This help screen | + +--- + +## More Panel + +Tap the time button to open. Tap again to close. + +| Button | Action | +|---|---| +| **tilt** | Gyroscope-controlled horizontal pan | +| **slow** | Halve playback speed; also reduces seek jumps to ±5 s / 8 s | +| **zoom** | Auto-pan and zoom based on saved keyframes | +| **jump** | Enable vertical swipe to skip to next/previous item | +| **small** | Crop-preview overlay; enables pan in the lower drag zone | +| **loop** | Loop within the clip's start/end markers | +| **flip** | Rotate video 180° | +| **lores** | Apply secondary zoom/offset for low-resolution sources | +| **[speed]** | Cycle playback speed: 0.25× → 0.5× → 1× → 2× | +| **pause** | Pause / resume | +| **black** | Mark item as deleted and close (confirmation required) | +| **trunc** | Truncate item at current position (confirmation required) | +| **cut** | Cut/trim operation | +| **start** | Tap: seek to clip start. Long press: set clip start here | +| **end** | Tap: seek to clip end. Long press: set clip end here | + +--- + +## Fullscreen Mode + +**Double tap** enters fullscreen: toolbar, controls, and all overlays are hidden. Zoom and pan remain fully active. **Double tap again** or **triple tap** (which also takes a snapshot) exits fullscreen. + +> **Note:** jump mode is disabled in fullscreen — vertical swipes do not skip items. + +--- + +## Edit Mode + +Enable via **cfg → Edit**. Adds clip trimming controls: + +| Button | Action | +|---|---| +| **edit** | Toggle the trim editor overlay | +| **frame** | Save the current zoom/pan position as a keyframe | +| **snap** | Take a screenshot and copy it to the clipboard | +| **start** (long press) | Set clip start to current playback position | +| **end** (long press) | Set clip end to current playback position |