From d92f988596af8673e3cdc4ef47963972088b10b2 Mon Sep 17 00:00:00 2001 From: alex Date: Sat, 26 Jun 2004 13:54:20 +0000 Subject: simple, smooth, ram-saving dynamic potmeter, which feature is required by the tvisor skin, patch by Andre Kuhne git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@12694 b3059339-0415-0410-9bf9-f77b7e298cf2 --- Gui/mplayer/common.c | 30 ++++++++++++++++++++++++++++-- Gui/mplayer/common.h | 1 + 2 files changed, 29 insertions(+), 2 deletions(-) (limited to 'Gui/mplayer') diff --git a/Gui/mplayer/common.c b/Gui/mplayer/common.c index 6ea890f5c3..a6bd03a3c9 100644 --- a/Gui/mplayer/common.c +++ b/Gui/mplayer/common.c @@ -214,6 +214,30 @@ void PutImage( txSample * bf,int x,int y,int max,int ofs ) #endif } +void SimplePotmeterPutImage( txSample * bf,int x,int y,float frac ) +{ + int i=0,w,r,ix,iy; + uint32_t * buf = NULL; + uint32_t * drw = NULL; + register uint32_t tmp; + + if ( ( !bf )||( bf->Image == NULL ) ) return; + + buf=(uint32_t *)image_buffer; + drw=(uint32_t *)bf->Image; + w=bf->Width*frac; + r=bf->Width-w; + for ( iy=y;iy < (int)(y+bf->Height);iy++ ) + { + for ( ix=x;ix < (int)(x+w);ix++ ) + { + tmp=drw[i++]; + if ( tmp != 0x00ff00ff ) buf[iy * image_width + ix]=tmp; + } + i+=r; + } +} + void Render( wsTWindow * window,wItem * Items,int nrItems,char * db,int size ) { wItem * item; @@ -232,10 +256,12 @@ void Render( wsTWindow * window,wItem * Items,int nrItems,char * db,int size ) PutImage( &item->Bitmap,item->x,item->y,3,item->pressed ); break; case itPotmeter: - PutImage( &item->Bitmap,item->x,item->y,item->phases,( item->phases - 1 ) * ( item->value / 100.0f ) ); + if (item->phases == 1)SimplePotmeterPutImage( &item->Bitmap,item->x,item->y, item->value / 100.0f ); + else PutImage( &item->Bitmap,item->x,item->y,item->phases,( item->phases - 1 ) * ( item->value / 100.0f ) ); break; case itHPotmeter: - PutImage( &item->Bitmap,item->x,item->y,item->phases,item->phases * ( item->value / 100.0f ) ); + if (item->phases == 1)SimplePotmeterPutImage( &item->Bitmap,item->x,item->y, item->value / 100.0f ); + else PutImage( &item->Bitmap,item->x,item->y,item->phases,( item->phases - 1 ) * ( item->value / 100.0f ) ); PutImage( &item->Mask,item->x + (int)( ( item->width - item->psx ) * item->value / 100.0f ),item->y,3,item->pressed ); break; case itVPotmeter: diff --git a/Gui/mplayer/common.h b/Gui/mplayer/common.h index 7183930124..46181366fb 100644 --- a/Gui/mplayer/common.h +++ b/Gui/mplayer/common.h @@ -14,6 +14,7 @@ extern inline void TranslateFilename( int c,char * tmp ); extern char * Translate( char * str ); extern void PutImage( txSample * bf,int x,int y,int max,int ofs ); +extern void SimplePotmeterPutImage( txSample * bf,int x,int y,float frac ); extern void Render( wsTWindow * window,wItem * Items,int nrItems,char * db,int size ); #endif -- cgit v1.2.3