fix: 节点列表单击滚动,双击切换模式\n\n- 单击 UP/DOWN:滚动界面\n- 双击(400ms内):切换模式"
This commit is contained in:
@@ -1597,17 +1597,19 @@ int Screen::handleInputEvent(const InputEvent *event)
|
||||
} else if (event->inputEvent == INPUT_BROKER_RIGHT || event->inputEvent == INPUT_BROKER_USER_PRESS) {
|
||||
showNextFrame();
|
||||
} else if (event->inputEvent == INPUT_BROKER_UP) {
|
||||
// 在节点列表界面,双击切换到上一个模式
|
||||
// 在节点列表界面,单击滚动,双击切换模式
|
||||
if (this->ui->getUiState()->currentFrame == framesetInfo.positions.nodelist) {
|
||||
if (graphics::NodeListRenderer::handleUpDoubleClick()) {
|
||||
int result = graphics::NodeListRenderer::handleUpKey();
|
||||
if (result > 0) {
|
||||
setFastFramerate();
|
||||
ui->update();
|
||||
}
|
||||
}
|
||||
} else if (event->inputEvent == INPUT_BROKER_DOWN) {
|
||||
// 在节点列表界面,双击切换到下一个模式
|
||||
// 在节点列表界面,单击滚动,双击切换模式
|
||||
if (this->ui->getUiState()->currentFrame == framesetInfo.positions.nodelist) {
|
||||
if (graphics::NodeListRenderer::handleDownDoubleClick()) {
|
||||
int result = graphics::NodeListRenderer::handleDownKey();
|
||||
if (result > 0) {
|
||||
setFastFramerate();
|
||||
ui->update();
|
||||
}
|
||||
|
||||
@@ -74,38 +74,57 @@ void switchToPrevMode()
|
||||
currentMode = static_cast<NodeListMode>((currentMode + MODE_COUNT - 1) % MODE_COUNT);
|
||||
}
|
||||
|
||||
// 处理 UP 按键双击检测(从 Screen.cpp 调用)
|
||||
// 返回 true 表示检测到双击,需要切换模式
|
||||
bool handleUpDoubleClick()
|
||||
// 滚动控制函数
|
||||
void scrollUp()
|
||||
{
|
||||
scrollIndex--;
|
||||
if (scrollIndex < 0) {
|
||||
scrollIndex = 0;
|
||||
}
|
||||
}
|
||||
|
||||
void scrollDown()
|
||||
{
|
||||
scrollIndex++;
|
||||
// 最大滚动值在渲染时计算,这里只做简单限制
|
||||
}
|
||||
|
||||
// 处理 UP 按键:单击滚动,双击切换模式
|
||||
// 返回 0: 无操作, 1: 滚动触发, 2: 模式切换触发
|
||||
int handleUpKey()
|
||||
{
|
||||
unsigned long now = millis();
|
||||
|
||||
if (lastUpPressTime > 0 && (now - lastUpPressTime) < DOUBLE_CLICK_THRESHOLD_MS) {
|
||||
// 双击触发:切换到上一个模式
|
||||
switchToPrevMode();
|
||||
lastUpPressTime = 0; // 重置,防止三次点击触发两次
|
||||
return true;
|
||||
lastUpPressTime = 0;
|
||||
return 2;
|
||||
}
|
||||
|
||||
// 单击触发:滚动
|
||||
scrollUp();
|
||||
lastUpPressTime = now;
|
||||
return false;
|
||||
return 1;
|
||||
}
|
||||
|
||||
// 处理 DOWN 按键双击检测(从 Screen.cpp 调用)
|
||||
// 返回 true 表示检测到双击,需要切换模式
|
||||
bool handleDownDoubleClick()
|
||||
// 处理 DOWN 按键:单击滚动,双击切换模式
|
||||
// 返回 0: 无操作, 1: 滚动触发, 2: 模式切换触发
|
||||
int handleDownKey()
|
||||
{
|
||||
unsigned long now = millis();
|
||||
|
||||
if (lastDownPressTime > 0 && (now - lastDownPressTime) < DOUBLE_CLICK_THRESHOLD_MS) {
|
||||
// 双击触发:切换到下一个模式
|
||||
switchToNextMode();
|
||||
lastDownPressTime = 0; // 重置,防止三次点击触发两次
|
||||
return true;
|
||||
lastDownPressTime = 0;
|
||||
return 2;
|
||||
}
|
||||
|
||||
// 单击触发:滚动
|
||||
scrollDown();
|
||||
lastDownPressTime = now;
|
||||
return false;
|
||||
return 1;
|
||||
}
|
||||
|
||||
// =============================
|
||||
|
||||
@@ -59,9 +59,14 @@ void switchToNextMode();
|
||||
void switchToPrevMode();
|
||||
NodeListMode getCurrentMode();
|
||||
|
||||
// Double-click detection for UP/DOWN keys (returns true if double-click detected)
|
||||
bool handleUpDoubleClick();
|
||||
bool handleDownDoubleClick();
|
||||
// Scroll control functions
|
||||
void scrollUp();
|
||||
void scrollDown();
|
||||
|
||||
// UP/DOWN key handler: single click = scroll, double click = switch mode
|
||||
// Returns: 0=no action, 1=scroll triggered, 2=mode switch triggered
|
||||
int handleUpKey();
|
||||
int handleDownKey();
|
||||
|
||||
// Bitmap drawing function
|
||||
void drawScaledXBitmap16x16(int x, int y, int width, int height, const uint8_t *bitmapXBM, OLEDDisplay *display);
|
||||
|
||||
Reference in New Issue
Block a user