Text & icon size: make it apply to the whole UI, and make it freely adjustable
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ả
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_MAPvalues × 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 pxQWebEngineView.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
- 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. - Convert
hint_style(), the status bar and the remaining hardcoded
font-sizeliterals to relative sizes. Add a CI test that fails on new
hardcodedfont-size: NNpxingui/(same idea as the existing
language-key tests). - Percentage setting in the UI (option B), migrating existing
Small/Medium/Large values. Optionally, the base size from the system font. - Optional:
QT_SCALE_FACTORas 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
- Không có Dockerfile hay tệp Docker Compose
- Không có mẫu pull request
- Đọc hướng dẫn đóng góp
Bắt đầu từ đâu
- Đọc hết issue, rồi đọc hướng dẫn đóng góp của dự án.
- 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.
- Fork repository và làm thay đổi trên một nhánh.
- Mở pull request có tham chiếu số hiệu của issue.
Issue khác của OpenSAK-Org/OpenSAK
-
Make it clear that the Windows ZIP download is portable (no installer, not in Apps & Features)Đang mởarea: documentation documentation good first issue OS: windows
Độ khó 2/5 Nửa ngày Mức phù hợp với người mới 78/100
OpenSAK-Org/OpenSAK#1289 ·
Maintainer thường phản hồi trong vòng 1 ngày
-
area: geo-data improvement
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 65/100
OpenSAK-Org/OpenSAK#1285 ·
Maintainer thường phản hồi trong vòng 1 ngày
-
area: geo-data good first issue improvement
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 80/100
OpenSAK-Org/OpenSAK#789 · 1 bình luận ·
Maintainer thường phản hồi trong vòng 1 ngày
-
area: UI improvement
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 62/100
OpenSAK-Org/OpenSAK#729 ·
Maintainer thường phản hồi trong vòng 1 ngày
-
area: import improvement
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 78/100
OpenSAK-Org/OpenSAK#648 ·
Maintainer thường phản hồi trong vòng 1 ngày
Tất cả issue của OpenSAK-Org/OpenSAK
Issue tương tự
-
Wayback LinksĐang mở
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 82/100
chnm/teachinghistory-hugo#53 ·
-
gpt-oss "Forcing a tool call" row no longer reproduces: tool_choice is now honoured on every surfaceĐang mở
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 83/100
aws-samples/sample-per-model-bedrock#840 ·
Maintainer thường phản hồi trong vòng 1 ngày
-
Độ khó 1/5 Dưới một giờ Mức phù hợp với người mới 85/100
521xueweihan/HelloGitHub#4318 ·
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 72/100
DiamondLightSource/eiger-correction#2 · 1 bình luận ·
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 68/100
django-cms/djangocms-frontend#413 ·