From e1b1712205466061d9eff64c192400588162b7f6 Mon Sep 17 00:00:00 2001 From: Flugente Date: Sun, 19 Jan 2014 14:06:50 +0000 Subject: [PATCH] Fixed dropdown menu glitches git-svn-id: https://ja2svn.mooo.com/source/ja2/trunk/GameSource/ja2_v1.13/Build@6774 3b4a5df2-a311-0410-b5c6-a8a6f20db521 --- Laptop/DropDown.cpp | 8 ++++---- Laptop/DropDown.h | 28 ++++++++++++++-------------- Laptop/IMP Prejudice.cpp | 21 +++++++++++---------- 3 files changed, 29 insertions(+), 28 deletions(-) diff --git a/Laptop/DropDown.cpp b/Laptop/DropDown.cpp index c7cb6c12..cc5f7f6d 100644 --- a/Laptop/DropDown.cpp +++ b/Laptop/DropDown.cpp @@ -348,9 +348,9 @@ DropDownBase::Display_Drop() void DropDownBase::DrawTopEntry() { - if ( mSelectedEntry >= mEntryVector.size() ) - return; - + // make sure we don't get bogus values + mSelectedEntry = min(mSelectedEntry, mEntryVector.size() - 1); + //display the name in the list ColorFillVideoSurfaceArea( FRAME_BUFFER, musStartX+4, musStartY+4, musStartX+musWidth-4, musStartY+musFontHeight+8, mColorMarked ); @@ -450,7 +450,7 @@ DropDownBase::SelectDropDownMovementCallBack(MOUSE_REGION * pRegion, INT32 reaso pRegion->uiFlags |= BUTTON_CLICKED_ON ; mSelectedEntry = (UINT8)MSYS_GetRegionUserData( pRegion, 0 ) + mFirstShownEntry; - + InvalidateRegion(pRegion->RegionTopLeftX, pRegion->RegionTopLeftY, pRegion->RegionBottomRightX, pRegion->RegionBottomRightY); DrawTopEntry(); diff --git a/Laptop/DropDown.h b/Laptop/DropDown.h index b933d6d2..429aaeeb 100644 --- a/Laptop/DropDown.h +++ b/Laptop/DropDown.h @@ -236,13 +236,13 @@ public: // this function has to be implemented! virtual void SetRefresh(); - static void OpenDropDown_DropDown_Appearance(MOUSE_REGION * pRegion, INT32 iReason ) { return static_cast(mpSelf)->OpenDropDownRegionCallBack(pRegion, iReason); } - static void CloseDropDown_DropDown_Appearance(MOUSE_REGION * pRegion, INT32 iReason ) { return static_cast(mpSelf)->CloseDropDownRegionCallBack(pRegion, iReason); } - static void SelectRegionDropDown_DropDown_Appearance(MOUSE_REGION * pRegion, INT32 iReason ) { return static_cast(mpSelf)->SelectDropDownRegionCallBack(pRegion, iReason); } - static void SelectMovementDropDown_DropDown_Appearance(MOUSE_REGION * pRegion, INT32 iReason ) { return static_cast(mpSelf)->SelectDropDownMovementCallBack(pRegion, iReason); } - static void SelectArrowDropDown_DropDown_Appearance(MOUSE_REGION * pRegion, INT32 iReason ) { return static_cast(mpSelf)->SelectUpDownArrowOnScrollAreaRegionCallBack(pRegion, iReason); } - static void SelectScrollRegionDropDown_DropDown_Appearance(MOUSE_REGION * pRegion, INT32 iReason ) { return static_cast(mpSelf)->SelectScrollAreaDropDownRegionCallBack(pRegion, iReason); } - static void SelectScrollMovementDropDown_DropDown_Appearance(MOUSE_REGION * pRegion, INT32 iReason ) { return static_cast(mpSelf)->SelectScrollAreaDropDownMovementCallBack(pRegion, iReason); } + static void OpenDropDown_DropDown(MOUSE_REGION * pRegion, INT32 iReason ) { return static_cast(mpSelf)->OpenDropDownRegionCallBack(pRegion, iReason); } + static void CloseDropDown_DropDown(MOUSE_REGION * pRegion, INT32 iReason ) { return static_cast(mpSelf)->CloseDropDownRegionCallBack(pRegion, iReason); } + static void SelectRegionDropDown_DropDown(MOUSE_REGION * pRegion, INT32 iReason ) { return static_cast(mpSelf)->SelectDropDownRegionCallBack(pRegion, iReason); } + static void SelectMovementDropDown_DropDown(MOUSE_REGION * pRegion, INT32 iReason ) { return static_cast(mpSelf)->SelectDropDownMovementCallBack(pRegion, iReason); } + static void SelectArrowDropDown_DropDown(MOUSE_REGION * pRegion, INT32 iReason ) { return static_cast(mpSelf)->SelectUpDownArrowOnScrollAreaRegionCallBack(pRegion, iReason); } + static void SelectScrollRegionDropDown_DropDown(MOUSE_REGION * pRegion, INT32 iReason ) { return static_cast(mpSelf)->SelectScrollAreaDropDownRegionCallBack(pRegion, iReason); } + static void SelectScrollMovementDropDown_DropDown(MOUSE_REGION * pRegion, INT32 iReason ) { return static_cast(mpSelf)->SelectScrollAreaDropDownMovementCallBack(pRegion, iReason); } MOUSE_CALLBACK CallBackWrapper(void* pt2Object, UINT8 arg, void (*pt2Function)(MOUSE_REGION * pRegion, INT32 iReason) ) @@ -252,25 +252,25 @@ public: switch ( arg ) { case DROPDOWN_OPEN: - return &OpenDropDown_DropDown_Appearance; + return &OpenDropDown_DropDown; break; case DROPDOWN_CLOSE: - return &CloseDropDown_DropDown_Appearance; + return &CloseDropDown_DropDown; break; case DROPDOWN_REGION: - return &SelectRegionDropDown_DropDown_Appearance; + return &SelectRegionDropDown_DropDown; break; case DROPDOWN_MOVEMENT: - return &SelectMovementDropDown_DropDown_Appearance; + return &SelectMovementDropDown_DropDown; break; case DROPDOWN_ARROW: - return &SelectArrowDropDown_DropDown_Appearance; + return &SelectArrowDropDown_DropDown; break; case DROPDOWN_SCROLL_REGION: - return &SelectScrollRegionDropDown_DropDown_Appearance; + return &SelectScrollRegionDropDown_DropDown; break; case DROPDOWN_SCROLL_MOVEMENT: - return &SelectScrollMovementDropDown_DropDown_Appearance; + return &SelectScrollMovementDropDown_DropDown; break; } diff --git a/Laptop/IMP Prejudice.cpp b/Laptop/IMP Prejudice.cpp index c40a9375..a3d78c72 100644 --- a/Laptop/IMP Prejudice.cpp +++ b/Laptop/IMP Prejudice.cpp @@ -250,17 +250,18 @@ void RenderIMPPrejudice( void ) RenderProfileBackGround(); IMPPrejudiceDisplay(); - - DropDownTemplate::getInstance().Display(); - DropDownTemplate::getInstance().Display(); - DropDownTemplate::getInstance().Display(); - DropDownTemplate::getInstance().Display(); - DropDownTemplate::getInstance().Display(); - DropDownTemplate::getInstance().Display(); - DropDownTemplate::getInstance().Display(); - DropDownTemplate::getInstance().Display(); - DropDownTemplate::getInstance().Display(); + + // reversed order - lower boxes first. It is otherwise possible that open boxes are overlayed by closed boxes DropDownTemplate::getInstance().Display(); + DropDownTemplate::getInstance().Display(); + DropDownTemplate::getInstance().Display(); + DropDownTemplate::getInstance().Display(); + DropDownTemplate::getInstance().Display(); + DropDownTemplate::getInstance().Display(); + DropDownTemplate::getInstance().Display(); + DropDownTemplate::getInstance().Display(); + DropDownTemplate::getInstance().Display(); + DropDownTemplate::getInstance().Display(); }