diff options
author | atlka <atlka@b3059339-0415-0410-9bf9-f77b7e298cf2> | 2001-08-17 08:47:58 +0000 |
---|---|---|
committer | atlka <atlka@b3059339-0415-0410-9bf9-f77b7e298cf2> | 2001-08-17 08:47:58 +0000 |
commit | dc2db774183ca6cf87c77ebc91ac319556a51d72 (patch) | |
tree | ef639e4127821513119502c264efc65baa10f703 | |
parent | 4e876e1d56fbc85102eafc5b2d740c2b0058d38e (diff) | |
download | mpv-dc2db774183ca6cf87c77ebc91ac319556a51d72.tar.bz2 mpv-dc2db774183ca6cf87c77ebc91ac319556a51d72.tar.xz |
skip lines with negative y position if there is too many lines to display
git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@1570 b3059339-0415-0410-9bf9-f77b7e298cf2
-rw-r--r-- | libvo/sub.c | 42 |
1 files changed, 25 insertions, 17 deletions
diff --git a/libvo/sub.c b/libvo/sub.c index 52035bd9bc..362f30d9df 100644 --- a/libvo/sub.c +++ b/libvo/sub.c @@ -48,14 +48,16 @@ inline static void vo_draw_text_progbar(int dxs,int dys,void (*draw_alpha)(int x // printf("osd.progbar width=%d xpos=%d\n",width,x); c=vo_osd_progbar_type; - if(vo_osd_progbar_type>0 && (font=vo_font->font[c])>=0) - draw_alpha(x-vo_font->width[c]-vo_font->spacewidth,y, + if(vo_osd_progbar_type>0 && (font=vo_font->font[c])>=0) { + int xp=x-vo_font->width[c]-vo_font->spacewidth; + draw_alpha((xp<0?0:xp),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); - + } + c=OSD_PB_START; if ((font=vo_font->font[c])>=0) draw_alpha(x,y, @@ -197,24 +199,30 @@ inline static void vo_draw_text_sub(int dxs,int dys,void (*draw_alpha)(int x0,in k=i=0; l=lines; while (l--){ - x = xtbl[i++]; - if(y<dys) - while ((c=utbl[k++])){ - if (x>=0 && x+vo_font->width[c]<=dxs) - if ((font=vo_font->font[c])>=0) - draw_alpha(x,y, - vo_font->width[c], + if (y>=0){ + x= xtbl[i++]; + while ((c=utbl[k++])){ + if (x>=0 && x+vo_font->width[c]<=dxs) + if ((font=vo_font->font[c])>=0) + draw_alpha(x,y, + vo_font->width[c], // vo_font->pic_a[font]->h, - (y+vo_font->pic_a[font]->h<=dys)?vo_font->pic_a[font]->h:dys-y, - 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; - } - y+=vo_font->height; + (y+vo_font->pic_a[font]->h<=dys)?vo_font->pic_a[font]->h:dys-y, + 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; + } + } else { + while (utbl[k++]) ; // skip lines with negative y value + i++; // seldom case but who know ;-) + } + y+=vo_font->height; } } + + static int draw_alpha_init_flag=0; extern void vo_draw_alpha_init(); |