3030 remove : options . remove ,
3131 scrollMin : - 24 , scroll : - 24 , // title is 24px, rendered at -1
3232 draw : ( idx , r ) => {
33- if ( idx < 0 ) // TITLE
34- return g . setFont ( "12x20" ) . setFontAlign ( - 1 , 0 ) . drawString (
35- menuIcon + " " + title , r . x + 12 , r . y + H - 12 ) ;
33+ if ( idx < 0 ) { // TITLE
34+ var titleText = g . findFont ( menuIcon + " " + title , { w :g . getWidth ( ) - 2 , h :24 , max :24 } ) ;
35+ return g . setFontAlign ( - 1 , 0 ) . drawString ( titleText . text , r . x + 12 , r . y + H - 12 ) ;
36+ }
3637 g . setColor ( g . theme . bg2 ) . fillRect ( { x :r . x + 4 , y :r . y + 2 , w :r . w - 8 , h :r . h - 4 , r :5 } ) ;
37- var v = idx * step + item . min ;
38- g . setColor ( g . theme . fg2 ) . setFont ( "12x20" ) . setFontAlign ( - 1 , 0 ) . drawString ( ( item . format ) ? item . format ( v , 1 ) : v , r . x + 12 , r . y + H / 2 ) ;
38+ var v = idx * step + item . min , txt = item . format ? item . format ( v , 1 ) : v ;
39+ var itemText = g . findFont ( txt , { w :r . w , h :r . h , wrap :1 , trim :1 } ) ;
40+ g . setColor ( g . theme . fg2 ) . setFontAlign ( - 1 , 0 ) . drawString ( itemText . text , r . x + 12 , r . y + H / 2 ) ;
3941 g . drawImage ( /* 20x20 */ atob ( v == item . value ?"FBSBAAH4AH/gHgeDgBww8MY/xmf+bH/jz/88//PP/zz/88f+Nn/mY/xjDww4AcHgeAf+AB+A" :"FBSBAAH4AH/gHgeDgBwwAMYABmAAbAADwAA8AAPAADwAA8AANgAGYABjAAw4AcHgeAf+AB+A" ) , r . x + r . w - 32 , r . y + H / 2 - 10 ) ;
4042 } ,
4143 select : function ( idx ) {
109111 back : back ,
110112 remove : options . remove ,
111113 draw : ( idx , r ) => {
112- if ( idx < 0 ) // TITLE
113- return g . setColor ( g . theme . fg ) . setFont ( "12x20" ) . setFontAlign ( - 1 , 0 ) . drawString (
114- menuIcon + " " + options . title , r . x + 12 , r . y + H - 12 ) ;
115- g . setColor ( g . theme . bg2 ) . fillRect ( { x :r . x + 4 , y :r . y + 2 , w :r . w - 8 , h :r . h - 4 , r :5 } ) ;
116- g . setColor ( g . theme . fg2 ) . setFont ( "12x20" ) ;
117- var pad = 24 ;
114+ g . setFontAlign ( - 1 , 0 ) ;
115+ if ( idx < 0 ) { // TITLE
116+ var title = g . findFont ( menuIcon + " " + options . title , { w :r . w , h :24 , max :24 } ) ;
117+ return g . drawString ( title . text , r . x + 12 , r . y + H - 10 ) ;
118+ }
119+ g . setColor ( g . theme . bg2 ) . fillRect ( { x :r . x + 4 , y :r . y + 2 , w :r . w - 8 , h :r . h - 4 , r :5 } ) . setColor ( g . theme . fg2 ) ;
120+ var pad = 16 ;
118121 var item = menu [ keys [ idx ] ] ;
119122 if ( "object" == typeof item ) {
120123 var v = item . value ;
121124 if ( item . format ) v = item . format ( v ) ;
122- if ( g . stringMetrics ( v ) . width > r . w / 2 ) // bodge for broken wrapString with image
123- v = g . wrapString ( v , r . w / 2 ) . join ( "\n" ) ;
124- g . setFontAlign ( 1 , 0 ) . drawString ( v , r . x + r . w - 8 , r . y + H / 2 ) ;
125- pad += g . stringWidth ( v ) ;
125+ var val = g . findFont ( v , { w :r . w / 2 , h :r . h , wrap :1 , trim :1 } ) ;
126+ g . setFontAlign ( 1 , 0 ) . drawString ( val . text , r . x + r . w - 8 , r . y + H / 2 ) ;
127+ pad += g . stringWidth ( val . text ) ;
126128 } else if ( "function" == typeof item ) {
127129 g . drawImage ( /* 9x18 */ atob ( "CRKBAGA4Hg8DwPB4HgcDg8PB4eHg8HAwAA==" ) , r . x + r . w - 21 , r . y + H / 2 - 9 ) ;
128130 pad += 16 ;
129131 }
130- var title = ( item && item . title ) ?? keys [ idx ] ;
131- var l = g . wrapString ( title , r . w - pad ) ;
132- if ( l . length > 1 )
133- l = g . setFont ( "6x15" ) . wrapString ( title , r . w - pad ) ;
134- g . setFontAlign ( - 1 , 0 ) . drawString ( l . join ( "\n" ) , r . x + 12 , r . y + H / 2 ) ;
132+ var itemText = g . findFont ( ( item && item . title ) ?? keys [ idx ] , { w :r . w - pad , h :r . h , wrap :1 , trim :1 } ) ;
133+ g . setFontAlign ( - 1 , 0 ) . drawString ( itemText . text , r . x + 8 , 1 + r . y + H / 2 ) ;
135134 } ,
136135 select : function ( idx , touch ) {
137136 if ( idx < 0 ) return back && back ( ) ; // title
156155 }
157156 show ( ) ;
158157 return l ;
159- } )
158+ } )
0 commit comments