HISE Logo Forum
    • Categories
    • Register
    • Login

    Example of themed GUI

    Scheduled Pinned Locked Moved Scripting
    15 Posts 2 Posters 3.1k Views
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • d.healeyD
      d.healey
      last edited by

      Is there a middlePosition setting for panels?

      Libre Wave - Freedom respecting instruments and effects
      My Patreon - HISE tutorials
      YouTube Channel - Public HISE tutorials

      1 Reply Last reply Reply Quote 0
      • Christoph HartC
        Christoph Hart
        last edited by

        Nope, just for Sliders (I thought it would be a Slider). For Panels, you'll need to implement this yourself. The formula for this is not entirely trivial, but IIRC it involves log and exp :)

        1 Reply Last reply Reply Quote 0
        • d.healeyD
          d.healey
          last edited by

          Oh I'm dumb, I forgot we could change the knob style, I implemented my own slider system with panels. Oh well, I'm going to change them to knob controls now :)

          Libre Wave - Freedom respecting instruments and effects
          My Patreon - HISE tutorials
          YouTube Channel - Public HISE tutorials

          1 Reply Last reply Reply Quote 0
          • d.healeyD
            d.healey
            last edited by d.healey

            And for a little fun here's a colour picker module:

            alt text

            /**
             * Title: colourPicker.js
             * Author: David Healey
             * Date: 07/09/2017
             * Modified: 07/09/2017
             * License: Public Domain
            */
            
            Content.setHeight(175);
            
            reg colour = [];
            reg colourString;
            
            const var alpha = Content.addKnob("Alpha", 0, 0);
            alpha.setRange(0, 255, 1);
            alpha.set("style", "Vertical");
            alpha.set("itemColour", 0xFFAAAAAA);
            alpha.set("bgColour", 0xFF000000);
            const var red = Content.addKnob("Red", 150, 0);
            red.setRange(0, 255, 1);
            red.set("style", "Vertical");
            red.set("itemColour", 0xFFFF0000);
            red.set("bgColour", 0xFF000000);
            const var green = Content.addKnob("Green", 300, 0);
            green.setRange(0, 255, 1);
            green.set("itemColour", 0xFF64FF4E);
            green.set("bgColour", 0xFF000000);
            green.set("style", "Vertical");
            const var blue = Content.addKnob("Blue", 450, 0);
            blue.setRange(0, 255, 1);
            blue.set("style", "Vertical");
            blue.set("itemColour", 0xFF1C00FF);
            blue.set("bgColour", 0xFF000000);
            
            const var code = Content.addLabel("code", 600, 10);
            code.set("bgColour", 0xFF000000);
            
            const var pnlColour = Content.addPanel("pnlColour", 0, 50);
            pnlColour.set("width", 750);
            pnlColour.set("height", 100);
            pnlColour.setPaintRoutine(function(g){g.fillAll(parseInt(colourString));});
            
            inline function convertToHex(v)
            {
            	reg hexTable = ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "A", "B", "C", "D", "E", "F"];
            	reg d1 = hexTable[Math.floor(v/16)];
            	reg d2 = hexTable[Math.floor(v % 16)];
            	
            	return d1 + d2;
            }
            
            inline function updateCode()
            {
            	code.set("text", "0x" + colour[0] + colour[1] + colour[2] + colour[3]);
            	colourString = "0x" + colour[0] + colour[1] + colour[2] + colour[3];	
            }function onNoteOn()
            {
            	
            }
            function onNoteOff()
            {
            	
            }
            function onController()
            {
            	
            }
            function onTimer()
            {
            	
            }
            function onControl(number, value)
            {
            	switch (number)
            	{
            		case alpha:
            			colour[0] = convertToHex(parseInt(value));
            			updateCode();
            			pnlColour.repaintImmediately();
            		break;
            		
            		case red:
            			colour[1] = convertToHex(parseInt(value));
            			updateCode();
            			pnlColour.repaintImmediately();
            		break;
            		
            		case green:
            			colour[2] = convertToHex(parseInt(value));
            			updateCode();
            			pnlColour.repaintImmediately();
            		break;
            		
            		case blue:
            			colour[3] = convertToHex(parseInt(value));
            			updateCode();
            			pnlColour.repaintImmediately();
            		break;		
            	}
            }
            

            Libre Wave - Freedom respecting instruments and effects
            My Patreon - HISE tutorials
            YouTube Channel - Public HISE tutorials

            1 Reply Last reply Reply Quote 2
            • Christoph HartC
              Christoph Hart
              last edited by

              Nice - although there are a million websites which do the same thing :)

              BTW, here are some conversion functions that might come in handy to convert between a normalised range and the full value (you can eg. use those in your vector knob):

              /** Converts a normalized value to the given range.
              *
              *   - value:  the value from 0 to 1
              *   - min:	  the low end of the range
              *   - max:    the upper end of the range
              *   - skew:   changes the scale 
              *       1 = linear, 
              *      <1 = high extended
              *      >1 = low extended
              */
              namespace NormalisedRange
              {
              	inline function from0to1(value, min, max, skew)
              	{
              		local v = Math.pow(value, skew);
              		v = min + v * (max-min);
              		return v;
              	}
              
              	inline function to0to1(value, min, max, skew)
              	{
              		local v = value / (max-min) - min;
              		v = Math.pow(v, 1.0/skew);
              		return v;
              	}
              };
              
              1 Reply Last reply Reply Quote 2
              • d.healeyD
                d.healey
                last edited by

                Nice - although there are a million websites which do the same thing :)

                Yeah but that means opening another window :) which is what I was doing previously. There's no fun in that.

                Thanks, I've been using a similar conversion function but yours is far more elegant.

                Libre Wave - Freedom respecting instruments and effects
                My Patreon - HISE tutorials
                YouTube Channel - Public HISE tutorials

                1 Reply Last reply Reply Quote 0
                • Christoph HartC
                  Christoph Hart
                  last edited by

                  Lol, I thought about adding a web browser as floating tile for stuff like this but then I discovered that there's a name for this software development approach :)

                  1 Reply Last reply Reply Quote 1
                  • d.healeyD
                    d.healey
                    last edited by

                    Hmmmm now you mention it, can HISE parse web links and open a browser?

                    Libre Wave - Freedom respecting instruments and effects
                    My Patreon - HISE tutorials
                    YouTube Channel - Public HISE tutorials

                    1 Reply Last reply Reply Quote 0
                    • Christoph HartC
                      Christoph Hart
                      last edited by

                      There's a JUCE method that opens a URL in the OS' default browser, and I could add a wrapper for this. For what purpose would you need this?

                      1 Reply Last reply Reply Quote 0
                      • d.healeyD
                        d.healey
                        last edited by

                        I was thinking it would be nice to include a link to my website somewhere on the GUI.

                        Libre Wave - Freedom respecting instruments and effects
                        My Patreon - HISE tutorials
                        YouTube Channel - Public HISE tutorials

                        1 Reply Last reply Reply Quote 0
                        • Christoph HartC
                          Christoph Hart
                          last edited by

                          I also had this idea in mind (that's precisely what the company URL field in the User Settings dialogue is for). I think the best way for this is adding an About page floating tile, which also shows the registered e-mail address of the user along with some other useful information.

                          1 Reply Last reply Reply Quote 1
                          • First post
                            Last post

                          21

                          Online

                          1.7k

                          Users

                          11.9k

                          Topics

                          103.4k

                          Posts