[Mplayer-cvslog] CVS: main/Gui/skin font.c,1.9,1.10 font.h,1.3,1.4 skin.c,1.15,1.16
Zoltan Ponekker
pontscho at mplayerhq.hu
Tue May 28 13:55:20 CEST 2002
- Previous message: [Mplayer-cvslog] CVS: main/Gui/mplayer mplayer.c,1.23,1.24 mplayer.h,1.5,1.6 mw.h,1.60,1.61 play.c,1.62,1.63 play.h,1.23,1.24 widgets.c,1.23,1.24 widgets.h,1.13,1.14
- Next message: [Mplayer-cvslog] CVS: main mplayer.c,1.510,1.511
- Messages sorted by:
[ date ]
[ thread ]
[ subject ]
[ author ]
Update of /cvsroot/mplayer/main/Gui/skin
In directory mail:/var/tmp.root/cvs-serv4488/Gui/skin
Modified Files:
font.c font.h skin.c
Log Message:
fix text render chrash ...
Index: font.c
===================================================================
RCS file: /cvsroot/mplayer/main/Gui/skin/font.c,v
retrieving revision 1.9
retrieving revision 1.10
diff -u -r1.9 -r1.10
--- font.c 23 May 2002 19:15:32 -0000 1.9
+++ font.c 28 May 2002 11:55:17 -0000 1.10
@@ -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 @@
}
}
-int fntRead( char * path,char * fname,int id )
+int fntRead( char * path,char * fname )
{
FILE * f;
unsigned char tmp[512];
@@ -46,9 +55,14 @@
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 @@
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 @@
{
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 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 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 @@
( !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;
}
Index: font.h
===================================================================
RCS file: /cvsroot/mplayer/main/Gui/skin/font.h,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -r1.3 -r1.4
--- font.h 4 Oct 2001 20:33:29 -0000 1.3
+++ font.h 28 May 2002 11:55:17 -0000 1.4
@@ -1,6 +1,6 @@
-#ifndef _MYFONT
-#define _MYFONT
+#ifndef _FONT_H
+#define _FONT_H
#include "../bitmap/bitmap.h"
@@ -17,15 +17,14 @@
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
Index: skin.c
===================================================================
RCS file: /cvsroot/mplayer/main/Gui/skin/skin.c,v
retrieving revision 1.15
retrieving revision 1.16
diff -u -r1.15 -r1.16
--- skin.c 18 Apr 2002 21:24:42 -0000 1.15
+++ skin.c 28 May 2002 11:55:17 -0000 1.16
@@ -29,8 +29,6 @@
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 @@
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;
}
- Previous message: [Mplayer-cvslog] CVS: main/Gui/mplayer mplayer.c,1.23,1.24 mplayer.h,1.5,1.6 mw.h,1.60,1.61 play.c,1.62,1.63 play.h,1.23,1.24 widgets.c,1.23,1.24 widgets.h,1.13,1.14
- Next message: [Mplayer-cvslog] CVS: main mplayer.c,1.510,1.511
- Messages sorted by:
[ date ]
[ thread ]
[ subject ]
[ author ]
More information about the MPlayer-cvslog
mailing list