feat: Add persistent setting for Force Direct Capture mode to the magnify glass.
This commit is contained in:
@@ -121,7 +121,7 @@ export class ConfigManager {
|
||||
this.toggleGlassPreviewKey = DEFAULT_GLASS_SETTINGS["🔍MagnifyGlass.GlassPreviewToggleHotkey"];
|
||||
this.showCursorPreview = DEFAULT_GLASS_SETTINGS["🔍MagnifyGlass.ShowCursorPreview"];
|
||||
this.forceDirectCaptureKey = DEFAULT_GLASS_SETTINGS["🔍MagnifyGlass.ForceDirectCaptureKey"];
|
||||
this.forceDirectCapture = false; // Runtime flag, not persisted
|
||||
this.forceDirectCapture = DEFAULT_GLASS_SETTINGS["🔍MagnifyGlass.ForceDirectCapture"]; // Initialize from default
|
||||
|
||||
// Alignment adjustment parameters - managed separately
|
||||
this.offsetX = 0;
|
||||
|
||||
@@ -156,9 +156,22 @@ export class EventHandler {
|
||||
// Force Direct Capture Toggle Key
|
||||
if (e.key.toLowerCase() === config.forceDirectCaptureKey &&
|
||||
(!config.altRequired || e.altKey)) {
|
||||
config.forceDirectCapture = !config.forceDirectCapture;
|
||||
this.magnifyGlass.debugger.log(`Force Direct Capture: ${config.forceDirectCapture ? 'ON' : 'OFF'}`);
|
||||
this.magnifyGlass.updateMagnifiedView();
|
||||
// Toggle via settings to sync with UI
|
||||
const currentVal = !!config.forceDirectCapture;
|
||||
// @ts-ignore
|
||||
const app = window.app || (window.scripts && window.scripts.app);
|
||||
if (app && app.ui && app.ui.settings) {
|
||||
app.ui.settings.setSettingValue('🔍MagnifyGlass.ForceDirectCapture', !currentVal);
|
||||
// The setting onChange handler will update config.forceDirectCapture and view
|
||||
} else {
|
||||
// Fallback if app settings not available
|
||||
config.forceDirectCapture = !currentVal;
|
||||
if ((window as any).comfyUIMagnifyGlass) {
|
||||
(window as any).comfyUIMagnifyGlass.updateMagnifiedView();
|
||||
}
|
||||
}
|
||||
|
||||
Logger.info(`Force Direct Capture toggled: ${!currentVal}`);
|
||||
e.preventDefault();
|
||||
}
|
||||
|
||||
|
||||
@@ -37,6 +37,7 @@ export const DEFAULT_GLASS_SETTINGS: GlassSettings = {
|
||||
"🔍MagnifyGlass.ToggleFollowCursorKey": "h",
|
||||
"🔍MagnifyGlass.ShowCursorPreview": false,
|
||||
"🔍MagnifyGlass.ForceDirectCaptureKey": "d",
|
||||
"🔍MagnifyGlass.ForceDirectCapture": false,
|
||||
};
|
||||
|
||||
/**
|
||||
|
||||
@@ -288,6 +288,25 @@ export function registerGlassSettings(magnifyGlass: any): void {
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
app.ui.settings.addSetting({
|
||||
id: "🔍MagnifyGlass.ForceDirectCapture",
|
||||
name: "⚡ Magnify Glass: Force Direct Capture",
|
||||
type: "combo",
|
||||
options: [{ value: true, text: "Yes" }, { value: false, text: "No" }],
|
||||
defaultValue: settings["🔍MagnifyGlass.ForceDirectCapture"] ?? false,
|
||||
tooltip: "Force usage of Direct Capture mode even at low zoom levels.",
|
||||
onChange: (value: any) => {
|
||||
if (magnifyGlass?.config) {
|
||||
// Update runtime flag
|
||||
magnifyGlass.config.forceDirectCapture = !!value;
|
||||
if (magnifyGlass.state.active) {
|
||||
magnifyGlass.updateMagnifiedView();
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
app.ui.settings.addSetting({
|
||||
id: "🔍MagnifyGlass.Action.ResetPosition",
|
||||
name: "🔄 Magnify Glass: Reset Position",
|
||||
@@ -334,7 +353,9 @@ export function registerGlassSettings(magnifyGlass: any): void {
|
||||
app.ui.settings.setSettingValue('🔍MagnifyGlass.ToggleFollowCursorKey', 'h');
|
||||
app.ui.settings.setSettingValue('🔍MagnifyGlass.AltRequired', false);
|
||||
app.ui.settings.setSettingValue('🔍MagnifyGlass.OffsetStep', 5);
|
||||
app.ui.settings.setSettingValue('🔍MagnifyGlass.OffsetStep', 5);
|
||||
app.ui.settings.setSettingValue('🔍MagnifyGlass.ShowCursorPreview', false);
|
||||
app.ui.settings.setSettingValue('🔍MagnifyGlass.ForceDirectCapture', false);
|
||||
|
||||
|
||||
// Panel Defaults
|
||||
|
||||
@@ -406,6 +406,12 @@ export function renderSettingsPanel(container: HTMLElement): void {
|
||||
`When enabled, glass stays visible. Toggle with ${activationKey}`
|
||||
));
|
||||
|
||||
glassSection.body.appendChild(createToggle('Force Direct Capture',
|
||||
getSettingValue('🔍MagnifyGlass.ForceDirectCapture', false),
|
||||
(checked) => setSettingValue('🔍MagnifyGlass.ForceDirectCapture', checked),
|
||||
`Force Direct Capture mode (accurate, pixel-perfect). Hotkey: ${getSettingValue('🔍MagnifyGlass.ForceDirectCaptureKey', 'd').toUpperCase()}`
|
||||
));
|
||||
|
||||
glassSection.body.appendChild(createToggle('Show Mini Cursor',
|
||||
getSettingValue('🔍MagnifyGlass.ShowCursorPreview', false),
|
||||
(checked) => setSettingValue('🔍MagnifyGlass.ShowCursorPreview', checked),
|
||||
|
||||
@@ -85,7 +85,7 @@ class ConfigManager {
|
||||
this.toggleGlassPreviewKey = DEFAULT_GLASS_SETTINGS["🔍MagnifyGlass.GlassPreviewToggleHotkey"];
|
||||
this.showCursorPreview = DEFAULT_GLASS_SETTINGS["🔍MagnifyGlass.ShowCursorPreview"];
|
||||
this.forceDirectCaptureKey = DEFAULT_GLASS_SETTINGS["🔍MagnifyGlass.ForceDirectCaptureKey"];
|
||||
this.forceDirectCapture = false;
|
||||
this.forceDirectCapture = DEFAULT_GLASS_SETTINGS["🔍MagnifyGlass.ForceDirectCapture"];
|
||||
this.offsetX = 0;
|
||||
this.offsetY = 0;
|
||||
}
|
||||
|
||||
File diff suppressed because one or more lines are too long
@@ -118,9 +118,17 @@ class EventHandler {
|
||||
this.magnifyGlass.updateMagnifiedView();
|
||||
}
|
||||
if (e.key.toLowerCase() === config.forceDirectCaptureKey && (!config.altRequired || e.altKey)) {
|
||||
config.forceDirectCapture = !config.forceDirectCapture;
|
||||
this.magnifyGlass.debugger.log(`Force Direct Capture: ${config.forceDirectCapture ? "ON" : "OFF"}`);
|
||||
this.magnifyGlass.updateMagnifiedView();
|
||||
const currentVal = !!config.forceDirectCapture;
|
||||
const app = window.app || window.scripts && window.scripts.app;
|
||||
if (app && app.ui && app.ui.settings) {
|
||||
app.ui.settings.setSettingValue("🔍MagnifyGlass.ForceDirectCapture", !currentVal);
|
||||
} else {
|
||||
config.forceDirectCapture = !currentVal;
|
||||
if (window.comfyUIMagnifyGlass) {
|
||||
window.comfyUIMagnifyGlass.updateMagnifiedView();
|
||||
}
|
||||
}
|
||||
Logger.info(`Force Direct Capture toggled: ${!currentVal}`);
|
||||
e.preventDefault();
|
||||
}
|
||||
if (e.shiftKey && e.key.toLowerCase() === "p") {
|
||||
|
||||
File diff suppressed because one or more lines are too long
@@ -15,7 +15,8 @@ const DEFAULT_GLASS_SETTINGS = {
|
||||
"🔍MagnifyGlass.TextureFiltering": "Linear",
|
||||
"🔍MagnifyGlass.AlwaysActiveMode": true,
|
||||
"🔍MagnifyGlass.ToggleFollowCursorKey": "h",
|
||||
"🔍MagnifyGlass.ShowCursorPreview": false
|
||||
"🔍MagnifyGlass.ShowCursorPreview": false,
|
||||
"🔍MagnifyGlass.ForceDirectCapture": false
|
||||
};
|
||||
const DEFAULT_PANEL_SETTINGS = {
|
||||
"🔍MagnifyGlass.InfoPanelEnabled": true,
|
||||
|
||||
@@ -1 +1 @@
|
||||
{"version":3,"file":"defaults.js","sources":["../../../src/shared/settings/defaults.ts"],"sourcesContent":["/**\n * ComfyUI MagnifyGlass - Default Settings Values\n * \n * Default values for all magnify glass and info panel settings.\n */\n\nimport {\n DEFAULT_GLASS_SIZE,\n DEFAULT_ZOOM_FACTOR,\n DEFAULT_BORDER_WIDTH,\n DEFAULT_BORDER_COLOR,\n DEFAULT_OFFSET_STEP,\n DEFAULT_PANEL_WIDTH,\n DEFAULT_PANEL_MAX_HEIGHT,\n DEFAULT_PANEL_OPACITY\n} from '../constants';\nimport type { GlassSettings, PanelSettings } from './types';\n\n/**\n * Default settings for the magnify glass component.\n */\nexport const DEFAULT_GLASS_SETTINGS: GlassSettings = {\n \"🔍MagnifyGlass.ZoomFactor\": DEFAULT_ZOOM_FACTOR,\n \"🔍MagnifyGlass.GlassSize\": DEFAULT_GLASS_SIZE,\n \"🔍MagnifyGlass.BorderColor\": DEFAULT_BORDER_COLOR,\n \"🔍MagnifyGlass.BorderWidth\": DEFAULT_BORDER_WIDTH,\n \"🔍MagnifyGlass.ActivationKey\": \"x\",\n \"🔍MagnifyGlass.AltRequired\": false,\n \"🔍MagnifyGlass.FollowCursor\": false,\n \"🔍MagnifyGlass.OffsetStep\": DEFAULT_OFFSET_STEP,\n \"🔍MagnifyGlass.GlassPosition\": \"Top-Right\",\n \"🔍MagnifyGlass.ResetKey\": \"o\",\n \"🔍MagnifyGlass.GlassShape\": \"Rounded Square\",\n \"🔍MagnifyGlass.BorderEnabled\": true,\n \"🔍MagnifyGlass.TextureFiltering\": \"Linear\",\n \"🔍MagnifyGlass.AlwaysActiveMode\": true,\n \"🔍MagnifyGlass.ToggleFollowCursorKey\": \"h\",\n \"🔍MagnifyGlass.ShowCursorPreview\": false,\n \"🔍MagnifyGlass.ForceDirectCaptureKey\": \"d\",\n};\n\n/**\n * Default settings for the info panel component.\n */\nexport const DEFAULT_PANEL_SETTINGS: PanelSettings = {\n \"🔍MagnifyGlass.InfoPanelEnabled\": true,\n \"🔍MagnifyGlass.InfoPanelPosition\": \"Bottom\",\n \"🔍MagnifyGlass.InfoPanelWidth\": DEFAULT_PANEL_WIDTH,\n \"🔍MagnifyGlass.InfoPanelOpacity\": DEFAULT_PANEL_OPACITY,\n \"🔍MagnifyGlass.InfoPanelMaxHeight\": DEFAULT_PANEL_MAX_HEIGHT,\n \"🔍MagnifyGlass.InfoPanelAnimations\": false,\n \"🔍MagnifyGlass.ShowInspectorTab\": false,\n \"🔍MagnifyGlass.ToggleHotkey\": \"i\",\n \"🔍MagnifyGlass.GlassPreviewToggleHotkey\": \"g\",\n \"🔍MagnifyGlass.PinPanelHotkey\": \"u\",\n \"🔍MagnifyGlass.ShowHoveringControls\": true,\n \"🔍MagnifyGlass.ControlsPosition\": \"left\",\n \"🔍MagnifyGlass.InfoPanelTextColor\": \"#6b7280\",\n \"🔍MagnifyGlass.InfoPanelAccentColor\": \"#3b82f6\",\n \"🔍MagnifyGlass.InfoPanelFontSize\": 14,\n \"🔍MagnifyGlass.InfoPanelFontFamily\": \"System Default\",\n \"🔍MagnifyGlass.InfoPanelPersist\": false,\n};\n"],"names":[],"mappings":";AAqBO,MAAM,yBAAwC;AAAA,EACjD,6BAA6B;AAAA,EAC7B,4BAA4B;AAAA,EAC5B,8BAA8B;AAAA,EAC9B,8BAA8B;AAAA,EAC9B,gCAAgC;AAAA,EAChC,8BAA8B;AAAA,EAC9B,+BAA+B;AAAA,EAC/B,6BAA6B;AAAA,EAC7B,gCAAgC;AAAA,EAChC,2BAA2B;AAAA,EAC3B,6BAA6B;AAAA,EAC7B,gCAAgC;AAAA,EAChC,mCAAmC;AAAA,EACnC,mCAAmC;AAAA,EACnC,wCAAwC;AAAA,EACxC,oCAAoC;AAExC;AAKO,MAAM,yBAAwC;AAAA,EACjD,mCAAmC;AAAA,EACnC,oCAAoC;AAAA,EACpC,iCAAiC;AAAA,EACjC,mCAAmC;AAAA,EACnC,qCAAqC;AAAA,EACrC,sCAAsC;AAAA,EACtC,mCAAmC;AAAA,EACnC,+BAA+B;AAAA,EAC/B,2CAA2C;AAAA,EAC3C,iCAAiC;AAAA,EACjC,uCAAuC;AAAA,EACvC,mCAAmC;AAAA,EACnC,qCAAqC;AAAA,EACrC,uCAAuC;AAAA,EACvC,oCAAoC;AAAA,EACpC,sCAAsC;AAAA,EACtC,mCAAmC;AACvC;"}
|
||||
{"version":3,"file":"defaults.js","sources":["../../../src/shared/settings/defaults.ts"],"sourcesContent":["/**\n * ComfyUI MagnifyGlass - Default Settings Values\n * \n * Default values for all magnify glass and info panel settings.\n */\n\nimport {\n DEFAULT_GLASS_SIZE,\n DEFAULT_ZOOM_FACTOR,\n DEFAULT_BORDER_WIDTH,\n DEFAULT_BORDER_COLOR,\n DEFAULT_OFFSET_STEP,\n DEFAULT_PANEL_WIDTH,\n DEFAULT_PANEL_MAX_HEIGHT,\n DEFAULT_PANEL_OPACITY\n} from '../constants';\nimport type { GlassSettings, PanelSettings } from './types';\n\n/**\n * Default settings for the magnify glass component.\n */\nexport const DEFAULT_GLASS_SETTINGS: GlassSettings = {\n \"🔍MagnifyGlass.ZoomFactor\": DEFAULT_ZOOM_FACTOR,\n \"🔍MagnifyGlass.GlassSize\": DEFAULT_GLASS_SIZE,\n \"🔍MagnifyGlass.BorderColor\": DEFAULT_BORDER_COLOR,\n \"🔍MagnifyGlass.BorderWidth\": DEFAULT_BORDER_WIDTH,\n \"🔍MagnifyGlass.ActivationKey\": \"x\",\n \"🔍MagnifyGlass.AltRequired\": false,\n \"🔍MagnifyGlass.FollowCursor\": false,\n \"🔍MagnifyGlass.OffsetStep\": DEFAULT_OFFSET_STEP,\n \"🔍MagnifyGlass.GlassPosition\": \"Top-Right\",\n \"🔍MagnifyGlass.ResetKey\": \"o\",\n \"🔍MagnifyGlass.GlassShape\": \"Rounded Square\",\n \"🔍MagnifyGlass.BorderEnabled\": true,\n \"🔍MagnifyGlass.TextureFiltering\": \"Linear\",\n \"🔍MagnifyGlass.AlwaysActiveMode\": true,\n \"🔍MagnifyGlass.ToggleFollowCursorKey\": \"h\",\n \"🔍MagnifyGlass.ShowCursorPreview\": false,\n \"🔍MagnifyGlass.ForceDirectCaptureKey\": \"d\",\n \"🔍MagnifyGlass.ForceDirectCapture\": false,\n};\n\n/**\n * Default settings for the info panel component.\n */\nexport const DEFAULT_PANEL_SETTINGS: PanelSettings = {\n \"🔍MagnifyGlass.InfoPanelEnabled\": true,\n \"🔍MagnifyGlass.InfoPanelPosition\": \"Bottom\",\n \"🔍MagnifyGlass.InfoPanelWidth\": DEFAULT_PANEL_WIDTH,\n \"🔍MagnifyGlass.InfoPanelOpacity\": DEFAULT_PANEL_OPACITY,\n \"🔍MagnifyGlass.InfoPanelMaxHeight\": DEFAULT_PANEL_MAX_HEIGHT,\n \"🔍MagnifyGlass.InfoPanelAnimations\": false,\n \"🔍MagnifyGlass.ShowInspectorTab\": false,\n \"🔍MagnifyGlass.ToggleHotkey\": \"i\",\n \"🔍MagnifyGlass.GlassPreviewToggleHotkey\": \"g\",\n \"🔍MagnifyGlass.PinPanelHotkey\": \"u\",\n \"🔍MagnifyGlass.ShowHoveringControls\": true,\n \"🔍MagnifyGlass.ControlsPosition\": \"left\",\n \"🔍MagnifyGlass.InfoPanelTextColor\": \"#6b7280\",\n \"🔍MagnifyGlass.InfoPanelAccentColor\": \"#3b82f6\",\n \"🔍MagnifyGlass.InfoPanelFontSize\": 14,\n \"🔍MagnifyGlass.InfoPanelFontFamily\": \"System Default\",\n \"🔍MagnifyGlass.InfoPanelPersist\": false,\n};\n"],"names":[],"mappings":";AAqBO,MAAM,yBAAwC;AAAA,EACjD,6BAA6B;AAAA,EAC7B,4BAA4B;AAAA,EAC5B,8BAA8B;AAAA,EAC9B,8BAA8B;AAAA,EAC9B,gCAAgC;AAAA,EAChC,8BAA8B;AAAA,EAC9B,+BAA+B;AAAA,EAC/B,6BAA6B;AAAA,EAC7B,gCAAgC;AAAA,EAChC,2BAA2B;AAAA,EAC3B,6BAA6B;AAAA,EAC7B,gCAAgC;AAAA,EAChC,mCAAmC;AAAA,EACnC,mCAAmC;AAAA,EACnC,wCAAwC;AAAA,EACxC,oCAAoC;AAAA,EAEpC,qCAAqC;AACzC;AAKO,MAAM,yBAAwC;AAAA,EACjD,mCAAmC;AAAA,EACnC,oCAAoC;AAAA,EACpC,iCAAiC;AAAA,EACjC,mCAAmC;AAAA,EACnC,qCAAqC;AAAA,EACrC,sCAAsC;AAAA,EACtC,mCAAmC;AAAA,EACnC,+BAA+B;AAAA,EAC/B,2CAA2C;AAAA,EAC3C,iCAAiC;AAAA,EACjC,uCAAuC;AAAA,EACvC,mCAAmC;AAAA,EACnC,qCAAqC;AAAA,EACrC,uCAAuC;AAAA,EACvC,oCAAoC;AAAA,EACpC,sCAAsC;AAAA,EACtC,mCAAmC;AACvC;"}
|
||||
@@ -252,6 +252,22 @@ function registerGlassSettings(magnifyGlass) {
|
||||
}
|
||||
}
|
||||
});
|
||||
app.ui.settings.addSetting({
|
||||
id: "🔍MagnifyGlass.ForceDirectCapture",
|
||||
name: "⚡ Magnify Glass: Force Direct Capture",
|
||||
type: "combo",
|
||||
options: [{ value: true, text: "Yes" }, { value: false, text: "No" }],
|
||||
defaultValue: settings["🔍MagnifyGlass.ForceDirectCapture"],
|
||||
tooltip: "Force usage of Direct Capture mode even at low zoom levels.",
|
||||
onChange: (value) => {
|
||||
if (magnifyGlass == null ? void 0 : magnifyGlass.config) {
|
||||
magnifyGlass.config.forceDirectCapture = !!value;
|
||||
if (magnifyGlass.state.active) {
|
||||
magnifyGlass.updateMagnifiedView();
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
app.ui.settings.addSetting({
|
||||
id: "🔍MagnifyGlass.Action.ResetPosition",
|
||||
name: "🔄 Magnify Glass: Reset Position",
|
||||
@@ -296,7 +312,9 @@ function registerGlassSettings(magnifyGlass) {
|
||||
app.ui.settings.setSettingValue("🔍MagnifyGlass.ToggleFollowCursorKey", "h");
|
||||
app.ui.settings.setSettingValue("🔍MagnifyGlass.AltRequired", false);
|
||||
app.ui.settings.setSettingValue("🔍MagnifyGlass.OffsetStep", 5);
|
||||
app.ui.settings.setSettingValue("🔍MagnifyGlass.OffsetStep", 5);
|
||||
app.ui.settings.setSettingValue("🔍MagnifyGlass.ShowCursorPreview", false);
|
||||
app.ui.settings.setSettingValue("🔍MagnifyGlass.ForceDirectCapture", false);
|
||||
app.ui.settings.setSettingValue("🔍MagnifyGlass.InfoPanelEnabled", true);
|
||||
app.ui.settings.setSettingValue("🔍MagnifyGlass.InfoPanelPosition", "Bottom");
|
||||
app.ui.settings.setSettingValue("🔍MagnifyGlass.InfoPanelWidth", 300);
|
||||
|
||||
File diff suppressed because one or more lines are too long
@@ -256,6 +256,12 @@ function renderSettingsPanel(container) {
|
||||
(checked) => setSettingValue("🔍MagnifyGlass.AlwaysActiveMode", checked),
|
||||
`When enabled, glass stays visible. Toggle with ${activationKey}`
|
||||
));
|
||||
glassSection.body.appendChild(createToggle(
|
||||
"Force Direct Capture",
|
||||
getSettingValue("🔍MagnifyGlass.ForceDirectCapture", false),
|
||||
(checked) => setSettingValue("🔍MagnifyGlass.ForceDirectCapture", checked),
|
||||
`Force Direct Capture mode (accurate, pixel-perfect). Hotkey: ${getSettingValue("🔍MagnifyGlass.ForceDirectCaptureKey", "d").toUpperCase()}`
|
||||
));
|
||||
glassSection.body.appendChild(createToggle(
|
||||
"Show Mini Cursor",
|
||||
getSettingValue("🔍MagnifyGlass.ShowCursorPreview", false),
|
||||
|
||||
File diff suppressed because one or more lines are too long
Reference in New Issue
Block a user