summaryrefslogtreecommitdiffstats
path: root/Gui
diff options
context:
space:
mode:
authoralex <alex@b3059339-0415-0410-9bf9-f77b7e298cf2>2004-06-26 13:54:20 +0000
committeralex <alex@b3059339-0415-0410-9bf9-f77b7e298cf2>2004-06-26 13:54:20 +0000
commitd92f988596af8673e3cdc4ef47963972088b10b2 (patch)
tree19a995cf22707ceb5d3e1123122e91691cae6419 /Gui
parent51a160c40a5cbe362b110ad2c1174ff257600f4b (diff)
downloadmpv-d92f988596af8673e3cdc4ef47963972088b10b2.tar.bz2
mpv-d92f988596af8673e3cdc4ef47963972088b10b2.tar.xz
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
Diffstat (limited to 'Gui')
-rw-r--r--Gui/mplayer/common.c30
-rw-r--r--Gui/mplayer/common.h1
2 files changed, 29 insertions, 2 deletions
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