| import { app } from "../../../scripts/app.js";
|
|
|
| let setting;
|
| const id = "pysssss.SnapToGrid";
|
|
|
|
|
| function wrapCallInSettingCheck(fn) {
|
| if (setting?.value) {
|
| const shift = app.shiftDown;
|
| app.shiftDown = true;
|
| const r = fn();
|
| app.shiftDown = shift;
|
| return r;
|
| }
|
| return fn();
|
| }
|
|
|
| const ext = {
|
| name: id,
|
| init() {
|
| setting = app.ui.settings.addSetting({
|
| id,
|
| name: "🐍 Always snap to grid",
|
| defaultValue: false,
|
| type: "boolean",
|
| onChange(value) {
|
| app.canvas.align_to_grid = value;
|
| },
|
| });
|
|
|
|
|
|
|
| const configure = LGraph.prototype.configure;
|
| LGraph.prototype.configure = function () {
|
|
|
| const drawNode = LGraphCanvas.prototype.drawNode;
|
| LGraphCanvas.prototype.drawNode = function () {
|
| wrapCallInSettingCheck(() => drawNode.apply(this, arguments));
|
| };
|
|
|
|
|
| const onNodeAdded = app.graph.onNodeAdded;
|
| app.graph.onNodeAdded = function (node) {
|
| const r = onNodeAdded?.apply(this, arguments);
|
| const onResize = node.onResize;
|
| node.onResize = function () {
|
| wrapCallInSettingCheck(() => onResize?.apply(this, arguments));
|
| };
|
| return r;
|
| };
|
|
|
|
|
| const groupMove = LGraphGroup.prototype.move;
|
| LGraphGroup.prototype.move = function(deltax, deltay, ignore_nodes) {
|
| wrapCallInSettingCheck(() => groupMove.apply(this, arguments));
|
| }
|
|
|
| const canvasDrawGroups = LGraphCanvas.prototype.drawGroups;
|
| LGraphCanvas.prototype.drawGroups = function (canvas, ctx) {
|
| wrapCallInSettingCheck(() => canvasDrawGroups.apply(this, arguments));
|
| }
|
|
|
| const canvasOnGroupAdd = LGraphCanvas.onGroupAdd;
|
| LGraphCanvas.onGroupAdd = function() {
|
| wrapCallInSettingCheck(() => canvasOnGroupAdd.apply(this, arguments));
|
| }
|
|
|
| return configure.apply(this, arguments);
|
| };
|
| },
|
| };
|
|
|
| app.registerExtension(ext);
|
|
|