convert-screenshots: drop dead pad-shift-layers map entry
The capture pipeline doesn't produce pad-shift-layers.png (shift-layer
UI is shown inside pad-mappings.png and Shift-Layers.md uses that image
at the top). The map entry produced a 'SKIP (missing)' line on every
convert run with no downstream consumer; clean it up.
50dbda4
Re-capture pad-impulse-triggers with Xbox Series source
The Impulse Triggers tab is visibility-gated on the active source's
HasRumbleTriggers. DualSense routes its trigger-motor data to Adaptive
Trigger Vibration instead, so the tab is hidden whenever DualSense is
the picker selection. New capture switches the MappedDevices ComboBox
to Xbox Series X Controller first, then clicks the tab.
3a478c5
Profiles: complete the 'What a profile holds' table
Two omissions caught during sweep:
- Impulse triggers (per-slot ImpulseOverallGain / ImpulseLeft / ImpulseRight
/ ConstantTriggerForce / AudioBassTriggerRumble — Settings-and-Serialization
section 8/9/10) wasn't listed at all.
- Gyro tuning (per-pad-per-slot, ~24 fields per Settings-and-Serialization
section 13) wasn't listed at all.
Also clarified Touchpad row: previous wording mentioned only the gesture
stack but the same per-slot PadSetting also holds Stick / D-Pad Output
and Mouse Output toggles.
b69dcae
Refresh 16 PNGs from v3.3 capture run (DualSense + Xbox on slot 0)
The XML setup uses a UserSetting <Setting> element (matching the
[XmlArrayItem("Setting")] attribute on SettingsFileData.Settings) plus
a matching PadSetting checksum, so PadForge accepts both DualSense and
Xbox Series X as slot-0 sources on restart. That makes the Touchpad /
Adaptive Triggers / Lighting / Gyro / Impulse Triggers tabs all visible
together for the first time in a single capture pass.
Refreshed: about, add-controller-popup, dashboard, devices, profiles,
settings, pad-controller-3d, pad-controller-2d, pad-macros, pad-mappings,
pad-sticks, pad-triggers, pad-forcefeedback, pad-adaptive-triggers,
pad-lighting, pad-gyro. pad-touchpad.png already shipped in the prior
commit. Slot-type-specific and dropdown PNGs are unchanged this run.
1de6a62
Add pad-touchpad.png screenshot for the Touchpad tab
7d0e475
Touchpad: correct StickX/StickY descriptor format
The picker emits descriptors via AddGesture's
`$"Touchpad {padIdx} {name}"` template with name=`StickX` / `StickY`
(no spaces between the word and the axis letter). Wiki page had
"Touchpad N Stick X" / "Touchpad N Stick Y", which doesn't match
what the user types in the mapping table.
Spot-checked README and padforge.org — neither references those two
descriptors with the wrong spacing.
c203bf3
ViewModels/XAML-Views: refresh SelectedConfigTab + PadPage tab list
Both pages still described the v3.1 tab layout (6 tabs, missing Adaptive
Triggers / Lighting / Gyro / Impulse Triggers and now Touchpad). Walked
PadPage.xaml's RadioButton Tag values and rebuilt the enumeration:
- 6 always-visible (Controller, Macros, Mappings, Sticks, Triggers, FF)
- 5 visibility-gated on the source device's capability flags:
6=Adaptive Triggers (HasAdaptiveTriggers)
7=Lighting (HasLightbar)
8=Gyro (HasGyro)
9=Impulse Triggers (HasRumbleTriggers)
10=Touchpad (HasTouchpad)
XAML-Views.md tab-strip diagram extended to the same 11 entries.
abef39a
Touchpad: drop pseudo-colon em-dashes in tier headers
"Tier 1 — single-finger fires." reads as the classic AI-prose em-dash
pattern (bolded label, em-dash, gloss). Replaced with colons. Also
broke the parenthetical "(devices that support multi-touch deep enough;
Windows PTP carries all five)" into two short sentences to drop the
inline semicolon.
c2d46d2
Touchpad: capture pipeline + screenshot embed at top of page
- capture.ps1: add Touchpad to the first-slot tab sequence (between Gyro
and the slot-walk). Skips with a yellow warning if the active slot's
source doesn't expose a touchpad surface.
- convert-screenshots.ps1: map pad-touchpad.png to "touchpad" so the
PadForge/screenshots and padforge.org/assets writes pick it up.
- Touchpad.md: embed images/pad-touchpad.png at the top of the page
matching every other Pad-page wiki entry.
4c97bb8
Profiles: add Touchpad gesture stack to 'What a profile holds' table
ProfileData.TouchpadGestures persists per-profile (the custom
shape templates the user records via the touchpad recorder
dialog). Different profiles for different games carry their own
gesture catalog. The wiki's 'What a profile holds' table was
missing this row — added between Macros and Extended slot shape.
68daa96
Devices: HIDMaestro casing typo (was 'hIDMaestro')
33e8ef5
Macros: document Toggle Touchpad Overlay + Set Gyro Engaged actions
The MacroActionType enum (PadForge.App/ViewModels/MacroItem.cs)
ships 20 actions today but the wiki only covered 18 — Toggle
Touchpad Overlay and Set Gyro Engaged were missing. Added both
sections after Stop Rumble, before the 'Axis source for
continuous actions' note that wraps up the action list. Set Gyro
Engaged includes the Mode (Toggle / On / Off) table and the
OR-combine semantics with the Gyro tab's Aim Engage button.
83189d6
Devices: drop pseudo-colon em-dash on touchpad-sources sentence
026c5ca
Wiki: drop stale 'Last updated for PadForge 3.2.0' footers (22 pages)
Every page on the wiki carried a '*Last updated for PadForge X.Y.Z.*'
italicized footer hard-coded to 3.2.0. With 3.3.0 shipped, those
footers become a lie on every page that wasn't actually re-audited
for the new version — bumping them to 3.3.0 wholesale would just
swap one lie for another since most pages haven't been touched
since 3.2.0.
Removing the footer entirely: git history of each page is the
honest source of truth for currency. Wiki contributors who need
to know whether a section reflects the latest behavior can read
the page's commit log; no in-page label needed.
5f26049
Build-and-Publish: refresh example tag from v3.2.0 to v3.3.0
Two illustrative version-tag examples in the release-workflow
section still pointed at v3.2.0; current latest is v3.3.0.
ec18883
Wiki: purge references to four classes removed from the codebase
CustomInputUpdate, CustomInputHelper, DeviceEffectItem, and
RumbleLogger no longer exist in PadForge.Engine — they were
removed at some point and the wiki still documented them in
detail across five pages. Cross-checked with grep across both
projects: zero call sites remain in source.
Removed:
- Engine-Library.md: ToC entries + full sections for all four,
plus UserDevice.InputUpdates / OldInputUpdates rows that
referenced the dead CustomInputUpdate[] type.
- Architecture-Overview.md: file-tree entries for the four .cs
files + the RumbleLogger row in the static-class table.
Added the two real Engine/Common touchpad files
(PrecisionTouchpadReader, TouchpadOverlayDevice) that were
missing from the tree.
- Settings-and-Serialization.md: UserDevice.InputUpdates and
UserDevice.DeviceEffects rows.
- Input-Pipeline.md, SDL3-Integration.md: the step-(e) buffered-
update code samples rewrote into the current per-(slot,
device, padIdx) gesture-engine tick — that's what actually
runs after the InputState swap in Step 2 today.
c7cfc42
Home: drop math-tuple notation from 3.3 callout
9053b5b
Touchpad: drop pseudo-colon em-dashes in initial draft
Down from 12 em-dashes to 3 (the conventional 'Tier 1 —', 'Tier 2 —',
'Tier 3 —' section labels remain since they're true parentheticals
in heading-style labels, not pseudo-colons attaching an explanation
to a clause).
b982874
Devices + Web-Controller: link to new Touchpad page
Devices page's Touchpads section now mentions the PTP-no-click
caveat (matching the auto-map behavior) and points at the
Touchpad page for per-slot configuration. Also notes the two
other touchpad sources (web + overlay) that feed the same
config surface.
Web-Controller's Touchpad layout section now mentions that the
phone's surface drives the per-slot Touchpad-tab features
(mouse / stick / D-pad / gestures), not just the bare DS4
touchpad button stream.
95f8977
Add Touchpad wiki page; link from Home
3.3 added a real Touchpad tab with five cards (Stick / D-Pad
Output, Mouse Output, Gesture Detection, In-Box Gestures,
Custom Gestures) and a per-slot architecture — none of which
had a wiki page. New Touchpad.md documents every card's knobs,
the per-slot fan-out semantics, and the PTP-no-click caveat.
Home gets a 'Touchpad' row in the 'Tune the feel' table alongside
Gyro.
3336152
Home: rotate 'New in' to 'What's new' with a 3.3 subsection
Added the 3.3 highlights (Touchpad Mouse Output + Stick / D-Pad
Output cards, per-slot gesture engine fan-out, KBM keys, defaults-
off) above the existing 3.2 content. Demoted the 3.2 subsections
from h3 to h4 so they nest under the new '3.2' parent. Cleaned up
the 2026 Steam Controller line's broken past-tense qualifier.
80f61d0
ViewModels: ExtendedSlotConfigData adds ForceFeedbackEnabled (v3.0.3+); replace semicolon pseudo-period with period
d459f7f
ViewModels: DeviceRowViewModel adds SdlGuid, HasTouchpad, IsInternalVirtual + 3 ShowInputXxxSection gating flags for web/overlay virtual sources
4fa5d2b
ViewModels: DevicesViewModel touchpad fields (IsTouchpadDevice, HasTouchpadData, TouchpadX0/Y0/X1/Y1, TouchpadDown0/Down1) on the Devices-page raw input display
392f76b
ViewModels: ProfileShortcutViewModel SwitchModes adds ToggleVCsDisabled (v3.2); correct SwitchProfileModeItem shape (ObservableObject class with mutable DisplayName, not record)
29bc398
ViewModels: extend MacroTriggerMode (+CustomExpression) and MacroActionType (+ToggleTouchpadOverlay, Lightbar*, Rumble*) enum value lists; add MacroLightbar/Rumble hold-mode enums
77e51d8
ViewModels: PadViewModel shift-layer surface is ActiveLayerMask + LayerTabs + LayerActivated event (not CurrentLayerMask / ActiveLayers / LayerEngaged+Released)
28da5f9
ViewModels: document DashboardViewModel Touchpad Overlay section (v3.2) and ResetTouchpadOverlayPositionRequested event
a9e038c
ViewModels: add SettingsViewModel.KeepHidHideCloaksBetweenLaunches
94b71c2
ViewModels: document PadViewModel Constant Force + Impulse Triggers tab (Impulse / Constant Trigger Force / Audio Bass Trigger Rumble) properties new in v3.2
d9c6598