Best posts made by tiesvdam
-
RE: Connect Button that moves LAF to a "Script fx reverb" effect
@HISEnberg said in Connect Button that moves LAF to a "Script fx reverb" effect:
@tiesvdam I think this one:
Probably this too:
It worked!!! youre a f*cking legend
Latest posts made by tiesvdam
-
Trying to make custom button with LAF
Good day, I've been working for a few hours today on adjusting a knob with LAF. I'm not getting any errors, but I don't see the custom LAF being applied to my knobs. What am I doing wrong? I translated this script from a panel that I had customized, but I got the tip to actually do it via a knob.
//CUSTOM KNOBS MET LAFO (Look And Feel Overhaul) const var Envelope1 = Synth.getModulator("AHDSR Envelope1"); // Registreer de Look And Feel Laf.registerFunction("customRotary", function(g, obj) { Console.print("LAF applied to " + obj.text); g.setGradientFill([Colours.withAlpha(0xFF636070, 1), 25, 25, 0xFF0b0b0d, 0, 0]); g.fillEllipse([7.5, 7.5, obj.area[2] - 15, obj.area[3] - 15]); g.setGradientFill([Colours.withAlpha(0xFF636070, 1), 0, 0, 0xFF0b0b0d, 100, 100]); g.drawEllipse([7.5, 7.5, obj.area[2] - 15, obj.area[3] - 15], 1); var normalizedValue = (obj.value - obj.min) / (obj.max - obj.min); var maxRot = Math.toRadians(270); var rotation = normalizedValue * maxRot; var rotationArea = [obj.area[2] / 2, obj.area[3] / 2]; g.rotate(rotation, rotationArea); g.setColour(0xFF90929A); g.fillEllipse([13, 25, 2, 2]); g.rotate(-1 * rotation, rotationArea); var startOffset = 2.5; var arcThickness = 0.03; var arcWidth = 1.0 - 2.0 * arcThickness; var p = Content.createPath(); var endOffset = -startOffset + 2.0 * startOffset * normalizedValue; endOffset = Math.max(endOffset, -startOffset + 0.1); p.addArc([arcThickness, arcThickness, arcWidth, arcWidth], -startOffset, endOffset); g.setColour(Colours.white); var backgroundArc = Content.createPath(); backgroundArc.addArc([arcThickness, arcThickness, arcWidth, arcWidth], -2.5, 2.5); g.setColour(0xFF333333); g.drawPath(backgroundArc, backgroundArc.getBounds(obj.area[2]), obj.area[2] * arcThickness); g.setColour(0xFFFF5400); g.drawPath(p, p.getBounds(obj.area[2]), obj.area[2] * arcThickness); }); // Create Knob + Label in one widget inline function knobPanel(name, x, y, obj) { local control = Content.getComponent(name); if (!control) { control = Content.addKnob(name, x, y); Console.print(name + " created"); } if (!control) { Console.print("Error: " + name + " could not be created"); return; } Content.setPropertiesFromJSON(name, { "width": obj.width, "height": obj.height, "min": obj.min, "max": obj.max, "mode": "Rotary", "saveInPreset": true, "text": name, "popupText": true }); // Force LAF application control.setLocalLookAndFeel("customRotary"); return control; } // Knoppen callbacks inline function onknb1Control(component, value) { Envelope1.setAttribute(Envelope1.Attack, value); } Content.getComponent("firstKnob").setControlCallback(onknb1Control); inline function onknb2Control(component, value) { Envelope1.setAttribute(Envelope1.Sustain, value); } Content.getComponent("sustainKnob").setControlCallback(onknb2Control); inline function onknb3Control(component, value) { Envelope1.setAttribute(Envelope1.Decay, value); } Content.getComponent("decayKnob").setControlCallback(onknb3Control); inline function onknb4Control(component, value) { Envelope1.setAttribute(Envelope1.Release, value); } Content.getComponent("releaseKnob").setControlCallback(onknb4Control); const var rc20LFO = Synth.getModulator("RC20"); inline function onknb5Control(component, value) { rc20LFO.setIntensity(value); } Content.getComponent("rc20").setControlCallback(onknb5Control);
-
Clicking area problems with Preset browser
Hello,
I have a problem with my clicking area's of my custom preset browser
re
//presetbrowser custom Engine.loadFontAs("{PROJECT_FOLDER}Fonts/font1.otf", "regular"); Engine.loadFontAs("{PROJECT_FOLDER}Fonts/fontbold.otf", "bold"); namespace PresetBrowser { const presetBrowserLaf = Content.createLocalLookAndFeel(); //! fltPresetBrowser const fltPresetBrowser = Content.getComponent("fltPresetbrowser") fltPresetBrowser.setLocalLookAndFeel(presetBrowserLaf); //! LAF Function presetBrowserLaf.registerFunction("drawPresetBrowserBackground", function(g, obj) { g.fillAll(obj.bgColour); }); presetBrowserLaf.registerFunction("drawPresetBrowserColumnBackground", function(g, obj) { var a = obj.area; // Change name of columns if (obj.text == "Select a Column") obj.text = "Select a Preset"; g.setGradientFill([Colours.fromVec4([0.043, 0.043, 0.051, 1.0]), 100, 350, Colours.fromVec4([0.239, 0.231, 0.271, 1.0]), 100, 70, false]); g.fillRoundedRectangle(a, 0); //select preset g.setColour(obj.itemColour); g.setFont("bold", 11); g.drawAlignedText(obj.text, a, "centred"); }); // Draw list items presetBrowserLaf.registerFunction("drawPresetBrowserListItem", function(g, obj) { var a = obj.area; if (obj.selected) //balk achter preset { g.setColour(Colours.withAlpha(obj.itemColour, 0.1)); g.fillRoundedRectangle(a, 0); } if (obj.selected && obj.columnIndex != 2) { g.setColour(Colours.withAlpha(0xFFFF5800, 1)); g.fillEllipse([a[0] + 7, a[1] + a[3] / 2 - 6 / 2, 6, 6]); g.drawDropShadow([a[0] + 7, a[1] + a[3] / 2 - 6 / 2, 6, 6],0XFFFF5800, 5); } g.setColour(Colours.withAlpha(obj.textColour, 1.0)); g.setFont("regular", 19); if (obj.columnIndex != 2) g.drawAlignedText(obj.text, [a[0] + 19, a[1], a[2], a[3]], "left"); else g.drawAlignedText(obj.text, [a[0] + 25, a[1], a[2], a[3]], "left"); }); // Create icons for the preset browser presetBrowserLaf.registerFunction("createPresetBrowserIcons", function(id) { var pathData = "284.t0F..ZBQr8NjCwV4LTBQCReiCIVzkFBQyVugCMIZaPzqek3P9eRFDQxJRNjXMkAFDsgSVNjNbeAQFbDmCMnxYPjRlO5Ph8poaPzE8r5PSU3GDM3AzND..ZBQBqYuCIFq50BQCd.sCwLVwPzE8r5P7UyLDoj4iNjXEORMD0eQbNzMmSCQa3jkCE.1yPDIqH4Phw1kwPzqek3Ptn0JDoJ8FNjFyeBQ5MeiCMVa..nID0gdBOjX..3ADIefYNTgzyAQo+vbCgNIlPD.xo3Pw02TlPz5Gq3P..nIDMvHKNDa..nIDMvHKNDa5aqIDYVsJNDaXrsIDkvbJNDaXrsIDkvbJNjX1q.LDU7ByMD..VDQoCXlCA.flPTG5I7PiUF"; var offIcon = Content.createPath(); offIcon.loadFromData(pathData); pathData = "62.t0F..ZBQ8p7hCIFRa8BQzqxbCA.fEQTKxk4P..nIDgnZBOjX..3ADMybYNDtj1AQzqxbCA.flPTuJu3PiUF"; var onIcon = Content.createPath(); onIcon.loadFromData(pathData); if (id == "favorite_on") return onIcon; if (id == "favorite_off") return offIcon; }); //search bar presetBrowserLaf.registerFunction("drawPresetBrowserSearchBar", function(g, obj) { var a = obj.area; var pathData = "2973.t0lB.TCQmiBrCwlB.TCQmiBrCw1B3VCQzcgqCwlkhYCQFQ+pCw1O+aCQ7BbpCwFnMdCQ732oCw1WMfCQ63RoCwlJ9gCQxHsnCwVteiCQjtFnCwFywjCQZvemCwVLzkCQiT3lCwFullCQSgPlCwFSImCQBcnkCwVyamCQIN.kCwVLdmCQD6WjCwFdPmCQQpuiCwlpxlCQKhGiCw11DlCQMoehCw1IGkCQvE3gCwls4iCQH9PgCwltbhCQlXpfCwlavfCQTaDfCwFF0dCQwX9dCwVAqbCQfi0cCwFjRZCQchtbCwFFrWCQ.goaCwlB3TCQLplZCwF11QCQsHlYCwF+nNCQ3FnXCwV+NKCQntrWCwFYoGCQcIzVCwVw3CCQZf9UCwVt8+BQE7KUCwl336BQhjbTCwl4p2BQWgvSCwlbTyBQl4GSCwVN1tBQwyhRCwF7PpBQyUARCwVUkkBQAkiQCwlIzfBQNlIQCw1I9aBQhcyPCw1GDWBQfNgPCwV0FRBQD7RPCwlEGMBQfnHPCwlqEHBQbUBPCwlZCCBQ5C.PCwlFA9AQPzAPCwlh+3AQMlGPCwFh+yAQ1XQPCw13AuAQkJePCwFYGpAQP4vPCwF0PkAQ9gFQCwF+dfAQUAfQCwlmxaAQMS8QCw1dLWAQ7RdRCwlSsRAQP6BSCwFzUNAQQFqSCw1rFJAQksVTCwVo.FAQLpEUCwlSDBAQmz2UCw1SR9.QzDsVCwlPq5.QQRkWCwFuO2.Q.TfXCwlR.z.Qi.dYCw1a8v.QCNdZCwVpGt.QNxfaCw1Zeq.QbhkbCw1HEo.QrSrcCwVL4l.Qp5zdCwF76j.QtK+eCwVrMi.QfckfCwFttg.QM9KgCwFQef.QxAygCw1gee.QAhZhCwlpud.QkXBiCwFyOd.QEepiCwF..d.QHuRjCwVT.d.QPB6jCw1uPd.QCRikCwFPwd.QCXKlCwluge.Q1MylCwlFhf.QDsZmCwFKxg.QYuAnCw1uQi.QlNnnCwFl.k.QeDNoCwla9l.QBKyoCw17Jo.QTbWpCwlxkq.Qfx5pCwljNt.Q8GcqCwl2Dw.QKW9qCwlNHz.Q1ZdrCwVJX2.Q1M8rCwlIz5.QOqZsCwFoa9.QTt1sCwlCNBAQlRQtCw1xJFAQ0SptCw1MQJAQ.tAuCwFqfNAQXcWuCw1d3RAQddquCwV7WWAQFt8uCw1U9aAQUINvCwF7pfAQhsbvCw19bkAQXXovCwlsSpAQ1GzvCwFVNuAQN57vCwlFLzAQFtCwCwlKL4AQXhHwCwlxM9AQRVKwCwlGPCBQXILwCwVWRHBQh6JwCwFtSMBQ7rGwCwlXSRBQGdBwCwliPWBQ4O6vCwlbJbBQbCxvCwFQ.gBQN5lvCwlOwkBQ.1YvCwVmbpBQ53JvCwlnAuBQRE5uCwVjeyBQ3cmuCwlr02BQnESuCwVUC7BQx+7tCwlFV9BQC6utCwlFV9BQB6utCwFGU9BQB6utCEmv.+BQOW2tCUk8uPD7hu6Prgc39PT84l8Prgc39PT84l8PrYbA+PTW9m8Pr80J+PDF+n8PronT+PD+6o8Pr4xd+Pj3zp8PrESo+Pjooq8PrgGz+PzIZr8PrgN++PDQFs8PrMlJ.Qj3ss8Pr4LV.QD5Pt8Prk.h.QjOut8Prg+s.QzzHu8ProG5.QDkcu8PrIWFAQjcsu8PrErRAQja3u8PrUDeAQzb9u8PrAdqAQDg+u8PrI22AQDn6u8PrwMDBQDxxu8PrwePBQj.ku8PrYqbBQDVRu8PrgtnBQT05t8PrQmzBQDhdt8PrwS.CQDg8s8PrIxKCQT2Ws8Prg.WCQDqsr8PrI8gCQzB+q8PrQlrCQDFLq8PrI51CQD8Tp8PrI2.DQzvYo8PrsaJDQjpZn8PrQlSDQjzWm8PrYUbDQDYQl8PromjDQziGk8ProarDQjf5i8PrQvyDQjaph8PrUj5DQjgWg8Pro1.EQj+Af8PrQlFEQzCpd8PrQxKEQD7Oc8Pr0YPEQz1ya8PrMbTEQjBVZ8Prw3WEQjt1X8Pr4tZEQDJVW8PrM9bEQjjzU8PrQldEQjMRT8Pr8leEQzTuR8PrA.fEQDJLQ8PrYweEQD8nO8PrE6dEQD9EN8PrQccEQjbiL8PrMXaEQjnAK8PrMrXEQjwfI8ProYUEQDGAH8PrIgQEQT3hF8PrQCMEQjTFE8Prs.HEQjpqC8PrUZBEQjHSB8PrAQ7DQD87.8Prwk0DQDVo+7PrgYtDQDfX97PrkslDQjnJ87PrIidDQT7+67PrMZWDQjVD67PrMZWDQjVD67PrAhb0PTUsC6PrAhb0PTUsC6ProlS0PjenB6PrgPJ0PjSmA6PrAg.0PD7o.6Pro..0Pj5l.6Pro..0Pj5l.6Pi01++WCQI2kjCw1++WCQJ2kjCwVK4WCQz7GkCwFujWCQB8okCwltBWCQVxKlCwlNSVCQWWslCwlWVUCQslNmCwlRLTCQCaumCwFL0RCQJuOnCwVQQQCQ1cunCwlxfOCQDhNoCwFBjMCQy1roCwlSaKCQOWJpCw17FICQp9lpCw1UmFCQcnBqCw127CCQOPcqCwV9GACQtw1qCwFFI9BQ1HOrCw1s.6BQrQlrCwlUu2BQjH7rCwldUzBQ9oPsCw1qyvBQoxisCwlgJsBQfe0sCwFkZoBQssEtCwlbjkBQrZTtCwlungBQEjgtCwFFncBQxGstCwlIiYBQ7C2tCwliZUBQ9V+tCwV9NQBQh+EuCw1DAMBQl7JuCwFhwHBQVMNuCwlAgDBQPwOuCwFOP.BQEnOuCw10+6AQ1wMuCw1gv2AQ1NJuCwF9hyAQq+DuCwF1WuAQHE9tCwVzOqAQTf0tCwFiKmAQnRqtCwFrKiAQscetCwV3PeAQaCRtCwluaaAQ5ECtCwV4rWAQmmxsCw16DTAQHqfsCwFbjPAQTSMsCw18KMAQSi3rCwFD7IAQYdhrCw1O0FAQHHKrCw1.3CAQNjxqCwl0DAAQn1XqCwlJb9.QbC9pCw1Z96.Q9NhpCwV+q4.QncEpCwFPk2.QDzmoCwVhp0.Q9VIoCwlI7y.QQKpnCw1WZx.Q6UJnCwVbEw.QA7omCw1j8u.QvBImCw17Bu.QYumlCw1sUt.QPGFlCw190s.QsOjkCwF0is.QLNBkCwFGes.QI2kjCwFGes.QI2kjCwFGes.QI2kjCwV6ks.QdwCjCwlW5s.QPwgiCwVXbt.Q56+hCwF3Ku.Q4VdhCwVuHv.QhG8gCwFzRw.QLSbgCwF6ox.QD+6fCwl0Mz.QXPbfCwVT90.QUX5eCwFE62.Qzt8dCwlyC5.Q6sBdCwVJX7.QFeIcCwlw29.QdKRbCwlOhAAQ56baCwVIWDAQ73oZCwlAVGAQrJ4YCw1YdJAQ.4JYCwVxuMAQOKeXCwloIQAQaH1WCwVbqTAQF2OWCwllTXAQYcrVCwViDbAQ9.LVCw1q5eAQAmtUCwFY1iAQPTTUCwlB2mAQ2L8TCwF+6qAQjToTCwVkDvAQhtXTCwlJPzAQZcKTCwVDd3AQTiATCwFms7AQ2A6SCwlG9.BQD52SCwV5NEBQbL3SCwlSeIBQ636SCwlmtMBQ89BTCwVK7QBQXcMTCwlSGVBQgRaTCwVUOZBQJbrTCwllSdBQj2.UCwlcShBQdgXUCwlQNlBQFVyUCwFZCpBQHQQVCwVPxsBQyMxVCw1MZwBQ0FVWCwls5zBQe17WCw1KS3BQjVlXCwlEi6BQbfRYCwl4o9BQAMAZCwlHmACQ2TxZCw1SZDCQFvkaCwl9BGCQeVabCwVtfICQe+RcCwVIyKCQKhLdCwl34MCQV0GeCwFlzOCQvWBfCwl9hQCQdigfCwVvDSCQ0XAgCwlqYTCQuxggCw1hgUCQArBhCwlJbVCQY+ihCwlYIWCQhmEiCwVHoWCQEemiCw1Q6WCQlfIjCw1++WCQI2kjCw1++WCQI2kjCMVY"; var icon = Content.createPath(); icon.loadFromData(pathData); g.setColour(Colours.withAlpha(0xFF1B1A1F, 0.2)); g.fillRoundedRectangle(a, 0); g.setColour(Colours.withAlpha(obj.textColour, 0.5)); g.fillPath(icon, [a[0] + 5, a[1] + a[3] / 2 - 13 / 2, 13, 13]); }); //draw scrollbar presetBrowserLaf.registerFunction("drawScrollbar", function(g, obj) { var a = obj.area; a[0] = a[2] - 5; a[2] = 5; var ha = obj.handle; ha[0] = ha[2] - 5; ha[2] = 5; g.setColour(Colours.withAlpha(0xFF393841, 0.4)); g.fillRoundedRectangle(a, 0); g.setColour(Colours.withAlpha(0xFFA7A4C0, 0.4 + 0.5 + obj.over * 0.3)); g.fillRoundedRectangle(ha, 2); }); presetBrowserLaf.registerFunction("drawDialogButton", function(g, obj) { drawMoreAndSaveButtons(); var a = obj.area; var icons = {}; }); //functions inline function drawMoreAndSaveButtons() { local buttonNames = ["More", "Save Preset"]; if(!buttonNames.contains(obj.text)) return; local a = obj.area; local icons = {}; local pathData = "5225.t0F.fHCQ..vWCwF.foBQ..vWCwF.foBQ..rgCwF.fHCQ..rgCMVa..UCDA...MDaPUiNDA...MDaPUiNDA...MDat9mNDM6A.MDabmrNDIjG.MDaoNwND44P.MDany0ND85c.MDaoU5NDUkt.MDa8y9NDM1BAMDa2MCODcpZAMDaphGODM90AMDaowKODIsTBMDaJ5OODQx1BMDag6SODQHbCMDaF0WODAoDDMDaPlaODINvDMDaZNeODkvdEMDa8rhOD8HPFMDaUCkODsdzFMDaUCkODwdzFMDaCx7PDwJubMDaCx7PDwJubMDaD++PDgEkcMDaCACQD8ecdMDag2EQD8PXeMDa.hHQDIOUfMDaE.KQD0PTgMDaXQMQD4KUhMDafUOQD40WiMDaHLQQDQDbjMDa+zRQDArgkMDaxOTQDEhnlMDaSbUQDAavmMDaVZVQDgK4nMDaxIWQDsmBpMDadpWQDAjLqMDaV7WQDgzVrMDa..XQDArJsMDa..XQDArJsMDa..XQDA.XPODa..XQDA.XPODaj3WQDwK8PODaQhWQDoQhQODaJ8VQDoKGRODaWIVQD4yqRODa9FUQDYDPSODaJ1SQDg2ySODaJWRQDYGWTODaJpPQDgt4TODaduNQDUmaUODaXmLQDUr7UODaNRJQDQ3bVODaZvGQDAF7VODaSBEQDgPZWODaVHBQDAS2WODaAC+PD4HSXODayx6PDossXODaNX3PD87FYODa0yzPD4xdYODaLFwPDkK0YODa3OsPDgCJZODaiQoPDMWcZODazKkPDsCuZODaU+fPDIF+ZODavrbPD8aMaODazTXPD4BZaODaJ3SPDw3jaODahWOPDA7saODapyJPDIK0aODaOMFPDAk5aODaBkAPDwH9aODax67ODw0+aODa..6ODA..bODa..6ODA..bODa..UCDA..bODa..UCDA..bODahVPCDgD+aODaysKCDIR7aODaiFGCDUo2aODaggBCD4JwaODac+8BDw2naODaDg4BDQwdaODaEG0BDM4RaODaLxvBDQQEaODaFirBDs60ZODadZnBDA6jZODa9XjBD4QRZODaPefBDMC9YODa7sbBDYRnYODanEYBDwBQYODa4lUBDIX3XODaSRRBDYVdXODaXHOBDwACXODaoILBDodlWODaiVIBDcwHWODajuFBDA+oVODaFUDBDYLJVODahGBBDcdoUODaOG.BDg5GUODafT9ADAlkTODaou7ADYlBTODa5X6ADMAeSODafP5ADI75RODamV4ADIcVRODaXq3ADwowQODa5N3ADInLQODaRA3ADEdmPODa..3ADA.XPODa..3ADA.XPODa..3ADA.PWMDa..3ADA.PWMDabG3ADYnEVMDauc3ADob6TMDa0B4ADonwSMDao14ADQXnRMDaB45ADI2eQMDa1I7AD8PXPMDa2n8ADEwQOMDa1U+ADwhLNMDaiPABDMwHMMDaoXCBDMmFLMDaxsEBDQOFKMDamOHBDwyGJMDat8JBDsdKIMDaq2MBDsYQHMDa.8PBDAtYGMDaNMTBDkjjFMDaymWBD4ExEMDaLLaBDAZBEMDa14dBDonUDMDaIvhBD03qCMDaetlBDYQECMDaNzpBDY3gBMDas.uBDgyABMDaQSyBD4GkAMDaOq2BDI5KAMDa3G7BDUN1.MDafn.CD0Gj.MDaYLECDkoU.MDayxICD40J.MDa.aNCDgtC.MDaQDSCDkT..MDa..UCDA...MDa..UCDA...MTa..1BDA.PWMDa..1BDA.XPODa..1BDA.XPODaeB1BDQYjPODa5I1BDkvvPODaRV1BD4C8PODaim1BDQQIQODaq81BD0VUQODamX2BDgRgQODaR32BDgBsQODamb3BD4j3QODagE4BD02CRODa3x4BDg4NRODalj5BDInYRODahZ6BDABjRODakT7BDkEtRODajR8BDEw2RODaUT9BDACASODauY+BD44ISODalh.CDYTRSODautACDAQZSODa78BCDktgSODaCPDCD4qnSODa0jECDwGuSODaD7FCDQA0SODajUHCDYW5SODaFwICDUI+SODaZNKCDUVCTODaRsLCDo8FTODafMNCDs9ITODaxtOCDEYLTODa6PQCDYLNTODapyRCDQXOTODavVTCDo7OTODa..UCDA.PTODa..UCDA.PTODa..zCDA.PTODa..zCDA.XwNDa..zCDA.XwNDabGzCDMzxvNDauczCDUtMvNDa0B0CDUznuNDao10CDILDuNDaB41CDk6etNDa1I3CDcH7sNDa2n4CDg3XsNDa1U6CDYQ1rNDaiP8CDoXTrNDaoX+CDoSyqNDaxsADDoGSqNDamODDD44ypNDat8FDDYuUpNDaq2IDD4r3oNDa.8LDDA2boNDaNMPDDQRBoNDaymSDD8BonNDaLLWDDAMQnNDa14ZDDUz5mNDaIvdDDY7kmNDaethDDsnRmNDaNzlDDM7.mNDas.qDDw4vlNDaQSuDDAjhlNDaOqyDDI8UlNDa3G3DDIGKlNDafn7DD4CBlNDaYLAEDwz5kNDayxEED8Z0kNDa.aJEDQ2wkNDaQDOEDQJvkNDa..QEDA.vkNDa..QEDA.vkNDa..+MDA.vkNDa..+MDA.vkNDadoCNDg6vkNDaMRHND4sykNDac4LNDsV3kNDaedQNDI09kNDai.VNDQHGlNDa7dZNDwNQlNDa73dND0FclNDazMiNDwtplNDa6bmNDUD5lNDahkqNDAEKmNDaBmuNDMtcmNDavfyND07wmNDaDR2NDosGnNDaX55NDQ8dnNDaGY9ND4m2nNDassAODooQoNDan2DODQ9roNDaW1GODYgIpNDacoJODoNmpNDabPMODAAFqNDa5pOODoykqNDad3QODkgFrNDax3SODgEnrNDafqUODAZJsNDaWPWODoYssNDaFmXODw9PtNDafuYODwC0tNDaYoZOD0hYuNDanTaODIV9uNDaFwaODwWivNDat9aOD0gHwNDa..bODA.XwNDa..bODA.XwNDa..bODA.PTODa..6ODA.PTODa..6ODA.PTODaJi7ODIrOTODaDF9ODwvNTODaen+ODwMMTODaJJAPDoCKTODa1pBPDkRHTODaTJDPDI6DTODaTnEPDw8.TODamDGPDEa7SODa9dHPD4S2SODaL2IPDAowSODa.MKPDQaqSODaPfLPDwqjSODarvMPDcacSODaH9NPDoqUSODaXHPPDYcMSODaOOQPDIxDSODahRRPDQq6RODaHRSPDQJxRODazMTPDgPnRODadEUPDs+cRODa93UPDgYSRODaJnVPDgeHRODa6RWPDgS8QODaJ4WPDY2wQODaxZXPD0LlQODas2XPDwUZQODa1OYPDITNQODaHiYPDwIBQODahwYPDo30PODaB6YPDwhoPODak+YPDEJcPODa..ZPDA.XPODa..ZPDA.XPODa..ZPDArJsMDa..ZPDArJsMDaf8YPDg4wrMDaC1YPD8JYrMDapoYPDYj.rMDaXXYPDoInqMDaNBYPDo9OqMDaQmXPDYG3pMDajGXPDgmfpMDaNiWPD4hIpMDaT5VPDM8xoMDa6LVPDA5boMDaLaUPD4bGoMDaOkTPDMoxnMDaKqSPDYhdnMDaKsRPDkKKnMDaXqQPD4m3mMDaq7PPDwfrmMDaq7PPDwfrmMDa8M4NDQ0vQMDa8M4NDQ0vQMDa.F3ND8veQMDat51NDgmOQMDaTr0NDga.QMDa8ZzNDgOxPMDa3FyNDoEkPMDaQvwNDE.YPMDaVWvNDw.NPMDaV7tNDYIDPMDaeesNDoa6OMDa.ArND03yOMDaGgpNDIhsOMDaF.oNDoXnOMDaJdmNDIcjOMDaj6kNDUvgOMDahXjNDgRfOMDaPUiNDA.fOMDaPUiNDA.fOMDa..dNDA.fOMDa..dNDA.nJNDa..dNDA.nJNDaj3cND0KMKNDaQhcNDsQxKNDaJ8bNDoKWLNDaWIbND0y6LNDa9FaNDYDfMNDaJ1YNDg2CNNDaJWXNDYGmNNDaJpVNDgtIONDaduTNDUmqONDaXmRNDUrLPNDaNRPNDQ3rPNDaZvMNDAFLQNDaSBKNDkPpQNDaVHHNDESGRNDaACEND4HiRNDayxANDos8RNDaNX9MD87VSNDa0y5MD4xtSNDaLF2MDkKETNDa3OyMDgCZTNDaiQuMDMWsTNDazKqMDwC+TNDaU+lMDIFOUNDavrhMD8acUNDazTdMD0BpUNDaJ3YMDw3zUNDahWUMDA78UNDapyPMDIKEVNDaOMLMDAkJVNDaBkGMDwHNVNDax6BMDs0OVNDa..AMDA.PVNDa..AMDA.PVNDa..OFDA.PVNDa..OFDA.PVNDahVJFDgDOVNDaysEFDIRLVNDaiFAFDUoGVNDagg7ED4JAVNDac+2EDw23UNDaDgyEDUwtUNDaEGuEDM4hUNDaLxpEDQQUUNDaFilEDs6EUNDadZhEDA6zTNDa9XdED0QhTNDaPeZEDMCNTNDa7sVEDYR3SNDanESEDwBgSNDa4lOEDIXHSNDaSRLEDYVtRNDaXHIEDwASRNDaoIFEDod1QNDaiVCEDcwXQNDaju.EDA+4PNDaFU9DDYLZPNDahG7DDcd4ONDaOG5DDg5WONDafT3DDAl0NNDaou1DDYlRNNDa5X0DDMAuMNDafPzDDM7JMNDalVyDDIclLNDaXqxDDwoALNDa5NxDDInbKNDaRAxDDEd2JNDa..xDDA.nJNDa..xDDA.nJNDa..xDDA.fOMDa..UCDA.fOMDa..UCDA.fOMDa1bSCDsmfOMDa74QCDkdhOMDagWPCDcjkOMDa10NCDw3oOMDaJUMCD4ZuOMDar0KCD0I1OMDarWJCDkD9OMDaY6HCD0IGPMDaBgGCDMXQPMDazHFCDAtbPMDa+xDCDcIoPMDaveCCDkn1PMDaTOBCDIIEQMDa3AACD4nTQMDan2+BDQEkQMDawv9BDwa1QMDacs8BDgoHRMDa3s7BDoqaRMDaLx6BDEeuRMDag55BDo.DSMDaBG5BDIMYSMDa1W4BDEAuSMDaEs3BDAYETMDa0F3BDUQbTMDaNk2BDYlyTMDaSH2BDgTKUMDaKv1BD4WiUMDa3b1BDkr6UMDacN1BDwNTVMDa9D1BDg5rVMDaa.1BD4qEWMDa..1BDA.PWMDa..1BDA.PWMTa..vEDA.nJNDa..vEDA.nJNDaeBvEDQYzJNDa5IvEDkv.KNDaRVvED4CMKNDaimvEDUQYKNDaq8vED0VkKNDamXwEDgRwKNDaR3wEDgB8KNDambxED4jHLNDagEyED02SLNDa3xyEDg4dLNDaljzEDInoLNDahZ0EDABzLNDakT1EDkE9LNDajR2EDEwGMNDaUT3EDACQMNDauY4ED44YMNDalh5EDYThMNDaut6EDAQpMNDa787EDktwMNDaCP9ED4q3MNDa0j+EDwG+MNDaD7.FDQAENNDajUBFDYWJNNDaFwCFDYIONNDaZNEFDUVSNNDaRsFFDo8VNNDafMHFDs9YNNDaxtIFDEYbNNDa6PKFDYLdNNDapyLFDQXeNNDavVNFDk7eNNDa..OFDA.fNNDa..OFDA.fNNDa..AMDA.fNNDa..AMDA.fNNDaJiBMDMreNNDaDFDMDwvdNNDaenEMDwMcNNDaJJGMDoCaNNDa1pHMDkRXNNDaTJJMDI6TNNDaTnKMDw8PNNDamDMMDIaLNNDa9dNMD4SGNNDaL2OMDAoANNDa.MQMDQa6MNDaPfRMDwqzMNDarvSMDcasMNDaH9TMDoqkMNDaXHVMDYccMNDaOOWMDIxTMNDahRXMDQqKMNDaHRYMDMJBMNDazMZMDgP3LNDadEaMDs+sLNDa93aMDgYiLNDaJnbMDgeXLNDa6RcMDgSMLNDaJ4cMDY2ALNDaxZdMD0L1KNDas2dMDwUpKNDa1OeMDITdKNDaHieMDwIRKNDahweMDo3EKNDaB6eMDwh4JNDak+eMDIJsJNDa..fMDA.nJNDa..fMDA.nJNDa..fMDA.fOMDa..vEDA.fOMzXsA.HSPD..Q8PrA.34PD..Q8PrA.34PD.fE6PrA.34PD.fE6PrE124PDatD6PrYX24PD97C6Pr4l14PjvKC6Pr0g04PD6ZB6PrQIz4PzjpA6Prkcx4PD15.6Pr4dv4PD1K.6PrgMt4Pjrc+5Pr8oq4PDgv95Prgzn4PTZD95Prosk4PzeY85Pr4Uh4PD3u75Prwsd4PDpG75Pr00Z4PD7f65PrstV4PDz655PrEYR4PjXX55Pro0M4Pzt145PrIEI4PD7V45PrQHD4PDF435Pr4+93PzPc35Prwr43PDgC35PrwOz3PD6q25Prwot3PjhV25Prs6n3PzZC25PrYFi3PDmx15Pr4Jc3PjIj15PrEJW3PTEX15Pr4DQ3PDbN15PrU7J3PzNG15PrYwD3PDeB15PrAk92PjM.15PrA.72PD..15PrA.72PD..15PrA.DUPD..15PrA.DUPD..15PrYy8TPjOA15Prwm2TPD8D15PrEdwTPDIK15PrYWqTPjwS15ProTkTPz0d15PrwVeTPjSr15PrwdYTPDI715PrksSTPzSN25PrIDNTPjvh25PrQiHTPDb425Pr8KCTPDSR35PrA+8SPDQs35PrQ83SPTRJ45PrgGzSPjQo45PrgduSPjJJ55PrECqSPj2r55Pr00lSPDSQ65Prg2hSPDW265PrwHeSPD9d75PrEpaSPTAH85PrIbXSPTZx85PrYeUSPDBd95PrUzRSPDxJ+5PrUaPSPjh3+5Pr4TNSPzLm.6PrMgLSPDoVA6Prs.KSPjuFB6PrgyISPDY2B6Pr04HSPjcnC6Pr4SHSPD0YD6PrwAHSPzWKE6PrA.HSPD.fE6PrA.HSPD.fE6PiUF"; icons.save = Content.createPath(); icons.save.loadFromData(pathData); local pathData = "3675.t0F..d.QicwxCwF..d.QicwxCw14.d.QE8rxCw1lCd.QUcnxCwlFHd.QB+ixCwlXNd.Q4hexCwlaVd.QmIaxCwVNfd.Q4yVxCwluqd.QbhRxCwF83d.Q7UNxCw1zGe.QCOJxCwlTXe.QbNFxCwlYpe.QuTBxCwFA9e.Qlh9wCwlGSf.Qk35wCwFpof.QSW2wCwFkAg.QU+ywCwVzZg.QKwvwCw1S0g.QXsswCw1+Ph.QZzpwCwVysh.QvFnwCwFpKi.Q0jkwCwFepi.QBOiwCwlMJj.QwEgwCwlvpj.QVIewCwlBLk.QFZcwCwV9sk.QS3awCwVdPl.QKjZwCwlcyl.Q8cYwCw10Vm.Q0kXwCw1g5m.Q56WwCwladn.QTfWwCwlcBo.QFSWwCwlcQo.Q2QWwCwlcQo.Q2QWwCwlrtJDQ2QWwCwlrtJDQ2QWwCwFvRKDQDYWwCwFt1KDQrtWwCwlfZLDQpRXwCwlA9LDQ5DYwCwFLgMDQREZwCwl4CNDQoSawCwFElNDQxubwCwFoGODQdYdwCwVfnODQbPfwCwFkHPDQZThwCw1xmPDQCkjwCwFDFQDQ8AmwCwFTiQDQypowCwVd+QDQGerwCwFdZRDQcduwCwVOzRDQXnxwCwlsLSDQU70wCwl0iSDQyY4wCwlh4SDQP.8wCwFxMTDQFu.xCwlffTDQtkDxCwlpwTDQhiHxCwFNAUDQ4mLxCwFHOUDQHxPxCwlVaUDQlAUxCwV2kUDQnUYxCwFotUDQfscxCwFp0UDQiHhxCwl45UDQCllxCwVV9UDQQEqxCwF..VDQgkuxCwF1+UDQEFzxCwF48UDQMl3xCwFI5UDQLE8xCwllzUDQUhAyCwlRsUDQ47EyCwFNjUDQJTJyCwlZYUDQdmNyCw14LUDQG1RyCwFt9TDQZ+VyCwF4tTDQtBayCwFdcTDQW+dyCwFeJTDQuzhyCwl+0SDQLhlyCwFCfSDQKGpyCwVrHSDQEisyCwl+uRDQY0vyCwFAVRDQi8yyCwVz5QDQE61yCwFddQDQfs4yCwlBAQDQWT7yCwFmhPDQOu9yCw1OCPDQw8.zCwFBiODQk+BzCwFCBODQUzDzCwFXfNDQwaFzCwVF9MDQl0GzCwlSaMDQnAIzCwFE3LDQo+IzCwlfTLDQeuJzCw1qvKDQCQKzCwlrLKDQPjKzCwlrtJDQOoKzCwlrtJDQOoKzCwlcQo.QOoKzCwlcQo.QOoKzCw1Ysn.QBhKzCw1aIn.QZLKzCwlokm.QbnJzCwVHBm.QL1IzCwF9dl.Qz0HzCwVP7k.QdmGzCw1DZk.QTKFzCw1f3j.QngDzCwloWj.QppBzCw1j2i.Qrl.zCwVWXi.QCV9yCwFF5h.QI46yCwF1bh.QSP4yCw1q.h.Q+a1yCw1qkg.QobyyCw15Kg.QtRvyCwVbyf.Qx9ryCwlTbf.QSgoyCwVmFf.Q15kyCw1Wxe.Q.LhyCwloee.QXUdyCwVeNe.QjWZyCwF79d.QMSVyCwFBwd.Q9HRyCwlyjd.Qe4MyCwlRZd.QdkIyCwFgQd.QkMEyCw1eJd.Qhx.yCwlPEd.QCU7xCwlyAd.Qz02xCwFJ.d.QiUyxCwF..d.QicwxCwF..d.QicwxC0F..d.Q..fmCwF..d.Q..fmCw14.d.QheamCw1lCd.Qx+VmCwlFHd.QegRmCwlXNd.QVENmCwlaVd.QDrImCwVNfd.QVVEmCwluqd.Q4DAmCwF83d.QY37lCw1zGe.Qfw3lCwlTXe.Q4vzlCwlYpe.QM2vlCwFA9e.QCEslCwlGSf.QBaolCwFpof.Qw4klCwFkAg.QxghlCwVzZg.QnSelCw1S0g.Q0OblCw1+Ph.Q3VYlCwVysh.QMoVlCwFpKi.QRGTlCwFepi.QfwQlCwlMJj.QNnOlCwlvpj.QyqMlCwlBLk.Qi7KlCwV9sk.QvZJlCwVdPl.QnFIlCwlcyl.Qa.HlCw10Vm.QRHGlCw1g5m.QWdFlCwladn.QvBFlCwlcBo.Qj0ElCwlcQo.QTzElCwlcQo.QTzElCwlrtJDQTzElCwlrtJDQTzElCwFvRKDQg6ElCwFt1KDQIQFlCwlfZLDQH0FlCwlA9LDQWmGlCwFLgMDQumHlCwl4CNDQF1IlCwFElNDQNRKlCwFoGODQ66LlCwVfnODQ5xNlCwFkHPDQ21PlCw1xmPDQfGSlCwFDFQDQZjUlCwFTiQDQPMXlCwVd+QDQjAalCwFdZRDQ6.dlCwVOzRDQzJglCwlsLSDQxdjlCwl0iSDQP7mlCwlh4SDQshqlCwFxMTDQhQulCwlffTDQKHylCwlpwTDQ+E2lCwFNAUDQVJ6lCwFHOUDQkT+lCwlVaUDQDjCmCwV2kUDQE3GmCwFotUDQ9OLmCwFp0UDQ.qPmCwl45UDQfHUmCwVV9UDQtmYmCwF..VDQ9GdmCwF1+UDQhnhmCwF48UDQpHmmCwFI5UDQomqmCwllzUDQxDvmCwlRsUDQVezmCwFNjUDQn13mCwlZYUDQ6I8mCw14LUDQjXAnCwFt9TDQ2gEnCwF4tTDQKkInCwFdcTDQzgMnCwFeJTDQLWQnCwl+0SDQpDUnCwFCfSDQnoXnCwVrHSDQhEbnCwl+uRDQ1WenCwFAVRDQ.fhnCwVz5QDQhcknCwFddQDQ8OnnCwlBAQDQz1pnCwFmhPDQrQsnCw1OCPDQNfunCwFBiODQBhwnCwFCBODQxVynCwFXfNDQN9znCwVF9MDQCX1nCwlSaMDQEj2nCwFE3LDQFh3nCwlfTLDQ7Q4nCw1qvKDQfy4nCwlrLKDQsF5nCwlrtJDQrK5nCwlrtJDQrK5nCwlcQo.QrK5nCwlcQo.QrK5nCw1Ysn.QeD5nCw1aIn.Q2t4nCwlokm.Q3J4nCwVHBm.QoX3nCwF9dl.QQX2nCwVP7k.Q5I1nCw1DZk.QxsznCw1f3j.QEDynCwloWj.QGMwnCw1j2i.QIIunCwVWXi.Qf3rnCwFF5h.QlapnCwF1bh.QvxmnCw1q.h.Qb9jnCw1qkg.QF+gnCw15Kg.QL0dnCwVbyf.QNganCwlTbf.QvCXnCwVmFf.QTcTnCw1Wxe.QdtPnCwloee.Q12LnCwVeNe.QA5HnCwF79d.Qp0DnCwFBwd.Qaq.nCwlyjd.Q7a7mCwlRZd.Q5G3mCwFgQd.QBvymCw1eJd.Q.UumCwlPEd.Qf2pmCwlyAd.QQXlmCwFJ.d.Q.3gmCwF..d.Q..fmCwF..d.Q..fmC0F..d.Q5DcXCwF..d.Q5DcXCw14.d.Q9CTXCw1lCd.QeDKXCwlFHd.Q3GBXCwlXNd.QlO4WCwlaVd.QAcvWCwVNfd.QlwmWCwluqd.QrNeWCwF83d.Qr0VWCw1zGe.Q5mNWCwlTXe.QrlFWCwlYpe.QTy9VCwFA9e.Q.O2VCwlGSf.Q+5uVCwFpof.Qb3nVCwFkAg.QdHhVCwVzZg.QJraVCw1S0g.QjjUVCw1+Ph.QnxOVCwVysh.QTWJVCwFpKi.QcSEVCwFepi.Q3m.VCwlMJj.QVU7UCwlvpj.Qfb3UCwlBLk.Q.9zUCwV9sk.QY5wUCwVdPl.QJRuUCwlcyl.QvEsUCw10Vm.QdUqUCw1g5m.QnApUCwladn.QbJoUCwlcBo.QAvnUCwlcQo.QgsnUCwlcQo.QgsnUCwlrtJDQgsnUCwlrtJDQgsnUCwFvRKDQ76nUCwFt1KDQLmoUCwlfZLDQIupUCwlA9LDQnSrUCwFLgMDQXTtUCwl4CNDQFwvUCwFElNDQXoyUCwFoGODQv71UCwVfnODQsp5UCwFkHPDQnx9UCw1xmPDQ4SCVCwFDFQDQvMHVCwFTiQDQZeMVCwVd+QDQBHSVCwFdZRDQuFYVCwVOzRDQiZeVCwlsLSDQdBlVCwl0iSDQa8rVCwlh4SDQTJzVCwFxMTDQ+m6VCwlffTDQPUCWCwlpwTDQ3PKWCwFNAUDQkYSWCwFHOUDQDtaWCwlVaUDQAMjWCwV2kUDQD0rWCwFotUDQzj0WCwFp0UDQ5Z9WCwl45UDQ4UGXCwVV9UDQWTPXCwF..VDQ2TYXCwF1+UDQ9UhXCwF48UDQNVqXCwFI5UDQMTzXCwllzUDQdN8XCwlRsUDQkCFYCwFNjUDQJxNYCwlZYUDQvXWYCw14LUDQB1eYCwFt9TDQoHnYCwF4tTDQPOvYCwFdcTDQhH3YCwFeJTDQPy+YCwl+0SDQLNGZCwFCfSDQJXNZCwVrHSDQ9OUZCwl+uRDQlzaZCwFAVRDQ6DhZCwVz5QDQ9+mZCwFddQDQzjsZCwlBAQDQhxxZCwFmhPDQSn2ZCw1OCPDQVE7ZCwFBiODQ8H.aCwFCBODQexCaCwFXfNDQVAGaCwVF9MDQ.0IaCwlSaMDQCMLaCwFE3LDQDINaCwlfTLDQwnOaCw1qvKDQ5qPaCwlrLKDQTRQaCwlrtJDQSbQaCwlrtJDQSbQaCwlcQo.QSbQaCwlcQo.QSbQaCw1Ysn.Q3MQaCw1aIn.QnhPaCwlokm.QrZOaCwVHBm.QL1MaCwF9dl.Qb0KaCwVP7k.QtXIaCw1DZk.QcfFaCw1f3j.QEMCaCwloWj.QGe+ZCw1j2i.QLW6ZCwVWXi.Q701ZCwFF5h.QD7wZCwF1bh.QZprZCw1q.h.QxAmZCw1qkg.QECgZCw15Kg.QQuZZCwVbyf.QVGTZCwlTbf.QZLMZCwVmFf.Qf+EZCw1Wxe.Q0g9YCwloee.Qjz1YCwVeNe.Q73tYCwF79d.QOvlYCwFBwd.QuadYCwlyjd.Qx7UYCwlRZd.QvTMYCwFgQd.Q9jDYCw1eJd.Q3t6XCwlPEd.Q5yxXCwlyAd.Qb0oXCwFJ.d.Q7zfXCwF..d.Q5DcXCwF..d.Q5DcXCMVY"; icons.more = Content.createPath(); icons.more.loadFromData(pathData); local icon = obj.text == "More" ? icons.more : icons.save; g.setColour(Colours.withAlpha(obj.textColour, obj.over ? 1.0 - 0.5 * obj.down : 0.7)); g.fillPath(icon, [a[0] + a[2] / 2 - 18 / 2, a[1] + a[3] / 2 - 18 / 2 + 2, 11, 11]); } } // Variables const var KnbSpread = Content.getComponent("KnbSpread"); const var KnbEllipse = Content.getComponent("KnbEllipse"); const var FxReverb = Synth.getEffect("FxReverb"); const var reverb_laf = Content.createLocalLookAndFeel(); reverb_laf.registerFunction("drawRotarySlider", function(g, obj) { // Knob Dimensions and Position var width = obj.area[2]; var height = obj.area[3]; var centerX = width / 2; var centerY = height / 2; // Spread Factor (Knob's Value) var spreadFactor = obj.valueNormalized; // Ellipse Settings var numEllipses = 5; // Number of ellipses var strokeWidth = 2; // Line thickness var maxRadius = Math.min(width, height) / 2; var step = maxRadius / numEllipses * spreadFactor; // Draw Ellipses for (i = 0; i < numEllipses; i++) { var radius = step * (i + 1); var opacity = Math.range(1.0 - (radius / maxRadius), 0.0, 1.0); g.setColour(Colours.withAlpha(0xece404, opacity)); g.drawEllipse([centerX - radius, centerY - radius, radius * 2, radius * 2], strokeWidth); } }); Content.getComponent("KnbEllipse").setLocalLookAndFeel(reverb_laf);
-
RE: SetControlCallback
@d-healey Do you mabey have the Hisesnippet of this, then I can just it to my needs? I would help a lot
-
RE: SetControlCallback
//Sampler const var Sampler1 = Synth.getChildSynth("Sampler1"); //Sample maps array const var SampleMaps = Sampler.getSampleMapList(); //combo box const var cmbSampleMap = Content.getComponent("cmbSampleMap"); cmbSampleMap.set("items", SampleMaps.join("\n")); inline function onCmbSampleMapControl(component, value) { Sampler1.asSampler().loadSampleMap(SampleMaps[value-1]); }; Content.getComponent("cmbSampleMap").setControlCallback(onCmbSampleMapControl); //presetbrowser custom Engine.loadFontAs("{PROJECT_FOLDER}Fonts/font1.otf", "regular"); Engine.loadFontAs("{PROJECT_FOLDER}Fonts/fontbold.otf", "bold"); namespace PresetBrowser { const presetBrowserLaf = Content.createLocalLookAndFeel(); //! fltPresetBrowser const fltPresetBrowser = Content.getComponent("fltPresetbrowser") fltPresetBrowser.setLocalLookAndFeel(presetBrowserLaf); //! LAF Function presetBrowserLaf.registerFunction("drawPresetBrowserBackground", function(g, obj) { g.fillAll(obj.bgColour); }); presetBrowserLaf.registerFunction("drawPresetBrowserColumnBackground", function(g, obj) { var a = obj.area; // Change name of columns if (obj.text == "Select a Column") obj.text = "Select a Preset"; g.setGradientFill([Colours.fromVec4([0.043, 0.043, 0.051, 1.0]), 100, 350, Colours.fromVec4([0.239, 0.231, 0.271, 1.0]), 100, 70, false]); g.fillRoundedRectangle(a, 0); //select preset g.setColour(obj.itemColour); g.setFont("bold", 11); g.drawAlignedText(obj.text, a, "centred"); }); // Draw list items presetBrowserLaf.registerFunction("drawPresetBrowserListItem", function(g, obj) { var a = obj.area; if (obj.selected) //balk achter preset { g.setColour(Colours.withAlpha(obj.itemColour, 0.1)); g.fillRoundedRectangle(a, 0); } if (obj.selected && obj.columnIndex != 2) { g.setColour(Colours.withAlpha(0xFFFF5800, 1)); g.fillEllipse([a[0] + 7, a[1] + a[3] / 2 - 6 / 2, 6, 6]); g.drawDropShadow([a[0] + 7, a[1] + a[3] / 2 - 6 / 2, 6, 6],0XFFFF5800, 5); } g.setColour(Colours.withAlpha(obj.textColour, 1.0)); g.setFont("regular", 19); if (obj.columnIndex != 2) g.drawAlignedText(obj.text, [a[0] + 19, a[1], a[2], a[3]], "left"); else g.drawAlignedText(obj.text, [a[0] + 25, a[1], a[2], a[3]], "left"); }); // Create icons for the preset browser presetBrowserLaf.registerFunction("createPresetBrowserIcons", function(id) { var pathData = "284.t0F..ZBQr8NjCwV4LTBQCReiCIVzkFBQyVugCMIZaPzqek3P9eRFDQxJRNjXMkAFDsgSVNjNbeAQFbDmCMnxYPjRlO5Ph8poaPzE8r5PSU3GDM3AzND..ZBQBqYuCIFq50BQCd.sCwLVwPzE8r5P7UyLDoj4iNjXEORMD0eQbNzMmSCQa3jkCE.1yPDIqH4Phw1kwPzqek3Ptn0JDoJ8FNjFyeBQ5MeiCMVa..nID0gdBOjX..3ADIefYNTgzyAQo+vbCgNIlPD.xo3Pw02TlPz5Gq3P..nIDMvHKNDa..nIDMvHKNDa5aqIDYVsJNDaXrsIDkvbJNDaXrsIDkvbJNjX1q.LDU7ByMD..VDQoCXlCA.flPTG5I7PiUF"; var offIcon = Content.createPath(); offIcon.loadFromData(pathData); pathData = "62.t0F..ZBQ8p7hCIFRa8BQzqxbCA.fEQTKxk4P..nIDgnZBOjX..3ADMybYNDtj1AQzqxbCA.flPTuJu3PiUF"; var onIcon = Content.createPath(); onIcon.loadFromData(pathData); if (id == "favorite_on") return onIcon; if (id == "favorite_off") return offIcon; }); //search bar presetBrowserLaf.registerFunction("drawPresetBrowserSearchBar", function(g, obj) { var a = obj.area; var pathData = "2973.t0lB.TCQmiBrCwlB.TCQmiBrCw1B3VCQzcgqCwlkhYCQFQ+pCw1O+aCQ7BbpCwFnMdCQ732oCw1WMfCQ63RoCwlJ9gCQxHsnCwVteiCQjtFnCwFywjCQZvemCwVLzkCQiT3lCwFullCQSgPlCwFSImCQBcnkCwVyamCQIN.kCwVLdmCQD6WjCwFdPmCQQpuiCwlpxlCQKhGiCw11DlCQMoehCw1IGkCQvE3gCwls4iCQH9PgCwltbhCQlXpfCwlavfCQTaDfCwFF0dCQwX9dCwVAqbCQfi0cCwFjRZCQchtbCwFFrWCQ.goaCwlB3TCQLplZCwF11QCQsHlYCwF+nNCQ3FnXCwV+NKCQntrWCwFYoGCQcIzVCwVw3CCQZf9UCwVt8+BQE7KUCwl336BQhjbTCwl4p2BQWgvSCwlbTyBQl4GSCwVN1tBQwyhRCwF7PpBQyUARCwVUkkBQAkiQCwlIzfBQNlIQCw1I9aBQhcyPCw1GDWBQfNgPCwV0FRBQD7RPCwlEGMBQfnHPCwlqEHBQbUBPCwlZCCBQ5C.PCwlFA9AQPzAPCwlh+3AQMlGPCwFh+yAQ1XQPCw13AuAQkJePCwFYGpAQP4vPCwF0PkAQ9gFQCwF+dfAQUAfQCwlmxaAQMS8QCw1dLWAQ7RdRCwlSsRAQP6BSCwFzUNAQQFqSCw1rFJAQksVTCwVo.FAQLpEUCwlSDBAQmz2UCw1SR9.QzDsVCwlPq5.QQRkWCwFuO2.Q.TfXCwlR.z.Qi.dYCw1a8v.QCNdZCwVpGt.QNxfaCw1Zeq.QbhkbCw1HEo.QrSrcCwVL4l.Qp5zdCwF76j.QtK+eCwVrMi.QfckfCwFttg.QM9KgCwFQef.QxAygCw1gee.QAhZhCwlpud.QkXBiCwFyOd.QEepiCwF..d.QHuRjCwVT.d.QPB6jCw1uPd.QCRikCwFPwd.QCXKlCwluge.Q1MylCwlFhf.QDsZmCwFKxg.QYuAnCw1uQi.QlNnnCwFl.k.QeDNoCwla9l.QBKyoCw17Jo.QTbWpCwlxkq.Qfx5pCwljNt.Q8GcqCwl2Dw.QKW9qCwlNHz.Q1ZdrCwVJX2.Q1M8rCwlIz5.QOqZsCwFoa9.QTt1sCwlCNBAQlRQtCw1xJFAQ0SptCw1MQJAQ.tAuCwFqfNAQXcWuCw1d3RAQddquCwV7WWAQFt8uCw1U9aAQUINvCwF7pfAQhsbvCw19bkAQXXovCwlsSpAQ1GzvCwFVNuAQN57vCwlFLzAQFtCwCwlKL4AQXhHwCwlxM9AQRVKwCwlGPCBQXILwCwVWRHBQh6JwCwFtSMBQ7rGwCwlXSRBQGdBwCwliPWBQ4O6vCwlbJbBQbCxvCwFQ.gBQN5lvCwlOwkBQ.1YvCwVmbpBQ53JvCwlnAuBQRE5uCwVjeyBQ3cmuCwlr02BQnESuCwVUC7BQx+7tCwlFV9BQC6utCwlFV9BQB6utCwFGU9BQB6utCEmv.+BQOW2tCUk8uPD7hu6Prgc39PT84l8Prgc39PT84l8PrYbA+PTW9m8Pr80J+PDF+n8PronT+PD+6o8Pr4xd+Pj3zp8PrESo+Pjooq8PrgGz+PzIZr8PrgN++PDQFs8PrMlJ.Qj3ss8Pr4LV.QD5Pt8Prk.h.QjOut8Prg+s.QzzHu8ProG5.QDkcu8PrIWFAQjcsu8PrErRAQja3u8PrUDeAQzb9u8PrAdqAQDg+u8PrI22AQDn6u8PrwMDBQDxxu8PrwePBQj.ku8PrYqbBQDVRu8PrgtnBQT05t8PrQmzBQDhdt8PrwS.CQDg8s8PrIxKCQT2Ws8Prg.WCQDqsr8PrI8gCQzB+q8PrQlrCQDFLq8PrI51CQD8Tp8PrI2.DQzvYo8PrsaJDQjpZn8PrQlSDQjzWm8PrYUbDQDYQl8PromjDQziGk8ProarDQjf5i8PrQvyDQjaph8PrUj5DQjgWg8Pro1.EQj+Af8PrQlFEQzCpd8PrQxKEQD7Oc8Pr0YPEQz1ya8PrMbTEQjBVZ8Prw3WEQjt1X8Pr4tZEQDJVW8PrM9bEQjjzU8PrQldEQjMRT8Pr8leEQzTuR8PrA.fEQDJLQ8PrYweEQD8nO8PrE6dEQD9EN8PrQccEQjbiL8PrMXaEQjnAK8PrMrXEQjwfI8ProYUEQDGAH8PrIgQEQT3hF8PrQCMEQjTFE8Prs.HEQjpqC8PrUZBEQjHSB8PrAQ7DQD87.8Prwk0DQDVo+7PrgYtDQDfX97PrkslDQjnJ87PrIidDQT7+67PrMZWDQjVD67PrMZWDQjVD67PrAhb0PTUsC6PrAhb0PTUsC6ProlS0PjenB6PrgPJ0PjSmA6PrAg.0PD7o.6Pro..0Pj5l.6Pro..0Pj5l.6Pi01++WCQI2kjCw1++WCQJ2kjCwVK4WCQz7GkCwFujWCQB8okCwltBWCQVxKlCwlNSVCQWWslCwlWVUCQslNmCwlRLTCQCaumCwFL0RCQJuOnCwVQQQCQ1cunCwlxfOCQDhNoCwFBjMCQy1roCwlSaKCQOWJpCw17FICQp9lpCw1UmFCQcnBqCw127CCQOPcqCwV9GACQtw1qCwFFI9BQ1HOrCw1s.6BQrQlrCwlUu2BQjH7rCwldUzBQ9oPsCw1qyvBQoxisCwlgJsBQfe0sCwFkZoBQssEtCwlbjkBQrZTtCwlungBQEjgtCwFFncBQxGstCwlIiYBQ7C2tCwliZUBQ9V+tCwV9NQBQh+EuCw1DAMBQl7JuCwFhwHBQVMNuCwlAgDBQPwOuCwFOP.BQEnOuCw10+6AQ1wMuCw1gv2AQ1NJuCwF9hyAQq+DuCwF1WuAQHE9tCwVzOqAQTf0tCwFiKmAQnRqtCwFrKiAQscetCwV3PeAQaCRtCwluaaAQ5ECtCwV4rWAQmmxsCw16DTAQHqfsCwFbjPAQTSMsCw18KMAQSi3rCwFD7IAQYdhrCw1O0FAQHHKrCw1.3CAQNjxqCwl0DAAQn1XqCwlJb9.QbC9pCw1Z96.Q9NhpCwV+q4.QncEpCwFPk2.QDzmoCwVhp0.Q9VIoCwlI7y.QQKpnCw1WZx.Q6UJnCwVbEw.QA7omCw1j8u.QvBImCw17Bu.QYumlCw1sUt.QPGFlCw190s.QsOjkCwF0is.QLNBkCwFGes.QI2kjCwFGes.QI2kjCwFGes.QI2kjCwV6ks.QdwCjCwlW5s.QPwgiCwVXbt.Q56+hCwF3Ku.Q4VdhCwVuHv.QhG8gCwFzRw.QLSbgCwF6ox.QD+6fCwl0Mz.QXPbfCwVT90.QUX5eCwFE62.Qzt8dCwlyC5.Q6sBdCwVJX7.QFeIcCwlw29.QdKRbCwlOhAAQ56baCwVIWDAQ73oZCwlAVGAQrJ4YCw1YdJAQ.4JYCwVxuMAQOKeXCwloIQAQaH1WCwVbqTAQF2OWCwllTXAQYcrVCwViDbAQ9.LVCw1q5eAQAmtUCwFY1iAQPTTUCwlB2mAQ2L8TCwF+6qAQjToTCwVkDvAQhtXTCwlJPzAQZcKTCwVDd3AQTiATCwFms7AQ2A6SCwlG9.BQD52SCwV5NEBQbL3SCwlSeIBQ636SCwlmtMBQ89BTCwVK7QBQXcMTCwlSGVBQgRaTCwVUOZBQJbrTCwllSdBQj2.UCwlcShBQdgXUCwlQNlBQFVyUCwFZCpBQHQQVCwVPxsBQyMxVCw1MZwBQ0FVWCwls5zBQe17WCw1KS3BQjVlXCwlEi6BQbfRYCwl4o9BQAMAZCwlHmACQ2TxZCw1SZDCQFvkaCwl9BGCQeVabCwVtfICQe+RcCwVIyKCQKhLdCwl34MCQV0GeCwFlzOCQvWBfCwl9hQCQdigfCwVvDSCQ0XAgCwlqYTCQuxggCw1hgUCQArBhCwlJbVCQY+ihCwlYIWCQhmEiCwVHoWCQEemiCw1Q6WCQlfIjCw1++WCQI2kjCw1++WCQI2kjCMVY"; var icon = Content.createPath(); icon.loadFromData(pathData); g.setColour(Colours.withAlpha(0xFF1B1A1F, 0.2)); g.fillRoundedRectangle(a, 0); g.setColour(Colours.withAlpha(obj.textColour, 0.5)); g.fillPath(icon, [a[0] + 5, a[1] + a[3] / 2 - 13 / 2, 13, 13]); }); //draw scrollbar presetBrowserLaf.registerFunction("drawScrollbar", function(g, obj) { var a = obj.area; a[0] = a[2] - 5; a[2] = 5; var ha = obj.handle; ha[0] = ha[2] - 5; ha[2] = 5; g.setColour(Colours.withAlpha(0xFF393841, 0.4)); g.fillRoundedRectangle(a, 0); g.setColour(Colours.withAlpha(0xFFA7A4C0, 0.4 + 0.5 + obj.over * 0.3)); g.fillRoundedRectangle(ha, 2); }); presetBrowserLaf.registerFunction("drawDialogButton", function(g, obj) { drawMoreAndSaveButtons(); var a = obj.area; var icons = {}; }); //functions inline function drawMoreAndSaveButtons() { local buttonNames = ["More", "Save Preset"]; if(!buttonNames.contains(obj.text)) return; local a = obj.area; local icons = {}; local pathData = "5225.t0F.fHCQ..vWCwF.foBQ..vWCwF.foBQ..rgCwF.fHCQ..rgCMVa..UCDA...MDaPUiNDA...MDaPUiNDA...MDat9mNDM6A.MDabmrNDIjG.MDaoNwND44P.MDany0ND85c.MDaoU5NDUkt.MDa8y9NDM1BAMDa2MCODcpZAMDaphGODM90AMDaowKODIsTBMDaJ5OODQx1BMDag6SODQHbCMDaF0WODAoDDMDaPlaODINvDMDaZNeODkvdEMDa8rhOD8HPFMDaUCkODsdzFMDaUCkODwdzFMDaCx7PDwJubMDaCx7PDwJubMDaD++PDgEkcMDaCACQD8ecdMDag2EQD8PXeMDa.hHQDIOUfMDaE.KQD0PTgMDaXQMQD4KUhMDafUOQD40WiMDaHLQQDQDbjMDa+zRQDArgkMDaxOTQDEhnlMDaSbUQDAavmMDaVZVQDgK4nMDaxIWQDsmBpMDadpWQDAjLqMDaV7WQDgzVrMDa..XQDArJsMDa..XQDArJsMDa..XQDA.XPODa..XQDA.XPODaj3WQDwK8PODaQhWQDoQhQODaJ8VQDoKGRODaWIVQD4yqRODa9FUQDYDPSODaJ1SQDg2ySODaJWRQDYGWTODaJpPQDgt4TODaduNQDUmaUODaXmLQDUr7UODaNRJQDQ3bVODaZvGQDAF7VODaSBEQDgPZWODaVHBQDAS2WODaAC+PD4HSXODayx6PDossXODaNX3PD87FYODa0yzPD4xdYODaLFwPDkK0YODa3OsPDgCJZODaiQoPDMWcZODazKkPDsCuZODaU+fPDIF+ZODavrbPD8aMaODazTXPD4BZaODaJ3SPDw3jaODahWOPDA7saODapyJPDIK0aODaOMFPDAk5aODaBkAPDwH9aODax67ODw0+aODa..6ODA..bODa..6ODA..bODa..UCDA..bODa..UCDA..bODahVPCDgD+aODaysKCDIR7aODaiFGCDUo2aODaggBCD4JwaODac+8BDw2naODaDg4BDQwdaODaEG0BDM4RaODaLxvBDQQEaODaFirBDs60ZODadZnBDA6jZODa9XjBD4QRZODaPefBDMC9YODa7sbBDYRnYODanEYBDwBQYODa4lUBDIX3XODaSRRBDYVdXODaXHOBDwACXODaoILBDodlWODaiVIBDcwHWODajuFBDA+oVODaFUDBDYLJVODahGBBDcdoUODaOG.BDg5GUODafT9ADAlkTODaou7ADYlBTODa5X6ADMAeSODafP5ADI75RODamV4ADIcVRODaXq3ADwowQODa5N3ADInLQODaRA3ADEdmPODa..3ADA.XPODa..3ADA.XPODa..3ADA.PWMDa..3ADA.PWMDabG3ADYnEVMDauc3ADob6TMDa0B4ADonwSMDao14ADQXnRMDaB45ADI2eQMDa1I7AD8PXPMDa2n8ADEwQOMDa1U+ADwhLNMDaiPABDMwHMMDaoXCBDMmFLMDaxsEBDQOFKMDamOHBDwyGJMDat8JBDsdKIMDaq2MBDsYQHMDa.8PBDAtYGMDaNMTBDkjjFMDaymWBD4ExEMDaLLaBDAZBEMDa14dBDonUDMDaIvhBD03qCMDaetlBDYQECMDaNzpBDY3gBMDas.uBDgyABMDaQSyBD4GkAMDaOq2BDI5KAMDa3G7BDUN1.MDafn.CD0Gj.MDaYLECDkoU.MDayxICD40J.MDa.aNCDgtC.MDaQDSCDkT..MDa..UCDA...MDa..UCDA...MTa..1BDA.PWMDa..1BDA.XPODa..1BDA.XPODaeB1BDQYjPODa5I1BDkvvPODaRV1BD4C8PODaim1BDQQIQODaq81BD0VUQODamX2BDgRgQODaR32BDgBsQODamb3BD4j3QODagE4BD02CRODa3x4BDg4NRODalj5BDInYRODahZ6BDABjRODakT7BDkEtRODajR8BDEw2RODaUT9BDACASODauY+BD44ISODalh.CDYTRSODautACDAQZSODa78BCDktgSODaCPDCD4qnSODa0jECDwGuSODaD7FCDQA0SODajUHCDYW5SODaFwICDUI+SODaZNKCDUVCTODaRsLCDo8FTODafMNCDs9ITODaxtOCDEYLTODa6PQCDYLNTODapyRCDQXOTODavVTCDo7OTODa..UCDA.PTODa..UCDA.PTODa..zCDA.PTODa..zCDA.XwNDa..zCDA.XwNDabGzCDMzxvNDauczCDUtMvNDa0B0CDUznuNDao10CDILDuNDaB41CDk6etNDa1I3CDcH7sNDa2n4CDg3XsNDa1U6CDYQ1rNDaiP8CDoXTrNDaoX+CDoSyqNDaxsADDoGSqNDamODDD44ypNDat8FDDYuUpNDaq2IDD4r3oNDa.8LDDA2boNDaNMPDDQRBoNDaymSDD8BonNDaLLWDDAMQnNDa14ZDDUz5mNDaIvdDDY7kmNDaethDDsnRmNDaNzlDDM7.mNDas.qDDw4vlNDaQSuDDAjhlNDaOqyDDI8UlNDa3G3DDIGKlNDafn7DD4CBlNDaYLAEDwz5kNDayxEED8Z0kNDa.aJEDQ2wkNDaQDOEDQJvkNDa..QEDA.vkNDa..QEDA.vkNDa..+MDA.vkNDa..+MDA.vkNDadoCNDg6vkNDaMRHND4sykNDac4LNDsV3kNDaedQNDI09kNDai.VNDQHGlNDa7dZNDwNQlNDa73dND0FclNDazMiNDwtplNDa6bmNDUD5lNDahkqNDAEKmNDaBmuNDMtcmNDavfyND07wmNDaDR2NDosGnNDaX55NDQ8dnNDaGY9ND4m2nNDassAODooQoNDan2DODQ9roNDaW1GODYgIpNDacoJODoNmpNDabPMODAAFqNDa5pOODoykqNDad3QODkgFrNDax3SODgEnrNDafqUODAZJsNDaWPWODoYssNDaFmXODw9PtNDafuYODwC0tNDaYoZOD0hYuNDanTaODIV9uNDaFwaODwWivNDat9aOD0gHwNDa..bODA.XwNDa..bODA.XwNDa..bODA.PTODa..6ODA.PTODa..6ODA.PTODaJi7ODIrOTODaDF9ODwvNTODaen+ODwMMTODaJJAPDoCKTODa1pBPDkRHTODaTJDPDI6DTODaTnEPDw8.TODamDGPDEa7SODa9dHPD4S2SODaL2IPDAowSODa.MKPDQaqSODaPfLPDwqjSODarvMPDcacSODaH9NPDoqUSODaXHPPDYcMSODaOOQPDIxDSODahRRPDQq6RODaHRSPDQJxRODazMTPDgPnRODadEUPDs+cRODa93UPDgYSRODaJnVPDgeHRODa6RWPDgS8QODaJ4WPDY2wQODaxZXPD0LlQODas2XPDwUZQODa1OYPDITNQODaHiYPDwIBQODahwYPDo30PODaB6YPDwhoPODak+YPDEJcPODa..ZPDA.XPODa..ZPDA.XPODa..ZPDArJsMDa..ZPDArJsMDaf8YPDg4wrMDaC1YPD8JYrMDapoYPDYj.rMDaXXYPDoInqMDaNBYPDo9OqMDaQmXPDYG3pMDajGXPDgmfpMDaNiWPD4hIpMDaT5VPDM8xoMDa6LVPDA5boMDaLaUPD4bGoMDaOkTPDMoxnMDaKqSPDYhdnMDaKsRPDkKKnMDaXqQPD4m3mMDaq7PPDwfrmMDaq7PPDwfrmMDa8M4NDQ0vQMDa8M4NDQ0vQMDa.F3ND8veQMDat51NDgmOQMDaTr0NDga.QMDa8ZzNDgOxPMDa3FyNDoEkPMDaQvwNDE.YPMDaVWvNDw.NPMDaV7tNDYIDPMDaeesNDoa6OMDa.ArND03yOMDaGgpNDIhsOMDaF.oNDoXnOMDaJdmNDIcjOMDaj6kNDUvgOMDahXjNDgRfOMDaPUiNDA.fOMDaPUiNDA.fOMDa..dNDA.fOMDa..dNDA.nJNDa..dNDA.nJNDaj3cND0KMKNDaQhcNDsQxKNDaJ8bNDoKWLNDaWIbND0y6LNDa9FaNDYDfMNDaJ1YNDg2CNNDaJWXNDYGmNNDaJpVNDgtIONDaduTNDUmqONDaXmRNDUrLPNDaNRPNDQ3rPNDaZvMNDAFLQNDaSBKNDkPpQNDaVHHNDESGRNDaACEND4HiRNDayxANDos8RNDaNX9MD87VSNDa0y5MD4xtSNDaLF2MDkKETNDa3OyMDgCZTNDaiQuMDMWsTNDazKqMDwC+TNDaU+lMDIFOUNDavrhMD8acUNDazTdMD0BpUNDaJ3YMDw3zUNDahWUMDA78UNDapyPMDIKEVNDaOMLMDAkJVNDaBkGMDwHNVNDax6BMDs0OVNDa..AMDA.PVNDa..AMDA.PVNDa..OFDA.PVNDa..OFDA.PVNDahVJFDgDOVNDaysEFDIRLVNDaiFAFDUoGVNDagg7ED4JAVNDac+2EDw23UNDaDgyEDUwtUNDaEGuEDM4hUNDaLxpEDQQUUNDaFilEDs6EUNDadZhEDA6zTNDa9XdED0QhTNDaPeZEDMCNTNDa7sVEDYR3SNDanESEDwBgSNDa4lOEDIXHSNDaSRLEDYVtRNDaXHIEDwASRNDaoIFEDod1QNDaiVCEDcwXQNDaju.EDA+4PNDaFU9DDYLZPNDahG7DDcd4ONDaOG5DDg5WONDafT3DDAl0NNDaou1DDYlRNNDa5X0DDMAuMNDafPzDDM7JMNDalVyDDIclLNDaXqxDDwoALNDa5NxDDInbKNDaRAxDDEd2JNDa..xDDA.nJNDa..xDDA.nJNDa..xDDA.fOMDa..UCDA.fOMDa..UCDA.fOMDa1bSCDsmfOMDa74QCDkdhOMDagWPCDcjkOMDa10NCDw3oOMDaJUMCD4ZuOMDar0KCD0I1OMDarWJCDkD9OMDaY6HCD0IGPMDaBgGCDMXQPMDazHFCDAtbPMDa+xDCDcIoPMDaveCCDkn1PMDaTOBCDIIEQMDa3AACD4nTQMDan2+BDQEkQMDawv9BDwa1QMDacs8BDgoHRMDa3s7BDoqaRMDaLx6BDEeuRMDag55BDo.DSMDaBG5BDIMYSMDa1W4BDEAuSMDaEs3BDAYETMDa0F3BDUQbTMDaNk2BDYlyTMDaSH2BDgTKUMDaKv1BD4WiUMDa3b1BDkr6UMDacN1BDwNTVMDa9D1BDg5rVMDaa.1BD4qEWMDa..1BDA.PWMDa..1BDA.PWMTa..vEDA.nJNDa..vEDA.nJNDaeBvEDQYzJNDa5IvEDkv.KNDaRVvED4CMKNDaimvEDUQYKNDaq8vED0VkKNDamXwEDgRwKNDaR3wEDgB8KNDambxED4jHLNDagEyED02SLNDa3xyEDg4dLNDaljzEDInoLNDahZ0EDABzLNDakT1EDkE9LNDajR2EDEwGMNDaUT3EDACQMNDauY4ED44YMNDalh5EDYThMNDaut6EDAQpMNDa787EDktwMNDaCP9ED4q3MNDa0j+EDwG+MNDaD7.FDQAENNDajUBFDYWJNNDaFwCFDYIONNDaZNEFDUVSNNDaRsFFDo8VNNDafMHFDs9YNNDaxtIFDEYbNNDa6PKFDYLdNNDapyLFDQXeNNDavVNFDk7eNNDa..OFDA.fNNDa..OFDA.fNNDa..AMDA.fNNDa..AMDA.fNNDaJiBMDMreNNDaDFDMDwvdNNDaenEMDwMcNNDaJJGMDoCaNNDa1pHMDkRXNNDaTJJMDI6TNNDaTnKMDw8PNNDamDMMDIaLNNDa9dNMD4SGNNDaL2OMDAoANNDa.MQMDQa6MNDaPfRMDwqzMNDarvSMDcasMNDaH9TMDoqkMNDaXHVMDYccMNDaOOWMDIxTMNDahRXMDQqKMNDaHRYMDMJBMNDazMZMDgP3LNDadEaMDs+sLNDa93aMDgYiLNDaJnbMDgeXLNDa6RcMDgSMLNDaJ4cMDY2ALNDaxZdMD0L1KNDas2dMDwUpKNDa1OeMDITdKNDaHieMDwIRKNDahweMDo3EKNDaB6eMDwh4JNDak+eMDIJsJNDa..fMDA.nJNDa..fMDA.nJNDa..fMDA.fOMDa..vEDA.fOMzXsA.HSPD..Q8PrA.34PD..Q8PrA.34PD.fE6PrA.34PD.fE6PrE124PDatD6PrYX24PD97C6Pr4l14PjvKC6Pr0g04PD6ZB6PrQIz4PzjpA6Prkcx4PD15.6Pr4dv4PD1K.6PrgMt4Pjrc+5Pr8oq4PDgv95Prgzn4PTZD95Prosk4PzeY85Pr4Uh4PD3u75Prwsd4PDpG75Pr00Z4PD7f65PrstV4PDz655PrEYR4PjXX55Pro0M4Pzt145PrIEI4PD7V45PrQHD4PDF435Pr4+93PzPc35Prwr43PDgC35PrwOz3PD6q25Prwot3PjhV25Prs6n3PzZC25PrYFi3PDmx15Pr4Jc3PjIj15PrEJW3PTEX15Pr4DQ3PDbN15PrU7J3PzNG15PrYwD3PDeB15PrAk92PjM.15PrA.72PD..15PrA.72PD..15PrA.DUPD..15PrA.DUPD..15PrYy8TPjOA15Prwm2TPD8D15PrEdwTPDIK15PrYWqTPjwS15ProTkTPz0d15PrwVeTPjSr15PrwdYTPDI715PrksSTPzSN25PrIDNTPjvh25PrQiHTPDb425Pr8KCTPDSR35PrA+8SPDQs35PrQ83SPTRJ45PrgGzSPjQo45PrgduSPjJJ55PrECqSPj2r55Pr00lSPDSQ65Prg2hSPDW265PrwHeSPD9d75PrEpaSPTAH85PrIbXSPTZx85PrYeUSPDBd95PrUzRSPDxJ+5PrUaPSPjh3+5Pr4TNSPzLm.6PrMgLSPDoVA6Prs.KSPjuFB6PrgyISPDY2B6Pr04HSPjcnC6Pr4SHSPD0YD6PrwAHSPzWKE6PrA.HSPD.fE6PrA.HSPD.fE6PiUF"; icons.save = Content.createPath(); icons.save.loadFromData(pathData); local pathData = "3675.t0F..d.QicwxCwF..d.QicwxCw14.d.QE8rxCw1lCd.QUcnxCwlFHd.QB+ixCwlXNd.Q4hexCwlaVd.QmIaxCwVNfd.Q4yVxCwluqd.QbhRxCwF83d.Q7UNxCw1zGe.QCOJxCwlTXe.QbNFxCwlYpe.QuTBxCwFA9e.Qlh9wCwlGSf.Qk35wCwFpof.QSW2wCwFkAg.QU+ywCwVzZg.QKwvwCw1S0g.QXsswCw1+Ph.QZzpwCwVysh.QvFnwCwFpKi.Q0jkwCwFepi.QBOiwCwlMJj.QwEgwCwlvpj.QVIewCwlBLk.QFZcwCwV9sk.QS3awCwVdPl.QKjZwCwlcyl.Q8cYwCw10Vm.Q0kXwCw1g5m.Q56WwCwladn.QTfWwCwlcBo.QFSWwCwlcQo.Q2QWwCwlcQo.Q2QWwCwlrtJDQ2QWwCwlrtJDQ2QWwCwFvRKDQDYWwCwFt1KDQrtWwCwlfZLDQpRXwCwlA9LDQ5DYwCwFLgMDQREZwCwl4CNDQoSawCwFElNDQxubwCwFoGODQdYdwCwVfnODQbPfwCwFkHPDQZThwCw1xmPDQCkjwCwFDFQDQ8AmwCwFTiQDQypowCwVd+QDQGerwCwFdZRDQcduwCwVOzRDQXnxwCwlsLSDQU70wCwl0iSDQyY4wCwlh4SDQP.8wCwFxMTDQFu.xCwlffTDQtkDxCwlpwTDQhiHxCwFNAUDQ4mLxCwFHOUDQHxPxCwlVaUDQlAUxCwV2kUDQnUYxCwFotUDQfscxCwFp0UDQiHhxCwl45UDQCllxCwVV9UDQQEqxCwF..VDQgkuxCwF1+UDQEFzxCwF48UDQMl3xCwFI5UDQLE8xCwllzUDQUhAyCwlRsUDQ47EyCwFNjUDQJTJyCwlZYUDQdmNyCw14LUDQG1RyCwFt9TDQZ+VyCwF4tTDQtBayCwFdcTDQW+dyCwFeJTDQuzhyCwl+0SDQLhlyCwFCfSDQKGpyCwVrHSDQEisyCwl+uRDQY0vyCwFAVRDQi8yyCwVz5QDQE61yCwFddQDQfs4yCwlBAQDQWT7yCwFmhPDQOu9yCw1OCPDQw8.zCwFBiODQk+BzCwFCBODQUzDzCwFXfNDQwaFzCwVF9MDQl0GzCwlSaMDQnAIzCwFE3LDQo+IzCwlfTLDQeuJzCw1qvKDQCQKzCwlrLKDQPjKzCwlrtJDQOoKzCwlrtJDQOoKzCwlcQo.QOoKzCwlcQo.QOoKzCw1Ysn.QBhKzCw1aIn.QZLKzCwlokm.QbnJzCwVHBm.QL1IzCwF9dl.Qz0HzCwVP7k.QdmGzCw1DZk.QTKFzCw1f3j.QngDzCwloWj.QppBzCw1j2i.Qrl.zCwVWXi.QCV9yCwFF5h.QI46yCwF1bh.QSP4yCw1q.h.Q+a1yCw1qkg.QobyyCw15Kg.QtRvyCwVbyf.Qx9ryCwlTbf.QSgoyCwVmFf.Q15kyCw1Wxe.Q.LhyCwloee.QXUdyCwVeNe.QjWZyCwF79d.QMSVyCwFBwd.Q9HRyCwlyjd.Qe4MyCwlRZd.QdkIyCwFgQd.QkMEyCw1eJd.Qhx.yCwlPEd.QCU7xCwlyAd.Qz02xCwFJ.d.QiUyxCwF..d.QicwxCwF..d.QicwxC0F..d.Q..fmCwF..d.Q..fmCw14.d.QheamCw1lCd.Qx+VmCwlFHd.QegRmCwlXNd.QVENmCwlaVd.QDrImCwVNfd.QVVEmCwluqd.Q4DAmCwF83d.QY37lCw1zGe.Qfw3lCwlTXe.Q4vzlCwlYpe.QM2vlCwFA9e.QCEslCwlGSf.QBaolCwFpof.Qw4klCwFkAg.QxghlCwVzZg.QnSelCw1S0g.Q0OblCw1+Ph.Q3VYlCwVysh.QMoVlCwFpKi.QRGTlCwFepi.QfwQlCwlMJj.QNnOlCwlvpj.QyqMlCwlBLk.Qi7KlCwV9sk.QvZJlCwVdPl.QnFIlCwlcyl.Qa.HlCw10Vm.QRHGlCw1g5m.QWdFlCwladn.QvBFlCwlcBo.Qj0ElCwlcQo.QTzElCwlcQo.QTzElCwlrtJDQTzElCwlrtJDQTzElCwFvRKDQg6ElCwFt1KDQIQFlCwlfZLDQH0FlCwlA9LDQWmGlCwFLgMDQumHlCwl4CNDQF1IlCwFElNDQNRKlCwFoGODQ66LlCwVfnODQ5xNlCwFkHPDQ21PlCw1xmPDQfGSlCwFDFQDQZjUlCwFTiQDQPMXlCwVd+QDQjAalCwFdZRDQ6.dlCwVOzRDQzJglCwlsLSDQxdjlCwl0iSDQP7mlCwlh4SDQshqlCwFxMTDQhQulCwlffTDQKHylCwlpwTDQ+E2lCwFNAUDQVJ6lCwFHOUDQkT+lCwlVaUDQDjCmCwV2kUDQE3GmCwFotUDQ9OLmCwFp0UDQ.qPmCwl45UDQfHUmCwVV9UDQtmYmCwF..VDQ9GdmCwF1+UDQhnhmCwF48UDQpHmmCwFI5UDQomqmCwllzUDQxDvmCwlRsUDQVezmCwFNjUDQn13mCwlZYUDQ6I8mCw14LUDQjXAnCwFt9TDQ2gEnCwF4tTDQKkInCwFdcTDQzgMnCwFeJTDQLWQnCwl+0SDQpDUnCwFCfSDQnoXnCwVrHSDQhEbnCwl+uRDQ1WenCwFAVRDQ.fhnCwVz5QDQhcknCwFddQDQ8OnnCwlBAQDQz1pnCwFmhPDQrQsnCw1OCPDQNfunCwFBiODQBhwnCwFCBODQxVynCwFXfNDQN9znCwVF9MDQCX1nCwlSaMDQEj2nCwFE3LDQFh3nCwlfTLDQ7Q4nCw1qvKDQfy4nCwlrLKDQsF5nCwlrtJDQrK5nCwlrtJDQrK5nCwlcQo.QrK5nCwlcQo.QrK5nCw1Ysn.QeD5nCw1aIn.Q2t4nCwlokm.Q3J4nCwVHBm.QoX3nCwF9dl.QQX2nCwVP7k.Q5I1nCw1DZk.QxsznCw1f3j.QEDynCwloWj.QGMwnCw1j2i.QIIunCwVWXi.Qf3rnCwFF5h.QlapnCwF1bh.QvxmnCw1q.h.Qb9jnCw1qkg.QF+gnCw15Kg.QL0dnCwVbyf.QNganCwlTbf.QvCXnCwVmFf.QTcTnCw1Wxe.QdtPnCwloee.Q12LnCwVeNe.QA5HnCwF79d.Qp0DnCwFBwd.Qaq.nCwlyjd.Q7a7mCwlRZd.Q5G3mCwFgQd.QBvymCw1eJd.Q.UumCwlPEd.Qf2pmCwlyAd.QQXlmCwFJ.d.Q.3gmCwF..d.Q..fmCwF..d.Q..fmC0F..d.Q5DcXCwF..d.Q5DcXCw14.d.Q9CTXCw1lCd.QeDKXCwlFHd.Q3GBXCwlXNd.QlO4WCwlaVd.QAcvWCwVNfd.QlwmWCwluqd.QrNeWCwF83d.Qr0VWCw1zGe.Q5mNWCwlTXe.QrlFWCwlYpe.QTy9VCwFA9e.Q.O2VCwlGSf.Q+5uVCwFpof.Qb3nVCwFkAg.QdHhVCwVzZg.QJraVCw1S0g.QjjUVCw1+Ph.QnxOVCwVysh.QTWJVCwFpKi.QcSEVCwFepi.Q3m.VCwlMJj.QVU7UCwlvpj.Qfb3UCwlBLk.Q.9zUCwV9sk.QY5wUCwVdPl.QJRuUCwlcyl.QvEsUCw10Vm.QdUqUCw1g5m.QnApUCwladn.QbJoUCwlcBo.QAvnUCwlcQo.QgsnUCwlcQo.QgsnUCwlrtJDQgsnUCwlrtJDQgsnUCwFvRKDQ76nUCwFt1KDQLmoUCwlfZLDQIupUCwlA9LDQnSrUCwFLgMDQXTtUCwl4CNDQFwvUCwFElNDQXoyUCwFoGODQv71UCwVfnODQsp5UCwFkHPDQnx9UCw1xmPDQ4SCVCwFDFQDQvMHVCwFTiQDQZeMVCwVd+QDQBHSVCwFdZRDQuFYVCwVOzRDQiZeVCwlsLSDQdBlVCwl0iSDQa8rVCwlh4SDQTJzVCwFxMTDQ+m6VCwlffTDQPUCWCwlpwTDQ3PKWCwFNAUDQkYSWCwFHOUDQDtaWCwlVaUDQAMjWCwV2kUDQD0rWCwFotUDQzj0WCwFp0UDQ5Z9WCwl45UDQ4UGXCwVV9UDQWTPXCwF..VDQ2TYXCwF1+UDQ9UhXCwF48UDQNVqXCwFI5UDQMTzXCwllzUDQdN8XCwlRsUDQkCFYCwFNjUDQJxNYCwlZYUDQvXWYCw14LUDQB1eYCwFt9TDQoHnYCwF4tTDQPOvYCwFdcTDQhH3YCwFeJTDQPy+YCwl+0SDQLNGZCwFCfSDQJXNZCwVrHSDQ9OUZCwl+uRDQlzaZCwFAVRDQ6DhZCwVz5QDQ9+mZCwFddQDQzjsZCwlBAQDQhxxZCwFmhPDQSn2ZCw1OCPDQVE7ZCwFBiODQ8H.aCwFCBODQexCaCwFXfNDQVAGaCwVF9MDQ.0IaCwlSaMDQCMLaCwFE3LDQDINaCwlfTLDQwnOaCw1qvKDQ5qPaCwlrLKDQTRQaCwlrtJDQSbQaCwlrtJDQSbQaCwlcQo.QSbQaCwlcQo.QSbQaCw1Ysn.Q3MQaCw1aIn.QnhPaCwlokm.QrZOaCwVHBm.QL1MaCwF9dl.Qb0KaCwVP7k.QtXIaCw1DZk.QcfFaCw1f3j.QEMCaCwloWj.QGe+ZCw1j2i.QLW6ZCwVWXi.Q701ZCwFF5h.QD7wZCwF1bh.QZprZCw1q.h.QxAmZCw1qkg.QECgZCw15Kg.QQuZZCwVbyf.QVGTZCwlTbf.QZLMZCwVmFf.Qf+EZCw1Wxe.Q0g9YCwloee.Qjz1YCwVeNe.Q73tYCwF79d.QOvlYCwFBwd.QuadYCwlyjd.Qx7UYCwlRZd.QvTMYCwFgQd.Q9jDYCw1eJd.Q3t6XCwlPEd.Q5yxXCwlyAd.Qb0oXCwFJ.d.Q7zfXCwF..d.Q5DcXCwF..d.Q5DcXCMVY"; icons.more = Content.createPath(); icons.more.loadFromData(pathData); local icon = obj.text == "More" ? icons.more : icons.save; g.setColour(Colours.withAlpha(obj.textColour, obj.over ? 1.0 - 0.5 * obj.down : 0.7)); g.fillPath(icon, [a[0] + a[2] / 2 - 18 / 2, a[1] + a[3] / 2 - 18 / 2 + 2, 11, 11]); } } // Variables const var KnbSpread = Content.getComponent("KnbSpread"); const var KnbEllipse = Content.getComponent("KnbEllipse"); const var FxReverb = Synth.getEffect("FxReverb"); const var reverb_laf = Content.createLocalLookAndFeel(); reverb_laf.registerFunction("drawRotarySlider", function(g, obj) { // Knob Dimensions and Position var width = obj.area[2]; var height = obj.area[3]; var centerX = width / 2; var centerY = height / 2; // Spread Factor (Knob's Value) var spreadFactor = obj.valueNormalized; // Ellipse Settings var numEllipses = 5; // Number of ellipses var strokeWidth = 2; // Line thickness var maxRadius = Math.min(width, height) / 2; var step = maxRadius / numEllipses * spreadFactor; // Draw Ellipses for (i = 0; i < numEllipses; i++) { var radius = step * (i + 1); var opacity = Math.range(1.0 - (radius / maxRadius), 0.0, 1.0); g.setColour(Colours.withAlpha(0xece404, opacity)); g.drawEllipse([centerX - radius, centerY - radius, radius * 2, radius * 2], strokeWidth); } }); Content.getComponent("KnbEllipse").setLocalLookAndFeel(reverb_laf); // Control Callback // Pass the value from KnbSpread to both the Reverb Effect // & the Ellipse Graph inline function onKnbSpreadControl(component, value) { FxReverb.setAttribute(FxReverb.MIX, value); KnbEllipse.setValue(value); }; Content.getComponent("KnbSpread").setControlCallback(onKnbSpreadControl); //attack release LAF // Maak een LocalLookAndFeel aan voor het floating panel const floatingPanelLaf = Content.createLocalLookAndFeel(); // Verkrijg de referentie naar het floating panel "FloatingTile1" const floatingPanel = Content.getComponent("FloatingTile1"); // Wijs de nieuwe LookAndFeel toe aan het floating panel floatingPanel.setLocalLookAndFeel(floatingPanelLaf); //AudioWave LAF const var laf = Engine.createGlobalScriptLookAndFeel(); laf.registerFunction("drawThumbnailRange", function(g, obj) { g.fillAll(0); var x = obj.position * obj.area[2]; g.setColour(0xFFFF5400); // Zet de kleur van de lijn naar #E28936 (geel-oranje) g.drawLine(x, x, 0, obj.area[3], 10.0); // Teken een lijn van boven naar beneden met breedte 10 g.setColour(0xFFFFFFFF); // Zet de lijnkleur naar wit (#FFFFFF) g.drawLine(x, x, 0, obj.area[3], 1.5); // Teken nog een lijn met breedte 1.5 }); laf.registerFunction("drawThumbnailPath", function(g, obj) { g.fillAll(obj.bgColour); var a = obj.area; g.setGradientFill([0xFFFF5400, a[0], a[1], 0xFF8d478d, a[2], a[3]]); g.drawPath(obj.path, obj.area,1.5); g.fillPath(obj.path, obj.area); }); //LAF eq filter panel // laf const var FloatingTile3 = Content.getComponent("FloatingTile3"); const var EQLAF = Content.createLocalLookAndFeel(); EQLAF.registerFunction("drawFilterPath", function(g, obj) { var a = obj.area; g.setColour(0xFFFF5400); g.drawHorizontalLine(a[3] / 2, a[0], a[2]); g.setGradientFill([Colours.withAlpha(0xFFFF5400, 0.15), 100, 200, 0xFF8d478d, 300, 25]); g.fillPath(obj.path, obj.pathArea); g.setColour(0xFFFF5400); g.drawPath(obj.path, 2, 2); }); EQLAF.registerFunction("drawFilterDragHandle", function(g, obj) { var radius = 7; var h = obj.handle; g.setColour(0xFFFF5400); g.fillRoundedRectangle([h[0]+radius, h[1]+radius, h[2]-2*radius, h[3]-2*radius], 20); if(obj.hover) { g.setColour(0xFFFF5400); g.drawRoundedRectangle([h[0]+radius, h[1]+radius, h[2]-2*radius, h[3]-2*radius], 20, 1); } }); EQLAF.registerFunction("drawPopupMenuBackground", function(g, obj) { g.fillAll(0xFF000000); g.setColour(0xFF000000); g.drawRoundedRectangle([0, 0, obj.width, obj.height], 4, 2); }); FloatingTile3.setLocalLookAndFeel(EQLAF); //vintage knob connect const RC20 = Synth.getModulator("RC20"); const VinylCrack = Synth.getEffect("VinylCrack"); inline function onVintageControl(component, value) { if(value) { RC20.setBypassed(false); VinylCrack.setBypassed(false); } else { RC20.setBypassed(true); VinylCrack.setBypassed(true); } }; Content.getComponent("ButtonVintageON").setControlCallback(onVintageControl); //vintage plotter LAF; const plotter = Content.addFloatingTile("plotter", 570, 415); const var LFO1 = Synth.getModulator("RC20"); const var Laf = Content.createLocalLookAndFeel(); laf.registerFunction("drawAnalyserBackground", function(g, obj) { //Console.print(trace(obj)); //g.setGradientFill([Colours.cadetblue, 0, 0, Colours.orange, obj.area[2]*0.5, 100]); //g.fillRoundedRectangle(obj.area, 0); }); laf.registerFunction("drawAnalyserPath", function(g, obj) { //Console.print(trace(obj)); g.setColour(0xFFFF5400); g.setGradientFill([Colours.withAlpha(0xFFFF5400, 1), 0, 0,Colours.withAlpha(0xFF8d478d, 0.5), obj.area[2]*0.5, 100]); g.fillPath(obj.path, [a[0],a[1],a[2]*2,a[3]*46]); var a = obj.area; g.setGradientFill([Colours.withAlpha(0xFFFF5400, 1), 0, 0,Colours.withAlpha(0xFF8d478d, 0.5), obj.area[2]*0.5, 100]); g.drawPath(obj.path, [a[0],a[1],a[2]*2,a[3]*46], 2); }); plotter.setLocalLookAndFeel(laf); //custom knob const var Envelope1 = Synth.getModulator("AHDSR Envelope1"); // Create Knob + Label in one widget inline function knobPanel(name, x, y, obj) { local control; if (!Content.getComponent(name)) { control = Content.addPanel(name, x, y); } else { control = Content.getComponent(name); } Content.setPropertiesFromJSON( name, { "width": obj.width, "height": obj.height, "allowCallbacks": "Clicks, Hover & Dragging", "saveInPreset": true, "min": obj.min, "max": obj.max }); control.data.defaultValue = obj.defaultValue; control.data.p = Content.createPath(); // Add Label control.data.label = Content.addLabel(name + "Lbl", x, y); Content.setPropertiesFromJSON(name + "Lbl", { "visible": false // 🔥 Label wordt verborgen, maar blijft in de code staan }); //Paint routine control.setPaintRoutine(function(g) { g.setGradientFill([Colours.withAlpha(0xFF636070, 1), 25, 25, 0xFF0b0b0d, 0, 0]); g.fillEllipse([7.5, 7.5, this.get("width")-15, this.get("height")-15]); g.setGradientFill([Colours.withAlpha(0xFF636070, 1), 0, 0, 0xFF0b0b0d, 100, 100]); g.drawEllipse([7.5, 7.5, this.get("width")-15, this.get("height")-15], 1); var normalizedValue = (this.getValue() - this.get("min")) / (this.get("max") - this.get("min")); // 270° in Rad (2PI/3) var maxRot = Math.toRadians(270); var rotation = normalizedValue * maxRot; var rotationArea = [this.get("width")/2, this.get("height")/2]; // rotate for the dot g.rotate(rotation, rotationArea); //Dot afmetingen g.setColour(0xFF90929A); // Zorgt ervoor dat de kleur 100% opacity heeft g.fillEllipse([13, 25, 2, 2]); // Tekent het cirkeltje // rotate back to compensate for the arc g.rotate(-1 * rotation, rotationArea); // this is the start radian var startOffset = 2.5; var arcThickness = 0.03; var arcWidth = 1.0 - 2.0 * arcThickness; // Make sure you reset the path! this.data.p.clear(); // calculate the end radian from the current value var endOffset = -startOffset + 2.0 * startOffset * normalizedValue; // make sure the zero value draws a tiny fraction of the arc endOffset = Math.max(endOffset, -startOffset + 0.1); // Add the arc with the given area and its offsets in radian (0 ... 2*PI) this.data.p.addArc([arcThickness, arcThickness, arcWidth, arcWidth], -startOffset, endOffset); g.setColour(Colours.white); // this new method returns the scaled bounds with the correct ratio var pathArea = this.data.p.getBounds(this.getWidth()); //Lijn om knob // 🔥 Stap 1: Maak een volledig gevulde grijze arc (background) var backgroundArc = Content.createPath(); backgroundArc.addArc([arcThickness, arcThickness, arcWidth, arcWidth], -2.5, 2.5); // Volledige cirkel g.setColour(0xFF333333); // Donkergrijze kleur g.drawPath(backgroundArc, backgroundArc.getBounds(this.getWidth()), this.getWidth() * arcThickness); //grijze lijn // 🔥 Stap 2: Teken de oranje arc erbovenop, gebaseerd op waarde van de knop g.setColour(0xFFFF5400); // Oranje arc g.drawPath(this.data.p, this.data.p.getBounds(this.getWidth()), this.getWidth() * arcThickness); }); // Define a callback behaviour when you select a popup menu... control.setMouseCallback(function(event) { if(event.clicked) { // save the value from the mouse click this.data.downValue = this.getValue(); } if(event.drag) { // Calculate the distance using diagonal drag support var dragDistance = event.dragX + -1.0 * event.dragY; // Calculate the sensitivity value based on the value range var dragSensitivity = 500 / (this.get("max") - this.get("min")); // Verhoog de factor var normalizedDistance = dragDistance / dragSensitivity; // Calculate the new value (limit it to the given range) var newValue = Math.range(this.data.downValue + normalizedDistance, this.get("min"), this.get("max")); var textValue = Engine.doubleToString(newValue, 1); this.data.label.set("text", textValue); // Ignore the mouse events above the limits if(newValue != this.getValue()) { // Change the value this.setValue(newValue); // Call the paint method // unlike repaint, this is a bit faster, but call this only // in either the mouse callback or the timer callback of the panel this.repaintImmediately(); // this method triggers the control callback this.changed(); } } }); return control; } //Afmetingen const var knb = knobPanel("firstKnob", 318, 525, {width:40, height:40, min:0, max:5000, defaultValue:0}); const var knb2 = knobPanel("sustainKnob", 375, 525, {width:40, height:40, min:-100, max:0, defaultValue:0}); const var knb3 = knobPanel("decayKnob", 435, 525, {width:40, height:40, min:0, max:20000, defaultValue:0}); const var knb4 = knobPanel("releaseKnob", 490, 525, {width:40, height:40, min:0, max:20000, defaultValue:0}); const var knb5 = knobPanel("rc20", 650, 525, {width:40, height:40, min:0, max:20000, defaultValue:0}) ; //KNOPPEN // Attack (eerste knop) inline function onknbControl(component, value) { Envelope1.setAttribute(Envelope1.Attack, value); }; Content.getComponent("firstKnob").setControlCallback(onknbControl); // Sustain (tweede knop) inline function onknb2Control(component, value) { Envelope1.setAttribute(Envelope1.Sustain, value); }; Content.getComponent("sustainKnob").setControlCallback(onknb2Control); //decay inline function onknb3Control(component, value) { Envelope1.setAttribute(Envelope1.Decay, value); }; Content.getComponent("decayKnob").setControlCallback(onknb3Control); //release inline function onknb4Control(component, value) { Envelope1.setAttribute(Envelope1.Release, value); }; Content.getComponent("releaseKnob").setControlCallback(onknb4Control); // 🔥 Haal de LFO-modulator op const var rc20LFO = Synth.getModulator("RC20"); inline function onrc20Control(component, value) { rc20LFO.setAttribute(rc20LFO.Intensity, value); // 🔥 Pas de Intensity-parameter aan }; // 🔥 Koppel de knob aan de callback via de juiste naam setIntensity(onrc20Control);
-
RE: SetControlCallback
@d-healey It is working for the AHDRS, but if I want to use a custom knob for a LFO I must make a knob with look and feel?
Should I rewrite the entire script, or just modify a small part of it?
-
RE: SetControlCallback
@d-healey I hwave made a custom LAF for my knobs. This way I add knobs with the same LAF
//custom knob const var Envelope1 = Synth.getModulator("AHDSR Envelope1"); // Create Knob + Label in one widget inline function knobPanel(name, x, y, obj) { local control; if (!Content.getComponent(name)) { control = Content.addPanel(name, x, y); } else { control = Content.getComponent(name); } Content.setPropertiesFromJSON( name, { "width": obj.width, "height": obj.height, "allowCallbacks": "Clicks, Hover & Dragging", "saveInPreset": true, "min": obj.min, "max": obj.max }); control.data.defaultValue = obj.defaultValue; control.data.p = Content.createPath(); // Add Label control.data.label = Content.addLabel(name + "Lbl", x, y); Content.setPropertiesFromJSON(name + "Lbl", { "visible": false // 🔥 Label wordt verborgen, maar blijft in de code staan }); //Paint routine control.setPaintRoutine(function(g) { g.setGradientFill([Colours.withAlpha(0xFF636070, 1), 25, 25, 0xFF0b0b0d, 0, 0]); g.fillEllipse([7.5, 7.5, this.get("width")-15, this.get("height")-15]); g.setGradientFill([Colours.withAlpha(0xFF636070, 1), 0, 0, 0xFF0b0b0d, 100, 100]); g.drawEllipse([7.5, 7.5, this.get("width")-15, this.get("height")-15], 1); var normalizedValue = (this.getValue() - this.get("min")) / (this.get("max") - this.get("min")); // 270° in Rad (2PI/3) var maxRot = Math.toRadians(270); var rotation = normalizedValue * maxRot; var rotationArea = [this.get("width")/2, this.get("height")/2]; // rotate for the dot g.rotate(rotation, rotationArea); //Dot afmetingen g.setColour(0xFF90929A); // Zorgt ervoor dat de kleur 100% opacity heeft g.fillEllipse([13, 25, 2, 2]); // Tekent het cirkeltje // rotate back to compensate for the arc g.rotate(-1 * rotation, rotationArea); // this is the start radian var startOffset = 2.5; var arcThickness = 0.03; var arcWidth = 1.0 - 2.0 * arcThickness; // Make sure you reset the path! this.data.p.clear(); // calculate the end radian from the current value var endOffset = -startOffset + 2.0 * startOffset * normalizedValue; // make sure the zero value draws a tiny fraction of the arc endOffset = Math.max(endOffset, -startOffset + 0.1); // Add the arc with the given area and its offsets in radian (0 ... 2*PI) this.data.p.addArc([arcThickness, arcThickness, arcWidth, arcWidth], -startOffset, endOffset); g.setColour(Colours.white); // this new method returns the scaled bounds with the correct ratio var pathArea = this.data.p.getBounds(this.getWidth()); //Lijn om knob // 🔥 Stap 1: Maak een volledig gevulde grijze arc (background) var backgroundArc = Content.createPath(); backgroundArc.addArc([arcThickness, arcThickness, arcWidth, arcWidth], -2.5, 2.5); // Volledige cirkel g.setColour(0xFF333333); // Donkergrijze kleur g.drawPath(backgroundArc, backgroundArc.getBounds(this.getWidth()), this.getWidth() * arcThickness); //grijze lijn // 🔥 Stap 2: Teken de oranje arc erbovenop, gebaseerd op waarde van de knop g.setColour(0xFFFF5400); // Oranje arc g.drawPath(this.data.p, this.data.p.getBounds(this.getWidth()), this.getWidth() * arcThickness); }); // Define a callback behaviour when you select a popup menu... control.setMouseCallback(function(event) { if(event.clicked) { // save the value from the mouse click this.data.downValue = this.getValue(); } if(event.drag) { // Calculate the distance using diagonal drag support var dragDistance = event.dragX + -1.0 * event.dragY; // Calculate the sensitivity value based on the value range var dragSensitivity = 500 / (this.get("max") - this.get("min")); // Verhoog de factor var normalizedDistance = dragDistance / dragSensitivity; // Calculate the new value (limit it to the given range) var newValue = Math.range(this.data.downValue + normalizedDistance, this.get("min"), this.get("max")); var textValue = Engine.doubleToString(newValue, 1); this.data.label.set("text", textValue); // Ignore the mouse events above the limits if(newValue != this.getValue()) { // Change the value this.setValue(newValue); // Call the paint method // unlike repaint, this is a bit faster, but call this only // in either the mouse callback or the timer callback of the panel this.repaintImmediately(); // this method triggers the control callback this.changed(); } } }); return control; } //Afmetingen const var knb = knobPanel("firstKnob", 318, 525, {width:40, height:40, min:0, max:5000, defaultValue:0}); const var knb2 = knobPanel("sustainKnob", 375, 525, {width:40, height:40, min:-100, max:0, defaultValue:0}); const var knb3 = knobPanel("decayKnob", 435, 525, {width:40, height:40, min:0, max:20000, defaultValue:0}); const var knb4 = knobPanel("releaseKnob", 490, 525, {width:40, height:40, min:0, max:20000, defaultValue:0}); const var knb5 = knobPanel("rc20", 650, 525, {width:40, height:40, min:0, max:20000, defaultValue:0})
-
RE: SetControlCallback
const var knb5 = knobPanel("rc20", 650, 525, {width:40, height:40, min:0, max:20000, defaultValue:0})
-
SetControlCallback
Hello,
I cant connect my LFO ("RC20") intensety control to my button. I get a error: Trokeys:! Line 635, column 24: Unknown function 'setControlCallback' {SW50ZXJmYWNlfG9uSW5pdCgpfDMyNjQ2fDYzNXwyNA==}
But i dont know what to change it to
const var rc20LFO = Synth.getModulator("RC20"); inline function onrc20Control(component, value) { rc20LFO.setAttribute(rc20LFO.Intensity, value); }; rc20.setControlCallback(onrc20Control)
-
RE: 1 on/of button controlling 2 effects
@Morphoice
Hi, the effect I call RC20 is a very simple LFO. I still want to expand it using ScriptFX, but I'll keep 2 buttons: one for the effect amount and one for vinyl crackle. Other than that, it's not very exciting, but connecting the buttons was quite a challenge.