From 6db6a2e7ed435f49e36f521bdc1f920802021361 Mon Sep 17 00:00:00 2001 From: minjaesong Date: Mon, 25 May 2026 01:03:20 +0900 Subject: [PATCH] tsvm: highlighter and popup drawing fix --- assets/disk0/tvdos/bin/zfm.js | 56 ++++++++++++++++++--------- assets/disk0/tvdos/include/wintex.mjs | 12 ++++-- 2 files changed, 45 insertions(+), 23 deletions(-) diff --git a/assets/disk0/tvdos/bin/zfm.js b/assets/disk0/tvdos/bin/zfm.js index eb07b61..b26e450 100644 --- a/assets/disk0/tvdos/bin/zfm.js +++ b/assets/disk0/tvdos/bin/zfm.js @@ -428,9 +428,26 @@ const OP_BUTTONS = [ let opHover = -1 let opPanelDraw = (wo) => { - function hr(y) { + function hr(i, y) { + // draw horizontal rule... + con.color_pair(COL_TEXT, 255) con.move(y, xp) - print(`\x84196u`.repeat(SIDEBAR_WIDTH - 2)) + print(`\u00C4`.repeat(SIDEBAR_WIDTH - 2)) + + // if mouse is up, draw the whole box + if (opHover == i) { + let moveBack = (i == 0) ? 6 : 3 + + con.color_pair(COL_HLTEXT, 255) + con.move(y - moveBack, xp - 1) + con.prnch(0xDA); print('\u00C4'.repeat(SIDEBAR_WIDTH - 2)); con.prnch(0xBF) + for (let yy = 1; yy < moveBack; yy++) { + con.move(y - moveBack + yy, xp - 1); con.prnch(0xB3) + con.move(y - moveBack + yy, xp + SIDEBAR_WIDTH); con.prnch(0xB3) + } + con.move(y, xp - 1) + con.prnch(0xC0); print('\u00C4'.repeat(SIDEBAR_WIDTH - 2)); con.prnch(0xD9) + } } function labCol(i) { return (opHover === i) ? COL_HLTEXT : COL_TEXT } @@ -441,76 +458,77 @@ let opPanelDraw = (wo) => { // other panel con.move(yp + 2, xp + 3) - con.prnch((windowMode) ? 0x11 : 0x10) + con.color_pair(labCol(0), 255); con.prnch((windowMode) ? 0x11 : 0x10) con.move(yp + 3, xp) print(` \x1B[38;5;${labCol(0)}m[\x1B[38;5;${COL_HLACTION}mZ\x1B[38;5;${labCol(0)}m]`) - hr(yp+5) + hr(0, yp+5) // go up - con.mvaddch(yp + 6, xp + 3, 0x18) + con.color_pair(labCol(1), 255); con.mvaddch(yp + 6, xp + 3, 0x18) con.move(yp + 7, xp) print(` \x1B[38;5;${labCol(1)}mGo \x1B[38;5;${COL_HLACTION}mU\x1B[38;5;${labCol(1)}mp`) - hr(yp+8) + hr(1, yp+8) // copy con.move(yp + 9, xp + 2) - con.prnch(0xDB);con.prnch((windowMode) ? 0x1B : 0x1A);con.prnch(0xDB) + con.color_pair(labCol(2), 255); con.prnch(0xDB);con.prnch((windowMode) ? 0x1B : 0x1A);con.prnch(0xDB) con.move(yp + 10, xp) print(` \x1B[38;5;${COL_HLACTION}mC\x1B[38;5;${labCol(2)}mopy`) - hr(yp+11) + hr(2, yp+11) // move con.move(yp + 12, xp + 2) - if (windowMode) con.prnch([0xDB, 0x1B, 0xB0]); else con.prnch([0xB0, 0x1A, 0xDB]) + con.color_pair(labCol(3), 255); if (windowMode) con.prnch([0xDB, 0x1B, 0xB0]); else con.prnch([0xB0, 0x1A, 0xDB]) con.move(yp + 13, xp) print(` \x1B[38;5;${labCol(3)}mMo\x1B[38;5;${COL_HLACTION}mv\x1B[38;5;${labCol(3)}me`) - hr(yp+14) + hr(3, yp+14) // delete con.move(yp + 15, xp + 2) - if (windowMode) con.prnch([0xDB, 0x1A, 0xF9]); else con.prnch([0xF9, 0x1B, 0xDB]) + con.color_pair(labCol(4), 255); if (windowMode) con.prnch([0xDB, 0x1A, 0xF9]); else con.prnch([0xF9, 0x1B, 0xDB]) con.move(yp + 16, xp) print(` \x1B[38;5;${COL_HLACTION}mD\x1B[38;5;${labCol(4)}melete`) - hr(yp+17) + hr(4, yp+17) // mkdir con.move(yp + 18, xp + 2) + con.color_pair(labCol(5), 255); con.prnch(0xDB) con.video_reverse();con.prnch(0x2B);con.video_reverse() con.prnch(0xDF) con.move(yp + 19, xp) print(` \x1B[38;5;${labCol(5)}mM\x1B[38;5;${COL_HLACTION}mk\x1B[38;5;${labCol(5)}mDir`) - hr(yp+20) + hr(5, yp+20) // rename con.move(yp + 21, xp + 2) - con.prnch(0x4E);con.prnch(0x1A);con.prnch(0x52) + con.color_pair(labCol(6), 255); con.prnch(0x4E);con.prnch(0x1A);con.prnch(0x52) con.move(yp + 22, xp) print(` \x1B[38;5;${COL_HLACTION}mR\x1B[38;5;${labCol(6)}mename`) - hr(yp+23) + hr(6, yp+23) // the dreaded hamburger menu con.move(yp + 24, xp + 3) - con.prnch(0xf0) + con.color_pair(labCol(7), 255); con.prnch(0xf0) con.move(yp + 25, xp) print(` \x1B[38;5;${COL_HLACTION}mM\x1B[38;5;${labCol(7)}more`) - hr(yp+26) + hr(7, yp+26) // quit con.move(yp + 27, xp + 3) - con.prnch(0x58) + con.color_pair(labCol(8), 255); con.prnch(0x58) con.move(yp + 28, xp) print(` \x1B[38;5;${COL_HLACTION}mQ\x1B[38;5;${labCol(8)}muit`) - + con.color_pair(COL_TEXT, 255) } diff --git a/assets/disk0/tvdos/include/wintex.mjs b/assets/disk0/tvdos/include/wintex.mjs index d478611..8103bdd 100644 --- a/assets/disk0/tvdos/include/wintex.mjs +++ b/assets/disk0/tvdos/include/wintex.mjs @@ -220,6 +220,9 @@ function showDialog(opts) { const values = fields.map(f => (f.initial == null) ? '' : ('' + f.initial)) const cursors = values.map(v => v.length) + let oldFG = con.get_color_fore() + let oldBG = con.get_color_back() + let buttons if (opts.buttons) { buttons = opts.buttons @@ -322,23 +325,23 @@ function showDialog(opts) { // Top border con.color_pair(frameFg, bg) con.move(fbRow, fbCol) - print('Ú' + 'Ä'.repeat(fw) + '¿') + print('\u00DA' + '\u00C4'.repeat(fw) + '\u00BF') // Side borders + content con.color_pair(frameFg, bg) con.move(fbRow + 1, fbCol) - print('³') + print('\u00B3') con.color_pair(fg, fieldBg) const s = fieldScroll(cursors[i], fw) const vis = values[i].substring(s, s + fw) print(vis.padEnd(fw, ' ')) con.color_pair(frameFg, bg) con.move(fbRow + 1, fbCol + fw + 1) - print('³') + print('\u00B3') // Bottom border con.move(fbRow + 2, fbCol) - print('À' + 'Ä'.repeat(fw) + 'Ù') + print('\u00C0' + '\u00C4'.repeat(fw) + '\u00D9') con.color_pair(fg, bg) } @@ -518,6 +521,7 @@ function showDialog(opts) { } con.curs_set(0) + con.color_pair(oldFG, oldBG) return done }