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); }