Skip to content

Commit 75773af

Browse files
Added option to snap new nodes (created using double click) to the grid
1 parent aeeb42c commit 75773af

File tree

2 files changed

+22
-1
lines changed

2 files changed

+22
-1
lines changed

src/canvas-extensions/better-default-settings-canvas-extension.ts

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -54,12 +54,17 @@ export default class BetterDefaultSettingsCanvasExtension extends CanvasExtensi
5454
if (event.defaultPrevented || event.target !== canvas.wrapperEl || canvas.isDragging || canvas.readonly) return
5555
preventDefault.value = true
5656

57-
var pos = canvas.posFromEvt(event)
57+
let pos = canvas.posFromEvt(event)
5858

5959
switch (this.plugin.settings.getSetting('nodeTypeOnDoubleClick')) {
6060
case 'file':
6161
const file = await new FileSelectModal(this.plugin.app, undefined, true).awaitInput()
6262

63+
if (this.plugin.settings.getSetting('alignDoubleClickedNodeToGrid')) pos = {
64+
x: Math.round((pos.x - (canvas.config.defaultFileNodeDimensions.width / 2)) / 20) * 20 + (canvas.config.defaultFileNodeDimensions.width / 2),
65+
y: Math.round((pos.y - (canvas.config.defaultFileNodeDimensions.height / 2)) / 20) * 20 + (canvas.config.defaultFileNodeDimensions.height / 2)
66+
}
67+
6368
canvas.createFileNode({
6469
pos: pos,
6570
position: 'center',
@@ -68,6 +73,11 @@ export default class BetterDefaultSettingsCanvasExtension extends CanvasExtensi
6873

6974
break
7075
default:
76+
if (this.plugin.settings.getSetting('alignDoubleClickedNodeToGrid')) pos = {
77+
x: Math.round((pos.x - (canvas.config.defaultTextNodeDimensions.width / 2)) / 20) * 20 + (canvas.config.defaultTextNodeDimensions.width / 2),
78+
y: Math.round((pos.y - (canvas.config.defaultTextNodeDimensions.height / 2)) / 20) * 20 + (canvas.config.defaultTextNodeDimensions.height / 2)
79+
}
80+
7181
canvas.createTextNode({
7282
pos: pos,
7383
position: 'center'

src/settings.ts

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ const NODE_TYPES_ON_DOUBLE_CLICK = {
99

1010
export interface AdvancedCanvasPluginSettings {
1111
nodeTypeOnDoubleClick: string
12+
alignDoubleClickedNodeToGrid: boolean
1213
defaultTextNodeWidth: number
1314
defaultTextNodeHeight: number
1415
defaultFileNodeWidth: number
@@ -60,6 +61,7 @@ export interface AdvancedCanvasPluginSettings {
6061

6162
export const DEFAULT_SETTINGS: Partial<AdvancedCanvasPluginSettings> = {
6263
nodeTypeOnDoubleClick: Object.keys(NODE_TYPES_ON_DOUBLE_CLICK).first(),
64+
alignDoubleClickedNodeToGrid: true,
6365
defaultTextNodeWidth: 260,
6466
defaultTextNodeHeight: 60,
6567
defaultFileNodeWidth: 400,
@@ -171,6 +173,15 @@ export class AdvancedCanvasPluginSettingTab extends PluginSettingTab {
171173
.setValue(this.settingsManager.getSetting('nodeTypeOnDoubleClick'))
172174
.onChange(async (value) => await this.settingsManager.setSetting({ nodeTypeOnDoubleClick: value }))
173175
)
176+
177+
new Setting(containerEl)
178+
.setName("Align node, created by double click, to grid")
179+
.setDesc("When enabled, a node created by double clicking will be aligned to the grid.")
180+
.addToggle((toggle) =>
181+
toggle
182+
.setValue(this.settingsManager.getSetting('alignDoubleClickedNodeToGrid'))
183+
.onChange(async (value) => await this.settingsManager.setSetting({ alignDoubleClickedNodeToGrid: value }))
184+
)
174185

175186
new Setting(containerEl)
176187
.setName("Default text node width")

0 commit comments

Comments
 (0)