summaryrefslogtreecommitdiffstats
path: root/libvo/sub.c
diff options
context:
space:
mode:
authoratlka <atlka@b3059339-0415-0410-9bf9-f77b7e298cf2>2001-08-17 08:47:58 +0000
committeratlka <atlka@b3059339-0415-0410-9bf9-f77b7e298cf2>2001-08-17 08:47:58 +0000
commitdc2db774183ca6cf87c77ebc91ac319556a51d72 (patch)
treeef639e4127821513119502c264efc65baa10f703 /libvo/sub.c
parent4e876e1d56fbc85102eafc5b2d740c2b0058d38e (diff)
downloadmpv-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
Diffstat (limited to 'libvo/sub.c')
-rw-r--r--libvo/sub.c42
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();