⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 controlwidgetbase.cpp

📁 Trolltech公司发布的图形界面操作系统。可在qt-embedded-2.3.7平台上编译为嵌入式图形界面操作系统。
💻 CPP
📖 第 1 页 / 共 2 页
字号:
void ControlWidgetBase::setFullscreen( bool b ){    setToggleButton( FullscreenButton, b );}void ControlWidgetBase::setSeekable( bool b ){    slider.setEnabled( b );}void ControlWidgetBase::setToggleButton( MediaButtonType butType, bool down ){    for ( int i = 0; i < buttonCount; i++ )	if ( buttons[i].buttonType == butType )	    if ( down != buttons[i].isDown )		toggleButton( i );}void ControlWidgetBase::toggleButton( int i ){    buttons[i].isDown = !buttons[i].isDown;    QPainter p( this );    paintButton( p, i );}void ControlWidgetBase::getButtonPix( bool down ){    if ( !buttonPixCreated[down] ) {	// QImage tmpImg = fastScale( tmpButtonImg[down], actualScaleW, actualScaleH );	QImage tmpImg = tmpButtonImg[down].smoothScale( actualScaleW, actualScaleH );	if (!tmpImg.isNull()) {	    QPoint pt( xoff, yoff );	    buttonPix[down].resize( actualScaleW, actualScaleH );	    QPainter p;	    p.begin( &buttonPix[down] );	    p.drawTiledPixmap( buttonPix[down].rect(), bgPix, pt );	    p.drawImage( 0, 0, tmpImg );	    p.end();	    buttonPixCreated[down] = TRUE;	    //qDebug("scaled %s buttons", skinType.latin1() );	}    }}void ControlWidgetBase::getButtonMask( int button ){    if ( imgButtonMask.isNull() )	return;    if ( !buttonMaskCreated[button] && tmpButtonMaskLoaded[button] ) {	buttonMaskCreated[button] = TRUE;	if ( buttons[button].hasImage ) {	    getButtonPix( TRUE );	    //qDebug( "creating %s %s file", skinType.latin1(), buttons[button].skinImage );	    int w = actualScaleW;	    int h = actualScaleH;	    int iw = tmpButtonMask[button].width();	    int ih = tmpButtonMask[button].height();	    int dx = iw * 65535 / w;	    int dy = ih * 65535 / h;	    uchar **src = tmpButtonMask[button].jumpTable();	    uchar **dest = imgButtonMask.jumpTable();	    uchar bits[(((w+8)*(h+1))/8)+32]; // over allocate just to be safe	    uchar *dst = bits - 1;	    for ( int j = 0, y = 0; j < h; j++, y+=dy ) {		uchar *srcLine = src[y>>16];		uchar *line = dest[j];		for ( int i = 0, x = 0, bit = 8; i < w; i++, x+=dx, bit++ ) {		    int srcBit = 7 - ((x>>16) % 8);		    int srcOfs = (x>>16) / 8;		    uint pixel = srcLine[ srcOfs ] & (1 << srcBit);		    if ( bit == 8 ) {			bit = 0;			*(++dst) = 0;		    }		    if ( pixel ) {			line[i] = button + 1;			*dst |= 1 << bit;		    }		}	    }	    buttonMask[button] = QBitmap( w, h, bits, TRUE );	}    }}void ControlWidgetBase::paintButton( QPainter& p, int i ){    if ( !canPaint || !imagesLoaded || !imagesScaled || !buttons[i].hasImage )	return;    getButtonMask( i );    bool down = buttons[i].isDown;     buttonPix[down].setMask( buttonMask[i] );    p.drawPixmap( xoff, yoff, buttonPix[down] );}void ControlWidgetBase::paintAllButtons( QPainter& p ){    // Get something there quick, effectively paints all buttons up    buttonPix[0].setMask( QBitmap() );    p.drawPixmap( xoff, yoff, buttonPix[0] );    canPaint = TRUE;    // Paint any down buttons    for ( int i = 0; i < buttonCount; i++ ) {	getButtonMask( i );	if ( buttons[i].isDown ) 	    paintButton( p, i );    }}void ControlWidgetBase::sliderPressed(){    sliderBeingMoved = TRUE;}void ControlWidgetBase::sliderReleased(){    if ( sliderBeingMoved ) {	sliderBeingMoved = FALSE;	if ( slider.width() == 0 )	    return;	mediaPlayerState->startTemporaryMute();	// Use double precision to avoid integer overflows which can happen easily otherwise	long val = long((double)slider.value() * mediaPlayerState->length() / slider.width());	mediaPlayerState->setPosition( val );	mediaPlayerState->stopTemporaryMute( 1000 );    }}void ControlWidgetBase::setPosition( long ){    virtualUpdateSlider();}void ControlWidgetBase::setLength( long ){    virtualUpdateSlider();}QString ControlWidgetBase::toTimeString( long length ){    int minutes = length / 60;    int seconds = length % 60;    return QString("%1:%2%3").arg( minutes ).arg( seconds / 10 ).arg( seconds % 10 );}QString ControlWidgetBase::timeAsString( long length ){    if ( mediaPlayerState->decoder() ) {	if ( mediaPlayerState->decoder()->videoStreams() > 0 ) {	    double frameRate = mediaPlayerState->decoder()->videoFrameRate( 0 );	    if ( frameRate == 0.0 )		frameRate = 1.0;	    length = long((double)length / frameRate);	} else {	    int freq = mediaPlayerState->decoder()->audioFrequency( 0 );	    if ( freq )		length /= freq;	}    }    return toTimeString( length );} void ControlWidgetBase::updateSlider(){    int i = mediaPlayerState->position();    int max = mediaPlayerState->length();    QString currentTime;    QString totalTime;    // Work out currentTime and totalTime strings    if ( mediaPlayerState->decoderVersion() == Decoder_1_6 ) {	MediaPlayerDecoder_1_6 *decoder = (MediaPlayerDecoder_1_6 *)mediaPlayerState->decoder();	if ( decoder->currentTimeAvailable() ) 	    currentTime = toTimeString( decoder->currentTime() / 1000 );	else	    currentTime = "?:??";	if ( decoder->totalTimeAvailable() )	    totalTime = " / " + toTimeString( decoder->totalTime() / 1000 );    } else {	currentTime = timeAsString( i );	if ( max > 1 )	    totalTime = " / " + timeAsString( max );    }    time.setText( currentTime + totalTime );    if ( max == 0 )	return;    // Will flicker too much if we don't do this.    // Scale position to the pixel along the slider.    int width = slider.width();    int val = int((double)i * width / max);    if ( !sliderBeingMoved ) {	if ( slider.value() != val )	    slider.setValue( val );	if ( slider.maxValue() != width )	    slider.setMaxValue( width );    }}void ControlWidgetBase::stopPlaying(){    mediaPlayerState->setPlaying( FALSE );    setPosition( 0 );    slider.setValue( 0 );}void ControlWidgetBase::mouseMoveEvent( QMouseEvent *event ){    for ( int i = 0; i < buttonCount; i++ ) {	if ( buttons[i].hasImage ) {	    if ( event->state() == QMouseEvent::LeftButton ) {		// The test to see if the mouse click is inside the button or not		int x = event->pos().x() - xoff;		int y = event->pos().y() - yoff;		bool isOnButton = ( x > 0 && y > 0 && x < imgButtonMask.width()		    && y < imgButtonMask.height() && imgButtonMask.pixelIndex( x, y ) == i + 1 );		if ( isOnButton && !buttons[i].isHeld ) {		    buttons[i].isHeld = TRUE;		    toggleButton(i);		    switch ( buttons[i].buttonType ) {			case VolumeUpButton:	    emit moreClicked(); return;			case VolumeDownButton:	    emit lessClicked(); return;			case ForwardButton:	    emit forwardClicked(); return;			case BackwardButton:	    emit backwardClicked(); return;			default: break;		    }		} else if ( !isOnButton && buttons[i].isHeld ) {		    buttons[i].isHeld = FALSE;		    toggleButton(i);		    switch ( buttons[i].buttonType ) {			case VolumeUpButton:	    emit moreReleased(); return;			case VolumeDownButton:	    emit lessReleased(); return;			case ForwardButton:	    emit forwardReleased(); return;			case BackwardButton:	    emit backwardReleased(); return;			default: break;		    }		}	    } else {		if ( buttons[i].isHeld ) {		    buttons[i].isHeld = FALSE;		    if ( !buttons[i].isToggle && buttons[i].isDown )			toggleButton( i );		    switch ( buttons[i].buttonType ) {			case PlayButton:	    if ( mediaPlayerState->playing() ) 							mediaPlayerState->setPaused( !buttons[i].isDown );						    else 						        mediaPlayerState->setPlaying( TRUE );						    return;			case StopButton:	    stopPlaying(); return;			case PauseButton:	    mediaPlayerState->setPaused( buttons[i].isDown ); return;			case NextButton:	    mediaPlayerState->setNext(); return;			case PreviousButton:	    mediaPlayerState->setPrev(); return;			case LoopButton:	    mediaPlayerState->setLooping( buttons[i].isDown ); return;			case VolumeUpButton:	    emit moreReleased(); return;			case VolumeDownButton:	    emit lessReleased(); return;			case ForwardButton:	    emit forwardReleased(); return;			case BackwardButton:	    emit backwardReleased(); return;			case PlayListButton:	    mediaPlayerState->setList();  return;			//case FullscreenButton:	mediaPlayerState->setFullscreen( TRUE ); makeVisible(); return;			default: break;		    }		}	    }	}    }}void ControlWidgetBase::mousePressEvent( QMouseEvent *event ){    mouseMoveEvent( event );}void ControlWidgetBase::mouseReleaseEvent( QMouseEvent *event ){    mouseMoveEvent( event );}void ControlWidgetBase::closeEvent( QCloseEvent* ){    mediaPlayerState->closeView();}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -