예제 #1
0
	void SimpleVolumeMeter::_updateValueDisplays( Size sz )
	{
		int length = sz.h;
		int width = sz.w;

		if (m_direction == Direction::Left || m_direction == Direction::Right)
			std::swap(length, width);

		m_iGap = (int)(width * m_fGap);
		if( m_iGap == 0 && m_fGap > 0.f )
			m_iGap = 1;

		m_iSidePadding = (int) (width * m_fSidePadding);
		if( m_iSidePadding == 0 && m_fSidePadding > 0.f )
			m_iSidePadding = 1;

		m_iHoldHeight = (int) m_fHoldHeight * length;
		if( m_iHoldHeight == 0 && m_fHoldHeight > 0.f )
			m_iHoldHeight = 1;

		m_iSectionHeight[0] = (int) (m_fSectionHeight[0] * length + 0.5f);
		m_iSectionHeight[1] =  ((int)((m_fSectionHeight[0] + m_fSectionHeight[1]) * length + 0.5f)) - m_iSectionHeight[0];
		m_iSectionHeight[2] = length - m_iSectionHeight[1] - m_iSectionHeight[0];

		m_iPeak[0] = (int) m_fPeak[0] * length;
		m_iPeak[1] = (int) m_fPeak[1] * length;

		m_iHold[0] = _calcIHold(m_fHold[0], sz);
		m_iHold[1] = _calcIHold(m_fHold[1], sz);
	}
예제 #2
0
	void SimpleVolumeMeter::setValue( float leftPeak, float leftHold, float rightPeak, float rightHold )
	{
		limit( leftPeak, 0.f, 1.f );
		limit( leftHold, 0.f, 1.f );
		limit( rightPeak, 0.f, 1.f );
		limit( rightHold, 0.f, 1.f );

		m_fPeak[0] = leftPeak;
		m_fPeak[1] = rightPeak;
		m_fHold[0] = leftHold;
		m_fHold[1] = rightHold;

		Rect canvas = m_pSkin ? m_pSkin->contentRect( size(), m_state ) : Rect(size());

		int	iPeakL = (int) leftPeak * canvas.h;
		int	iPeakR = rightPeak * canvas.h;
		int iHoldL = _calcIHold(leftHold, canvas.h);
		int iHoldR = _calcIHold(rightHold, canvas.h);

		if( !m_bStereo )
		{
			m_bStereo = true;
			_requestRender();		
		}
		else if( m_iPeak[0] != iPeakL || m_iHold[0] != iHoldL || m_iPeak[1] != iPeakR || m_iHold[1] != iHoldR )
		{
			_requestRenderPartial( canvas, iPeakL, iHoldL, iPeakR, iHoldR );
		}

		m_iPeak[0] = iPeakL;
		m_iPeak[1] = iPeakR;
		m_iHold[0] = iHoldL;
		m_iHold[1] = iHoldR;

	}
예제 #3
0
	void SimpleVolumeMeter::setValue( float peak, float hold )
	{
		limit( peak, 0.f, 1.f );
		limit( hold, 0.f, 1.f );

		m_fPeak[0] = peak;
		m_fHold[0] = hold;

		Rect canvas = m_pSkin ? m_pSkin->contentRect( size(), m_state ) : Rect(size());

		int length = (m_direction == Direction::Left || m_direction == Direction::Right) ? canvas.w : canvas.h;
		int  iPeak = (int) (peak * length);

		int iHold = _calcIHold(hold, canvas.size());


		if( m_bStereo )
		{
			m_bStereo = false;
			_requestRender();
		}
		else if( m_iPeak[0] != iPeak || m_iHold[0] != iHold )
		{
			_requestRenderPartial( canvas, iPeak, iHold, 0, 0 );
		}

		m_iPeak[0] = iPeak;
		m_iHold[0] = iHold;
	}
예제 #4
0
	void SimpleVolumeMeter::_updateIValues( Size sz )
	{
		m_iGap = (int) (sz.w * m_fGap);
		if( m_iGap == 0 && m_fGap > 0.f )
			m_iGap = 1;

		m_iSidePadding = (int) (sz.w * m_fSidePadding);
		if( m_iSidePadding == 0 && m_fSidePadding > 0.f )
			m_iSidePadding = 1;
					
		m_iHoldHeight = (int) m_fHoldHeight * sz.h;
		if( m_iHoldHeight == 0 && m_fHoldHeight > 0.f )
			m_iHoldHeight = 1;

		m_iSectionHeight[0] = (int) (m_fSectionHeight[0] * sz.h + 0.5f);
		m_iSectionHeight[1] =  ((int)((m_fSectionHeight[0] + m_fSectionHeight[1]) * sz.h + 0.5f)) - m_iSectionHeight[0];
		m_iSectionHeight[2] = sz.h - m_iSectionHeight[1] - m_iSectionHeight[0];

		m_iPeak[0] = (int) m_fPeak[0] * sz.h;
		m_iPeak[1] = (int) m_fPeak[1] * sz.h;

		m_iHold[0] = _calcIHold( m_fHold[0], sz.h );
		m_iHold[1] = _calcIHold( m_fHold[1], sz.h );
	}