/* DRW Auto Scroll structure definitions. */

#ifndef drwosh_H
 #include "DRW/drwosh.h"
#endif

#ifndef drwAscrfnh_H
 #define drwAscrfnh_H

#if defined NAMESPACE_DRWIMPC
  namespace DrWimpC {
#endif

#if defined NAMESPACE_OSLIB
  using namespace OSLib;
#endif

#define DRW_DEF_PZLEFT                   100
#define DRW_DEF_PZBOTTOM                 100
#define DRW_DEF_PZRIGHT                  100
#define DRW_DEF_PZTOP                    100
#define DRW_DEF_PAUSEDUR                 30
                                         
#define DRW_DEF_ASCR_SCALEBYX            4
#define DRW_DEF_ASCR_SCALEBYY            4
#define DRW_DEF_ASCR_FACTORX             (double) 1
#define DRW_DEF_ASCR_FACTORY             (double) 1
#define DRW_DEF_ASCR_FASTX               40
#define DRW_DEF_ASCR_FASTY               40

#define DRW_AUTO_SCROLL_STARTED       (wimp_auto_scroll_flags) 0x100u


typedef struct    drw_ascr_data          drw_ascr_data;

typedef void (*drw_start_auto_scroll_fn)(wimp_w whan,
                                         drw_ascr_data *wasr);
typedef void (*drw_begin_auto_scroll_fn)(wimp_w whan,
                                         int acsrreason);
typedef void (*drw_stop_auto_scroll_fn)(wimp_w whan);
typedef bits (*drw_auto_scroll_fn)(wimp_w whan,
                                   wimp_w overwindow,
                                   int mousex,
                                   int mousey);
typedef int (*drw_load_def_ptrs_fn)(void);

typedef struct    drw_ascrfn_str         drw_ascrfn_str;


typedef bits      drw_hover_zone_flags;

#define drw_hover_zone_left              ((drw_hover_zone_flags) 0x1u)
#define drw_hover_zone_right             ((drw_hover_zone_flags) 0x2u)
#define drw_hover_zone_top               ((drw_hover_zone_flags) 0x4u)
#define drw_hover_zone_bottom            ((drw_hover_zone_flags) 0x8u)
#define drw_outline_bound                ((drw_hover_zone_flags) 0x10u)
#define drw_use_RO4_swi                  ((drw_hover_zone_flags) 0x20u)
#define drw_ascr_ptr_changed             ((drw_hover_zone_flags) 0x40u)
#define drw_pause_if_obscured            ((drw_hover_zone_flags) 0x80u)
#define drw_ascr_unbounded               ((drw_hover_zone_flags) 0x100u)
#define drw_ascr_auto_scroll_started     ((drw_hover_zone_flags) 0x200u)


#define DRW_NOT_AUTO_SCROLLING           ((bits) 0x0u)
#define DRW_IN_AUTO_SCROLL_WINDOW        ((bits) 0x1u)
#define DRW_AUTO_SCROLLING               ((bits) 0x2u)
                                         
#define drw_ascr_ptrxy                   (0x1)
#define drw_ascr_ptrx                    (0x2)
#define drw_ascr_ptry                    (0x3)

#define drw_no_drag_auto_scroll          (0x1)
#define drw_select_drag_auto_scroll      (0x2)
#define drw_adjust_drag_auto_scroll      (0x3)


struct drw_ascrfn_str {

drw_start_auto_scroll_fn                 startascr;
drw_begin_auto_scroll_fn                 beginautoscroll;
drw_auto_scroll_fn                       autoscroll;
drw_stop_auto_scroll_fn                  stopascr;
drw_load_def_ptrs_fn                     loaddefptrs;

};


struct drw_ascr_data {

wimp_auto_scroll_info  wasinfo;
wimp_auto_scroll_flags wasflags;
os_box box;
drw_hover_zone_flags hoverflags;
os_t hovertime;
osspriteop_area *ptrsprites;
int scalebyx;
int scalebyy;
double scrollfactorx;
double scrollfactory;
int fastscrollbyx;
int fastscrollbyy;
int ascrreason;
int ptrchangedval;

};

#if defined NAMESPACE_DRWIMPC
  }
#endif

#include "DRW/drwWascr.h"

#endif

/* End of DRW Auto Scroll structure definitions. */

