Class new title: ScrollBar subclassof: Object fields: 'rect bitstr owner position' declare: 'JumpCursor UpCursor DownCursor ' boxPosition_ t1 [position moveto: rect origin + (9  (4 + ([t1 < 0.0  [0.0] t1 > 1.0  [1.0] t1] * (rect height - 16))))] classInit [UpCursor _ Cursor new fromtext: ' 1000000000000000 1100000000000000 1110000000000000 1111000000000000 1111100000000000 1111110000000000 1100000000000000 1100000000000000 1100000000000000 1100000000000000 1100000000000000 1100000000000000 1100000000000000 1100000000000000 1100000000000000 1100000000000000'. DownCursor _ Cursor new fromtext: ' 1100000000000000 1100000000000000 1100000000000000 1100000000000000 1100000000000000 1100000000000000 1100000000000000 1100000000000000 1100000000000000 1100000000000000 1111110000000000 1111100000000000 1111000000000000 1110000000000000 1100000000000000 1000000000000000'. JumpCursor _ Cursor new fromtext: ' 0111000000000000 1111100000000000 1111100000000000 0111000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000' offset: 2  1] close [owner _ nil] eachtime | t1 t2 t3 [t1 _ user mp. rect has: t1  [t2 _ rect center x - 2. t1 x < t2  [t3 _ Rectangle new origin: rect origin corner: t2  rect maxY. DownCursor showwhile [while [t1 _ user mp. t3 has: t1] do [self slide: t1  [owner scrollTo: (position minY - rect minY - 4) asFloat / (rect height - 12)] user redbug  [self reposition [owner scrollUp: rect origin y - t1 y]]]. nil]] t3 _ Rectangle new origin: t2  rect minY corner: rect corner. UpCursor showwhile [while [t1 _ user mp. t3 has: t1] do [self slide: t1  [owner scrollTo: (position minY - rect minY - 4) asFloat / (rect height - 12)] user redbug  [self reposition [owner scrollUp: t1 y - rect origin y]]]. nil]] false] firsttime [rect has: user mp] hide [bitstr  nil  [user notify: 'Attempt to hide unshown scrollbar'] rect bitsFromString: bitstr. bitstr _ nil] hidewhile t1 | t2 [self hide. t2 _ t1 eval. self show. t2] lasttime on: t1 from: t2 [self on: t1 from: t2 at: t2 scrollPos] on: t1 from: t2 at: t3 [owner _ t2. rect _ Rectangle new origin: t1 origin - (32  2) extent: 32  (t1 height + 4). position _ Rectangle new origin: rect origin + (9  4) extent: 16  8. self boxPosition_ t3] reposition t1 [self reshow [t1 eval. self boxPosition_ owner scrollPos]] reshow t1 | t2 [t2 _ position inset: 2. t1 eval. t2 clear: white. position outline] show [bitstr _ rect bitsIntoString. rect clear: black. (rect inset: 2  2 and: 1  2) clear: white. position outline] slide: t1 | t2 [position has: t1  [JumpCursor showwhile [t2 _ false. while ((position has: user mp) and t2  false) do [user redbug  [t2 _ true. while user redbug do [self reshow [position moveto: position origin x  ((user mp y max: rect origin y + 4) min: rect corner y - 12)]]]]. nil]. t2] false]