diff --git a/pd/nw/dialog_prefs.html b/pd/nw/dialog_prefs.html index c1f5c934c2dd76c8333a8c5b3923cd38d3bf4f5a..e4abcae8da07a04db321bc1eb1ee69b56990bc64 100644 --- a/pd/nw/dialog_prefs.html +++ b/pd/nw/dialog_prefs.html @@ -1036,9 +1036,29 @@ function autopatch_yoffset_toggle(checked) { function gui_prefs_callback(name, show_grid, save_zoom, browser_doc, browser_path, browser_init, autopatch_yoffset) { - var s = document.getElementById("gui_preset"), - i; - for (i = 0; i < s.options.length; i++) { + var s = document.getElementById("gui_preset"); + + // ag: scan the css subdir for user-defined styles + var predefined = // built-in styles + [ "c64.css", "default.css", "dejavu.css", "extended.css", + "footgun.css", "inverted.css", "solarized.css", + "solarized_inverted.css", "strongbad.css", "subdued.css", + "vanilla.css", "vanilla_inverted.css"]; + var fs = require('fs'); + var base = process.platform === "darwin" ? pdgui.get_lib_dir() : "."; + var files = fs.readdirSync(base + "/css/"); + files.forEach(file => { + var pos = file.lastIndexOf('.'); + var ext = file.substr(pos); + if (ext === ".css" && predefined.indexOf(file) === -1) { + var base = file.substr(0, pos); + var option = document.createElement("option"); + option.text = base; + s.add(option); + } + }); + + for (var i = 0; i < s.options.length; i++) { if (s.options[i].value.toLowerCase() === name.toLowerCase()) { s.selectedIndex = i; break; diff --git a/pd/nw/pdgui.js b/pd/nw/pdgui.js index ffcc1f52684b948813611fd20fc5fe0b02d15dc9..3e176ce5e7d4285a3740b33115727568a95cfe9e 100644 --- a/pd/nw/pdgui.js +++ b/pd/nw/pdgui.js @@ -5973,7 +5973,12 @@ var skin = exports.skin = (function () { return dir + preset + ".css"; }, set: function (name) { - preset = name; + // ag: if the preset doesn't exist (e.g., user preset that + // has disappeared), just stick to the default + var base = process.platform === "darwin" ? (lib_dir + "/") : ""; + if (fs.existsSync(base + dir + name + ".css")) { + preset = name; + } for (id in patchwin) { if (patchwin.hasOwnProperty(id) && patchwin[id]) { set_css(patchwin[id].window);