Ejemplo n.º 1
0
 private bool EqualStop(LW_ColorStop other)
 {
     return(
         percentage == other.percentage &&
         color == other.color
         );
 }
Ejemplo n.º 2
0
        /// <summary>
        /// Removes the provided LW_ColorStop to the list of color stops.
        /// </summary>
        /// <param name="stop"></param>
        public void RemoveStop(LW_ColorStop stop)
        {
            List <LW_ColorStop> colors = gradientColors;

            if (colors.Contains(stop))
            {
                colors.Remove(stop);
            }
            gradientColors = colors;
            SetElementDirty();
        }
Ejemplo n.º 3
0
        protected override void OnValidate()
        {
            if (m_GradientColors == null || m_GradientColors.Count == 0)
            {
                m_GradientColors = new List <LW_ColorStop>()
                {
                    new LW_ColorStop(Color.white, 0f), new LW_ColorStop(Color.black, 1f)
                }
            }
            ;
            if (m_GradientColors != null && m_GradientColors.Count > 0)
            {
                float min = 0;
                float max = 1;
                for (int i = 0; i < m_GradientColors.Count; i++)
                {
                    max = i < m_GradientColors.Count - 1 ? m_GradientColors[i + 1].percentage : 1;
                    LW_ColorStop stop = m_GradientColors[i];
                    stop.percentage     = Mathf.Clamp(stop.percentage, min, max);
                    m_GradientColors[i] = stop;
                    min = stop.percentage;
                }

                /*
                 * m_GradientColors.Sort(delegate(LW_ColorStop x, LW_ColorStop y){
                 *      if (x.percentage - y.percentage > 0) return 1;
                 *      else if (x.percentage - y.percentage < 0) return -1;
                 *      else return 0;
                 * });
                 */
                LW_ColorStop firstStop = m_GradientColors[0];
                firstStop.percentage = 0;
                m_GradientColors[0]  = firstStop;
                if (m_GradientColors.Count > 1)
                {
                    LW_ColorStop lastStop = m_GradientColors[m_GradientColors.Count - 1];
                    lastStop.percentage = 1;
                    m_GradientColors[m_GradientColors.Count - 1] = lastStop;
                }
            }
            base.OnValidate();
        }
                #endif
    }
Ejemplo n.º 4
0
        internal virtual Color ColorAtPercentage(float percentage)
        {
            Color color = s_White;

            switch (m_PaintMode)
            {
            case PaintMode.Solid:
                if (m_GradientColors != null && m_GradientColors.Count > 0)
                {
                    color = m_GradientColors[0].color;
                }
                else
                {
                    color = s_White;
                }
                break;

            case PaintMode.LinearGradient:
            case PaintMode.RadialGradient:
                if (m_GradientColors != null && m_GradientColors.Count > 0)
                {
                    if (m_GradientColors.Count == 1)
                    {
                        color = m_GradientColors[0].color;
                    }
                    else
                    {
                        int closestIndex = 0;
                        for (int i = 0; i < m_GradientColors.Count; i++)
                        {
                            if (m_GradientColors[i].percentage < percentage)
                            {
                                closestIndex = i;
                            }
                            else
                            {
                                break;
                            }
                        }
                        LW_ColorStop start = m_GradientColors[closestIndex];
                        LW_ColorStop end   = closestIndex < m_GradientColors.Count - 1 ? m_GradientColors[closestIndex + 1] : m_GradientColors[closestIndex];
                        if (start.percentage != end.percentage)
                        {
                            float t = (percentage - start.percentage) / (end.percentage - start.percentage);
                            color = Color.Lerp(start.color, end.color, t);
                        }
                        else
                        {
                            color = start.color;
                        }
                    }
                }
                else
                {
                    color = s_White;
                }
                break;
            }
            color.a *= m_Opacity;
            return(color);
        }
Ejemplo n.º 5
0
 /// <summary>
 /// Adds a LW_ColorStop to the list of color stops.
 /// </summary>
 /// <param name="stop"></param>
 public void AddStop(LW_ColorStop stop)
 {
     //Debug.Log("AddingStop: "  + stop.color + " : " + stop.percentage);
     m_GradientColors.Add(stop);
     SetElementDirty();
 }
Ejemplo n.º 6
0
        internal override Color ColorAtPercentage(float percentage)
        {
            Color color = s_White;

            switch (m_PaintMode)
            {
            case PaintMode.Solid:
                if (m_GradientColors != null && m_GradientColors.Count > 0)
                {
                    color = m_GradientColors[0].color;
                }
                else
                {
                    color = s_White;
                }
                break;

            case PaintMode.LinearGradient:
            case PaintMode.RadialGradient:
                if (m_GradientColors != null && m_GradientColors.Count > 0)
                {
                    if (m_GradientColors.Count == 1)
                    {
                        color = m_GradientColors[0].color;
                    }
                    else
                    {
                        if (m_SpaceColorsEvenly)
                        {
                            int          beforeIndex      = Mathf.FloorToInt(percentage * (m_GradientColors.Count - 1));
                            int          afterIndex       = beforeIndex < m_GradientColors.Count - 1 ? beforeIndex + 1 : beforeIndex;
                            LW_ColorStop beforeStop       = m_GradientColors[beforeIndex];
                            LW_ColorStop afterStop        = m_GradientColors[afterIndex];
                            float        beforePercentage = (float)beforeIndex / (float)(m_GradientColors.Count - 1);
                            float        afterPercentage  = (float)afterIndex / (float)(m_GradientColors.Count - 1);
                            if (beforePercentage != afterPercentage)
                            {
                                float t = (percentage - beforePercentage) / (afterPercentage - beforePercentage);
                                color = Color.Lerp(beforeStop.color, afterStop.color, t);
                            }
                            else
                            {
                                color = beforeStop.color;
                            }
                        }
                        else
                        {
                            int closestIndex = 0;
                            for (int i = 0; i < m_GradientColors.Count; i++)
                            {
                                if (m_GradientColors[i].percentage < percentage)
                                {
                                    closestIndex = i;
                                }
                                else
                                {
                                    break;
                                }
                            }
                            LW_ColorStop start = m_GradientColors[closestIndex];
                            LW_ColorStop end   = closestIndex < m_GradientColors.Count - 1 ? m_GradientColors[closestIndex + 1] : m_GradientColors[closestIndex];
                            if (start.percentage != end.percentage)
                            {
                                float t = (percentage - start.percentage) / (end.percentage - start.percentage);
                                color = Color.Lerp(start.color, end.color, t);
                            }
                            else
                            {
                                color = start.color;
                            }
                        }
                    }
                }
                else
                {
                    color = s_White;
                }
                break;
            }
            color.a *= m_Opacity;
            return(color);
        }