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: