1
mirror of https://github.com/mpv-player/mpv synced 2024-09-05 02:48:21 +02:00

fix text render chrash ...

git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@6219 b3059339-0415-0410-9bf9-f77b7e298cf2
This commit is contained in:
pontscho 2002-05-28 11:55:17 +00:00
parent 2eee0cefb0
commit d2a4ecd870
15 changed files with 77 additions and 89 deletions

View File

@ -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
}

View File

@ -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 );

View File

@ -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 )

View File

@ -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 );

View File

@ -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 )
{

View File

@ -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 );

View File

@ -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
}
}

View File

@ -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;

View File

@ -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 );

View File

@ -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;

View File

@ -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 );

View File

@ -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;
}

View File

@ -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

View File

@ -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;
}

View File

@ -775,7 +775,7 @@ current_module = NULL;
#ifdef HAVE_NEW_GUI
if(use_gui){
guiInit( argc,argv,envp );
guiInit();
inited_flags|=INITED_GUI;
guiGetEvent( guiCEvent,(char *)((gui_no_filename) ? 0 : 1) );
}