mirror of
https://github.com/mpv-player/mpv
synced 2025-03-25 04:38:01 +00: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:
parent
2eee0cefb0
commit
d2a4ecd870
10
Gui/app.c
10
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
|
||||
}
|
||||
|
@ -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 );
|
||||
|
@ -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 )
|
||||
|
@ -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 );
|
||||
|
@ -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 )
|
||||
{
|
||||
|
@ -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 );
|
||||
|
||||
|
@ -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
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -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;
|
||||
|
@ -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 );
|
||||
|
@ -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;
|
||||
|
@ -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 );
|
||||
|
@ -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;
|
||||
}
|
||||
|
||||
|
@ -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
|
||||
|
@ -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;
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user