Mercurial > mplayer.hg
comparison libmenu/menu_list.c @ 24979:476d4922566a
Make page up and down with proper page size instead of always 10 rows.
author | ulion |
---|---|
date | Sat, 10 Nov 2007 02:01:41 +0000 |
parents | ac69ba536915 |
children | 96d0992c7920 |
comparison
equal
deleted
inserted
replaced
24978:334ccebe77c4 | 24979:476d4922566a |
---|---|
76 y = mpriv->minb; | 76 y = mpriv->minb; |
77 | 77 |
78 need_h = count * (mpriv->vspace + vo_font->height) - mpriv->vspace; | 78 need_h = count * (mpriv->vspace + vo_font->height) - mpriv->vspace; |
79 if( need_h + th > dh) { | 79 if( need_h + th > dh) { |
80 int start,end; | 80 int start,end; |
81 int maxl = (dh + mpriv->vspace - th) / (mpriv->vspace + vo_font->height); | 81 mpriv->disp_lines = (dh + mpriv->vspace - th) / (mpriv->vspace + vo_font->height); |
82 if(maxl < 4) { | 82 if(mpriv->disp_lines < 4) { |
83 th = 0; | 83 th = 0; |
84 maxl = (dh + mpriv->vspace) / ( vo_font->height + mpriv->vspace); | 84 mpriv->disp_lines = (dh + mpriv->vspace) / ( vo_font->height + mpriv->vspace); |
85 } | 85 } |
86 // Too smoll | 86 // Too smoll |
87 if(maxl < 1) return; | 87 if(mpriv->disp_lines < 1) return; |
88 need_h = maxl*(mpriv->vspace + vo_font->height) - mpriv->vspace; | 88 need_h = mpriv->disp_lines*(mpriv->vspace + vo_font->height) - mpriv->vspace; |
89 | 89 |
90 start = sidx - (maxl/2); | 90 start = sidx - (mpriv->disp_lines/2); |
91 if(start < 0) start = 0; | 91 if(start < 0) start = 0; |
92 end = start + maxl; | 92 end = start + mpriv->disp_lines; |
93 if(end > count) { | 93 if(end > count) { |
94 end = count; | 94 end = count; |
95 if(end - start < maxl) | 95 if(end - start < mpriv->disp_lines) |
96 start = end - maxl < 0 ? 0 : end - maxl; | 96 start = end - mpriv->disp_lines < 0 ? 0 : end - mpriv->disp_lines; |
97 } | 97 } |
98 m = mpriv->menu; | 98 m = mpriv->menu; |
99 for(i = 0 ; m->next && i < start ; ) { | 99 for(i = 0 ; m->next && i < start ; ) { |
100 if(!m->hide) i++; | 100 if(!m->hide) i++; |
101 m = m->next; | 101 m = m->next; |
102 } | 102 } |
103 } else | 103 } else { |
104 m = mpriv->menu; | 104 m = mpriv->menu; |
105 mpriv->disp_lines = count; | |
106 } | |
105 | 107 |
106 bg_w = need_w+2*mpriv->minb; | 108 bg_w = need_w+2*mpriv->minb; |
107 if(th > 0) { | 109 if(th > 0) { |
108 if(mpriv->title_bg >= 0) { | 110 if(mpriv->title_bg >= 0) { |
109 int tw,th2; | 111 int tw,th2; |
217 /**/; | 219 /**/; |
218 if(m) | 220 if(m) |
219 mpriv->current = m; | 221 mpriv->current = m; |
220 break; | 222 break; |
221 case KEY_PAGE_UP: | 223 case KEY_PAGE_UP: |
222 for(i = 0, m = mpriv->current ; m && m->prev && i < 10 ; m = m->prev, i++) | 224 for(i = 0, m = mpriv->current ; m && m->prev && i < mpriv->disp_lines ; m = m->prev, i++) |
223 /**/; | 225 /**/; |
224 if(m) | 226 if(m) |
225 mpriv->current = m; | 227 mpriv->current = m; |
226 break; | 228 break; |
227 case KEY_PAGE_DOWN: | 229 case KEY_PAGE_DOWN: |
228 for(i = 0, m = mpriv->current ; m && m->next && i < 10 ; m = m->next, i++) | 230 for(i = 0, m = mpriv->current ; m && m->next && i < mpriv->disp_lines ; m = m->next, i++) |
229 /**/; | 231 /**/; |
230 if(m) | 232 if(m) |
231 mpriv->current = m; | 233 mpriv->current = m; |
232 break; | 234 break; |
233 default: | 235 default: |