Contents page

Rules for Tools/DragSlider()


DragSlider()
SYNOPSIS
     long DragSlider(struct Window *window, struct Gadget *gadget,
                long width, long (*routine)(), char vertical)

ARGUMENTS
    `struct Window *window'
          Window for slider.

    `struct Gadget *gadget'
          Gadget that defines slider.

    `long width'
          Slider button width.

    `long (*routine)()'
          Routine to draw button.

    `char vertical'
          TRUE if vertical slider.

DESCRIPTION
     Use  `DragSlider()' in conjunction with `DrawSlider()' to create
     the sliders used extensively by the Bars&Pipes Tool control
     windows.  Each slider corresponds to an Intuition Boolean gadget
     and the bounding box of the gadget describes the region the slider
     may move within.

     To drag the slider, call `DragSlider()', passing it the window to
     draw in, the gadget, so it knows the dimensions of the slider, the
     width of the button in pixels, a routine to draw the data in the
     button, and a flag that is set if this is a vertical slider. When
     the user finally releases the slider, `DragSlider()' returns the
     final position of the slider.  The final position is actually the
     value returned by your draw routine, so you can tailor that
     routine to return a value in the appropriate range.

     `DragSlider()' calls your draw routine every time the mouse moves.
     `DragSlider()' erases the button, so your routine need only redraw
     the contents.  Here's a sample routine that converts the slider
     position into a number between 0 and 99, draws that number into
     the knob, and returns it:
	 
long dragroutine(rastport,x,y,position) struct RastPort *rastport;    
                                                 /* RastPort to draw in.  */ 
    short x,y;                    /* Coordinates of button.  *.
    unsigned short position;      /* The slider position. */ 
{
    char text[20];
    Move(rastport,x+4,y+8);
    SetAPen(rastport,0);
    SetDrMd(rastport,JAM1);
    position = position / 655;
    sprintf(text,"%ld",position);
    Text(rastport,text,strlen(text));
    return(position); 
}

     To use `DragSlider()', set up your window to receive Intuition
     `MOUSEMOVE', `MOUSEBUTTONS', `GADGETDOWN' and `GADGETUP' events.
     When the user clicks on your slider's Boolean gadget, respond to
     the `GADGETDOWN' event with a call to `DragSlider()'.  The
     following example uses a horizontal slider 30 pixels wide:
     
	 newvalue = (*functions->DragSlider)(window,gadget,30,dragroutine,0);

SEE
     See DrawSlider().