home *** CD-ROM | disk | FTP | other *** search
/ QBasic & Borland Pascal & C / Delphi5.iso / C / Samples / CSAPE32.ARJ / SOURCE / OWLSCR / BORDGHZB.C < prev    next >
Encoding:
C/C++ Source or Header  |  1990-07-07  |  2.1 KB  |  97 lines

  1. /*
  2.     bordghzb.c   2/87    
  3.     
  4.     % bord_GetHzBar
  5.  
  6.     OWL 1.2
  7.     Copyright (c) 1986, 1987, 1988, by Oakland Group, Inc.
  8.     ALL RIGHTS RESERVED.
  9.  
  10.     Revision History:
  11.     -----------------
  12.     11/08/88 ted    Changed to new non-window border scheme
  13.     12/18/88 jdc    Fixed calculation error
  14.     12/20/88 ted    Converted to integer math.
  15.  
  16.      3/28/90 jmd    ansi-fied
  17.      4/08/90 pmcm   variant of bord_GetVtBar
  18. */
  19.  
  20. #include "oakhead.h"
  21. #include "disppriv.h"
  22. #include "bordobj.h"
  23. /* -------------------------------------------------------------------------- */
  24.  
  25. void bord_GetHzBar(win_type win, int *lbar, int *rbar, boolean *larrow, boolean *rarrow)
  26. /*
  27.     Get horizontal scroll bar info for a border.
  28.     The right and left columns of the bar (in border coords) are passed
  29.     in lbar and rbar.  The right and left columns of the scrollbar 'elevator' 
  30.     are returned in lbar and rbar.
  31. */
  32. {
  33.     inposdata_struct inpos;
  34.     int elleft, elright, elwid;
  35.     int barwid;
  36.     opcoord inwid;
  37.  
  38.     if (win == NULL) {
  39.         *larrow = FALSE;
  40.         *rarrow = FALSE;
  41.         return;
  42.     }
  43.     inpos.win = win;
  44.     win_Do(win, WINM_GETINPOS, NULL, &inpos);
  45.  
  46.     *larrow = (inpos.inbox.xmin < 0);
  47.     *rarrow = (inpos.inbox.xmax > win_GetPixWidth(win));
  48.  
  49.     if (!(*larrow) && !(*rarrow)) {
  50.         return;
  51.     }
  52.  
  53.     barwid = *rbar - *lbar + 1;
  54.     if (barwid <= 1) {
  55.         return;
  56.     }
  57.  
  58.     inwid = opbox_GetWidth(&inpos.inbox);
  59.     if (inwid <= 0) {
  60.         return;
  61.     }
  62.  
  63.     elleft = (int)((long) ((long) barwid * (long)(0 - inpos.inbox.xmin) + inwid/2) / inwid);
  64.     elleft += *lbar;
  65.  
  66.     elwid = (int)((long) ((long) barwid * (long) win_GetPixWidth(win) + inwid/2) / inwid);
  67.     if (elwid <= 0) {
  68.         elwid = 1;
  69.     }
  70.     elright = elleft + elwid - 1;
  71.  
  72.     if (win_GetPixWidth(win) <= inpos.inbox.xmax &&
  73.         elright > *rbar) {
  74.         elleft -= elright - *rbar;
  75.         elright = *rbar;
  76.     }
  77.  
  78.     if (elleft < *lbar) {
  79.         elleft = *lbar;
  80.     }
  81.     else if (elleft > *rbar) {
  82.         elleft = *rbar;
  83.     }
  84.  
  85.     if (elright < *lbar) {
  86.         elright = *lbar;
  87.     }
  88.     else if (elright > *rbar) {
  89.         elright = *rbar;
  90.     }
  91.  
  92.     *lbar = elleft;
  93.     *rbar = elright;
  94. }
  95. /* -------------------------------------------------------------------------- */
  96.  
  97.