Ejemplo n.º 1
0
    public override bool draw(float w)
    {
        // Create player.

        float padding = CrhcConstants.PADDING_H.getAs(NumberType.PIXELS);

        w -= 2 * padding;
        float h = getPixelHeight(w);

        Rect region = new Rect(0, 0, w, h), paddingRegion = new Rect(padding, 0, w, h);

        GUIX.beginClip(paddingRegion);

        if (hasWaveformTexture)
        {
            GUIX.drawTexture(region, waveformTexture);

            ITouch iTouch = ServiceLocator.getITouch();
            if (GUIX.isTouchInsideRect(region))
            {
                if (iTouch.checkTap())
                {
                    onClick();
                    togglePlayPause();
                }
                else if (!wasHeld && iTouch.isHeld())
                {
                    if (!isScrubbing)
                    {
                        onClick();
                        isScrubbing = true;
                        pause();
                    }
                }
            }
            wasHeld = iTouch.isHeld();

            if (iTouch.isDown())
            {
                if (isScrubbing)
                {
                    float len = audioClip.getResource().length;

                    audioSource.time = Math.Max(0, Math.Min(len * (iTouch.getTouchPosition().x - padding) / w, len));
                    iTouch.clearDragVector();
                }
            }
            else
            {
                if (isScrubbing)
                {
                    isScrubbing = false;
                    play();
                }
            }

            if (!audioSource.isPlaying && playState == PlayState.PLAYING)
            {
                stop();
            }

            if (playState != PlayState.STOPPED)
            {
                Color color = (playState == PlayState.PLAYING) ? CrhcConstants.COLOR_RED : CrhcConstants.COLOR_BLUE_DARK;
                float frac = audioSource.time / audioSource.clip.length, bx = w * frac, bw = 5;
                GUIX.fillRect(new Rect(bx - bw / 2, 0, bw, h), color);
            }

            drawTouchRing(region);
        }
        else
        {
            if (audioClip.isLoaded() && waveformTexture == null)
            {
                AudioClip_onLoad();
            }

            GUIX.strokeRect(region, CrhcConstants.COLOR_GRAY_DARK, 1);
            GUIX.fillRect(new Rect(0, 0, w * progress, h), CrhcConstants.COLOR_GRAY_DARK);
        }

        GUIX.endClip();

        return(false);
    }