[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