home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Kyūkyoku!! X68000 Emulator
/
X68000Book.dat
/
mac
/
OLS
/
X68000
/
Ko-Window
/
kow142s.lzh
/
wsrv
/
slider.c
< prev
next >
Wrap
C/C++ Source or Header
|
1995-09-07
|
4KB
|
182 lines
#include "clip.h"
#include "slider.h"
/*
proto -s slider.c > temp
*/
static void GetReal( SliderClass*, int*, int* );
void SliderSet( sp, x, y, dir, width, length, min, max )
SliderClass *sp ;
int x, y ;
int dir, width, length ;
int min, max ;
{
if ( dir == DirectionY )
ClipSet( (ClipClass*)sp, x, y, width, length );
else
ClipSet( (ClipClass*)sp, x, y, length, width );
sp->slider.dir = dir ;
sp->slider.width = width ;
sp->slider.length = length ;
sp->slider.min = min ;
sp->slider.max = max ;
sp->slider.top = 0 ;
sp->slider.size = 0 ;
}
int SliderGetCurrentPosition( sp )
SliderClass *sp ;
{
return( sp->slider.top );
}
int SliderGetMaxPosition( sp )
SliderClass *sp ;
{
return( sp->slider.max - sp->slider.size + 1 );
}
int SliderGetPosition( sp, x, y )
SliderClass *sp ;
int x, y ;
{
int pos, ret, max ;
if ( sp->slider.dir == DirectionY )
pos = y - sp->clip.y1 - 1 ;
else
pos = x - sp->clip.x1 - 1 ;
ret= ( sp->slider.max - sp->slider.min + 1 )*pos /
(sp->slider.length <= 2 ? 1 : ( sp->slider.length - 2 ))
+ sp->slider.min - sp->slider.size / 2 ;
/* Debug 1993 by H.Ogasawara(COR.) */
if ( ret < sp->slider.min )
ret = sp->slider.min ;
max = SliderGetMaxPosition( sp );
if ( ret > max )
ret = max ;
if ( ret < sp->slider.min )
ret = sp->slider.min ;
return( ret );
}
int SliderGetScroll( sp, step )
SliderClass *sp ;
int step ;
{
int ret, max ;
ret = sp->slider.top + step ;
max = SliderGetMaxPosition( sp );
if ( ret > max )
ret = max ;
if ( ret < sp->slider.min )
ret = sp->slider.min ;
return( ret );
}
int SliderSetPosition( bufp, sp, top, size )
DrawBuf *bufp ;
SliderClass *sp ;
int top, size ;
{
DrawBuf *topbuf ;
int realtop, realsize ;
int x, y ;
if ( bufp == NULL )
{
sp->slider.top = top ;
sp->slider.size = size ;
return( 0 );
}
topbuf = bufp ;
x = sp->clip.x1 ;
y = sp->clip.y1 ;
GetReal( sp, &realtop, &realsize );
if ( sp->slider.dir == DirectionY )
{
DrawSetLine( bufp++, x+1, y+1+realtop, x+sp->slider.width-2, y+realtop+realsize,
1, OptionBox );
}
else
{
DrawSetLine( bufp++, x+1+realtop, y+1, x+realtop+realsize, y+sp->slider.width-2,
1, OptionBox );
}
sp->slider.top = top ;
sp->slider.size = size ;
GetReal( sp, &realtop, &realsize );
if ( sp->slider.dir == DirectionY )
{
DrawSetLine( bufp++, x+1, y+1+realtop, x+sp->slider.width-2, y+realtop+realsize,
ShadowUp, OptionShadow );
}
else
{
DrawSetLine( bufp++, x+1+realtop, y+1, x+realtop+realsize, y+sp->slider.width-2,
ShadowUp, OptionShadow );
}
return 2; /* ( bufp - topbuf ) */ /* M 19950904 Copel */
}
int SliderSetDraw( bufp, sp )
DrawBuf *bufp ;
SliderClass *sp ;
{
DrawBuf *top ;
int realtop, realsize ;
int x, y ;
x = sp->clip.x1 ;
y = sp->clip.y1 ;
GetReal( sp, &realtop, &realsize );
top = bufp ;
if ( sp->slider.dir == DirectionY )
{
DrawSetLine( bufp++, x, y, x+sp->slider.width-1, y+sp->slider.length-1,
ShadowDown, OptionShadow );
DrawSetLine( bufp++, x+1, y+1, x+sp->slider.width-2, y+sp->slider.length-2,
1, OptionFill ); /* M 19950905 Copel */
DrawSetLine( bufp++, x+1, y+1+realtop, x+sp->slider.width-2, y+realtop+realsize,
ShadowUp, OptionShadow );
}
else
{
DrawSetLine( bufp++, x, y, x+sp->slider.length-1, y+sp->slider.width-1,
ShadowDown, OptionShadow );
DrawSetLine( bufp++, x+1, y+1, x+sp->slider.length-2, y+sp->slider.width-2,
1, OptionFill ); /* M 19950905 Copel */
DrawSetLine( bufp++, x+1+realtop, y+1, x+realtop+realsize, y+sp->slider.width-2,
ShadowUp, OptionShadow );
}
return 3; /* ( bufp - top ) */ /* M 19950905 Copel */
}
static void GetReal( sp, realtopp, realsizep )
SliderClass *sp ;
int *realtopp, *realsizep ;
{
int max, len ;
max = sp->slider.max - sp->slider.min + 1 ;
len = sp->slider.length - 2 ;
*realtopp = ( len * ( sp->slider.top - sp->slider.min ) + max / 2 )/ max ;
*realsizep = ( len * sp->slider.size + max / 2 )/ max ; /* DEBUG 19950714 Copel */
if ( *realtopp + *realsizep > sp->slider.length - 2 )
{
*realsizep = sp->slider.length - 2 - *realtopp ;
}
}