Search Unity

  1. Good news ✨ We have more Unite Now videos available for you to watch on-demand! Come check them out and ask our experts any questions!
    Dismiss Notice

Can someone elaborate on the GUIStyle.Draw Parameters?

Discussion in 'Immediate Mode GUI (IMGUI)' started by majeric, Jul 13, 2011.

  1. majeric


    Aug 17, 2010
    They aren't entirely clear. The documentation is a bit lacking.

    position : Rect, - Kind of poorly named because it's more than position. Itpretty much defines the boundaries for the component.
    content : GUIContent, - Straight forward for the most part.
    isHover : bool, - Flags if the mouse is over top of it. Makes sense.
    isActive : bool, - ???
    on : bool, - ???
    hasKeyboardFocus : bool - I'm guessing it gives the component the keyboard focus in the way that the isHover evokes the hover content.

    on and isActive is a bit confusing.

    To my understanding of component states. One generally has an "enabled" state which is an overriding state that greys out a component. The other is evoking the appearance to indicate that it's engaged. Like making button text go green or something or setting an "depressed" state visual.

    I'm just not sure what does what.

    Any clarifications would be most appreciated.

  2. KevS


    Apr 21, 2010
    Up ! Need help with isActive parameter

    Here is what I have deduced :

    isHover and isActive parameters refer to the GUIStyle.hover and fields. Use a GUISkin and it makes more clear :

    Code (csharp):
    1. GUIStyle myStyle = GUI.Skin.GetStyle("myCustomStyle");
    2. GUIStyle.Draw(myRect,mystring,true,false,false,false);
    It will draw your string with your custom style with the Hover background and Hover text color you defined with the GUISkin.

    The on parameter seems to refer to the OnHover and OnActive fields of a style. For example, if you want to draw your content with the OnHover look, you write :

    Code (csharp):
    1. GUIStyle myStyle = GUI.Skin.GetStyle("myCustomStyle");
    2. GUIStyle.Draw(myRect,mystring,true,false,true,false);
    It makes sense : isHover + on = OnHover, same with isActive.

    Then there is the hasKeyboardFocus parameter. I think it refers to the Focused/OnFocused field, but there is no isFocus parameter ^^ It simply use the isHover parameter (I mean, focus is use for keyboard and hover for mouse but it is the same "action")

    My tests seem to agree with that explanation :)

    The only problem is the isActive parameter which doesn't seem to work :(
    When I write :

    Code (csharp):
    1. GUIStyle myStyle = GUI.Skin.GetStyle("myCustomStyle");
    2. GUIStyle.Draw(myRect,mystring,false,true,false,false);
    It doesnt draw my content with the Active background and text color of my style :(
    Can someone explain that ? :(

    Please :D
  3. gekko22


    Aug 1, 2013
    Thanks KevS,

    I had the same thoughts on the "on" parameter. But needed someone, who agrees.

    Unfortunately, I have the same problem like you:
    My active state is not drawn. Hover works fine, though. I tried every combination.
    Please, can someone explain?
  4. dkozar


    Nov 30, 2009
    There are 8 states: the "on" states are states 5-8. These have to be defined in your style if you want to see them when using the "on" parameter set to true.
    Code (csharp):
    2. GUIStyle.Draw(position: Rect, isHover: bool, isActive: bool, on: bool, hasKeyboardFocus: bool): void;
    When isHover, isActive and hasKeyboardFocus are false, draws the "Normal" state.

    The following switches kick in, each taking precedence from the previous one:

    isHover = true -> draws the "Hover" state
    isActive = true -> draws the "Active" state
    hasKeyboardFocus = true -> draws the "Focused" state

    Additionally, when the on switch is true, draws the "OnNormal", "OnHover", "OnActive" and "onFocused" state.
    Mark-Currie likes this.
  5. unityBerserker


    Mar 31, 2016
    IsActive only works when isHover = true.