From 9ac6167953fcd36314205de3fb9250b7a26f933a Mon Sep 17 00:00:00 2001 From: Nico Meister Date: Mon, 26 Oct 2026 21:50:41 +0100 Subject: [PATCH] =?UTF-8?q?v3.1.8:=20Logs=20-=20Schiebepad=20f=C3=BCr=20Ze?= =?UTF-8?q?ilen,=20Steuerkreuz=20f=C3=BCr=20Quellen,=20Hochbl=C3=A4ttern?= =?UTF-8?q?=20sprang=20nicht=20mehr=20zur=C3=BCck?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Opus 5.5 --- Makefile | 2 +- source/logview.c | 34 +++++++++++++++++++++++----------- source/main.c | 1 + 3 files changed, 25 insertions(+), 12 deletions(-) diff --git a/Makefile b/Makefile index 621febb..23c6c37 100644 --- a/Makefile +++ b/Makefile @@ -17,7 +17,7 @@ SOURCES := source INCLUDES := source # Bei jedem Release erhöhen - das Auto-Update vergleicht diese Nummer -VERSION := 3.1.7 +VERSION := 3.1.8 APP_TITLE := MBMNET APP_DESCRIPTION := Dein eigenes 3DS-Netzwerk diff --git a/source/logview.c b/source/logview.c index 07706d2..42602e4 100644 --- a/source/logview.c +++ b/source/logview.c @@ -340,7 +340,10 @@ bool logview_finish(void) // --- Eingaben -------------------------------------------------------------------------- -static void select_source(int sel) +static u64 srcPendingAt; // Quelle mit dem Steuerkreuz gewechselt: kurz warten, dann laden (nicht bei jedem Schritt) + +// Quelle wählen. now = sofort laden (L/R, Antippen), sonst nach einer kurzen Pause (Steuerkreuz) +static void select_source(int sel, bool now) { if (sel < 0) sel = sourceCount; if (sel > sourceCount) sel = 0; @@ -349,7 +352,8 @@ static void select_source(int sel) if (srcSel < srcTop) srcTop = srcSel; if (srcSel >= srcTop + SRC_ROWS) srcTop = srcSel - SRC_ROWS + 1; following = true; - start_job(JOB_RELOAD); + if (now) { srcPendingAt = 0; start_job(JOB_RELOAD); } + else srcPendingAt = osGetTime(); } static bool ask_password(void) @@ -391,25 +395,33 @@ bool logview_update(u32 down, u32 repeat, u32 held) if (down & KEY_A) detail = !detail && lineCount > 0; if (down & KEY_X || (down & KEY_TOUCH && in(btnFilter, tp))) { errorsOnly = !errorsOnly; following = true; start_job(JOB_RELOAD); } if (down & KEY_Y || (down & KEY_TOUCH && in(btnReload, tp))) { following = true; start_job(JOB_RELOAD); } - if (down & KEY_R) select_source(srcSel + 1); - if (down & KEY_L) select_source(srcSel - 1); + if (down & KEY_R) select_source(srcSel + 1, true); + if (down & KEY_L) select_source(srcSel - 1, true); + // Steuerkreuz (unten): Quellen auf dem unteren Bildschirm + if (repeat & KEY_DDOWN) select_source(srcSel + 1, false); + if (repeat & KEY_DUP) select_source(srcSel - 1, false); + if (srcPendingAt && osGetTime() - srcPendingAt > 400 && !busy && job == JOB_NONE) { srcPendingAt = 0; start_job(JOB_RELOAD); } if (down & KEY_TOUCH && tp.py >= 24 && tp.py < 24 + SRC_ROWS * SRC_ROW_H) { int row = srcTop + (tp.py - 24) / SRC_ROW_H; - if (row <= sourceCount) select_source(row); + if (row <= sourceCount) select_source(row, true); } LightLock_Lock(&lock); int count = lineCount; + // Schiebepad (oben): Zeilen auf dem oberen Bildschirm, links/rechts seitenweise + bool moved = false; if (!detail) { - if (repeat & (KEY_UP | KEY_CPAD_UP)) { + if (repeat & KEY_CPAD_UP) { + moved = true; if (cursor > 0) cursor--; else if (count && state == LV_READY) start_job(JOB_OLDER); // ganz oben: ältere nachladen } - if (repeat & (KEY_DOWN | KEY_CPAD_DOWN)) cursor++; - if (repeat & KEY_LEFT) cursor -= ROWS; - if (repeat & KEY_RIGHT) cursor += ROWS; + if (repeat & KEY_CPAD_DOWN) { cursor++; moved = true; } + if (repeat & KEY_CPAD_LEFT) { cursor -= ROWS; moved = true; } + if (repeat & KEY_CPAD_RIGHT) { cursor += ROWS; moved = true; } } - if (following) cursor = count - 1; + // Live mitlaufen nur, solange man nicht selbst blättert (sonst sprang es sofort wieder nach unten) + if (following && !moved) cursor = count - 1; if (cursor >= count) cursor = count - 1; if (cursor < 0) cursor = 0; following = count == 0 || cursor == count - 1; @@ -486,7 +498,7 @@ void logview_draw_bottom(void) C2D_DrawRectSolid(0, 0, 0, BOT_W, SCR_H, COL_BG); C2D_DrawRectSolid(0, 0, 0.5f, BOT_W, 22, COL_BG2); ui_text("Quellen", 6, 3, 0.45f, COL_WHITE, 0); - ui_text("L/R wechseln · A Details · X Fehler", BOT_W - 6, 5, 0.34f, COL_MUTED, C2D_AlignRight); + ui_text("Steuerkreuz/L/R wechseln · A Details", BOT_W - 6, 5, 0.34f, COL_MUTED, C2D_AlignRight); char line[96]; LightLock_Lock(&lock); for (int r = 0; r < SRC_ROWS && srcTop + r <= sourceCount; r++) { diff --git a/source/main.c b/source/main.c index ef6e6da..e9f3f80 100644 --- a/source/main.c +++ b/source/main.c @@ -638,6 +638,7 @@ int main(int argc, char **argv) C3D_RenderTarget *top = C2D_CreateScreenTarget(GFX_TOP, GFX_LEFT); C3D_RenderTarget *bot = C2D_CreateScreenTarget(GFX_BOTTOM, GFX_LEFT); textBuf = C2D_TextBufNew(8192); // Logs brauchen mehr Platz + hidSetRepeatParameters(18, 4); // gedrückt halten: nach 0,3 s alle 4 Bilder ein Schritt (Logs blättern) measureBuf = C2D_TextBufNew(1024); nnid_init(); frdswitch_init();