HISE Logo Forum
    • Categories
    • Register
    • Login

    Example of themed GUI

    Scheduled Pinned Locked Moved Scripting
    15 Posts 2 Posters 3.0k 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.
    • 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

                        19

                        Online

                        1.7k

                        Users

                        11.8k

                        Topics

                        103.2k

                        Posts