[Mplayer-cvslog] CVS: main/Gui/skin font.c,1.12,1.13
Zoltan Ponekker
pontscho at mplayerhq.hu
Sat Jan 11 02:30:11 CET 2003
Update of /cvsroot/mplayer/main/Gui/skin
In directory mail:/var/tmp.root/cvs-serv1689/skin
Modified Files:
font.c
Log Message:
- new font render finished
- fix 'l' button (evLoad changed to evLoadPlay)
Index: font.c
===================================================================
RCS file: /cvsroot/mplayer/main/Gui/skin/font.c,v
retrieving revision 1.12
retrieving revision 1.13
diff -u -r1.12 -r1.13
--- font.c 9 Jan 2003 20:47:11 -0000 1.12
+++ font.c 11 Jan 2003 01:30:07 -0000 1.13
@@ -145,193 +145,106 @@
return max;
}
-typedef struct
-{
- int pos;
- char c;
-} iChar;
-
txSample * fntRender( wItem * item,int px,char * fmt,... )
{
-#if 0
- txSample * tmp = NULL;
- va_list ap;
- char p[512];
- iChar pos[512];
- int i, dx = 0, s, tw;
- uint32_t * ibuf;
- uint32_t * obuf;
+ txSample * tmp = NULL;
+ va_list ap;
+ unsigned char p[512];
+ unsigned int c;
+ int i, dx = 0, s, tw, fbw, iw, id, ofs;
+ int x,y,fh,fw,fyc,yc;
+ uint32_t * ibuf;
+ uint32_t * obuf;
va_start( ap,fmt );
vsnprintf( p,512,fmt,ap );
va_end( ap );
+ iw=item->width;
+ id=item->fontid;
+
if ( ( !item )||
- ( !Fonts[item->fontid] )||
+ ( !Fonts[id] )||
( !p[0] )||
- ( !fntTextWidth( item->fontid,p ) ) ) return NULL;
+ ( !fntTextWidth( id,p ) ) ) return NULL;
- tw=fntTextWidth( item->fontid,p );
+ tw=fntTextWidth( id,p );
+ fbw=Fonts[id]->Bitmap.Width;
if ( item->Bitmap.Image == NULL )
{
- item->Bitmap.Height=item->height=fntTextHeight( item->fontid,p );
- item->Bitmap.Width=item->width;
- item->Bitmap.ImageSize=item->height * item->width * 4;
+ item->Bitmap.Height=item->height=fntTextHeight( id,p );
+ item->Bitmap.Width=iw;
+ item->Bitmap.ImageSize=item->height * iw * 4;
item->Bitmap.BPP=32;
item->Bitmap.Image=malloc( item->Bitmap.ImageSize );
}
obuf=(uint32_t *)item->Bitmap.Image;
- ibuf=(uint32_t *)Fonts[item->fontid]->Bitmap.Image;
+ ibuf=(uint32_t *)Fonts[id]->Bitmap.Image;
for ( i=0;i < item->Bitmap.ImageSize / 4;i++ ) obuf[i]=0xff00ff;
- if ( tw < item->width )
+ if ( tw <= iw )
{
switch ( item->align )
{
default:
case fntAlignLeft: dx=0; break;
- case fntAlignCenter: dx=( item->width - fntTextWidth( item->fontid,p ) ) / 2; break;
- case fntAlignRight: dx=item->width - fntTextWidth( item->fontid,p ); break;
+ case fntAlignCenter: dx=( iw - fntTextWidth( id,p ) ) / 2; break;
+ case fntAlignRight: dx=iw - fntTextWidth( id,p ); break;
}
} else dx+=px;
-/*
- for ( i=0;i < (int)strlen( p );i++ )
- {
- int c = (int)p[i];
- int fw = Fonts[item->fontid]->Fnt[c].sx;
- int fh = Fonts[item->fontid]->Fnt[c].sy;
- int fx = Fonts[item->fontid]->Fnt[c].x;
- int fy = Fonts[item->fontid]->Fnt[c].y;
-
- if ( fw != -1 )
- {
- // font rendernig
- int x,y;
- for ( y=0;y < fh;y++ )
- {
- if ( dx >= 0 )
- for ( x=0; x < fw;x++ )
- {
- if ( dx + x >= item->width ) goto fnt_exit;
- obuf[y * item->width + x + dx]=ibuf[ ( fy + y ) * Fonts[item->fontid]->Bitmap.Width + fx + x ];
- }
- }
- dx+=fw;
- } else dx+=4;
- }
-
-fnt_exit:
-*/
-
-if ( !strncmp( p,"lofasz",6 ) )
-{
- int i,j, c = 0;
- char t[512];
- memset( t,0,512 );
-// printf( "!!!! " );
- for ( i=0; i < (int)strlen( p );i++ )
- {
- int c = (int)p[i];
- int fw = Fonts[item->fontid]->Fnt[c].sx;
- pos[i].pos=dx;
- pos[i].c=p[i];
- if ( pos[i].pos > item->width ) pos[i].pos-=item->width;
-// printf( "%d; ",pos[i] );
- dx+=fw;
- }
- for ( i=0;i < (int)strlen( p );i++ )
- for ( j=strlen( p );j > i;j-- )
- if ( pos[j].pos < pos[i].pos )
- {
- iChar tmp;
- memcpy( &tmp,&pos[i],sizeof( iChar ) );
- memcpy( &pos[i],&pos[j],sizeof( iChar ) );
- memcpy( &pos[j],&tmp,sizeof( iChar ) );
- }
-//
- for ( i=0;i < (int)strlen( p );i++ )
- t[c++]=pos[i].c;
-// if ( pos[i].pos > 0 && pos[i].pos < item->width ) t[c++]=pos[i].c;
- printf( "!!! %s\n",t );
-}
- return &item->Bitmap;
-
-#else
- txSample tmp2;
- txSample * tmp = NULL;
- va_list ap;
- char p[512];
- uint32_t * ibuf;
- uint32_t * obuf;
- int i,x,y;
- int oy = 0, ox = 0, dx = 0, s = 0;
- int id=item->fontid;
- int sx=item->width;
- int a=item->align;
-
- va_start( ap,fmt );
- vsnprintf( p,512,fmt,ap );
- va_end( ap );
-
- if ( ( !Fonts[id] )||
- ( !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;
+ ofs=dx;
for ( i=0;i < (int)strlen( p );i++ )
{
- unsigned int c = (unsigned char)p[i];
- int cx,cy;
+ c=(unsigned int)p[i];
+ fw=Fonts[id]->Fnt[c].sx;
- if ( Fonts[id]->Fnt[c].sx == -1 ) c=32;
+ if ( fw == -1 ) { c=32; fw=Fonts[id]->Fnt[c].sx; }
- cx=Fonts[id]->Fnt[c].x;
- cy=Fonts[id]->Fnt[c].y;
-
- for ( oy=0,y=cy;y < cy + Fonts[id]->Fnt[c].sy; y++,oy++ )
- for ( ox=0,x=cx;x < cx + 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;
+ fh=Fonts[id]->Fnt[c].sy;
+ fyc=Fonts[id]->Fnt[c].y * fbw + Fonts[id]->Fnt[c].x;
+ yc=dx;
+
+ if ( dx >= 0 )
+ for ( y=0;y < fh;y++ )
+ {
+ for ( x=0; x < fw;x++ )
+ if ( dx + x >= 0 && dx + x < iw ) obuf[yc + x]=ibuf[ fyc + x ];
+ fyc+=fbw;
+ yc+=iw;
+ }
+ dx+=fw;
}
- if ( ( sx > 0 )&&( sx < tmp->Width ) )
+ if ( ofs > 0 && tw > item->width )
{
- tmp2.ImageSize=sx * tmp->Height * 4;
- if ( ( tmp2.Image=malloc( tmp2.ImageSize ) ) == NULL ) { free( tmp->Image ); return NULL; }
-
- obuf=(uint32_t *)tmp->Image;
- ibuf=(uint32_t *)tmp2.Image;
- oy=0;
-
- for ( y=0;y < tmp->Height;y++ )
+ dx=ofs;
+ for ( i=(int)strlen( p );i > 0;i-- )
{
- ox=px;
- dx=y * tmp->Width;
- for ( x=0;x < sx;x++ )
- {
- ibuf[oy++]=obuf[dx + ox++];
- if ( ox >= tmp->Width ) ox=0;
- }
+ c=(unsigned int)p[i];
+ fw=Fonts[id]->Fnt[c].sx;
+
+ if ( fw == -1 ) { c=32; fw=Fonts[id]->Fnt[c].sx; }
+
+ fh=Fonts[id]->Fnt[c].sy;
+ fyc=Fonts[id]->Fnt[c].y * fbw + Fonts[id]->Fnt[c].x;
+
+ dx-=fw; yc=dx;
+ if ( dx >= 0 )
+ for ( y=0;y < fh;y++ )
+ {
+ for ( x=fw - 1;x >= 0;x-- )
+ if ( dx + x >= 0 && dx + x < iw ) obuf[yc + x]=ibuf[fyc + x];
+ fyc+=fbw;
+ yc+=iw;
+ }
}
-
- free( tmp->Image ); tmp->Width=sx; tmp->ImageSize=tmp2.ImageSize; tmp->Image=tmp2.Image;
}
-#endif
- return tmp;
+ return &item->Bitmap;
}
More information about the MPlayer-cvslog
mailing list