61 lines
1.5 KiB
C++
61 lines
1.5 KiB
C++
|
|
|
|
#include "puLocal.h"
|
|
|
|
void puButton::draw ( int dx, int dy )
|
|
{
|
|
if ( !visible ) return ;
|
|
|
|
/* If button is pushed or highlighted - use inverse style for button itself */
|
|
|
|
int tempStyle;
|
|
|
|
if ( parent && ( ( parent->getType() & PUCLASS_POPUPMENU ) ||
|
|
( parent->getType() & PUCLASS_MENUBAR ) ) )
|
|
tempStyle = ( getValue() ^ highlighted ) ? PUSTYLE_SMALL_SHADED : style ;
|
|
else
|
|
tempStyle = ( getValue() ^ highlighted ) ? -style : style ;
|
|
|
|
abox . draw ( dx, dy, tempStyle, colour, isReturnDefault() ) ;
|
|
|
|
/* If greyed out then halve the opacity when drawing the label and legend */
|
|
|
|
if ( active )
|
|
glColor4fv ( colour [ PUCOL_LEGEND ] ) ;
|
|
else
|
|
glColor4f ( colour [ PUCOL_LEGEND ][0],
|
|
colour [ PUCOL_LEGEND ][1],
|
|
colour [ PUCOL_LEGEND ][2],
|
|
colour [ PUCOL_LEGEND ][3] / 2.0f ) ; /* 50% more transparent */
|
|
|
|
int xx = ( abox.max[0] - abox.min[0] - puGetStringWidth(legendFont,legend) ) / 2 ;
|
|
int yy = ( abox.max[1] - abox.min[1] - puGetStringHeight(legendFont) ) / 2 ;
|
|
|
|
puDrawString ( legendFont, legend,
|
|
dx + abox.min[0] + xx,
|
|
dy + abox.min[1] + yy ) ;
|
|
|
|
draw_label ( dx, dy ) ;
|
|
}
|
|
|
|
|
|
void puButton::doHit ( int button, int updown, int, int )
|
|
{
|
|
|
|
|
|
if ( button == PU_LEFT_BUTTON )
|
|
{
|
|
if ( updown == active_mouse_edge || active_mouse_edge == PU_UP_AND_DOWN )
|
|
{
|
|
lowlight () ;
|
|
setValue ( (int) ! getValue () ) ;
|
|
invokeCallback () ;
|
|
}
|
|
else
|
|
highlight () ;
|
|
}
|
|
else
|
|
lowlight () ;
|
|
}
|
|
|
|
|