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

Đang mở
#945 1 bình luận 1 reaction 0 người được giao Xem trên GitHub

Maintainer thường phản hồi trong vòng 1 ngày

Chưa có ai nhận issue này.

Đánh giá

Độ khó
5/5
Thời gian dự kiến
Hơn một tuần
Mức phù hợp với người mới
15/100
Loại issue
Tính năng
Độ rõ ràng
Khá rõ ràng
Mức độ hoạt động
Ít trao đổi
Công nghệ
python
Lĩnh vực
desktop-dev, frontend

Hướng nghiên cứu

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.

Do mô hình lập chỉ mục viết ra từ nội dung của issue.

Mô tả

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).

Ngôn ngữ chính
Python
Star
37
Fork
17
Merge trung bình
21 giờ 5 phút
Pull request đã merge (30 ngày)
131

Chuẩn bị môi trường

Bắt đầu từ đâu

  1. Đọc hết issue, rồi đọc hướng dẫn đóng góp của dự án.
  2. Bình luận trên issue rằng bạn sẽ nhận — tránh hai người làm cùng một việc.
  3. Fork repository và làm thay đổi trên một nhánh.
  4. Mở pull request có tham chiếu số hiệu của issue.

Issue khác của OpenSAK-Org/OpenSAK

Tất cả issue của OpenSAK-Org/OpenSAK

Issue tương tự

Thêm issue về Python

Nhận issue mới trong hộp thư của bạn

Bản tóm tắt ngắn những issue GitHub phù hợp với người mới.