correct skin changing

(fix one critical bug)


git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@8950 b3059339-0415-0410-9bf9-f77b7e298cf2
This commit is contained in:
pontscho 2003-01-13 23:38:49 +00:00
parent d462b79a48
commit 5b16ccc998
6 changed files with 55 additions and 13 deletions

View File

@ -138,6 +138,8 @@ void appInitStruct( listItems * item )
item->subR=0;
item->subG=0;
item->subB=0;
item->barIsPresent=0;
item->menuIsPresent=0;
}
int appFindKey( unsigned char * name )

View File

@ -145,7 +145,11 @@ typedef struct
wItem sub;
wsTWindow subWindow;
int subR,subG,subB;
int subPixel;
wItem bar;
wsTWindow barWindow;
int barR,barG,barB;
int barIsPresent;
wItem eq;
wsTWindow eqWindow;
@ -153,6 +157,7 @@ typedef struct
wItem menuBase;
wItem menuSelected;
wsTWindow menuWindow;
int menuIsPresent;
// ---
int NumberOfItems;

View File

@ -210,7 +210,7 @@ void guiInit( void )
i=wsShowFrame|wsMaxSize|wsHideWindow;
wsCreateWindow( &appMPlayer.mainWindow,
appMPlayer.main.x,appMPlayer.main.y,appMPlayer.main.width,appMPlayer.main.height,
wsNoBorder,wsShowMouseCursor|wsHandleMouseButton|wsHandleMouseMove,i,"MPlayer" ); //wsMinSize|
wsNoBorder,wsShowMouseCursor|wsHandleMouseButton|wsHandleMouseMove,i,"MPlayer" );
wsSetShape( &appMPlayer.mainWindow,appMPlayer.main.Mask.Image );
wsXDNDMakeAwareness(&appMPlayer.mainWindow);

View File

@ -15,6 +15,7 @@ int mplMenuRender = 1;
int mplMenuItem = -1;
int mplOldMenuItem = -1;
int mplMenuX,mplMenuY;
static int mplMenuIsInitialized = 0;
void mplHideMenu( int mx,int my,int w );
@ -24,7 +25,7 @@ void mplMenuDraw( void )
uint32_t * drw = NULL;
int x,y,tmp;
if ( !appMPlayer.menuBase.Bitmap.Image ) return;
if ( !appMPlayer.menuIsPresent || !appMPlayer.menuBase.Bitmap.Image ) return;
if ( !mplMenuRender && !appMPlayer.menuWindow.Visible ) return;
if ( mplMenuRender || mplMenuItem != mplOldMenuItem )
@ -78,7 +79,7 @@ void mplShowMenu( int mx,int my )
{
int x,y;
if ( !appMPlayer.menuBase.Bitmap.Image ) return;
if ( !appMPlayer.menuIsPresent || !appMPlayer.menuBase.Bitmap.Image ) return;
x=mx;
if ( x + appMPlayer.menuWindow.Width > wsMaxX ) x=wsMaxX - appMPlayer.menuWindow.Width - 1;
@ -101,7 +102,7 @@ void mplHideMenu( int mx,int my,int w )
{
int x,y,i=mplMenuItem;
if ( !appMPlayer.menuBase.Bitmap.Image ) return;
if ( !appMPlayer.menuIsPresent || !appMPlayer.menuBase.Bitmap.Image ) return;
x=mx-mplMenuX;
y=my-mplMenuY;
@ -126,7 +127,7 @@ void mplHideMenu( int mx,int my,int w )
void mplMenuInit( void )
{
if ( !appMPlayer.menuBase.Bitmap.Image ) return;
if ( mplMenuIsInitialized || !appMPlayer.menuIsPresent || !appMPlayer.menuBase.Bitmap.Image ) return;
appMPlayer.menuBase.x=0;
appMPlayer.menuBase.y=0;
@ -150,6 +151,7 @@ void mplMenuInit( void )
mp_msg( MSGT_GPLAYER,MSGL_DBG2,"[menu.h] menu: 0x%x\n",(int)appMPlayer.menuWindow.WindowID );
#endif
mplMenuIsInitialized=1;
appMPlayer.menuWindow.ReDraw=mplMenuDraw;
// appMPlayer.menuWindow.MouseHandler=mplMenuMouseHandle;
// appMPlayer.menuWindow.KeyHandler=mplMainKeyHandle;

View File

@ -191,6 +191,7 @@ listItems tmpList;
void ChangeSkin( char * name )
{
int ret;
int prev = appMPlayer.menuIsPresent;
mainVisible=0;
@ -208,7 +209,8 @@ void ChangeSkin( char * name )
mainVisible=1;
return;
}
if ( appMPlayer.menuBase.Bitmap.Image )
if ( prev && appMPlayer.menuIsPresent )
{
if ( mplMenuDrawBuffer ) free( mplMenuDrawBuffer );
if ( ( mplMenuDrawBuffer = (unsigned char *)calloc( 1,appMPlayer.menuBase.Bitmap.ImageSize ) ) == NULL )
@ -217,7 +219,7 @@ void ChangeSkin( char * name )
wsResizeImage( &appMPlayer.menuWindow,appMPlayer.menuBase.width,appMPlayer.menuBase.height );
wsSetShape( &appMPlayer.menuWindow,appMPlayer.menuBase.Mask.Image );
wsVisibleWindow( &appMPlayer.menuWindow,wsHideWindow );
}
} else { mplMenuInit(); }
if ( appMPlayer.sub.Bitmap.Image ) wsResizeImage( &appMPlayer.subWindow,appMPlayer.sub.Bitmap.Width,appMPlayer.sub.Bitmap.Height );
if ( ( !appMPlayer.subWindow.isFullScreen )&&( !guiIntfStruct.Playing ) )
@ -238,7 +240,9 @@ void ChangeSkin( char * name )
if ( ( mplDrawBuffer = (unsigned char *)calloc( 1,appMPlayer.main.Bitmap.ImageSize ) ) == NULL )
{ mp_msg( MSGT_GPLAYER,MSGL_STATUS,MSGTR_NEMDB ); return; }
if ( vo_wm_type == vo_wm_Unknown ) wsVisibleWindow( &appMPlayer.mainWindow,wsHideWindow );
#if 0
// if ( vo_wm_type == vo_wm_Unknown )
wsVisibleWindow( &appMPlayer.mainWindow,wsHideWindow );
wsResizeWindow( &appMPlayer.mainWindow,appMPlayer.main.width,appMPlayer.main.height );
wsMoveWindow( &appMPlayer.mainWindow,True,appMPlayer.main.x,appMPlayer.main.y );
wsResizeImage( &appMPlayer.mainWindow,appMPlayer.main.width,appMPlayer.main.height );
@ -246,7 +250,26 @@ void ChangeSkin( char * name )
wsWindowDecoration( &appMPlayer.mainWindow,appMPlayer.mainDecoration );
mainVisible=1; mplMainRender=1; wsPostRedisplay( &appMPlayer.mainWindow );
wsVisibleWindow( &appMPlayer.mainWindow,wsShowWindow );
#else
wsDestroyWindow( &appMPlayer.mainWindow );
wsCreateWindow( &appMPlayer.mainWindow,
appMPlayer.main.x,appMPlayer.main.y,appMPlayer.main.width,appMPlayer.main.height,
wsNoBorder,wsShowMouseCursor|wsHandleMouseButton|wsHandleMouseMove,wsShowFrame|wsMaxSize|wsHideWindow,"MPlayer" );
wsCreateImage( &appMPlayer.mainWindow,appMPlayer.main.Bitmap.Width,appMPlayer.main.Bitmap.Height );
wsSetShape( &appMPlayer.mainWindow,appMPlayer.main.Mask.Image );
wsSetIcon( wsDisplay,appMPlayer.mainWindow.WindowID,guiIcon,guiIconMask );
appMPlayer.mainWindow.ReDraw=(void *)mplMainDraw;
appMPlayer.mainWindow.MouseHandler=mplMainMouseHandle;
appMPlayer.mainWindow.KeyHandler=mplMainKeyHandle;
appMPlayer.mainWindow.DandDHandler=mplDandDHandler;
wsXDNDMakeAwareness( &appMPlayer.mainWindow );
if ( !appMPlayer.mainDecoration ) wsWindowDecoration( &appMPlayer.mainWindow,0 );
wsVisibleWindow( &appMPlayer.mainWindow,wsShowWindow );
mainVisible=1;
#endif
btnModify( evSetVolume,guiIntfStruct.Volume );
btnModify( evSetBalance,guiIntfStruct.Balance );
btnModify( evSetMoviePosition,guiIntfStruct.Position );

View File

@ -68,8 +68,8 @@ int wsOutMask = 0;
int wsTrue = True;
wsTWindow * wsWindowList[5] = { NULL,NULL,NULL,NULL,NULL };
int wsWLCount = 0;
#define wsWLCount 5
wsTWindow * wsWindowList[wsWLCount] = { NULL,NULL,NULL,NULL,NULL };
unsigned long wsKeyTable[512];
@ -446,7 +446,14 @@ void wsCreateWindow( wsTWindow * win,int X,int Y,int wX,int hY,int bW,int cV,uns
wsCreateImage( win,win->Width,win->Height );
// --- End of creating --------------------------------------------------------------------------
wsWindowList[wsWLCount++]=win;
{
int i;
for ( i=0;i < wsWLCount;i++ )
if ( wsWindowList[i] == NULL ) break;
if ( i == wsWLCount )
{ printf( "!!! tul sok nyitott ablak van.\n" ); exit( 1 ); }
wsWindowList[i]=win;
}
XFlush( wsDisplay );
XSync( wsDisplay,False );
@ -469,9 +476,11 @@ void wsDestroyWindow( wsTWindow * win )
XFreeCursor( wsDisplay,win->wsCursor );
win->wsCursor=None;
}
XFreeGC( wsDisplay,win->wGC );
XUnmapWindow( wsDisplay,win->WindowID );
wsDestroyImage( win );
XDestroyWindow( wsDisplay,win->WindowID );
#if 0
win->ReDraw=NULL;
win->ReSize=NULL;
win->Idle=NULL;
@ -481,6 +490,7 @@ void wsDestroyWindow( wsTWindow * win )
win->Focused=0;
win->Mapped=0;
win->Rolled=0;
#endif
}
// ----------------------------------------------------------------------------------------------
@ -490,7 +500,7 @@ void wsDestroyWindow( wsTWindow * win )
inline int wsSearch( Window win )
{
int i;
for ( i=0;i<wsWLCount;i++ ) if ( wsWindowList[i]->WindowID == win ) return i;
for ( i=0;i<wsWLCount;i++ ) if ( wsWindowList[i] && wsWindowList[i]->WindowID == win ) return i;
return -1;
}