From 06ab581edb1b672edd323bfd8db14941506363aa Mon Sep 17 00:00:00 2001 From: curt Date: Mon, 13 Jul 1998 20:59:34 +0000 Subject: [PATCH] Incorporated next version of PUI. --- PUI/complex.cxx | 10 +++--- PUI/pu.cxx | 18 +++++----- PUI/puBox.cxx | 48 ++++++++++++------------- PUI/puButton.cxx | 15 ++++++-- PUI/puPopupMenu.cxx | 88 ++++++++++++++++++++++++++++++++++----------- 5 files changed, 121 insertions(+), 58 deletions(-) diff --git a/PUI/complex.cxx b/PUI/complex.cxx index 8610bb223..6c5d93a73 100644 --- a/PUI/complex.cxx +++ b/PUI/complex.cxx @@ -32,7 +32,7 @@ puSlider *rspeedSlider; * * \***********************************/ -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 */ @@ -273,9 +273,11 @@ void sliderCB( puObject *sliderObj) 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 ) ; @@ -290,12 +292,12 @@ int main ( int argc, char **argv ) 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 ) ; diff --git a/PUI/pu.cxx b/PUI/pu.cxx index ea197f745..5e47cf054 100644 --- a/PUI/pu.cxx +++ b/PUI/pu.cxx @@ -223,21 +223,23 @@ void puInit ( void ) 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 ) ; + FORMAT_MESSAGE_FROM_SYSTEM, + NULL, + GetLastError(), + MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), + (LPTSTR) &lpMsgBuf, + 0, NULL ) ; - fprintf ( stderr, "PUI: Error: %s\n" (char *)lpMsgBuf ) ; + fprintf ( stderr, "PUI: Error: %s\n", (char *)lpMsgBuf ) ; LocalFree ( lpMsgBuf ) ; } + wglUseFontBitmaps ( hdc, 0, 256, fontBase ) ; #endif } diff --git a/PUI/puBox.cxx b/PUI/puBox.cxx index 842af2a1f..d0d926285 100644 --- a/PUI/puBox.cxx +++ b/PUI/puBox.cxx @@ -117,27 +117,27 @@ void puBox::draw ( int dx, int dy, int style, puColour colour[], int am_default 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(); @@ -201,27 +201,27 @@ void puBox::draw ( int dx, int dy, int style, puColour colour[], int am_default 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(); diff --git a/PUI/puButton.cxx b/PUI/puButton.cxx index 612d09cba..66ded922b 100644 --- a/PUI/puButton.cxx +++ b/PUI/puButton.cxx @@ -1,4 +1,5 @@ + #include "puLocal.h" void puButton::draw ( int dx, int dy ) @@ -7,8 +8,15 @@ 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 */ @@ -33,6 +41,8 @@ void puButton::draw ( int dx, int 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 ) @@ -48,3 +58,4 @@ void puButton::doHit ( int button, int updown, int, int ) lowlight () ; } + diff --git a/PUI/puPopupMenu.cxx b/PUI/puPopupMenu.cxx index 52ffbd9ac..0eed10231 100644 --- a/PUI/puPopupMenu.cxx +++ b/PUI/puPopupMenu.cxx @@ -1,4 +1,3 @@ - #include "puLocal.h" #define PUMENU_BUTTON_HEIGHT 25 @@ -26,17 +25,30 @@ void puPopupMenu::close ( void ) 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 () ; } @@ -84,18 +96,11 @@ int puPopupMenu::checkHit ( int button, int updown, int x, int y ) int hit = isHit ( x, y ) ; - if ( updown == active_mouse_edge || active_mouse_edge == PU_UP_AND_DOWN ) - { - hide () ; - - /* Turn everything off ready for next time. */ - - for ( puObject *bo = dlist ; bo != NULL ; bo = bo->next ) - bo -> clrValue () ; - } - - if ( ! hit ) - return FALSE ; + /* + * 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 @@ -103,19 +108,61 @@ int puPopupMenu::checkHit ( int button, int updown, int x, int y ) changing sizes. */ - recalc_bbox () ; - - puObject *bo ; - + 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 ) ) + { + + /* 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 ; + + puObject *bo ; + /* 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 ) @@ -125,3 +172,4 @@ int puPopupMenu::checkHit ( int button, int updown, int x, int y ) return FALSE ; } +