home *** CD-ROM | disk | FTP | other *** search
- /*
- bordghzb.c 2/87
-
- % bord_GetHzBar
-
- OWL 1.2
- Copyright (c) 1986, 1987, 1988, by Oakland Group, Inc.
- ALL RIGHTS RESERVED.
-
- Revision History:
- -----------------
- 11/08/88 ted Changed to new non-window border scheme
- 12/18/88 jdc Fixed calculation error
- 12/20/88 ted Converted to integer math.
-
- 3/28/90 jmd ansi-fied
- 4/08/90 pmcm variant of bord_GetVtBar
- */
-
- #include "oakhead.h"
- #include "disppriv.h"
- #include "bordobj.h"
- /* -------------------------------------------------------------------------- */
-
- void bord_GetHzBar(win_type win, int *lbar, int *rbar, boolean *larrow, boolean *rarrow)
- /*
- Get horizontal scroll bar info for a border.
- The right and left columns of the bar (in border coords) are passed
- in lbar and rbar. The right and left columns of the scrollbar 'elevator'
- are returned in lbar and rbar.
- */
- {
- inposdata_struct inpos;
- int elleft, elright, elwid;
- int barwid;
- opcoord inwid;
-
- if (win == NULL) {
- *larrow = FALSE;
- *rarrow = FALSE;
- return;
- }
- inpos.win = win;
- win_Do(win, WINM_GETINPOS, NULL, &inpos);
-
- *larrow = (inpos.inbox.xmin < 0);
- *rarrow = (inpos.inbox.xmax > win_GetPixWidth(win));
-
- if (!(*larrow) && !(*rarrow)) {
- return;
- }
-
- barwid = *rbar - *lbar + 1;
- if (barwid <= 1) {
- return;
- }
-
- inwid = opbox_GetWidth(&inpos.inbox);
- if (inwid <= 0) {
- return;
- }
-
- elleft = (int)((long) ((long) barwid * (long)(0 - inpos.inbox.xmin) + inwid/2) / inwid);
- elleft += *lbar;
-
- elwid = (int)((long) ((long) barwid * (long) win_GetPixWidth(win) + inwid/2) / inwid);
- if (elwid <= 0) {
- elwid = 1;
- }
- elright = elleft + elwid - 1;
-
- if (win_GetPixWidth(win) <= inpos.inbox.xmax &&
- elright > *rbar) {
- elleft -= elright - *rbar;
- elright = *rbar;
- }
-
- if (elleft < *lbar) {
- elleft = *lbar;
- }
- else if (elleft > *rbar) {
- elleft = *rbar;
- }
-
- if (elright < *lbar) {
- elright = *lbar;
- }
- else if (elright > *rbar) {
- elright = *rbar;
- }
-
- *lbar = elleft;
- *rbar = elright;
- }
- /* -------------------------------------------------------------------------- */
-
-