Text & icon size: make it apply to the whole UI, and make it freely adjustable

Abierto
#945 1 comentario 1 reacción 0 asignados Ver en GitHub

Los mantenedores suelen responder en 1 día

Nadie ha tomado este issue todavía.

Evaluación

Dificultad
5/5
Tiempo estimado
Más de una semana
Aptitud para principiantes
15/100
Tipo de issue
Nueva funcionalidad
Claridad
Bastante claro
Estado de actividad
Tranquilo
Stack tecnológico
python

Línea de trabajo

This is a design decision before it is code: the maintainers must choose between options A, B and C. Start by reading TEXT_SIZE_MAP in utils/types.py, _default_font() and hint_style() in theme.py, and the hardcoded font-size literals in mainwindow.py, cache_detail.py, cache_table.py and map_widget.py. Done means the agreed scaling approach is documented and the largest setting leaves no main-window text at the default size.

Escrito por el modelo de indexación a partir del texto del issue.

Descripción

area: UI improvement
Background

A user on Facebook reported that OpenSAK's text is "far too small" for them and
that they couldn't find a way to change it. The Text and icon size setting
(Settings → General → Display, added in v1.14.0, #286/#287/#290, range widened
in #374/#375) exists, but with Large selected large parts of the UI are
still at the default size (see screenshot, v1.21.0-beta.1, Large).

Small/Medium/Large was chosen in June as a pragmatic first step (same pattern
as the date-format setting), not as a deliberate decision against a free
setting. The values live in TEXT_SIZE_MAP (utils/types.py), which makes
extending it fairly straightforward.

What follows the setting today
  • Cache list: row font, row height, type/container icons, header height
  • Detail panel: cache title, the meta values (GC code, type, D/T, container,
    country, coordinates), detail icon
  • Filter dialog: cache-type icons (capped at 16 px)
What does NOT follow the setting (from the screenshot + code)
Area Why it stays small Where
Menu bar, toolbar, quick-filter bar (GC code / Name / Where), combo boxes, tabs, bottom status line Global app font is fixed: Segoe UI 10 pt / SF Pro 13 pt / Ubuntu 10 pt theme.py _default_font() + app.setFont()
Column header text Only the header height scales, not its font cache_table.py
Status bar (Filter / caches in database / Center point / Count) Hardcoded font-size: 11px mainwindow.py (~line 100)
Detail panel captions ("GC Code", "Type", "D/T", …) hint_style() defaults to 10 px cache_detail.py + theme.py hint_style()
"Add corrected coordinates…" link Hardcoded 10 px cache_detail.py
"Placed by / Date" line hint_style(font_size=11) cache_detail.py
Description tab QWebEngineView HTML with fixed font-size: 13px cache_detail.py (~line 877)
Hint and Logs tabs QTextBrowser using the global font cache_detail.py
Map popups and labels Hardcoded 9/11/16 px in the Leaflet CSS/JS map_widget.py
Dialogs (Settings, Waypoint, Trip Planner, Welcome Wizard, GPS, …) Global font + hardcoded sizes 57 font-size literals across gui/, plus 48 hint_style() call sites

A related accessibility issue: because app.setFont() sets a fixed point size,
OpenSAK ignores the user's system font size preference on Linux and macOS.
Windows display scaling (%) still applies.

Options

A. Keep Small/Medium/Large, extend coverage.
Make the same three steps also scale the global font, web views and
hardcoded sizes. This is the smallest change, but it is still limited to three
steps. Large may still not be large enough for users with low vision.

B. Replace the presets with a UI scale factor (recommended).
A single "Text size" setting, as a percentage (e.g. 80–200 %, in 10 % steps,
or a slider). Everything is derived from it:

  • global app font = base size × scale
  • TEXT_SIZE_MAP values × scale (row height and icons follow automatically)
  • hint_style() and the hardcoded sizes become relative to the app font
    (e.g. "0.85 × base") instead of fixed px
  • QWebEngineView.setZoomFactor(scale) for the Description tab and the map,
    which makes the HTML/Leaflet sizes follow without touching their CSS

Small/Medium/Large can remain as quick presets (e.g. 85 / 100 / 130 %), and
existing settings migrate to the matching percentage. Everything applies live,
without a restart, like the current setting.

C. Qt's global scaling (QT_SCALE_FACTOR).
Scales everything (fonts, icons, spacing, web views) with almost no code
changes. However, it must be set before QApplication is created, so it
requires a restart, and fractional factors can look slightly blurry on some
platforms. It could be offered as an extra "Advanced → Interface scaling"
option for users who need more than B provides, but it should not be the
main mechanism.

Base size: in all options, start from the system's default font size
rather than a fixed pt value, so a user who has already enlarged system text
gets that respected out of the box.

Suggested phasing
  1. Quick win: central ui_scale() helper. Scale the global app font and
    setZoomFactor() on the Description view and the map. This covers most of
    the screenshot with a small change, and could ship in a beta quickly.
  2. Convert hint_style(), the status bar and the remaining hardcoded
    font-size literals to relative sizes. Add a CI test that fails on new
    hardcoded font-size: NNpx in gui/ (same idea as the existing
    language-key tests).
  3. Percentage setting in the UI (option B), migrating existing
    Small/Medium/Large values. Optionally, the base size from the system font.
  4. Optional: QT_SCALE_FACTOR as an advanced, restart-required option (C).
Acceptance criteria
  • At the largest setting, no text in the main window (menus, toolbar,
    quick-filter bar, column headers, status bar, detail captions, tabs,
    description/hint/logs, map popups) remains at the default size
  • Dialogs follow the setting
  • Changes apply live, no restart (except option C, if added)
  • Layout doesn't break at the maximum scale (dialog height clamp #816,
    toolbar overflow, detail meta row wrapping)
  • Existing Small/Medium/Large users keep their current look after upgrade
  • User Guide + docs/ updated

Related: roadmap item 9 (User Preferences & Theming), #735 (toolbar icons),
#654 (icon-only toolbar).

Lenguaje dominante
Python
Estrellas
37
Forks
17
Merge medio
21 h 5 min
PR fusionados (30 d)
131

Preparar el entorno

Primeros pasos

  1. Lee el issue completo y luego la guía de contribución del proyecto.
  2. Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
  3. Haz un fork del repositorio y trabaja en una rama.
  4. Abre un pull request que haga referencia al número del issue.

Más de OpenSAK-Org/OpenSAK

Todos los issues de OpenSAK-Org/OpenSAK

Issues similares

Más issues de Python

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.