-
Notifications
You must be signed in to change notification settings - Fork 1
Changelog
Release notes for LoupixDeck.PluginSdk. The version surfaced at runtime is
SdkInfo.Version; the host enforces a major-version
match against the value declared in plugin.json (sdkVersion).
Full-device takeover: a plugin can now seize the entire device for a HUD, overlay, screensaver, or video, and pick how the host pushes frames to it. (Version 1.5.0 was skipped — there is no 1.5.0 release.)
New contracts
| Type | Purpose |
|---|---|
IExclusiveModeProvider |
Plugin-supplied controller for the global exclusive mode. While active, the host suppresses page mappings, freezes folder navigation, and routes every hardware input to the provider. RenderMode and SingleTileSlot are default-implemented, so the contract is forward-compatible. |
ExclusiveRenderMode |
How the host pushes a provider's frames: FullScreen (default — one composited blit + DRAW), Grid, DirtyTiles (only changed tiles), SingleTile. The lever for higher frame rates. |
IPluginHost additions
| Member | Purpose |
|---|---|
bool RequestExclusiveMode(IExclusiveModeProvider provider) |
Hands the active device to provider. Returns false if another provider already owns it (no stealing); on success the host calls provider.OnEnter() before returning true. |
void ReleaseExclusiveMode(IExclusiveModeProvider provider) |
Releases exclusive mode. No-op unless provider is the current owner; on a match the host calls provider.OnExit() and restores the normal page. |
bool IsInExclusiveMode { get; } |
true while any provider currently owns the active device. |
Host surface for browser launches and transient touch feedback, plus two forward-compatible command contracts.
IPluginHost additions
| Member | Purpose |
|---|---|
bool OpenBrowser(string url) |
Opens url in the user's default browser. Host abstracts OS specifics (Windows shell-execute, Linux xdg-open) so OAuth flows don't need per-plugin platform branches. |
void OverlayTouchText(int slot, string text, TimeSpan duration) |
Temporarily paints text on the touch slot at slot and restores the slot's normal content after duration. Fire-and-forget; later calls on the same slot supersede pending restores. |
int GetTouchSlotForRotary(int rotaryIndex) |
Returns the touch slot adjacent to the rotary at rotaryIndex, or -1 when the active device has no such neighbour. Pair with OverlayTouchText for value-flash feedback without hard-coding device geometry. |
CommandContext additions
| Member | Purpose |
|---|---|
int? SourceIndex |
Identifier of the originating control when Target denotes an indexed source (rotary index for RotaryEncoder, touch slot for TouchButton, simple-button index for SimpleButton). null for chained or CLI invocations. |
New command contracts (forward-compatible)
| Type | Purpose |
|---|---|
IAdjustmentCommand |
Rotary-encoder value adjustment — turn invokes ApplyAdjustment, press invokes ApplyReset. Safe to implement now; the host wires it up when available. |
IDisplayImageCommand |
Renders a dynamic PNG on a touch button. Safe to implement now alongside IDisplayCommand for graceful fallback. |
Display-only setting headers and persisted-key enumeration.
PluginSettingKind additions
| Member | Purpose |
|---|---|
Heading |
Display-only section header in dynamically built settings pages. Carries no value; used to group related controls. |
IPluginSettings additions
| Member | Purpose |
|---|---|
IEnumerable<string> Keys { get; } |
Enumerates every key currently present, in undefined order. Use it to discover prefixed entries — e.g. Keys.Where(k => k.StartsWith("alias:")) — without tracking them in a separate index. |
Getting started
API reference
Advanced
Operations
Release notes