From ee6a843349b330d36d738d437987971ceaec8c91 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=90=B4=E6=96=87=E5=B3=B0?= Date: Mon, 30 Mar 2026 20:48:35 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E8=8A=82=E7=82=B9=E5=88=97=E8=A1=A8?= =?UTF-8?q?=E5=8D=95=E5=87=BB=E6=BB=9A=E5=8A=A8=EF=BC=8C=E5=8F=8C=E5=87=BB?= =?UTF-8?q?=E5=88=87=E6=8D=A2=E6=A8=A1=E5=BC=8F\n\n-=20=E5=8D=95=E5=87=BB?= =?UTF-8?q?=20UP/DOWN=EF=BC=9A=E6=BB=9A=E5=8A=A8=E7=95=8C=E9=9D=A2\n-=20?= =?UTF-8?q?=E5=8F=8C=E5=87=BB=EF=BC=88400ms=E5=86=85=EF=BC=89=EF=BC=9A?= =?UTF-8?q?=E5=88=87=E6=8D=A2=E6=A8=A1=E5=BC=8F"?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/graphics/Screen.cpp | 10 +++-- .../src/graphics/draw/NodeListRenderer.cpp | 43 +++++++++++++------ .../src/graphics/draw/NodeListRenderer.h | 11 +++-- 3 files changed, 45 insertions(+), 19 deletions(-) diff --git a/code/firmware-2.7.15.567b8ea/src/graphics/Screen.cpp b/code/firmware-2.7.15.567b8ea/src/graphics/Screen.cpp index 0db0505..5144264 100644 --- a/code/firmware-2.7.15.567b8ea/src/graphics/Screen.cpp +++ b/code/firmware-2.7.15.567b8ea/src/graphics/Screen.cpp @@ -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(); } diff --git a/code/firmware-2.7.15.567b8ea/src/graphics/draw/NodeListRenderer.cpp b/code/firmware-2.7.15.567b8ea/src/graphics/draw/NodeListRenderer.cpp index 0c6c46a..573ebbe 100644 --- a/code/firmware-2.7.15.567b8ea/src/graphics/draw/NodeListRenderer.cpp +++ b/code/firmware-2.7.15.567b8ea/src/graphics/draw/NodeListRenderer.cpp @@ -74,38 +74,57 @@ void switchToPrevMode() currentMode = static_cast((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; } // ============================= diff --git a/code/firmware-2.7.15.567b8ea/src/graphics/draw/NodeListRenderer.h b/code/firmware-2.7.15.567b8ea/src/graphics/draw/NodeListRenderer.h index 5b4ee33..814150c 100644 --- a/code/firmware-2.7.15.567b8ea/src/graphics/draw/NodeListRenderer.h +++ b/code/firmware-2.7.15.567b8ea/src/graphics/draw/NodeListRenderer.h @@ -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);