feat(panel): remove full mode, rename compact to standard and fixed some UI (#328)
* feat(panel): remove full mode, rename compact to standard - Remove panel-full entry (660×340) and all full-mode code paths - Rename compact → standard across panel, settings, translations - Restrict tile hover/click to icon+label only (no border hover) - Shrink close button to 24×24 with 12px glyph - Reduce standard section vertical padding to 4px - Standard panel height: 290 → 260 (matches legacy at 260) - Fix widget/shortcut/service toggle to respect panel-mode setting - Update README with correct sizes and behavior * added new thumbnail.webp --------- Co-authored-by: Ahmed5Emad <ahmed5emad@users.noreply.github.com>
This commit is contained in:
+18
-29
@@ -16,7 +16,7 @@ not the original implementation.
|
|||||||
| Field | Value |
|
| Field | Value |
|
||||||
| --- | --- |
|
| --- | --- |
|
||||||
| ID | `alexander/screen-toolkit` |
|
| ID | `alexander/screen-toolkit` |
|
||||||
| Entries | Bar widget: `widget`; control-center shortcut: `toggle`; panels: `panel` (compact tools), `panel-full` (full tools), `panel-legacy` (legacy layout), `result` (result view); service: `service` |
|
| Entries | Bar widget: `widget`; control-center shortcut: `toggle`; panels: `panel` (standard tools), `panel-legacy` (legacy layout), `result` (result view); service: `service` |
|
||||||
|
|
||||||
## Requirements
|
## Requirements
|
||||||
|
|
||||||
@@ -61,11 +61,10 @@ Settings → Control Center shortcuts. Left-click either one opens the main pane
|
|||||||
(or stops a recording); right-clicking the bar widget quick-picks a color. While
|
(or stops a recording); right-clicking the bar widget quick-picks a color. While
|
||||||
a recording is active, the widget and shortcut show a pulsing red dot.
|
a recording is active, the widget and shortcut show a pulsing red dot.
|
||||||
|
|
||||||
The main panel has three layouts, selected by the `panel-mode` setting (default:
|
The main panel has two layouts, selected by the `panel-mode` setting (default:
|
||||||
**Full**):
|
**Standard**):
|
||||||
|
|
||||||
- **Full** — the spacious original grid with section titles (`panel-full`, 660×340).
|
- **Standard** — a dense grid grouped into tinted sections (`panel`, 380×260).
|
||||||
- **Compact** — a dense grid grouped into tinted sections (`panel`, 380×290).
|
|
||||||
- **Legacy** — recreates the Noctalia-v4 layout (`panel-legacy`, 380×260).
|
- **Legacy** — recreates the Noctalia-v4 layout (`panel-legacy`, 380×260).
|
||||||
|
|
||||||
### Legacy mode
|
### Legacy mode
|
||||||
@@ -77,11 +76,10 @@ Legacy mode recreates the original Noctalia v4 screen-toolkit layout:
|
|||||||
- Preview and one-click access to the most recent screenshot or recording.
|
- Preview and one-click access to the most recent screenshot or recording.
|
||||||
- Quick microphone and system audio toggles in the `Record` subpanel.
|
- Quick microphone and system audio toggles in the `Record` subpanel.
|
||||||
|
|
||||||
The widget and shortcut open whichever entry matches the setting; the panel
|
The widget and shortcut open the panel matching the `panel-mode` setting; the
|
||||||
footnote under Settings → Plugins shows all three panels' placement/position
|
panel footnote under Settings → Plugins shows placement/position options.
|
||||||
options.
|
|
||||||
|
|
||||||
Toggle the tools panel (opens the entry matching the `panel-mode` setting):
|
Toggle the tools panel (opens the panel matching `panel-mode`):
|
||||||
|
|
||||||
```sh
|
```sh
|
||||||
noctalia msg plugin alexander/screen-toolkit:service all toggle
|
noctalia msg plugin alexander/screen-toolkit:service all toggle
|
||||||
@@ -93,20 +91,12 @@ For example, bind it to `SUPER+P` in Hyprland:
|
|||||||
bind = SUPER, P, exec, noctalia msg plugin alexander/screen-toolkit:service all toggle
|
bind = SUPER, P, exec, noctalia msg plugin alexander/screen-toolkit:service all toggle
|
||||||
```
|
```
|
||||||
|
|
||||||
Because `toggle` reads the `panel-mode` setting, this single bind works in all three layouts (Full, Compact and Legacy), so there is no need to change the keybind when you switch layouts.
|
Open the standard tools panel:
|
||||||
|
|
||||||
Open the compact tools panel:
|
|
||||||
|
|
||||||
```sh
|
```sh
|
||||||
noctalia msg panel-toggle alexander/screen-toolkit:panel
|
noctalia msg panel-toggle alexander/screen-toolkit:panel
|
||||||
```
|
```
|
||||||
|
|
||||||
Open the full tools panel (the original spacious grid):
|
|
||||||
|
|
||||||
```sh
|
|
||||||
noctalia msg panel-toggle alexander/screen-toolkit:panel-full
|
|
||||||
```
|
|
||||||
|
|
||||||
Open the legacy tools panel (the 4×2 grid with subpanels):
|
Open the legacy tools panel (the 4×2 grid with subpanels):
|
||||||
|
|
||||||
```sh
|
```sh
|
||||||
@@ -178,7 +168,7 @@ All settings live in Settings → Plugins (gear on the plugin's row).
|
|||||||
| `record-skip-confirmation` | `bool` | `false` | Save automatically when a recording ends, skipping the save dialog. |
|
| `record-skip-confirmation` | `bool` | `false` | Save automatically when a recording ends, skipping the save dialog. |
|
||||||
| `record-copy-to-clipboard` | `bool` | `false` | Finalize to MP4 and copy the file URI when recording ends. |
|
| `record-copy-to-clipboard` | `bool` | `false` | Finalize to MP4 and copy the file URI when recording ends. |
|
||||||
| `gif-max-seconds` | `int` | `30` | Cap for GIF recordings (1–600 s). |
|
| `gif-max-seconds` | `int` | `30` | Cap for GIF recordings (1–600 s). |
|
||||||
| `panel-mode` | `select` | `full` | Main panel layout: `full` (spacious original grid, 660×340) or `compact` (dense grid, 380×290) or `legacy` (4×2 legacy grid, 380×260). |
|
| `panel-mode` | `select` | `standard` | Main panel layout: `standard` (dense grid, 380×260) or `legacy` (4×2 legacy grid, 380×260). |
|
||||||
|
|
||||||
## IPC
|
## IPC
|
||||||
|
|
||||||
@@ -208,9 +198,8 @@ noctalia msg plugin alexander/screen-toolkit:service all clearResult
|
|||||||
noctalia msg plugin alexander/screen-toolkit:service all clearHistory
|
noctalia msg plugin alexander/screen-toolkit:service all clearHistory
|
||||||
```
|
```
|
||||||
|
|
||||||
`toggle` opens the tools panel **matching the `panel-mode` setting** — one IPC
|
`toggle` opens the panel matching the `panel-mode` setting. The bar widget and
|
||||||
that works for all three layouts. The bar widget and control-center shortcut use the
|
control-center shortcut use the same logic.
|
||||||
same mode-aware toggle.
|
|
||||||
|
|
||||||
Commands that take a payload:
|
Commands that take a payload:
|
||||||
|
|
||||||
@@ -231,7 +220,7 @@ Summary of every service command:
|
|||||||
|
|
||||||
| Command | Payload | Action |
|
| Command | Payload | Action |
|
||||||
| --- | --- | --- |
|
| --- | --- | --- |
|
||||||
| `toggle` | — | Open/close the tools panel that matches `panel-mode` |
|
| `toggle` | — | Open/close the tools panel (matches `panel-mode`) |
|
||||||
| `colorPicker` | — | Pick a color from the screen (region crosshair) |
|
| `colorPicker` | — | Pick a color from the screen (region crosshair) |
|
||||||
| `ocr` | — | Extract text from a region |
|
| `ocr` | — | Extract text from a region |
|
||||||
| `qr` | — | Decode a QR / barcode from a region |
|
| `qr` | — | Decode a QR / barcode from a region |
|
||||||
@@ -258,13 +247,13 @@ Summary of every service command:
|
|||||||
|
|
||||||
## Notes
|
## Notes
|
||||||
|
|
||||||
- **Three panel entries, one layout setting.** Panel size is host-owned: the host
|
- **Two panel entries, one layout setting.** Panel size is host-owned: the host
|
||||||
sizes each `[[panel]]` entry from its `width`/`height`, and there is no runtime
|
sizes each `[[panel]]` entry from its `width`/`height`, and there is no runtime
|
||||||
resize. So the three layouts are three entries sharing `panel.luau`: `panel-full`
|
resize. So the two layouts are two entries sharing `panel.luau`:
|
||||||
(660×340, the original spacious grid), `panel` (380×290, the compact grid) and `panel-legacy` (380×260, the legacy grid).
|
`panel` (380×260, the standard grid) and `panel-legacy` (380×260, the legacy grid).
|
||||||
The `panel-mode` setting picks which one renders, and `toggle`/widget/shortcut
|
The `panel-mode` setting picks which one `toggle` opens; changing the setting
|
||||||
all open the matching entry. Changing the setting only affects which panel
|
only affects which panel opens next time; an already-open panel keeps its
|
||||||
opens next time; an already-open panel keeps its current size until closed.
|
current size until closed.
|
||||||
- This is a port of the legacy v4
|
- This is a port of the legacy v4
|
||||||
[screen-toolkit](https://github.com/noctalia-dev/legacy-v4-plugins/tree/main/screen-toolkit)
|
[screen-toolkit](https://github.com/noctalia-dev/legacy-v4-plugins/tree/main/screen-toolkit)
|
||||||
plugin. Tools that relied on freeform v4 QML overlays are adapted: region
|
plugin. Tools that relied on freeform v4 QML overlays are adapted: region
|
||||||
|
|||||||
+22
-68
@@ -3,8 +3,8 @@
|
|||||||
--
|
--
|
||||||
-- Thin client for the toolkit. Two layouts are provided, selected by the
|
-- Thin client for the toolkit. Two layouts are provided, selected by the
|
||||||
-- "panel-mode" plugin setting:
|
-- "panel-mode" plugin setting:
|
||||||
-- * compact — a dense grid grouped into tinted sections (default)
|
-- * standard — the default dense grid grouped into tinted sections
|
||||||
-- * full — the original spacious layout with section titles
|
-- * legacy — recreates the Noctalia-v4 layout
|
||||||
-- The panel entry to open (and thus its host-owned size) is chosen by the
|
-- The panel entry to open (and thus its host-owned size) is chosen by the
|
||||||
-- bar [[widget]] / control-center [[shortcut]] from the same setting.
|
-- bar [[widget]] / control-center [[shortcut]] from the same setting.
|
||||||
-- It only dispatches actions to the [[service]] through the "command"
|
-- It only dispatches actions to the [[service]] through the "command"
|
||||||
@@ -43,8 +43,8 @@ end
|
|||||||
|
|
||||||
local function getMode()
|
local function getMode()
|
||||||
local mode = noctalia.getConfig("panel-mode")
|
local mode = noctalia.getConfig("panel-mode")
|
||||||
if mode == "full" or mode == "compact" or mode == "legacy" then return mode end
|
if mode == "standard" or mode == "legacy" then return mode end
|
||||||
return "full"
|
return "standard"
|
||||||
end
|
end
|
||||||
|
|
||||||
-- Capture tools must not see the panel in the frame, so close it first.
|
-- Capture tools must not see the panel in the frame, so close it first.
|
||||||
@@ -78,7 +78,7 @@ end
|
|||||||
|
|
||||||
-- ── Tool data ──────────────────────────────────────────────────────────────
|
-- ── Tool data ──────────────────────────────────────────────────────────────
|
||||||
|
|
||||||
-- For Compact-mode and Full-mode layouts
|
-- For Compact-mode layout
|
||||||
local TOOLS = {
|
local TOOLS = {
|
||||||
{ action = "colorPicker", label_key = "tools.colorpicker", glyph = "palette" },
|
{ action = "colorPicker", label_key = "tools.colorpicker", glyph = "palette" },
|
||||||
{ action = "ocr", label_key = "tools.ocr", glyph = "scan" },
|
{ action = "ocr", label_key = "tools.ocr", glyph = "scan" },
|
||||||
@@ -117,7 +117,7 @@ local TOOLS_LEGACY = {
|
|||||||
|
|
||||||
local function getActiveItems()
|
local function getActiveItems()
|
||||||
local mode = getMode()
|
local mode = getMode()
|
||||||
if mode == "compact" or mode == "full" then
|
if mode == "standard" then
|
||||||
local list = {}
|
local list = {}
|
||||||
for _, t in ipairs(TOOLS) do table.insert(list, { type = "tool", action = t.action }) end
|
for _, t in ipairs(TOOLS) do table.insert(list, { type = "tool", action = t.action }) end
|
||||||
for _, t in ipairs(ANNOTATE_TOOLS) do table.insert(list, { type = "tool", action = t.action }) end
|
for _, t in ipairs(ANNOTATE_TOOLS) do table.insert(list, { type = "tool", action = t.action }) end
|
||||||
@@ -198,7 +198,7 @@ local function headerActions(includeClose)
|
|||||||
end
|
end
|
||||||
if includeClose then
|
if includeClose then
|
||||||
table.insert(actions, ui.button({
|
table.insert(actions, ui.button({
|
||||||
key = "header-close-btn", glyph = "close", onClick = function() panel.close() end,
|
key = "header-close-btn", glyph = "close", width = 24, height = 24, glyphSize = 12, onClick = function() panel.close() end,
|
||||||
}))
|
}))
|
||||||
end
|
end
|
||||||
return ui.row({ gap = 4 }, actions)
|
return ui.row({ gap = 4 }, actions)
|
||||||
@@ -206,7 +206,7 @@ end
|
|||||||
|
|
||||||
-- ── Compact mode ───────────────────────────────────────────────────────────
|
-- ── Compact mode ───────────────────────────────────────────────────────────
|
||||||
|
|
||||||
local function compactHeader()
|
local function standardHeader()
|
||||||
return ui.row({ align = "center", gap = 6 }, {
|
return ui.row({ align = "center", gap = 6 }, {
|
||||||
ui.glyph({ name = "crosshair", size = 16, color = "primary" }),
|
ui.glyph({ name = "crosshair", size = 16, color = "primary" }),
|
||||||
ui.label({ text = tr("panel.title"), flexGrow = 1, fontSize = 16, fontWeight = "bold", color = "on_surface" }),
|
ui.label({ text = tr("panel.title"), flexGrow = 1, fontSize = 16, fontWeight = "bold", color = "on_surface" }),
|
||||||
@@ -227,78 +227,33 @@ local function setHoveredTool(action)
|
|||||||
updateFocusedTool()
|
updateFocusedTool()
|
||||||
end
|
end
|
||||||
|
|
||||||
local function compactTile(t)
|
local function standardTile(t)
|
||||||
local isFocused = (hoveredTool == t.action) or (focusedTool == t.action)
|
local isFocused = (hoveredTool == t.action) or (focusedTool == t.action)
|
||||||
local color = isFocused and "primary" or "on_surface"
|
local color = isFocused and "primary" or "on_surface"
|
||||||
|
local hoverFn = function(state) setHoveredTool((state == "true") and t.action or nil); render() end
|
||||||
|
local clickFn = function() runTool(t.action) end
|
||||||
return ui.column({
|
return ui.column({
|
||||||
key = "tile-" .. t.action, flexGrow = 1, gap = 2, align = "center", paddingV = 4, radius = 8,
|
key = "tile-" .. t.action, flexGrow = 1, gap = 2, align = "center", paddingV = 4, radius = 8,
|
||||||
fill = isFocused and "primary/0.15" or "surface_variant", border = isFocused and "primary" or "surface_variant", borderWidth = isFocused and 1 or 0,
|
|
||||||
onClick = function() runTool(t.action) end,
|
|
||||||
onHover = function(state) setHoveredTool((state == "true") and t.action or nil); render() end,
|
|
||||||
}, {
|
}, {
|
||||||
ui.column({ width = 30, height = 30, radius = 9, fill = isFocused and "primary/0.2" or "on_primary", border = isFocused and "primary" or "on_primary", borderWidth = 1, align = "center", justify = "center" }, {
|
ui.column({ width = 30, height = 30, radius = 9, fill = isFocused and "primary/0.2" or "on_primary", border = isFocused and "primary" or "on_primary", borderWidth = 1, align = "center", justify = "center", onClick = clickFn, onHover = hoverFn }, {
|
||||||
ui.glyph({ name = t.glyph, size = 16, color = color }),
|
ui.glyph({ name = t.glyph, size = 16, color = color }),
|
||||||
}),
|
}),
|
||||||
ui.label({ text = tr(t.label_key), maxWidth = 100, maxLines = 1, textAlign = "center", fontSize = 11, color = color }),
|
ui.label({ text = tr(t.label_key), maxWidth = 100, maxLines = 1, textAlign = "center", fontSize = 11, color = color, onClick = clickFn, onHover = hoverFn }),
|
||||||
})
|
})
|
||||||
end
|
end
|
||||||
|
|
||||||
local function compactToolsRow(tools)
|
local function standardToolsRow(tools)
|
||||||
local row = {}
|
local row = {}
|
||||||
for _, t in ipairs(tools) do row[#row + 1] = compactTile(t) end
|
for _, t in ipairs(tools) do row[#row + 1] = standardTile(t) end
|
||||||
return ui.row({ flexGrow = 1, gap = 2 }, row)
|
return ui.row({ flexGrow = 1, gap = 2 }, row)
|
||||||
end
|
end
|
||||||
|
|
||||||
local function compactSection(tools)
|
local function standardSection(tools)
|
||||||
return ui.column({ gap = 4, paddingV = 8, paddingH = 6, radius = 12, fill = "surface_variant" }, { compactToolsRow(tools) })
|
return ui.column({ gap = 4, paddingV = 4, paddingH = 6, radius = 12, fill = "surface_variant" }, { standardToolsRow(tools) })
|
||||||
end
|
end
|
||||||
|
|
||||||
local function compactGrid()
|
local function standardGrid()
|
||||||
return ui.column({ gap = 6 }, { compactSection(TOOLS), compactSection(ANNOTATE_TOOLS), compactSection(RECORD_TOOLS) })
|
return ui.column({ gap = 6 }, { standardSection(TOOLS), standardSection(ANNOTATE_TOOLS), standardSection(RECORD_TOOLS) })
|
||||||
end
|
|
||||||
|
|
||||||
-- ── Full mode ──────────────────────────────────────────────────────────────
|
|
||||||
|
|
||||||
local function fullHeader()
|
|
||||||
return ui.row({ align = "center", gap = 10 }, {
|
|
||||||
ui.glyph({ name = "crosshair", size = 24, color = "primary" }),
|
|
||||||
ui.label({ text = tr("panel.title"), flexGrow = 1, fontSize = 22, fontWeight = "bold", color = "on_surface" }),
|
|
||||||
headerActions(true),
|
|
||||||
})
|
|
||||||
end
|
|
||||||
|
|
||||||
local function fullTile(t)
|
|
||||||
local isFocused = (hoveredTool == t.action) or (focusedTool == t.action)
|
|
||||||
local color = isFocused and "primary" or "on_surface"
|
|
||||||
return ui.column({
|
|
||||||
key = "tile-" .. t.action, flexGrow = 1, gap = 6, align = "center", paddingV = 6, radius = 12,
|
|
||||||
fill = "surface_variant", borderWidth = 1, border = color == "primary" and "primary" or "outline",
|
|
||||||
onClick = function() runTool(t.action) end,
|
|
||||||
onHover = function(state) setHoveredTool((state == "true") and t.action or nil); render() end,
|
|
||||||
}, {
|
|
||||||
ui.column({ width = 30, height = 30, radius = 9, fill = "on_primary", border = color == "primary" and "primary" or "on_primary", borderWidth = 1, align = "center", justify = "center" }, {
|
|
||||||
ui.glyph({ name = t.glyph, size = 16, color = color }),
|
|
||||||
}),
|
|
||||||
ui.label({ text = tr(t.label_key), maxWidth = 100, maxLines = 1, textAlign = "center", fontSize = 11, color = color }),
|
|
||||||
})
|
|
||||||
end
|
|
||||||
|
|
||||||
local function fullToolsRow(tools)
|
|
||||||
local row = {}
|
|
||||||
for _, t in ipairs(tools) do row[#row + 1] = fullTile(t) end
|
|
||||||
return ui.row({ flexGrow = 1, gap = 6 }, row)
|
|
||||||
end
|
|
||||||
|
|
||||||
local function sectionLabel(text)
|
|
||||||
return ui.label({ text = text, fontSize = 11, fontWeight = "bold", color = "on_surface_variant" })
|
|
||||||
end
|
|
||||||
|
|
||||||
local function fullGrid()
|
|
||||||
return ui.column({ flexGrow = 1, gap = 4, justify = "space_between" }, {
|
|
||||||
sectionLabel(tr("panel.section_capture")), fullToolsRow(TOOLS),
|
|
||||||
sectionLabel(tr("panel.section_annotate")), fullToolsRow(ANNOTATE_TOOLS),
|
|
||||||
sectionLabel(tr("panel.section_record")), fullToolsRow(RECORD_TOOLS),
|
|
||||||
})
|
|
||||||
end
|
end
|
||||||
|
|
||||||
-- ── Legacy mode ────────────────────────────────────────────────────────────
|
-- ── Legacy mode ────────────────────────────────────────────────────────────
|
||||||
@@ -489,7 +444,7 @@ function onKey(chord, pressed)
|
|||||||
elseif key == "down" then
|
elseif key == "down" then
|
||||||
if mode == "legacy" and activeView == "main" then
|
if mode == "legacy" and activeView == "main" then
|
||||||
focusedIndex = focusedIndex <= 4 and (focusedIndex + 4) or (focusedIndex - 4)
|
focusedIndex = focusedIndex <= 4 and (focusedIndex + 4) or (focusedIndex - 4)
|
||||||
elseif mode == "compact" or mode == "full" then
|
elseif mode == "standard" then
|
||||||
focusedIndex = (focusedIndex <= 6 and math.min(7 + math.floor((focusedIndex - 1) / 2), 9)) or (focusedIndex <= 9 and (10 + (focusedIndex - 7)) or ((focusedIndex - 10) + 1))
|
focusedIndex = (focusedIndex <= 6 and math.min(7 + math.floor((focusedIndex - 1) / 2), 9)) or (focusedIndex <= 9 and (10 + (focusedIndex - 7)) or ((focusedIndex - 10) + 1))
|
||||||
else
|
else
|
||||||
focusedIndex = (focusedIndex % #items) + 1
|
focusedIndex = (focusedIndex % #items) + 1
|
||||||
@@ -497,7 +452,7 @@ function onKey(chord, pressed)
|
|||||||
elseif key == "up" then
|
elseif key == "up" then
|
||||||
if mode == "legacy" and activeView == "main" then
|
if mode == "legacy" and activeView == "main" then
|
||||||
focusedIndex = focusedIndex > 4 and (focusedIndex - 4) or (focusedIndex + 4)
|
focusedIndex = focusedIndex > 4 and (focusedIndex - 4) or (focusedIndex + 4)
|
||||||
elseif mode == "compact" or mode == "full" then
|
elseif mode == "standard" then
|
||||||
focusedIndex = (focusedIndex >= 10 and math.min(7 + (focusedIndex - 10), 9)) or (focusedIndex >= 7 and ((focusedIndex - 7) * 2 + 1) or math.min(10 + math.floor((focusedIndex - 1) / 2), 13))
|
focusedIndex = (focusedIndex >= 10 and math.min(7 + (focusedIndex - 10), 9)) or (focusedIndex >= 7 and ((focusedIndex - 7) * 2 + 1) or math.min(10 + math.floor((focusedIndex - 1) / 2), 13))
|
||||||
else
|
else
|
||||||
focusedIndex = (focusedIndex - 2) % #items + 1
|
focusedIndex = (focusedIndex - 2) % #items + 1
|
||||||
@@ -527,8 +482,7 @@ end
|
|||||||
render = function()
|
render = function()
|
||||||
updateFocusedTool()
|
updateFocusedTool()
|
||||||
local mode = getMode()
|
local mode = getMode()
|
||||||
local body = (mode == "full" and ui.column({ flexGrow = 1, gap = 10 }, { fullHeader(), fullGrid() }))
|
local body = (mode == "standard" and ui.column({ flexGrow = 1, gap = 6 }, { standardHeader(), standardGrid() }))
|
||||||
or (mode == "compact" and ui.column({ flexGrow = 1, gap = 6 }, { compactHeader(), compactGrid() }))
|
|
||||||
or (activeView == "annotate" and MarkupSubpanel())
|
or (activeView == "annotate" and MarkupSubpanel())
|
||||||
or (activeView == "record" and RecordSubpanel())
|
or (activeView == "record" and RecordSubpanel())
|
||||||
or ui.column({ flexGrow = 1, gap = 6 }, { legacyHeader(), legacyGrid() })
|
or ui.column({ flexGrow = 1, gap = 6 }, { legacyHeader(), legacyGrid() })
|
||||||
|
|||||||
@@ -8,7 +8,7 @@
|
|||||||
|
|
||||||
id = "alexander/screen-toolkit"
|
id = "alexander/screen-toolkit"
|
||||||
name = "Screen Toolkit"
|
name = "Screen Toolkit"
|
||||||
version = "1.2.0"
|
version = "1.2.1"
|
||||||
plugin_api = 13
|
plugin_api = 13
|
||||||
author = "alexander"
|
author = "alexander"
|
||||||
license = "MIT"
|
license = "MIT"
|
||||||
@@ -45,24 +45,13 @@ dependencies = [
|
|||||||
|
|
||||||
# Main toolkit panel: tool grid + per-tool result views + recording controls.
|
# Main toolkit panel: tool grid + per-tool result views + recording controls.
|
||||||
# Open with: noctalia msg panel-toggle alexander/screen-toolkit:panel
|
# Open with: noctalia msg panel-toggle alexander/screen-toolkit:panel
|
||||||
# Compact layout (default). Full mode uses the "panel-full" entry below; the
|
# Compact layout (default). Full mode was removed; the bar widget / shortcut
|
||||||
# bar widget / shortcut open whichever entry matches the "panel-mode" setting.
|
# open either the standard or legacy entry based on the "panel-mode" setting.
|
||||||
[[panel]]
|
[[panel]]
|
||||||
id = "panel"
|
id = "panel"
|
||||||
entry = "panel.luau"
|
entry = "panel.luau"
|
||||||
width = 380
|
width = 380
|
||||||
height = 290
|
height = 260
|
||||||
placement = "floating"
|
|
||||||
position = "center"
|
|
||||||
keyboard_focus = "on_demand"
|
|
||||||
capture_keys = ["Tab", "Backtab", "Shift+Tab", "Up", "Down", "Left", "Right", "Return", "Enter", "Space", "Escape"]
|
|
||||||
|
|
||||||
# Full-mode layout: the original spacious grid (660x340).
|
|
||||||
[[panel]]
|
|
||||||
id = "panel-full"
|
|
||||||
entry = "panel.luau"
|
|
||||||
width = 660
|
|
||||||
height = 340
|
|
||||||
placement = "floating"
|
placement = "floating"
|
||||||
position = "center"
|
position = "center"
|
||||||
keyboard_focus = "on_demand"
|
keyboard_focus = "on_demand"
|
||||||
@@ -223,10 +212,9 @@ key = "panel-mode"
|
|||||||
type = "select"
|
type = "select"
|
||||||
label_key = "settings.panel_mode.label"
|
label_key = "settings.panel_mode.label"
|
||||||
description_key = "settings.panel_mode.description"
|
description_key = "settings.panel_mode.description"
|
||||||
default = "full"
|
default = "standard"
|
||||||
options = [
|
options = [
|
||||||
{ value = "compact", label_key = "settings.panel_mode.options.compact" },
|
{ value = "standard", label_key = "settings.panel_mode.options.standard" },
|
||||||
{ value = "full", label_key = "settings.panel_mode.options.full" },
|
|
||||||
{ value = "legacy", label_key = "settings.panel_mode.options.legacy" },
|
{ value = "legacy", label_key = "settings.panel_mode.options.legacy" },
|
||||||
]
|
]
|
||||||
|
|
||||||
|
|||||||
@@ -16,7 +16,6 @@
|
|||||||
-- lands in /tmp as MP4; GIF is produced on save via record.sh convert-gif.
|
-- lands in /tmp as MP4; GIF is produced on save via record.sh convert-gif.
|
||||||
|
|
||||||
local PANEL_ID = "alexander/screen-toolkit:panel"
|
local PANEL_ID = "alexander/screen-toolkit:panel"
|
||||||
local FULL_PANEL_ID = "alexander/screen-toolkit:panel-full"
|
|
||||||
local LEGACY_PANEL_ID = "alexander/screen-toolkit:panel-legacy"
|
local LEGACY_PANEL_ID = "alexander/screen-toolkit:panel-legacy"
|
||||||
local RESULT_PANEL_ID = "alexander/screen-toolkit:result"
|
local RESULT_PANEL_ID = "alexander/screen-toolkit:result"
|
||||||
|
|
||||||
@@ -937,7 +936,7 @@ local HANDLERS = {
|
|||||||
setAudioIn = function(payload) overrideAudioIn = (type(payload) == "table" and payload.value or payload) == true end,
|
setAudioIn = function(payload) overrideAudioIn = (type(payload) == "table" and payload.value or payload) == true end,
|
||||||
toggle = function()
|
toggle = function()
|
||||||
local mode = cfg("panel-mode")
|
local mode = cfg("panel-mode")
|
||||||
local id = mode == "full" and FULL_PANEL_ID or (mode == "legacy" and LEGACY_PANEL_ID or PANEL_ID)
|
local id = mode == "legacy" and LEGACY_PANEL_ID or PANEL_ID
|
||||||
noctalia.togglePanel(id)
|
noctalia.togglePanel(id)
|
||||||
end,
|
end,
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -22,8 +22,8 @@ function onClick()
|
|||||||
-- The shortcut tile never stops a recording; it just opens the panel so
|
-- The shortcut tile never stops a recording; it just opens the panel so
|
||||||
-- the stop button (in the panel header, next to the close X) is reachable.
|
-- the stop button (in the panel header, next to the close X) is reachable.
|
||||||
local mode = noctalia.getConfig("panel-mode")
|
local mode = noctalia.getConfig("panel-mode")
|
||||||
local panelId = mode == "full" and "alexander/screen-toolkit:panel-full" or (mode == "legacy" and "alexander/screen-toolkit:panel-legacy" or "alexander/screen-toolkit:panel")
|
local id = (mode == "legacy") and "alexander/screen-toolkit:panel-legacy" or "alexander/screen-toolkit:panel"
|
||||||
noctalia.togglePanel(panelId)
|
noctalia.togglePanel(id)
|
||||||
end
|
end
|
||||||
|
|
||||||
apply()
|
apply()
|
||||||
|
|||||||
Binary file not shown.
|
Before Width: | Height: | Size: 66 KiB After Width: | Height: | Size: 66 KiB |
@@ -98,11 +98,10 @@
|
|||||||
"label": "Hide Cursor in Recordings"
|
"label": "Hide Cursor in Recordings"
|
||||||
},
|
},
|
||||||
"panel_mode": {
|
"panel_mode": {
|
||||||
"description": "Layout of the main panel. Compact is the dense grid; Full is the original spacious grid.",
|
"description": "Layout of the main panel. Standard is the default dense grid; Legacy recreates the Noctalia-v4 layout.",
|
||||||
"label": "Panel Mode",
|
"label": "Panel Mode",
|
||||||
"options": {
|
"options": {
|
||||||
"compact": "Compact",
|
"standard": "Standard",
|
||||||
"full": "Full",
|
|
||||||
"legacy": "Legacy"
|
"legacy": "Legacy"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -56,8 +56,8 @@ function onClick()
|
|||||||
-- The bar icon never stops a recording; it just opens the panel so the
|
-- The bar icon never stops a recording; it just opens the panel so the
|
||||||
-- stop button (in the panel header, next to the close X) is reachable.
|
-- stop button (in the panel header, next to the close X) is reachable.
|
||||||
local mode = noctalia.getConfig("panel-mode")
|
local mode = noctalia.getConfig("panel-mode")
|
||||||
local panelId = mode == "full" and "alexander/screen-toolkit:panel-full" or (mode == "legacy" and "alexander/screen-toolkit:panel-legacy" or "alexander/screen-toolkit:panel")
|
local id = (mode == "legacy") and "alexander/screen-toolkit:panel-legacy" or "alexander/screen-toolkit:panel"
|
||||||
noctalia.togglePanel(panelId)
|
noctalia.togglePanel(id)
|
||||||
end
|
end
|
||||||
|
|
||||||
function onRightClick()
|
function onRightClick()
|
||||||
|
|||||||
Reference in New Issue
Block a user