Mailing List Archive: 49091 messages
  • Home
  • Script library
  • AltME Archive
  • Mailing list
  • Articles Index
  • Site search
 

[ALLY] Re: Scrolling views

From: brett:codeconscious at: 18-Feb-2001 16:00

Thanks Bo, That behaviour is exactly what I was looking for. A built-in sounds good. Brett. ----- Original Message ----- From: <[bo--rebol--com]> To: <[ally-list--rebol--com]> Sent: Saturday, February 17, 2001 4:07 AM Subject: [ALLY] Re: Scrolling views
> Brett, > > Here is a handy function (with examples) that may help you or others make > scrolling views easier. Last I heard VID was going to get scrolling built > in by default, but until then this function can be used. > > REBOL [ > Title: "Automated scrolling" > Date: 22-Dec-2000 > Author: "Bohdan Lechnowsky" > Email: [bo--rebol--com] > File: %scroll-face.r > Version: 1.0.0 > Purpose: { > Demonstrates a way to write a scrollable face. > } > Comments: { > This is a generalized function with 100% environmentally-friendly > local variables. It can operate on any number of scrollable > windows in the same main face--even scrollable windows nested > inside other scrollable windows--as the example shows. > } > History: [ > 0.9.0 ["Initial concept explored" "Bohdan Lechnowsky"] > 0.9.1 ["Tweaks" "Bohdan Lechnowsky"] > 1.0.0 ["Fully working version" "Bohdan Lechnowsky"] > 1.1.0 ["Added arrows and size option plus minor mods" "Bohdan
Lechnowsky"]
> 1.1.1 ["Bug fix with local variable" "Bohdan Lechnowsky"] > 1.1.2 ["Another bug fix with local variable" "Bohdan
Lechnowsky"]
> ] > ] > > scroll-face: func [ > {Returns vertically scrollable version of input face.} > at {Face to attach scroll-face bar to} > v {Visible size of the attach-to face} > /arrows {Include up and down arrows} > /size {Change size of scroll bar/arrows} > s {New size for scroll bar/arrows} > /local l a f > ][ > if not size [s: 16] > l: layout/offset [ > backdrop 0.0.0 > across > at 0x0 > space 0 > size (v + (s * 1x0)) > box (v) > slider (v * 0x1 + (s * 1x0)) [] > ] 0x0 > > if arrows [ > l/pane/3/size/y: l/pane/3/size/y - (s * 2) > arrow: layout/offset [ > arrow up (s * 1x1) [ > f: face/parent-face/pane > f/2/offset/y: min 0 f/2/offset/y + 15 > f/3/data: negate f/2/offset/y / (f/2/size/y - v/y) > show face/parent-face > ] > arrow down (s * 1x1) [ > f: face/parent-face/pane > f/2/offset/y: max v/y - f/2/size/y f/2/offset/y - 15 > f/3/data: negate f/2/offset/y / (f/2/size/y - v/y) > show face/parent-face > ] > ] 0x0 > arrow/pane/1/offset: l/pane/3/offset * 1x0 + (l/pane/3/size * 0x1) > arrow/pane/2/offset: l/pane/3/offset * 1x0 + (l/pane/3/size * 0x1
+ (s * 0x1))
> append l/pane arrow/pane > ] > > l/pane/2: at > l/pane/3/action: func [f a] compose [ > f/parent-face/pane/2/offset/y: (negate at/size/y - v/y) * f/data > show f/parent-face > ] > l/pane/3/redrag v/y / at/size/y > l > ] > > ; Simple example (JOL): > > view scroll-face/arrows/size layout/offset [text
system/view/VID/vid-styles 300 txt mold system/view/VID/vid-styles 300 as-is] 0x0 300x500 25