123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270 |
- /*
- THE COMPUTER CODE CONTAINED HEREIN IS THE SOLE PROPERTY OF PARALLAX
- SOFTWARE CORPORATION ("PARALLAX"). PARALLAX, IN DISTRIBUTING THE CODE TO
- END-USERS, AND SUBJECT TO ALL OF THE TERMS AND CONDITIONS HEREIN, GRANTS A
- ROYALTY-FREE, PERPETUAL LICENSE TO SUCH END-USERS FOR USE BY SUCH END-USERS
- IN USING, DISPLAYING, AND CREATING DERIVATIVE WORKS THEREOF, SO LONG AS
- SUCH USE, DISPLAY OR CREATION IS FOR NON-COMMERCIAL, ROYALTY OR REVENUE
- FREE PURPOSES. IN NO EVENT SHALL THE END-USER USE THE COMPUTER CODE
- CONTAINED HEREIN FOR REVENUE-BEARING PURPOSES. THE END-USER UNDERSTANDS
- AND AGREES TO THE TERMS HEREIN AND ACCEPTS THE SAME BY USE OF THIS FILE.
- COPYRIGHT 1993-1998 PARALLAX SOFTWARE CORPORATION. ALL RIGHTS RESERVED.
- */
- /*
- * $Source: f:/miner/source/ui/rcs/scroll.c $
- * $Revision: 1.5 $
- * $Author: john $
- * $Date: 1994/11/18 23:07:33 $
- *
- * Routines for doing vertical scroll bars.
- *
- * $Log: scroll.c $
- * Revision 1.5 1994/11/18 23:07:33 john
- * Changed a bunch of shorts to ints.
- *
- * Revision 1.4 1993/12/07 12:30:35 john
- * new version.
- *
- * Revision 1.3 1993/10/26 13:46:10 john
- * *** empty log message ***
- *
- * Revision 1.2 1993/10/05 17:31:04 john
- * *** empty log message ***
- *
- * Revision 1.1 1993/09/20 10:35:29 john
- * Initial revision
- *
- *
- */
- #pragma off (unreferenced)
- static char rcsid[] = "$Id: scroll.c 1.5 1994/11/18 23:07:33 john Exp $";
- #pragma on (unreferenced)
- #include <stdlib.h>
- #include "fix.h"
- #include "types.h"
- #include "gr.h"
- #include "ui.h"
- #include "key.h"
- #define TICKER (*(volatile int *)0x46C)
- void ui_draw_scrollbar( UI_GADGET_SCROLLBAR * scrollbar )
- {
- int x, y;
- if (scrollbar->status==0)
- return;
- scrollbar->status = 0;
- x = y = 0;
- ui_mouse_hide();
- gr_set_current_canvas( scrollbar->canvas );
- if (CurWindow->keyboard_focus_gadget == (UI_GADGET *)scrollbar)
- gr_setcolor( CRED );
- else
- gr_setcolor( CGREY );
- gr_rect( 0, 0, scrollbar->width-1, scrollbar->fake_position-1 );
- gr_rect( 0, scrollbar->fake_position+scrollbar->fake_size, scrollbar->width-1, scrollbar->height-1);
- ui_draw_box_out(0, scrollbar->fake_position, scrollbar->width-1, scrollbar->fake_position+scrollbar->fake_size-1 );
- ui_mouse_show();
- }
- UI_GADGET_SCROLLBAR * ui_add_gadget_scrollbar( UI_WINDOW * wnd, short x, short y, short w, short h, int start, int stop, int position, int window_size )
- {
- int tw, th, taw;
- UI_GADGET_SCROLLBAR * scrollbar;
- char up[2];
- char down[2];
- up[0] = 30; up[1] = 0;
- down[0] = 31; down[1] = 0;
- gr_get_string_size( up, &tw, &th, &taw );
- w = tw + 10;
- if (stop < start ) stop = start;
- scrollbar = (UI_GADGET_SCROLLBAR *)ui_gadget_add( wnd, 3, x, y+w, x+w-1, y+h-w-1 );
- scrollbar->up_button = ui_add_gadget_button( wnd, x, y, w, w, up, NULL );
- scrollbar->up_button->parent = (UI_GADGET *)scrollbar;
- scrollbar->down_button =ui_add_gadget_button( wnd, x, y+h-w, w, w, down, NULL );
- scrollbar->down_button->parent = (UI_GADGET *)scrollbar;
- scrollbar->horz = 0;
- scrollbar->width = scrollbar->x2-scrollbar->x1+1;
- scrollbar->height = scrollbar->y2-scrollbar->y1+1;
- scrollbar->start = start;
- scrollbar->stop = stop;
- scrollbar->position = position;
- scrollbar->window_size = window_size;
- scrollbar->fake_length = scrollbar->height;
- scrollbar->fake_position = 0;
- if (stop!=start)
- scrollbar->fake_size = (window_size * scrollbar->height)/(stop-start+1+window_size);
- else
- scrollbar->fake_size = scrollbar->height;
- if (scrollbar->fake_size < 7) scrollbar->fake_size = 7;
- scrollbar->dragging = 0;
- scrollbar->moved=0;
- scrollbar->last_scrolled = 0;
- return scrollbar;
- }
- void ui_scrollbar_do( UI_GADGET_SCROLLBAR * scrollbar, int keypress )
- {
- int OnMe, OnSlider, keyfocus;
- int oldpos, op;
- keyfocus = 0;
- keypress = keypress;
- if (CurWindow->keyboard_focus_gadget==(UI_GADGET *)scrollbar)
- keyfocus = 1;
- if (scrollbar->start==scrollbar->stop)
- {
- scrollbar->position = 0;
- scrollbar->fake_position = 0;
- ui_draw_scrollbar( scrollbar );
- return;
- }
- op = scrollbar->position;
- oldpos = scrollbar->fake_position;
- scrollbar->moved = 0;
- if ( (scrollbar->up_button->position!=0) || (keyfocus && keyd_pressed[KEY_UP]) )
- {
- if (TICKER > scrollbar->last_scrolled+1)
- {
- scrollbar->last_scrolled = TICKER;
- scrollbar->position--;
- if (scrollbar->position < scrollbar->start )
- scrollbar->position = scrollbar->start;
- scrollbar->fake_position = scrollbar->position-scrollbar->start;
- scrollbar->fake_position *= scrollbar->height-scrollbar->fake_size;
- scrollbar->fake_position /= (scrollbar->stop-scrollbar->start);
- }
- }
- if ( (scrollbar->down_button->position!=0) || (keyfocus && keyd_pressed[KEY_DOWN]) )
- {
- if (TICKER > scrollbar->last_scrolled+1)
- {
- scrollbar->last_scrolled = TICKER;
- scrollbar->position++;
- if (scrollbar->position > scrollbar->stop )
- scrollbar->position = scrollbar->stop;
- scrollbar->fake_position = scrollbar->position-scrollbar->start;
- scrollbar->fake_position *= scrollbar->height-scrollbar->fake_size;
- scrollbar->fake_position /= (scrollbar->stop-scrollbar->start);
- }
- }
- OnMe = ui_mouse_on_gadget( (UI_GADGET *)scrollbar );
- //gr_ubox(0, scrollbar->fake_position, scrollbar->width-1, scrollbar->fake_position+scrollbar->fake_size-1 );
- if (!B1_PRESSED )
- scrollbar->dragging = 0;
- //if (B1_PRESSED && OnMe )
- // listbox->dragging = 1;
- OnSlider = 0;
- if ((Mouse.y >= scrollbar->fake_position+scrollbar->y1) && \
- (Mouse.y < scrollbar->fake_position+scrollbar->y1+scrollbar->fake_size) && OnMe )
- OnSlider = 1;
- if (B1_JUST_PRESSED && OnSlider )
- {
- scrollbar->dragging = 1;
- scrollbar->drag_x = Mouse.x;
- scrollbar->drag_y = Mouse.y;
- scrollbar->drag_starting = scrollbar->fake_position;
- }
- if ( B1_PRESSED && OnMe && !OnSlider && (TICKER > scrollbar->last_scrolled+4) )
- {
- scrollbar->last_scrolled = TICKER;
- if ( Mouse.y < scrollbar->fake_position+scrollbar->y1 )
- {
- // Page Up
- scrollbar->position -= scrollbar->window_size;
- if (scrollbar->position < scrollbar->start )
- scrollbar->position = scrollbar->start;
- } else {
- // Page Down
- scrollbar->position += scrollbar->window_size;
- if (scrollbar->position > scrollbar->stop )
- scrollbar->position = scrollbar->stop;
- }
- scrollbar->fake_position = scrollbar->position-scrollbar->start;
- scrollbar->fake_position *= scrollbar->height-scrollbar->fake_size;
- scrollbar->fake_position /= (scrollbar->stop-scrollbar->start);
- }
- if ((selected_gadget==(UI_GADGET *)scrollbar) && B1_PRESSED && scrollbar->dragging )
- {
- //Mouse.x = scrollbar->drag_x;
- scrollbar->fake_position = scrollbar->drag_starting + (Mouse.y - scrollbar->drag_y );
- if (scrollbar->fake_position<0)
- {
- scrollbar->fake_position = 0;
- //Mouse.y = scrollbar->fake_position + scrollbar->drag_y - scrollbar->drag_starting;
- }
- if (scrollbar->fake_position > (scrollbar->height-scrollbar->fake_size))
- {
- scrollbar->fake_position = (scrollbar->height-scrollbar->fake_size);
- //Mouse.y = scrollbar->fake_position + scrollbar->drag_y - scrollbar->drag_starting;
- }
- //mouse_set_pos( Mouse.x, Mouse.y );
- scrollbar->position = scrollbar->fake_position;
- scrollbar->position *= (scrollbar->stop-scrollbar->start);
- scrollbar->position /= ( scrollbar->height-scrollbar->fake_size ) ;
- scrollbar->position += scrollbar->start;
- if (scrollbar->position > scrollbar->stop )
- scrollbar->position = scrollbar->stop;
- if (scrollbar->position < scrollbar->start )
- scrollbar->position = scrollbar->start;
- //scrollbar->fake_position = scrollbar->position-scrollbar->start;
- //scrollbar->fake_position *= scrollbar->height-scrollbar->fake_size;
- //scrollbar->fake_position /= (scrollbar->stop-scrollbar->start);
- }
- if (op != scrollbar->position )
- scrollbar->moved = 1;
- if (oldpos != scrollbar->fake_position)
- scrollbar->status = 1;
- ui_draw_scrollbar( scrollbar );
- }
|