void StencilSlider::refresh() {
		_bar->stopAllActions();
		_bar->setPosition(getBarPosition());
		if (_head != nullptr) {
			_head->setPosition(getHeadPosition());
		}
	}
	void StencilSlider::refreshWithScroll(float duration, const EaseBuilder& easeBuilder) {
		_bar->stopAllActions();
		_bar->runAction(easeBuilder.build(MoveTo::create(duration, getBarPosition())));
		if (_head != nullptr) {
			_head->stopAllActions();
			_head->runAction(easeBuilder.build(MoveTo::create(duration, getHeadPosition())));
		}
	}
bool midiSequencer::mouseMotion(int _x, int _y)
{
	if(mark.pressed()){
		int newPos=_x-x+getBarPosition();
		if(_x<x) newPos=0;
		else if(_x>ofGetWidth()) newPos=ofGetWidth();
		setCursorPosition(newPos);
		mark.x=cursorPos+x;
	}
	else if(bar.mouseMotion(_x, _y));
}
void midiSequencer::update()
{
	band->update(-getBarPosition(),OF_HOR);
	if(isPlaying())
		band->checkActives(cursor()+band->w);
	if(loopBut.pressed()&&cursor()>band->farthestPoint()-x)
		reset();
	midiConductor::update();
	double temp=metronome.getElapsedf()*pps-w/2;
	if (bPlaying&&cursorPos>=w/2+bar.getScrollPosition()&&bar.setScrollPosition(temp));
	mark.x=cursor()+x;
	//bar.update();
}
bool midiSequencer::clickDown(int _x, int _y)
{
	if(mark.clickDown(_x, _y));
	else if(_y<mark.y+mark.h){
		mark.setPressed(true);
		setCursorPosition(_x-x+getBarPosition());
		mark.x=cursorPos+x;
	}
	else if(bar.clickDown(_x, _y));
	else if(playBut.toggle(_x, _y)){
		bPlaying=!playBut.pressed();
		if(isPlaying()) midiConductor::pause(),band->stopAll();
		else midiConductor::play();
	}
	else if(rewindBut.clickDown(_x, _y)) reset(), setScrollPos(0);
	else if(loopBut.toggle(_x, _y));
		
}
Beispiel #6
0
pp_int32 PPSlider::handleEvent(PPObject* sender, PPEvent* event)
{

	if (
		(event->getID() == eLMouseUp &&
		sender == reinterpret_cast<PPObject*>(buttonUp)) ||
		(event->getID() == eLMouseRepeat &&
		sender == reinterpret_cast<PPObject*>(buttonUp)) ||
		(event->getID() == eRMouseUp &&
		sender == reinterpret_cast<PPObject*>(buttonUp)) ||
		(event->getID() == eRMouseRepeat &&
		sender == reinterpret_cast<PPObject*>(buttonUp))
		)
	{
		// Call parent event listener
		//PPEvent e(eBarScrollUp);
		//return eventListener->handleEvent(reinterpret_cast<PPObject*>(this), &e);
		
		if (currentValue > minValue)
			currentValue--;
	
		float f = (float)(currentValue - minValue)/(maxValue - minValue);

		setBarPosition((pp_int32)(f*65536.0f));
		
		parentScreen->paintControl(this);

		PPEvent e(eValueChanged);

		return eventListener->handleEvent(reinterpret_cast<PPObject*>(this), &e);
	}
	if (
		(event->getID() == eLMouseUp &&
		sender == reinterpret_cast<PPObject*>(buttonDown)) ||
		(event->getID() == eLMouseRepeat &&
		sender == reinterpret_cast<PPObject*>(buttonDown)) ||
		(event->getID() == eRMouseUp &&
		sender == reinterpret_cast<PPObject*>(buttonDown)) ||
		(event->getID() == eRMouseRepeat &&
		sender == reinterpret_cast<PPObject*>(buttonDown))
		)
	{
		// Call parent event listener
		//PPEvent e(eBarScrollDown);
		//return eventListener->handleEvent(reinterpret_cast<PPObject*>(this), &e);

		if (currentValue < maxValue)
			currentValue++;

		float f = (float)(currentValue - minValue)/(maxValue - minValue);

		setBarPosition((pp_int32)(f*65536.0f));

		parentScreen->paintControl(this);
		
		PPEvent e(eValueChanged);

		return eventListener->handleEvent(reinterpret_cast<PPObject*>(this), &e);
	}
	else if (/*event->getID() == eLMouseDown &&*/
			 sender == reinterpret_cast<PPObject*>(backgroundButton))
	{
		
		if (horizontal)
		{
			PPPoint* p = (PPPoint*)event->getDataPtr();
			
			if (p->x < buttonBar->getLocation().x)
			{
				pp_int32 bsize = buttonBar->getSize().width;
				pp_int32 entireSize = size.width - SLIDERBUTTONWIDTH*2;

				float f = (float)entireSize/(float)(entireSize - bsize);

				currentBarPosition-=(pp_int32)(currentBarSize*f);
				if (currentBarPosition < 0) currentBarPosition = 0;
				setBarPosition(currentBarPosition);
				
				// Call parent event listener
				//PPEvent e(eBarPosChanged);
				//return eventListener->handleEvent(reinterpret_cast<PPObject*>(this), &e);
			}
			else if (p->x > buttonBar->getLocation().x + buttonBar->getSize().width)
			{
				pp_int32 bsize = buttonBar->getSize().width;
				pp_int32 entireSize = size.width - SLIDERBUTTONWIDTH*2;

				float f = (float)entireSize/(float)(entireSize - bsize);

				currentBarPosition+=(pp_int32)(currentBarSize*f);
				if (currentBarPosition > 65536) currentBarPosition = 65536;
				setBarPosition(currentBarPosition);
				
				// Call parent event listener
				//PPEvent e(eBarPosChanged);
				//return eventListener->handleEvent(reinterpret_cast<PPObject*>(this), &e);
			}
		}
		else 
		{
			PPPoint* p = (PPPoint*)event->getDataPtr();
			
			if (p->y < buttonBar->getLocation().y)
			{
				pp_int32 bsize = buttonBar->getSize().height;
				pp_int32 entireSize = size.height - SLIDERBUTTONHEIGHT*2;

				float f = (float)entireSize/(float)(entireSize - bsize);

				currentBarPosition-=(pp_int32)(currentBarSize*f);
				if (currentBarPosition < 0) currentBarPosition = 0;
				setBarPosition(currentBarPosition);
				
				// Call parent event listener
				//PPEvent e(eBarPosChanged);
				//return eventListener->handleEvent(reinterpret_cast<PPObject*>(this), &e);
			}
			else if (p->y > buttonBar->getLocation().y + buttonBar->getSize().height)
			{
				pp_int32 bsize = buttonBar->getSize().height;
				pp_int32 entireSize = size.height - SLIDERBUTTONHEIGHT*2;

				float f = (float)entireSize/(float)(entireSize - bsize);

				currentBarPosition+=(pp_int32)(currentBarSize*f);
				if (currentBarPosition > 65536) currentBarPosition = 65536;
				setBarPosition(currentBarPosition);
				
				// Call parent event listener
				//PPEvent e(eBarPosChanged);
				//return eventListener->handleEvent(reinterpret_cast<PPObject*>(this), &e);
			}
		}
				

	}
	else if ((event->getID() == eLMouseDrag && sender == reinterpret_cast<PPObject*>(buttonBar)) ||
			 (event->getID() == eRMouseDrag && sender == reinterpret_cast<PPObject*>(buttonBar)))
	{
		PPPoint* p = (PPPoint*)event->getDataPtr();
	
		pp_int32 pos = 0,dx,nx;

		if (horizontal)
		{

			dx = (p->x - caughtMouseLocation.x);
			
			/*if (dx < 0)
			{
				__asm
				{
					int 3
				}
			}*/
			
			nx = caughtControlLocation.x + dx;
			//if (nx < location.x + SLIDERBUTTONSIZE)
			//	nx = location.x + SLIDERBUTTONSIZE;
			//if (nx > location.x + size.width - SLIDERBUTTONSIZE*2 - buttonBar->getSize().width)
			//	nx = location.x + size.width - SLIDERBUTTONSIZE*2 - buttonBar->getSize().width;
			
			nx-=(location.x + SLIDERBUTTONWIDTH);
			
			pp_int32 d = (size.width - buttonBar->getSize().width - SLIDERBUTTONWIDTH*2);
			
			if (d != 0)
				pos = nx*65536 / d;			
		}
		else
		{
			dx = (p->y - caughtMouseLocation.y);
			
			/*if (dx < 0)
				__asm
			{
				{
					int 3
				}
			}*/
			
			nx = caughtControlLocation.y + dx;
			//if (nx < location.x + SLIDERBUTTONSIZE)
			//	nx = location.x + SLIDERBUTTONSIZE;
			//if (nx > location.x + size.width - SLIDERBUTTONSIZE*2 - buttonBar->getSize().width)
			//	nx = location.x + size.width - SLIDERBUTTONSIZE*2 - buttonBar->getSize().width;
			
			nx-=(location.y + SLIDERBUTTONHEIGHT);
			
			pp_int32 d = (size.height - buttonBar->getSize().height - SLIDERBUTTONHEIGHT*2);
			
			if (d != 0)
				pos = nx*65536 / d;
		}
		
		setBarPosition(pos);
		// Call parent event listener
		//PPEvent e(eBarPosChanged);
		//return eventListener->handleEvent(reinterpret_cast<PPObject*>(this), &e);
	}
	else
	{
		return 0;
	}

	float f = getBarPosition() / 65536.0f;

	currentValue = (pp_int32)((f * (maxValue - minValue)) + minValue);

	parentScreen->paintControl(this);

	PPEvent e(eValueChanged);

	return eventListener->handleEvent(reinterpret_cast<PPObject*>(this), &e);

}
double midiSequencer::cursor()
{
	return cursorPos-getBarPosition();
}