Skip to content

[#849] Add Qt curve/LUT viewer action buttons - #878

Merged
eoyilmaz merged 1 commit into
developfrom
849-qt-lut-viewer-missing-actions
Jul 18, 2026
Merged

[#849] Add Qt curve/LUT viewer action buttons#878
eoyilmaz merged 1 commit into
developfrom
849-qt-lut-viewer-missing-actions

Conversation

@eoyilmaz

Copy link
Copy Markdown
Owner

Summary

Closes #849. Ports the actions present in wx_lut_viewer.py but missing from the Qt curve-viewer port (DisplayCAL/ui/tools/curve_viewer.py), found during the wx→Qt port-completeness audit:

  • Black-point-compensation "apply" button (apply_bpc()), enabled only when the profile's vcgt has a lifted black point.
  • "Install VCGT to display" button (install_vcgt()), runs Argyll dispwin on a background thread.
  • "Reload from display profile" button (reload_display_vcgt()).
  • Save-plot-as-image (.bmp/.png/.jpg/.xbm/.xpm) and save-vcgt-as-.cal buttons.
  • Advanced shaper-curve modes (A2B0-2/B2A0-2 input/output curves), gated by show_advanced_options, including the v2 Lab L*-encoding resample from the wx original.
  • Per-monitor auto-follow: the standalone CurveViewerWindow reloads the new display's profile (or live LUT, if "show actual LUT" is on) when dragged onto another monitor, mirroring wx's move_handler.

DisplayCAL/ui/plot/curve_data.py gains the toolkit-neutral helpers; the buttons and moveEvent() plumbing live in curve_viewer.py. Bumped DisplayCAL/VERSION to 3.10.0.dev47.

Test plan

  • Added tests/test_ui_plot_curve_data.py (10 tests) covering apply_bpc(), install_vcgt(), reload_display_vcgt(), and extract_shaper_curve() (including the Lab L* resample branch), all with stubbed Argyll/dispwin calls.
  • Added tests/test_ui_curve_viewer.py (15 tests) covering vcgt-action-toolbar visibility/enablement, button click wiring (including exception reporting), save dialogs, shaper-curve mode listing/drawing, and per-monitor follow_display().
  • pytest tests/ -n auto — 2481 passed, 21 skipped, no regressions.
  • ruff check clean on both changed source files.
  • Manually launched python -m DisplayCAL.ui.tools.curve_viewer and exercised each button against a real cLUT test profile.

….dev47

Ports the actions present in wx_lut_viewer.py but missing from the Qt
curve-viewer port: BPC apply, install/reload VCGT via dispwin, save the
plot as an image or the vcgt as a .cal, advanced per-tag A2B/B2A shaper
curves gated by show_advanced_options, and per-monitor auto-follow (the
standalone window reloads a display's profile when dragged onto it).

curve_data.py gains the toolkit-neutral helpers (apply_bpc(),
install_vcgt(), reload_display_vcgt(), extract_shaper_curve()); the
buttons and moveEvent() plumbing live in curve_viewer.py.
@eoyilmaz
eoyilmaz merged commit 13d60ba into develop Jul 18, 2026
13 of 15 checks passed
@eoyilmaz
eoyilmaz deleted the 849-qt-lut-viewer-missing-actions branch July 18, 2026 06:24
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

1 participant