git repos / SagoImageBrowser

commit 4db3041a

Poul Sander · 2026-05-26 22:01
4db3041aa5124ab367c9f70be0c3a9ed62a38294 patch · browse files
parent 1dcea855c418419eca4aeaae3801eb7c9af9097d

Add some help information

Changed files

M src/imageviewwidget.cpp before
M src/imageviewwidget.h before
diff --git a/src/imageviewwidget.cpp b/src/imageviewwidget.cpp index 0556a77..0ee4d4e 100644 --- a/src/imageviewwidget.cpp +++ b/src/imageviewwidget.cpp
@@ -271,10 +271,78 @@ void ImageViewWidget::paintEvent(QPaintEvent *)
m_exifData.captionAbstract);
painter.restore();
}
+
+ // Help overlay — centered, toggled with F1
+ if (m_showHelpOverlay) {
+ static const QPair<QString, QString> shortcuts[] = {
+ {QStringLiteral("F1"), QStringLiteral("Show/hide keyboard shortcuts")},
+ {QStringLiteral("Esc / Enter"), QStringLiteral("Close viewer")},
+ {QStringLiteral("PgDn / PgUp"), QStringLiteral("Next / previous image")},
+ {QStringLiteral("\u2190 \u2192 \u2191 \u2193"),
+ QStringLiteral("Pan image")},
+ {QStringLiteral("/"), QStringLiteral("Zoom to original size")},
+ {QStringLiteral("*"), QStringLiteral("Zoom to fit screen")},
+ {QStringLiteral("+ / \u2212"), QStringLiteral("Zoom in / out")},
+ {QStringLiteral("I"), QStringLiteral("Toggle EXIF info")},
+ {QStringLiteral("E"), QStringLiteral("Edit caption")},
+ {QStringLiteral("F11"), QStringLiteral("Toggle fullscreen")},
+ };
+ const int count = static_cast<int>(std::size(shortcuts));
+
+ const int padding = 16;
+ const int lineH = 22;
+ const int colGap = 20;
+
+ QFont font = painter.font();
+ font.setPointSize(10);
+ painter.setFont(font);
+ QFontMetrics fm(font);
+
+ int keyColW = 0;
+ int descColW = 0;
+ for (const auto &s : shortcuts) {
+ keyColW = qMax(keyColW, fm.horizontalAdvance(s.first));
+ descColW = qMax(descColW, fm.horizontalAdvance(s.second));
+ }
+
+ const int boxW = padding + keyColW + colGap + descColW + padding;
+ const int boxH = count * lineH + padding * 2;
+ const int boxX = (width() - boxW) / 2;
+ const int boxY = (height() - boxH) / 2;
+
+ painter.save();
+ painter.setPen(Qt::NoPen);
+ painter.setBrush(QColor(0, 0, 0, 200));
+ painter.drawRoundedRect(boxX, boxY, boxW, boxH, 10, 10);
+
+ for (int i = 0; i < count; ++i) {
+ const int textY = boxY + padding + fm.ascent() + i * lineH;
+ // Key column — right-aligned, light lavender
+ painter.setPen(QColor(180, 180, 255));
+ painter.drawText(QRect(boxX + padding, textY - fm.ascent(), keyColW, lineH),
+ Qt::AlignRight | Qt::AlignVCenter,
+ shortcuts[i].first);
+ // Description column — left-aligned, white
+ painter.setPen(Qt::white);
+ painter.drawText(QRect(boxX + padding + keyColW + colGap,
+ textY - fm.ascent(), descColW, lineH),
+ Qt::AlignLeft | Qt::AlignVCenter,
+ shortcuts[i].second);
+ }
+ painter.restore();
+ }
}
void ImageViewWidget::keyPressEvent(QKeyEvent *event)
{
+ if (event->key() == Qt::Key_F1)
+ {
+ m_showHelpOverlay = !m_showHelpOverlay;
+ update();
+ event->accept();
+ return;
+ }
+
if (event->key() == Qt::Key_Escape || event->key() == Qt::Key_Return || event->key() == Qt::Key_Enter)
{
emit closeRequested();
diff --git a/src/imageviewwidget.h b/src/imageviewwidget.h index 7ee4223..be1091a 100644 --- a/src/imageviewwidget.h +++ b/src/imageviewwidget.h
@@ -89,4 +89,7 @@ private:
// EXIF overlay
ExifData m_exifData;
bool m_showExifOverlay = false;
+
+ // Help overlay
+ bool m_showHelpOverlay = false;
};