* *
\***********************************/
-GLfloat light_diffuse [] = {1.0, 0.0, 0.0, 1.0} ; /* Red diffuse light. */
+GLfloat light_diffuse [] = {0.0, 1.0, 0.0, 1.0} ; /* Red diffuse light. */
GLfloat light_position[] = {1.0, 1.0, 1.0, 0.0} ; /* Infinite light location. */
GLfloat cube_n[6][3] = /* Normals */
int main ( int argc, char **argv )
{
-
firsttime = TRUE;
+#ifdef VOODOO
+ glutInitWindowPosition( 0, 0 ) ;
+#endif
glutInitWindowSize ( 640, 480 ) ;
glutInit ( &argc, argv ) ;
glutInitDisplayMode ( GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH ) ;
puInit () ;
-#ifdef USING_3DFX
+#ifdef VOODOO
puShowCursor () ;
#endif
puSetDefaultStyle ( PUSTYLE_SMALL_SHADED ) ;
- puSetDefaultColourScheme ( 0.8, 0.2, 0.2 ) ;
+ puSetDefaultColourScheme ( 0.8, 0.8, 0.8 ) ;
timer_text = new puText ( 300, 10 ) ;
timer_text -> setColour ( PUCOL_LABEL, 1.0, 1.0, 1.0 ) ;
int *tempSize = &fontSize[1];
- if ( ! GetCharWidth32 ( hdc, 1, 255, tempSize ) )
+ if ( ! GetCharWidth32 ( hdc, 1, 255, tempSize ) &&
+ ! GetCharWidth ( hdc, 1, 255, tempSize ) )
{
LPVOID lpMsgBuf ;
FormatMessage ( FORMAT_MESSAGE_ALLOCATE_BUFFER |
- FORMAT_MESSAGE_FROM_SYSTEM,
- NULL,
- GetLastError(),
- MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
- (LPTSTR) &lpMsgBuf,
- 0, NULL ) ;
-
- fprintf ( stderr, "PUI: Error: %s\n" (char *)lpMsgBuf ) ;
+ FORMAT_MESSAGE_FROM_SYSTEM,
+ NULL,
+ GetLastError(),
+ MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
+ (LPTSTR) &lpMsgBuf,
+ 0, NULL ) ;
+
+ fprintf ( stderr, "PUI: Error: %s\n", (char *)lpMsgBuf ) ;
LocalFree ( lpMsgBuf ) ;
}
+
wglUseFontBitmaps ( hdc, 0, 256, fontBase ) ;
#endif
}
glColor4fv( colour [ mid ] );
glVertex2i( dx + min[0] + PU_SMALL_BEVEL , dy + min[1] + PU_SMALL_BEVEL );
if(style==PUSTYLE_SMALL_SHADED)
- glColor4f( colour [mid][0] + (colour[lo][0] - colour[mid][0])/2.0,
- colour [mid][1] + (colour[lo][1] - colour[mid][1])/2.0,
- colour [mid][2] + (colour[lo][2] - colour[mid][2])/2.0,
+ glColor4f( colour [mid][0] + (colour[lo][0] - colour[mid][0])/2.0f,
+ colour [mid][1] + (colour[lo][1] - colour[mid][1])/2.0f,
+ colour [mid][2] + (colour[lo][2] - colour[mid][2])/2.0f,
colour [lo][3] );
else
- glColor4f( colour [mid][0] + (colour[hi][0] - colour[mid][0])/2.0,
- colour [mid][1] + (colour[hi][1] - colour[mid][1])/2.0,
- colour [mid][2] + (colour[hi][2] - colour[mid][2])/2.0,
+ glColor4f( colour [mid][0] + (colour[hi][0] - colour[mid][0])/2.0f,
+ colour [mid][1] + (colour[hi][1] - colour[mid][1])/2.0f,
+ colour [mid][2] + (colour[hi][2] - colour[mid][2])/2.0f,
colour [hi][3] );
glVertex2i( dx + min[0] + PU_SMALL_BEVEL , dy + max[1] - PU_SMALL_BEVEL );
glColor4fv( colour [ mid ] );
glVertex2i( dx + max[0] - PU_SMALL_BEVEL , dy + max[1] - PU_SMALL_BEVEL );
if(style==-PUSTYLE_SMALL_SHADED)
- glColor4f( colour [mid][0] + (colour[lo][0] - colour[mid][0])/2.0,
- colour [mid][1] + (colour[lo][1] - colour[mid][1])/2.0,
- colour [mid][2] + (colour[lo][2] - colour[mid][2])/2.0,
+ glColor4f( colour [mid][0] + (colour[lo][0] - colour[mid][0])/2.0f,
+ colour [mid][1] + (colour[lo][1] - colour[mid][1])/2.0f,
+ colour [mid][2] + (colour[lo][2] - colour[mid][2])/2.0f,
colour [lo][3] );
else
- glColor4f( colour [mid][0] + (colour[hi][0] - colour[mid][0])/2.0,
- colour [mid][1] + (colour[hi][1] - colour[mid][1])/2.0,
- colour [mid][2] + (colour[hi][2] - colour[mid][2])/2.0,
+ glColor4f( colour [mid][0] + (colour[hi][0] - colour[mid][0])/2.0f,
+ colour [mid][1] + (colour[hi][1] - colour[mid][1])/2.0f,
+ colour [mid][2] + (colour[hi][2] - colour[mid][2])/2.0f,
colour [hi][3] );
glVertex2i( dx + max[0] - PU_SMALL_BEVEL , dy + min[1] + PU_SMALL_BEVEL );
glEnd();
glColor4fv( colour [ mid ] );
glVertex2i( dx + min[0] + PU_BEVEL , dy + min[1] + PU_BEVEL );
if(style==PUSTYLE_SHADED)
- glColor4f( colour [mid][0] + (colour[lo][0] - colour[mid][0])/2.0,
- colour [mid][1] + (colour[lo][1] - colour[mid][1])/2.0,
- colour [mid][2] + (colour[lo][2] - colour[mid][2])/2.0,
+ glColor4f( colour [mid][0] + (colour[lo][0] - colour[mid][0])/2.0f,
+ colour [mid][1] + (colour[lo][1] - colour[mid][1])/2.0f,
+ colour [mid][2] + (colour[lo][2] - colour[mid][2])/2.0f,
colour [lo][3] );
else
- glColor4f( colour [mid][0] + (colour[hi][0] - colour[mid][0])/2.0,
- colour [mid][1] + (colour[hi][1] - colour[mid][1])/2.0,
- colour [mid][2] + (colour[hi][2] - colour[mid][2])/2.0,
+ glColor4f( colour [mid][0] + (colour[hi][0] - colour[mid][0])/2.0f,
+ colour [mid][1] + (colour[hi][1] - colour[mid][1])/2.0f,
+ colour [mid][2] + (colour[hi][2] - colour[mid][2])/2.0f,
colour [hi][3] );
glVertex2i( dx + min[0] + PU_BEVEL , dy + max[1] - PU_BEVEL );
glColor4fv( colour [ mid ] );
glVertex2i( dx + max[0] - PU_BEVEL , dy + max[1] - PU_BEVEL );
if(style==-PUSTYLE_SHADED)
- glColor4f( colour [mid][0] + (colour[lo][0] - colour[mid][0])/2.0,
- colour [mid][1] + (colour[lo][1] - colour[mid][1])/2.0,
- colour [mid][2] + (colour[lo][2] - colour[mid][2])/2.0,
+ glColor4f( colour [mid][0] + (colour[lo][0] - colour[mid][0])/2.0f,
+ colour [mid][1] + (colour[lo][1] - colour[mid][1])/2.0f,
+ colour [mid][2] + (colour[lo][2] - colour[mid][2])/2.0f,
colour [lo][3] );
else
- glColor4f( colour [mid][0] + (colour[hi][0] - colour[mid][0])/2.0,
- colour [mid][1] + (colour[hi][1] - colour[mid][1])/2.0,
- colour [mid][2] + (colour[hi][2] - colour[mid][2])/2.0,
+ glColor4f( colour [mid][0] + (colour[hi][0] - colour[mid][0])/2.0f,
+ colour [mid][1] + (colour[hi][1] - colour[mid][1])/2.0f,
+ colour [mid][2] + (colour[hi][2] - colour[mid][2])/2.0f,
colour [hi][3] );
glVertex2i( dx + max[0] - PU_BEVEL , dy + min[1] + PU_BEVEL );
glEnd();
+
#include "puLocal.h"
void puButton::draw ( int dx, int dy )
/* If button is pushed or highlighted - use inverse style for button itself */
- abox . draw ( dx, dy, ( getValue() ^ highlighted ) ? -style : style, colour,
- isReturnDefault() ) ;
+ 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 */
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 () ;
}
+
-
#include "puLocal.h"
#define PUMENU_BUTTON_HEIGHT 25
int widest = 0 ;
puObject *ob = dlist ;
+ /*
+ * June 17th, 1998, Shammi
+ * There seems to be some mismatch with the
+ * #define pumenusize and the actual size
+ * There seems to be some overlap resulting
+ * in more than one option being highlighted.
+ * By setting the size to the actual values,
+ * the overlap area seems to be less now.
+ */
+
+ int w, h ;
+
for ( ob = dlist ; ob != NULL ; ob = ob -> next )
{
- int w, h ;
-
ob -> getSize ( &w, &h ) ;
if ( w > widest ) widest = w ;
}
for ( ob = dlist ; ob != NULL ; ob = ob -> next )
- ob -> setSize ( widest, PUMENU_BUTTON_HEIGHT ) ;
+ {
+ ob -> getSize ( &w, &h ) ;
+ ob -> setSize ( widest, h ) ;
+ }
recalc_bbox () ;
}
int hit = isHit ( x, y ) ;
- if ( updown == active_mouse_edge || active_mouse_edge == PU_UP_AND_DOWN )
+ /*
+ * June 17th, 1998, Shammi :
+ * There seemed to be a miscalculation with the menus initially
+ * Therefore I moved the recalculation stuff before the clearing.
+ */
+
+ /*
+ This might be a bit redundant - but it's too hard to keep
+ track of changing abox sizes when daughter objects are
+ changing sizes.
+ */
+
+ recalc_bbox();
+ x -= abox.min[0] ;
+ y -= abox.min[1] ;
+
+ /*
+ * June 17th, 1998, Shammi :
+ * Also clear the menu when the dragging the mouse and not hit.
+ */
+
+ if ( updown == active_mouse_edge || active_mouse_edge == PU_UP_AND_DOWN ||
+ ( updown == PU_DRAG && !hit ) )
{
- hide () ;
+
+ /* June 17th, 1998, Shammi :
+ * Do not hide the menu if mouse is dragged out
+ */
+
+ if ( updown != PU_DRAG )
+ hide () ;
/* Turn everything off ready for next time. */
+ /* June 17th, 1998, Shammi:
+ * Make sure we check for a hit, if the mouse is moved
+ * out of the menu.
+ */
+
for ( puObject *bo = dlist ; bo != NULL ; bo = bo->next )
+ {
+ if ( ! hit )
+ bo -> checkHit ( button, updown, x , y ) ;
+
bo -> clrValue () ;
+ }
}
if ( ! hit )
return FALSE ;
- /*
- This might be a bit redundant - but it's too hard to keep
- track of changing abox sizes when daughter objects are
- changing sizes.
- */
-
- recalc_bbox () ;
-
puObject *bo ;
-
- x -= abox.min[0] ;
- y -= abox.min[1] ;
-
+
/*
We have to walk the list backwards to ensure that
the click order is the same as the DRAW order.
*/
+ /* June 17th, 1998, Shammi :
+ * If the mouse is dragged and the menuItem is not hit,
+ * clear it
+ */
+
for ( bo = dlist ; bo->next != NULL ; bo = bo->next )
+ if ( updown == PU_DRAG && ! bo -> checkHit ( button, updown, x, y ) )
+ bo -> clrValue () ;
+
/* Find the last object in our list. */ ;
for ( ; bo != NULL ; bo = bo->prev )
return FALSE ;
}
+