Ejemplo n.º 1
0
void PlayerWidget::updateOverState(OverState newState) {
	bool result = true;
	if (_over != newState) {
		updateOverRect(_over);
		updateOverRect(newState);
		if (_over != OverNone) {
			_stateAnimations.remove(_over);
			_stateAnimations[-_over] = getms() - ((1. - _stateHovers[_over]) * st::playerDuration);
			if (!_a_state.animating()) _a_state.start();
		} else {
			result = false;
		}
		_over = newState;
		if (newState != OverNone) {
			_stateAnimations.remove(-_over);
			_stateAnimations[_over] = getms() - (_stateHovers[_over] * st::playerDuration);
			if (!_a_state.animating()) _a_state.start();
			setCursor(style::cur_pointer);
		} else {
			setCursor(style::cur_default);
		}
	}
}
Ejemplo n.º 2
0
void PlayerWidget::mousePressEvent(QMouseEvent *e) {
	QPoint pos(myrtlpoint(e->pos()));

	if (e->button() == Qt::LeftButton) {
		_down = OverNone;
		if (_song && _over == OverPlay) {
			playPausePressed();
			return;
		} else if (_over == OverPrev) {
			prevPressed();
		} else if (_over == OverNext) {
			nextPressed();
		} else if (_over == OverClose) {
			_down = OverClose;
		} else if (_over == OverVolume) {
			_down = OverVolume;
			_downCoord = pos.x() - _volumeRect.x();
			cSetSongVolume(snap((_downCoord - ((_volumeRect.width() - st::playerVolume.pxWidth()) / 2)) / float64(st::playerVolume.pxWidth()), 0., 1.));
			emit audioPlayer()->songVolumeChanged();
			rtlupdate(_volumeRect);
		} else if (_over == OverPlayback) {
			SongMsgId playing;
			AudioPlayerState playingState = AudioPlayerStopped;
			int64 playingPosition = 0, playingDuration = 0;
			int32 playingFrequency = 0;
			audioPlayer()->currentState(&playing, &playingState, &playingPosition, &playingDuration, &playingFrequency);
			if (playing == _song && playingDuration) {
				if (playingState == AudioPlayerPlaying || playingState == AudioPlayerStarting || playingState == AudioPlayerResuming) {
					audioPlayer()->pauseresume(OverviewDocuments);
				}
				_down = OverPlayback;
				_downProgress = snap((pos.x() - _playbackRect.x()) / float64(_playbackRect.width()), 0., 1.);
				_downDuration = playingDuration;
				_downFrequency = (playingFrequency ? playingFrequency : AudioVoiceMsgFrequency);

				rtlupdate(_playbackRect);
				updateDownTime();
			}
		} else if (_over == OverFull && _song) {
			if (HistoryItem *item = App::histItemById(_song.msgId)) {
				App::main()->showMediaOverview(item->history()->peer, OverviewAudioDocuments);
			}
		} else if (_over == OverRepeat) {
			_repeat = !_repeat;
			updateOverRect(OverRepeat);
		}
	}
}
Ejemplo n.º 3
0
void PlayerWidget::step_state(uint64 ms, bool timer) {
	for (StateAnimations::iterator i = _stateAnimations.begin(); i != _stateAnimations.cend();) {
		int32 over = qAbs(i.key());
		updateOverRect(OverState(over));

		float64 dt = float64(ms - i.value()) / st::playerDuration;
		if (dt >= 1) {
			_stateHovers[over] = (i.key() > 0) ? 1 : 0;
			i = _stateAnimations.erase(i);
		} else {
			_stateHovers[over] = (i.key() > 0) ? dt : (1 - dt);
			++i;
		}
	}
	if (_stateAnimations.isEmpty()) {
		_a_state.stop();
	}
}
Ejemplo n.º 4
0
bool PlayerWidget::stateStep(float64 msc) {
	bool result = false;
	uint64 ms = getms();
	for (StateAnimations::iterator i = _stateAnimations.begin(); i != _stateAnimations.cend();) {
		int32 over = qAbs(i.key());
		updateOverRect(OverState(over));

		float64 dt = float64(ms - i.value()) / st::playerDuration;
		if (dt >= 1) {
			_stateHovers[over] = (i.key() > 0) ? 1 : 0;
			i = _stateAnimations.erase(i);
		} else {
			_stateHovers[over] = (i.key() > 0) ? dt : (1 - dt);
			++i;
		}
	}
	return !_stateAnimations.isEmpty();
}