mirror of
https://github.com/smartcmd/MinecraftConsoles.git
synced 2026-08-20 09:57:09 +00:00
Remap scroll wheel to LEFT/RIGHT for horizontal controls
The scroll wheel was always remapped to UP/DOWN, which is fine for vertical lists but useless on horizontal controls like sliders and the texture pack selector. Track whether the mouse is hovering a horizontal control during the hover hit-test (new bool m_bMouseHoverHorizontalList, set for eTexturePackList and eSlider). When the flag is set, handleKeyPress emits LEFT/RIGHT instead of UP/DOWN for wheel events. TexturePackList is also now part of the mouse hover system with proper hit-testing, relative-coord SetTouchFocus and GetRealHeight for accurate bounds.
This commit is contained in:
parent
8b23c71b93
commit
fbadb6ac39
|
|
@ -3,6 +3,7 @@
|
||||||
#include "UI.h"
|
#include "UI.h"
|
||||||
#include "UIScene.h"
|
#include "UIScene.h"
|
||||||
#include "UIControl_Slider.h"
|
#include "UIControl_Slider.h"
|
||||||
|
#include "UIControl_TexturePackList.h"
|
||||||
#include "..\..\..\Minecraft.World\StringHelpers.h"
|
#include "..\..\..\Minecraft.World\StringHelpers.h"
|
||||||
#include "..\..\LocalPlayer.h"
|
#include "..\..\LocalPlayer.h"
|
||||||
#include "..\..\DLCTexturePack.h"
|
#include "..\..\DLCTexturePack.h"
|
||||||
|
|
@ -238,6 +239,7 @@ UIController::UIController()
|
||||||
m_mouseDraggingSliderScene = eUIScene_COUNT;
|
m_mouseDraggingSliderScene = eUIScene_COUNT;
|
||||||
m_mouseDraggingSliderId = -1;
|
m_mouseDraggingSliderId = -1;
|
||||||
m_mouseClickConsumedByScene = false;
|
m_mouseClickConsumedByScene = false;
|
||||||
|
m_bMouseHoverHorizontalList = false;
|
||||||
m_lastHoverMouseX = -1;
|
m_lastHoverMouseX = -1;
|
||||||
m_lastHoverMouseY = -1;
|
m_lastHoverMouseY = -1;
|
||||||
m_accumulatedTicks = 0;
|
m_accumulatedTicks = 0;
|
||||||
|
|
@ -856,6 +858,7 @@ void UIController::tickInput()
|
||||||
// use their own SetTouchFocus for Flash-side hit testing.
|
// use their own SetTouchFocus for Flash-side hit testing.
|
||||||
if (mouseMoved)
|
if (mouseMoved)
|
||||||
{
|
{
|
||||||
|
m_bMouseHoverHorizontalList = false;
|
||||||
vector<UIControl *> *controls = pScene->GetControls();
|
vector<UIControl *> *controls = pScene->GetControls();
|
||||||
if (controls)
|
if (controls)
|
||||||
{
|
{
|
||||||
|
|
@ -871,7 +874,7 @@ void UIController::tickInput()
|
||||||
UIControl::eUIControlType type = ctrl->getControlType();
|
UIControl::eUIControlType type = ctrl->getControlType();
|
||||||
if (type != UIControl::eButton && type != UIControl::eTextInput &&
|
if (type != UIControl::eButton && type != UIControl::eTextInput &&
|
||||||
type != UIControl::eCheckBox && type != UIControl::eSlider &&
|
type != UIControl::eCheckBox && type != UIControl::eSlider &&
|
||||||
type != UIControl::eButtonList)
|
type != UIControl::eButtonList && type != UIControl::eTexturePackList)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
// If the scene has an active panel (e.g. tab menus),
|
// If the scene has an active panel (e.g. tab menus),
|
||||||
|
|
@ -884,6 +887,10 @@ void UIController::tickInput()
|
||||||
S32 cy = ctrl->getYPos() + panelOffsetY;
|
S32 cy = ctrl->getYPos() + panelOffsetY;
|
||||||
S32 cw = ctrl->getWidth();
|
S32 cw = ctrl->getWidth();
|
||||||
S32 ch = ctrl->getHeight();
|
S32 ch = ctrl->getHeight();
|
||||||
|
// TexturePackList origin is where the slot area starts,
|
||||||
|
// not the top-left of the whole control — use GetRealHeight.
|
||||||
|
if (type == UIControl::eTexturePackList)
|
||||||
|
ch = ((UIControl_TexturePackList *)ctrl)->GetRealHeight();
|
||||||
if (cw <= 0 || ch <= 0)
|
if (cw <= 0 || ch <= 0)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
|
|
@ -901,12 +908,27 @@ void UIController::tickInput()
|
||||||
hitCtrl = NULL;
|
hitCtrl = NULL;
|
||||||
break; // ButtonList takes priority
|
break; // ButtonList takes priority
|
||||||
}
|
}
|
||||||
|
if (type == UIControl::eTexturePackList)
|
||||||
|
{
|
||||||
|
// TexturePackList expects coords relative to its origin.
|
||||||
|
UIControl_TexturePackList *pList = (UIControl_TexturePackList *)ctrl;
|
||||||
|
pScene->SetFocusToElement(ctrl->getId());
|
||||||
|
pList->SetTouchFocus(
|
||||||
|
(S32)(sceneMouseX - cx), (S32)(sceneMouseY - cy), false);
|
||||||
|
m_bMouseHoverHorizontalList = true;
|
||||||
|
hitControlId = -1;
|
||||||
|
hitArea = INT_MAX;
|
||||||
|
hitCtrl = NULL;
|
||||||
|
break;
|
||||||
|
}
|
||||||
S32 area = cw * ch;
|
S32 area = cw * ch;
|
||||||
if (area < hitArea)
|
if (area < hitArea)
|
||||||
{
|
{
|
||||||
hitControlId = ctrl->getId();
|
hitControlId = ctrl->getId();
|
||||||
hitArea = area;
|
hitArea = area;
|
||||||
hitCtrl = ctrl;
|
hitCtrl = ctrl;
|
||||||
|
if (type == UIControl::eSlider)
|
||||||
|
m_bMouseHoverHorizontalList = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -1344,11 +1366,14 @@ void UIController::handleKeyPress(unsigned int iPad, unsigned int key)
|
||||||
down = true;
|
down = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Remap scroll wheel to UP/DOWN so all scenes get it without
|
// Remap scroll wheel to navigation actions. Use LEFT/RIGHT when
|
||||||
// needing per-scene OTHER_STICK handling.
|
// hovering a horizontal list (e.g. TexturePackList), UP/DOWN otherwise.
|
||||||
if (pressed && g_KBMInput.IsKBMActive())
|
if (pressed && g_KBMInput.IsKBMActive())
|
||||||
{
|
{
|
||||||
key = (key == ACTION_MENU_OTHER_STICK_UP) ? ACTION_MENU_UP : ACTION_MENU_DOWN;
|
if (m_bMouseHoverHorizontalList)
|
||||||
|
key = (key == ACTION_MENU_OTHER_STICK_UP) ? ACTION_MENU_LEFT : ACTION_MENU_RIGHT;
|
||||||
|
else
|
||||||
|
key = (key == ACTION_MENU_OTHER_STICK_UP) ? ACTION_MENU_UP : ACTION_MENU_DOWN;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -161,6 +161,7 @@ private:
|
||||||
EUIScene m_mouseDraggingSliderScene;
|
EUIScene m_mouseDraggingSliderScene;
|
||||||
int m_mouseDraggingSliderId;
|
int m_mouseDraggingSliderId;
|
||||||
bool m_mouseClickConsumedByScene;
|
bool m_mouseClickConsumedByScene;
|
||||||
|
bool m_bMouseHoverHorizontalList;
|
||||||
int m_lastHoverMouseX;
|
int m_lastHoverMouseX;
|
||||||
int m_lastHoverMouseY;
|
int m_lastHoverMouseY;
|
||||||
//bool m_bSysUIShowing;
|
//bool m_bSysUIShowing;
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue