//
// Overshoot mixin
//

@mixin overshoot($p, $t:normal, $c:$fg_color)
{
    //
    // Overshoot
    //
    // (this defines the gradients used to indicate the user has "over-scrolled" a
    // scrollable widget (the semi-transparent gradient that shows how much they have
    // "overshot" their scrolling)
    //
    // $p: position
    // $t: type
    // $c: base color
    //
    // possible $p values:
    // top, bottom, right, left
    //
    // possible $t values:
    // normal, backdrop
    //
    $_small_gradient_length: 5%;
    $_big_gradient_length:   100%;

    $_position:            center top;
    $_small_gradient_size: 100% $_small_gradient_length;
    $_big_gradient_size:   100% $_big_gradient_length;

    @if $p == bottom
    {
        $_position: center bottom;
        $_linear_gradient_direction: to top;
    }

    @else if $p == right
    {
        $_position: right center;
        $_small_gradient_size: $_small_gradient_length 100%;
        $_big_gradient_size:   $_big_gradient_length   100%;
    }

    @else if $p == left
    {
        $_position: left center;
        $_small_gradient_size: $_small_gradient_length 100%;
        $_big_gradient_size:   $_big_gradient_length   100%;
    }

    $_small_gradient_color: $c;
    $_big_gradient_color:   $c;

    @if $c == $fg_color
    {
        $_small_gradient_color: darken($borders_color, 10%);
        $_big_gradient_color: $fg_color;

        @if $t == backdrop
        {
            $_small_gradient_color: $backdrop_borders_color;
        }
    }

    $_small_gradient: -gtk-gradient(
                          radial,
                          $_position, 0,
                          $_position, 0.5,
                          to($_small_gradient_color),
                          to(transparentize($_small_gradient_color, 1))
                      );

    $_big_gradient: -gtk-gradient(
                        radial,
                        $_position, 0,
                        $_position, 0.6,
                        from(transparentize($_big_gradient_color, 0.93)),
                        to(transparentize($_big_gradient_color, 1))
                    );

    @if $t == normal
    {
        background-image: $_small_gradient,      $_big_gradient;
        background-size:  $_small_gradient_size, $_big_gradient_size;
    }
    @else if $t == backdrop
    {
        background-image: $_small_gradient;
        background-size:  $_small_gradient_size;
    }

    background-repeat:   no-repeat;
    background-position: $_position;

    background-color: transparent; // Reset some properties to be sure to not inherit them somehow
    border:           none;        //
    box-shadow:       none;        //
}
