# HG changeset patch # User arpi_esp # Date 989878092 0 # Node ID b25a887b6054597f029e56098972e05fe5bcb6d0 # Parent c50d3417b0aa85688a7f94f0c0d8f9bba2492318 sub splitting patch applied by Vlada V.Dubsky@sh.cvut.cz diff -r c50d3417b0aa -r b25a887b6054 libvo/sub.c --- a/libvo/sub.c Mon May 14 21:27:14 2001 +0000 +++ b/libvo/sub.c Mon May 14 22:08:12 2001 +0000 @@ -5,6 +5,7 @@ font_desc_t* vo_font=NULL; unsigned char* vo_osd_text="00:00:00"; +int sub_unicode=0; void vo_draw_text_osd(int dxs,int dys,void (*draw_alpha)(int x0,int y0, int w,int h, unsigned char* src, unsigned char *srca, int stride)){ int len=strlen(vo_osd_text); @@ -82,57 +83,105 @@ vo_font->pic_a[font]->bmp+vo_font->start[c], vo_font->pic_a[font]->w); // x+=vo_font->width[c]; - + // vo_osd_progbar_value=(vo_osd_progbar_value+1)&0xFF; } subtitle* vo_sub=NULL; -int sub_unicode=0; void vo_draw_text_sub(int dxs,int dys,void (*draw_alpha)(int x0,int y0, int w,int h, unsigned char* src, unsigned char *srca, int stride)){ int i; int y; + y=dys-(1+vo_sub->lines-1)*vo_font->height-10; - y=dys-(1+vo_sub->lines)*vo_font->height; - + // too long lines divide into smaller ones + for(i=0;ilines;i++){ + unsigned char* text=vo_sub->text[i]; + int len=strlen(text); + int j,k; + int xsize=-vo_font->charspace; + int x=0; + + int lastStripPosition=-1; + int previousStrip=0; + int lastxsize=0; + + for(j=0;j=0x80)) c=(c<<8)+text[++j]; + w = vo_font->width[c]; + if (text[j]==' ' && dxs>xsize) + { + lastStripPosition=j; + lastxsize=xsize; + } + xsize+=w+vo_font->charspace; + if (dxs0) + { + xsize=lastxsize; + j=lastStripPosition; + y-=vo_font->height; + previousStrip=lastStripPosition; + xsize=-vo_font->charspace; + } + } + } + + for(i=0;ilines;i++){ unsigned char* text=vo_sub->text[i];// "Hello World! HÛDEJÓ!"; int len=strlen(text); - int j; + int j,k; int xsize=-vo_font->charspace; int x=0; - for(j=0;jwidth[sub_unicode?((c<0x80)?c:(c<<8)+text[++j]):c]; - if(w>100) printf("gazvan: %d (%d=%c)\n",w,c,c); - xsize+=w+vo_font->charspace; - } - //printf("text width = %d\n",xsize); - - //if(xsize>dxs) printf("Warning! SUB too wide!!! (%d>%d)\n",xsize,dxs); - - x=dxs/2-xsize/2; - - for(j=0;j=0x80)) c=(c<<8)+text[++j]; - font = vo_font->font[c]; - if(x>=0 && x+vo_font->width[c]=0) - draw_alpha(x,y, - vo_font->width[c], - vo_font->pic_a[font]->h, - vo_font->pic_b[font]->bmp+vo_font->start[c], - vo_font->pic_a[font]->bmp+vo_font->start[c], - vo_font->pic_a[font]->w); - x+=vo_font->width[c]+vo_font->charspace; + w = vo_font->width[c]; + if (c==' ' && dxs>xsize) + { + lastStripPosition=j; + lastxsize=xsize; + } + xsize+=w+vo_font->charspace; + if ((dxs0)| j==len-1) + { + if (j==len-1) lastStripPosition=len; + else xsize=lastxsize; + j=lastStripPosition; + + x=dxs/2-xsize/2; + + for(k=previousStrip;k=0x80)) c=(c<<8)+text[++j]; + font=vo_font->font[c]; + if(x>=0 && x+vo_font->width[c]=0) + draw_alpha(x,y, + vo_font->width[c], + vo_font->pic_a[font]->h, + vo_font->pic_b[font]->bmp+vo_font->start[c], + vo_font->pic_a[font]->bmp+vo_font->start[c], + vo_font->pic_a[font]->w); + x+=vo_font->width[c]+vo_font->charspace; + } + x=0; + y+=vo_font->height; + previousStrip=lastStripPosition; + xsize=lastxsize=-vo_font->charspace; + } } - - y+=vo_font->height; } } @@ -156,3 +205,4 @@ } +