From d2a4ecd87009f2c301382847a9c7785467af6938 Mon Sep 17 00:00:00 2001 From: pontscho Date: Tue, 28 May 2002 11:55:17 +0000 Subject: fix text render chrash ... git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@6219 b3059339-0415-0410-9bf9-f77b7e298cf2 --- Gui/app.c | 10 ++----- Gui/app.h | 2 +- Gui/interface.c | 4 +-- Gui/interface.h | 2 +- Gui/mplayer/mplayer.c | 8 +++--- Gui/mplayer/mplayer.h | 2 +- Gui/mplayer/mw.h | 22 ++------------- Gui/mplayer/play.c | 2 +- Gui/mplayer/play.h | 2 +- Gui/mplayer/widgets.c | 7 +++-- Gui/mplayer/widgets.h | 2 +- Gui/skin/font.c | 77 ++++++++++++++++++++++++++++++--------------------- Gui/skin/font.h | 9 +++--- Gui/skin/skin.c | 15 ++-------- 14 files changed, 76 insertions(+), 88 deletions(-) (limited to 'Gui') diff --git a/Gui/app.c b/Gui/app.c index 726eba5db8..75b686a604 100644 --- a/Gui/app.c +++ b/Gui/app.c @@ -97,21 +97,17 @@ int appFindMessage( unsigned char * str ) return -1; } -void appInit( int argc,char* argv[], char *envp[], void* disp ) +void appInit( void * disp ) { skinDirInHome=get_path("Skin"); skinMPlayerDir=DATADIR "/Skin"; printf("SKIN dir 1: '%s'\n",skinDirInHome); printf("SKIN dir 2: '%s'\n",skinMPlayerDir); - if ( !skinName ) - { - if ( ( skinName=(char *)calloc( 1,7 ) ) == NULL ) { mp_msg( MSGT_GPLAYER,MSGL_STATUS,"[config] Not enough memory.\n" ); exit( 1 ); } - strcpy( skinName,"default" ); - } + if ( !skinName ) skinName=strdup( "default" ); switch ( skinRead( skinName ) ) { case -1: mp_msg( MSGT_GPLAYER,MSGL_ERR,MSGTR_SKIN_SKINCFG_SkinNotFound,skinName ); exit( 0 ); case -2: mp_msg( MSGT_GPLAYER,MSGL_ERR,MSGTR_SKIN_SKINCFG_SkinCfgReadError,skinName ); exit( 0 ); } - mplInit( argc,argv,envp,disp ); // does gtk & ws initialization, create windows + mplInit( disp ); // does gtk & ws initialization, create windows } diff --git a/Gui/app.h b/Gui/app.h index ab14d46b5a..b45773fa3d 100644 --- a/Gui/app.h +++ b/Gui/app.h @@ -77,7 +77,7 @@ extern char * skinDirInHome; extern char * skinMPlayerDir; extern char * skinName; -extern void appInit( int argc,char* argv[], char *envp[], void* disp ); +extern void appInit( void * disp ); extern void appInitStruct( listItems * item ); extern void appClearItem( wItem * item ); extern void appCopy( listItems * item1,listItems * item2 ); diff --git a/Gui/interface.c b/Gui/interface.c index c425664940..f0233cb023 100644 --- a/Gui/interface.c +++ b/Gui/interface.c @@ -21,10 +21,10 @@ guiInterface_t guiIntfStruct; -void guiInit( int argc,char* argv[], char *envp[] ) +void guiInit( void ) { memset( &guiIntfStruct,0,sizeof( guiIntfStruct ) ); - appInit( argc,argv,envp,(void*)mDisplay ); + appInit( (void*)mDisplay ); } void guiDone( void ) diff --git a/Gui/interface.h b/Gui/interface.h index 28c5d67000..08e57024ca 100644 --- a/Gui/interface.h +++ b/Gui/interface.h @@ -110,7 +110,7 @@ extern guiInterface_t guiIntfStruct; extern char *get_path(char *filename); -extern void guiInit( int argc,char* argv[], char *envp[] ); +extern void guiInit( void ); extern void guiDone( void ); extern void guiGetEvent( int type,char * arg ); extern void guiEventHandling( void ); diff --git a/Gui/mplayer/mplayer.c b/Gui/mplayer/mplayer.c index 64ef18bca9..e1133dffc6 100644 --- a/Gui/mplayer/mplayer.c +++ b/Gui/mplayer/mplayer.c @@ -42,18 +42,18 @@ void mplTimerHandler( void ) if ( mplRedrawTimer == 0 ) mplEventHandling( evRedraw,0 ); } -void mplInit( int argc,char* argv[], char *envp[], void* disp ) +void mplInit( void * disp ) { int i; // init fields of this struct to default values - mplMPlayerInit( argc,argv,envp ); + mplMPlayerInit(); // fork() a process which runs gtkThreadProc() [gtkPID] - gtkInit( argc,argv,envp ); + gtkInit(); // opens X display, checks for extensions (XShape, DGA etc) - wsXInit(disp); + wsXInit( disp ); if ( ( mplDrawBuffer = (unsigned char *)calloc( 1,appMPlayer.main.Bitmap.ImageSize ) ) == NULL ) { diff --git a/Gui/mplayer/mplayer.h b/Gui/mplayer/mplayer.h index 718895e8ed..23465bd24a 100644 --- a/Gui/mplayer/mplayer.h +++ b/Gui/mplayer/mplayer.h @@ -12,7 +12,7 @@ extern int mainVisible; extern int mplMainAutoPlay; extern int mplMiddleMenu; -extern void mplInit( int argc,char* argv[], char *envp[], void* disp ); +extern void mplInit( void * disp ); extern void mplEventHandling( int msg,float param ); extern void mplTimerHandler( void ); diff --git a/Gui/mplayer/mw.h b/Gui/mplayer/mw.h index 0b51c2a408..4f0263e875 100644 --- a/Gui/mplayer/mw.h +++ b/Gui/mplayer/mw.h @@ -196,8 +196,6 @@ drawrenderedtext: // XFlush( wsDisplay ); } -#define IZE(x) printf("@@@ " x " @@@\n"); - extern void exit_player(char* how); extern int audio_id; extern int dvdsub_id; @@ -307,30 +305,14 @@ NoPause: break; case evPlayList: - IZE("evPlayList"); mplMainRender=1; gtkShow( evPlayList,NULL ); -#warning disabled old gtk code -#if 0 - if ( gtkVisiblePlayList ) - { - btnModify( evPlayList,btnReleased ); - gtkShMem->vs.window=evPlayList; - gtkSendMessage( evHideWindow ); - gtkVisiblePlayList=0; - } - else - { - gtkSendMessage( evPlayList ); - btnModify( evPlayList,btnPressed ); - gtkVisiblePlayList=1; - } -#endif break; case evSkinBrowser: gtkShow( evSkinBrowser,skinName ); break; case evAbout: gtkShow( evAbout,NULL ); break; case evPreferences: gtkShow( evPreferences,NULL ); break; + case evEqualeaser: gtkMessageBox( GTK_MB_WARNING,"Sorry, this feature not implemented ..." ); break; case evForward1min: mplRelSeek( 60 ); break; case evBackward1min: mplRelSeek( -60 ); break; @@ -395,12 +377,14 @@ NoPause: mplRedrawTimer=mplRedrawTimerConst; break; // --- system events +#ifdef MP_DEBUG case evNone: mp_msg( MSGT_GPLAYER,MSGL_STATUS,"[mw] event none received.\n" ); break; default: mp_msg( MSGT_GPLAYER,MSGL_STATUS,"[mw] unknown event received ( %d,%.2f ).\n",msg,param ); break; +#endif } } diff --git a/Gui/mplayer/play.c b/Gui/mplayer/play.c index be8c2205ad..bdeefd5a98 100644 --- a/Gui/mplayer/play.c +++ b/Gui/mplayer/play.c @@ -138,7 +138,7 @@ void mplState( void ) } } -void mplMPlayerInit( int argc,char* argv[], char *envp[] ) +void mplMPlayerInit( void ) { guiIntfStruct.Balance=50.0f; guiIntfStruct.StreamType=-1; diff --git a/Gui/mplayer/play.h b/Gui/mplayer/play.h index 3fa45a80e0..e5c8ebf3f1 100644 --- a/Gui/mplayer/play.h +++ b/Gui/mplayer/play.h @@ -6,7 +6,7 @@ #include "./mplayer.h" -extern void mplMPlayerInit( int argc,char* argv[], char *envp[] ); +extern void mplMPlayerInit( void ); extern void mplStop(); extern void mplFullScreen( void ); diff --git a/Gui/mplayer/widgets.c b/Gui/mplayer/widgets.c index 75ff8c4ed8..c2930978e2 100644 --- a/Gui/mplayer/widgets.c +++ b/Gui/mplayer/widgets.c @@ -48,11 +48,14 @@ int gtkInited = 0; // --- init & close gtk -void gtkInit( int argc,char* argv[], char *envp[] ) +void gtkInit( void ) { + int largc = 1; + char * largv[1] = { "asd" }; mp_dbg( MSGT_GPLAYER,MSGL_DBG2,"[widget] init gtk ...\n" ); gtk_set_locale(); - gtk_init( &argc,&argv ); +// gtk_init( &argc,&argv ); + gtk_init( 0,NULL ); // gdk_set_use_xshm( TRUE ); gtkInited=1; diff --git a/Gui/mplayer/widgets.h b/Gui/mplayer/widgets.h index 205e089ffb..e774426d00 100644 --- a/Gui/mplayer/widgets.h +++ b/Gui/mplayer/widgets.h @@ -37,7 +37,7 @@ extern char * sbMPlayerPrefixDir; extern void widgetsCreate( void ); -extern void gtkInit( int argc,char* argv[], char *envp[] ); +extern void gtkInit( void ); extern void gtkDone( void ); extern int gtkFillSkinList( gchar * dir ); diff --git a/Gui/skin/font.c b/Gui/skin/font.c index f5c44c8232..7db2d6ea30 100644 --- a/Gui/skin/font.c +++ b/Gui/skin/font.c @@ -12,22 +12,31 @@ int items; -bmpFont * Fonts[25] = { NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL }; +bmpFont * Fonts[26] = { NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL }; int fntAddNewFont( char * name ) { int id; - for( id=0;id<25;id++ ) if ( !Fonts[id] ) break; - if ( ( Fonts[id]=malloc( sizeof( bmpFont ) ) ) == NULL ) return -1; + int i; + + for( id=0;id<26;id++ ) + if ( !Fonts[id] ) break; + + if ( id == 25 ) return -2; + + if ( ( Fonts[id]=calloc( 1,sizeof( bmpFont ) ) ) == NULL ) return -1; + strcpy( Fonts[id]->name,name ); - memset( Fonts[id]->Fnt,-1,256 * sizeof( fntChar ) ); + for ( i=0;i<256;i++ ) + Fonts[id]->Fnt[i].x=Fonts[id]->Fnt[i].y=Fonts[id]->Fnt[i].sx=Fonts[id]->Fnt[i].sy=-1; + return id; } void fntFreeFont( void ) { int i; - for( i=0;i<25;i++ ) + for( i=0;i < 25;i++ ) { if ( Fonts[i] ) { @@ -38,7 +47,7 @@ void fntFreeFont( void ) } } -int fntRead( char * path,char * fname,int id ) +int fntRead( char * path,char * fname ) { FILE * f; unsigned char tmp[512]; @@ -46,9 +55,14 @@ int fntRead( char * path,char * fname,int id ) unsigned char command[32]; unsigned char param[256]; int c,linenumber = 0; + int id = fntAddNewFont( fname ); + + if ( id < 0 ) return id; strcpy( tmp,path ); strcat( tmp,fname ); strcat( tmp,".fnt" ); - if ( ( f=fopen( tmp,"rt" ) ) == NULL ) return -1; + if ( ( f=fopen( tmp,"rt" ) ) == NULL ) + { free( Fonts[id] ); return -3; } + while ( !feof( f ) ) { fgets( tmp,255,f ); linenumber++; @@ -56,14 +70,10 @@ int fntRead( char * path,char * fname,int id ) c=tmp[ strlen( tmp ) - 1 ]; if ( ( c == '\n' )||( c == '\r' ) ) tmp[ strlen( tmp ) - 1 ]=0; c=tmp[ strlen( tmp ) - 1 ]; if ( ( c == '\n' )||( c == '\r' ) ) tmp[ strlen( tmp ) - 1 ]=0; for ( c=0;c < (int)strlen( tmp );c++ ) - if ( tmp[c] == ';' ) - { - tmp[c]=0; - break; - } - if ( strlen( tmp ) == 0 ) continue; + if ( tmp[c] == ';' ) { tmp[c]=0; break; } + if ( !tmp[0] ) continue; ptmp=strdelspacesbeforecommand( tmp ); - if ( strlen( ptmp ) == 0 ) continue; + if ( !tmp[0] ) continue; ptmp=strswap( ptmp,'\t',' ' ); ptmp=strdelspaces( ptmp ); cutItem( ptmp,command,'=',0 ); cutItem( ptmp,param,'=',1 ); @@ -84,10 +94,11 @@ int fntRead( char * path,char * fname,int id ) { strcpy( tmp,path ); strcat( tmp,param ); mp_dbg( MSGT_GPLAYER,MSGL_DBG2,"[font] font imagefile: %s\n",tmp ); - if ( skinBPRead( tmp,&Fonts[id]->Bitmap ) ) return -2; + if ( skinBPRead( tmp,&Fonts[id]->Bitmap ) ) return -4; } } - } + } + return 0; } @@ -95,8 +106,8 @@ int fntFindID( char * name ) { int i; for ( i=0;i < 25;i++ ) - if ( Fonts[i] ) - if ( !strcmp( name,Fonts[i]->name ) ) return i; + if ( Fonts[i] ) + if ( !strcmp( name,Fonts[i]->name ) ) return i; return -1; } @@ -104,18 +115,25 @@ int fntTextWidth( int id,char * str ) { int size = 0; int i; - if ( !Fonts[id] ) return 0; - for ( i=0;i < (int)strlen( str );i++ ) - if ( Fonts[id]->Fnt[ (int)str[i] ].sx != -1 ) size+=Fonts[id]->Fnt[ (int)str[i] ].sx; + + if ( ( !Fonts[id] )||( !str[0] ) ) return 0; + + for ( i=0;i < (unsigned int)strlen( str );i++ ) + size+=( Fonts[id]->Fnt[ (unsigned char)str[i] ].sx == -1? Fonts[id]->Fnt[ 32 ].sx : Fonts[id]->Fnt[ (unsigned char)str[i] ].sx ); return size; } int fntTextHeight( int id,char * str ) { int max = 0,i; - if ( !Fonts[id] ) return 0; + + if ( ( !Fonts[id] )||( !str[0] ) ) return 0; + for ( i=0;i < (int)strlen( str );i++ ) - if ( Fonts[id]->Fnt[ (int)str[i] ].sy > max ) max=Fonts[id]->Fnt[ (int)str[i] ].sy; + { + int h = Fonts[id]->Fnt[ (unsigned char)str[i] ].sy; + if ( h > max ) max=h; + } return max; } @@ -138,24 +156,21 @@ txSample * fntRender( int id,int px,int sx,char * fmt,... ) ( !strlen( p ) )|| ( !fntTextWidth( id,p ) )|| ( (tmp=malloc( sizeof( txSample ) )) == NULL ) ) return NULL; - + tmp->Width=fntTextWidth( id,p ); tmp->Height=fntTextHeight( id,p ); tmp->BPP=32; tmp->ImageSize=tmp->Width * tmp->Height * 4; if ( ( tmp->Image=malloc( tmp->ImageSize ) ) == NULL ) return NULL; - obuf=(uint32_t *)tmp->Image; ibuf=(uint32_t *)Fonts[id]->Bitmap.Image; for ( i=0;i < (int)strlen( p );i++ ) { - char c = p[i]; - if ( Fonts[id]->Fnt[c].x == -1 ) c=32; + unsigned int c = (unsigned char)p[i]; + if ( Fonts[id]->Fnt[c].sx == -1 ) c=32; for ( oy=0,y=Fonts[id]->Fnt[c].y;y < Fonts[id]->Fnt[c].y + Fonts[id]->Fnt[c].sy; y++,oy++ ) - for ( ox=0,x=Fonts[id]->Fnt[c].x;x < Fonts[id]->Fnt[c].x + Fonts[id]->Fnt[c].sx; x++,ox++ ) - { - obuf[ oy * tmp->Width + dx + ox ]=ibuf[ y * Fonts[id]->Bitmap.Width + x ]; - } + for ( ox=0,x=Fonts[id]->Fnt[c].x;x < Fonts[id]->Fnt[c].x + Fonts[id]->Fnt[c].sx; x++,ox++ ) + obuf[ oy * tmp->Width + dx + ox ]=ibuf[ y * Fonts[id]->Bitmap.Width + x ]; dx+=Fonts[id]->Fnt[c].sx; } diff --git a/Gui/skin/font.h b/Gui/skin/font.h index 0b082bf8a1..8effa4acf1 100644 --- a/Gui/skin/font.h +++ b/Gui/skin/font.h @@ -1,6 +1,6 @@ -#ifndef _MYFONT -#define _MYFONT +#ifndef _FONT_H +#define _FONT_H #include "../bitmap/bitmap.h" @@ -17,15 +17,14 @@ typedef struct char name[128]; } bmpFont; -extern fntChar Fnt[256]; extern txSample Bitmap; -extern bmpFont * Fonts[25]; +extern bmpFont * Fonts[26]; extern int fntAddNewFont( char * name ); extern void fntFreeFont( void ); extern int fntFindID( char * name ); -extern int fntRead( char * path,char * fname,int id ); +extern int fntRead( char * path,char * fname ); extern txSample * fntRender( int id,int px,int sx,char * fmt,... ); #endif diff --git a/Gui/skin/skin.c b/Gui/skin/skin.c index 9021bd9bd2..fc27cb3878 100644 --- a/Gui/skin/skin.c +++ b/Gui/skin/skin.c @@ -29,8 +29,6 @@ void ERRORMESSAGE( const char * format, ... ) va_start( ap,format ); vsnprintf( p,512,format,ap ); va_end( ap ); -// message( False,"[skin] error in skin config file on line %d: %s",linenumber,p ); -// message( False,MSGTR_SKIN_ERRORMESSAGE,linenumber,p ); mp_msg( MSGT_GPLAYER,MSGL_STATUS,MSGTR_SKIN_ERRORMESSAGE,linenumber,p ); } @@ -414,21 +412,14 @@ int __font( char * in ) defList->NumberOfItems++; item=&defList->Items[ defList->NumberOfItems ]; item->type=itFont; - item->fontid=fntAddNewFont( name ); + item->fontid=fntRead( path,name ); switch ( item->fontid ) { case -1: ERRORMESSAGE( MSGTR_SKIN_FONT_NotEnoughtMemory ); return 1; case -2: ERRORMESSAGE( MSGTR_SKIN_FONT_TooManyFontsDeclared ); return 1; + case -3: ERRORMESSAGE( MSGTR_SKIN_FONT_FontFileNotFound ); return 1; + case -4: ERRORMESSAGE( MSGTR_SKIN_FONT_FontImageNotFound ); return 1; } - - mp_dbg( MSGT_GPLAYER,MSGL_DBG2,"[skin] id: %s ( %d )\n",id,item->fontid ); - - switch ( fntRead( path,name,item->fontid ) ) - { - case -1: ERRORMESSAGE( MSGTR_SKIN_FONT_FontFileNotFound ); return 1; - case -2: ERRORMESSAGE( MSGTR_SKIN_FONT_FontImageNotFound ); return 1; - } - return 0; } -- cgit v1.2.3