ScrollBarLoop Actionscript

Table of contents | Previous document | Download ScrollBarLoop.as | SWF!T Homepage

RCSfile: ScrollBarLoop.as,v  Revision: 1.5  Date: 2003/03/21 07:10:06  

Copyright 2003 Orgdot AS. All Rights Reserved. http://dev.swfit.com
This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version.
This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more details.
You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.


This loop controls the object that is to be scrolled.
author      Olaf Havnes
version     Revision: 1.5  Date: 2003/03/21 07:10:06  
since       SWFIT1.0



We measure the delay every run - it might be user controlled:

dl = /:delay ne "" ? /:delay : DEFAULT_DELAY;

if (drag)
{
   if (scroll_horz)
   {
       if (/:change_mouse_x + pos_x < min_x) pos_x = min_x;
       else if (/:change_mouse_x + pos_x > max_x) pos_x = max_x;
       else pos_x += /:change_mouse_x;
   }
   else
   {
       if (/:change_mouse_y + pos_y < min_y) pos_y = min_y;
       else if (/:change_mouse_y + pos_y > max_y) pos_y = max_y;
       else pos_y += /:change_mouse_y;
   }
}
else
{
   pos_x = x0 - dl * (pos_x - x0) / (dl + 1);
   pos_y = y0 - dl * (pos_y - y0) / (dl + 1);
}

button._x = pxl ? int (pos_x) : pos_x;
button._y = pxl ? int (pos_y) : pos_y;

Compute the leverage:

scroll_leverage = 0;

if (max_press) scroll_leverage = - lvrg;
else if (min_press) scroll_leverage = lvrg;
else if (drag && int (pos_x) != int (x0)) scroll_leverage = lvrg * scroll_spd * (x0 - pos_x) / background._width ;
else if (drag && int (pos_y) != int (y0)) scroll_leverage = lvrg * scroll_spd * (y0 - pos_y) / background._height;



TODO:

if (txt_scroll)
{
   scroll_max = eval (scroll_object add ".maxscroll");

Do we hide the scrollbar if it is not needed ?

   if (hde_scroll) _visible = scroll_max > 1;

   if (scroll_leverage != 0)
   {

do this once

       if (scroll_nmb eq "") scroll_nmb = eval (scroll_object add ".scroll");

What is the largest possible step to take ?

       scroll_step_max = background._height / 100.0;

Implement the number from the buttons

       scroll_step = - scroll_max * scroll_leverage;
       if (scroll_step < 0)
       {
           if (scroll_step < - scroll_step_max) scroll_step = - scroll_step_max;
       }
       else if (scroll_step > scroll_step_max) scroll_step = scroll_step_max;

Check the bounding box

       if (scroll_nmb + scroll_step > scroll_max) scroll_nmb = scroll_max;
       else if (scroll_nmb + scroll_step < scroll_min) scroll_nmb = scroll_min;
       else scroll_nmb += scroll_step;

       set ( scroll_object add ".scroll", int (scroll_nmb) );
   }
}
else
{

TODO - symmetrical of the paragraph below. Leave it empty to all functions are resolved.

   if (scroll_horz)
   {
   }
   else if (scroll_leverage != 0)
   {

We measure the size of the scroll_object every run - the size might change

during the lifetime of the scrollbar.

       scroll_height = _parent.scroll_height ne "" ? _parent.scroll_height : getProperty (scroll_object, _height);
       scroll_y = getProperty (scroll_object, _y);


Note the "no_scroll_size", that might be programmatically plotted from inside

the scrollable object. It defaults to the size of the scroll background.

       no_scroll_size = _parent.no_scroll_size ne "" ? _parent.no_scroll_size : background._height;

       scroll_max = scroll_y0;
       scroll_min = scroll_y0 - scroll_height + no_scroll_size;

Do we hide the scrollbar if it is not needed ?

       if (hde_scroll) _visible = scroll_min <= 0;
       

What is the largest possible step to take ?

       scroll_step_max = background._height / 4;

We implement the number from the buttons

       scroll_step = scroll_leverage * scroll_height;
       if (scroll_step < 0)
       {
           if (scroll_step < - scroll_step_max) scroll_step = - scroll_step_max;
       }
       else if (scroll_step > scroll_step_max) scroll_step = scroll_step_max;
       

Check the bounding box

       if (scroll_y + scroll_step > scroll_max) scroll_y = scroll_max;
       else if (scroll_y + scroll_step < scroll_min) scroll_y = scroll_min;
       else scroll_y += scroll_step;
       

We round off no matter what flag is set on the scroll button:

       if (scroll_step * scroll_step > snp )
       setProperty (scroll_object, _y, int (scroll_y) );
   }
}


Have we been told globally to reset the scrollbar ?

if (/:reset_scroll)
{
   if (txt_scroll) set ( scroll_object add ".scroll", 1 );
   else setProperty (scroll_object, _y, scroll_y0 );
}