Remember the sheet background colour between runs

Picking a sheet (folio) background colour in the diagram editor was lost
on every restart. Diagram::background_color is a static initialised to
white and PaletteGraphicsView's s_custom_bg a static bool, and neither
was ever written anywhere -- Diagram::toXml() carries no colour attribute
either -- so closing and reopening a project always came back on the
default and the choice had to be made again.

Store it in QSettings under diagrameditor/sheet_background_* as a pair of
values rather than one: the colour, and whether it was picked explicitly.
Both halves are needed. "#ffffff, follow the system" and "#ffffff, always
white" are the same colour and two behaviours -- the first is what the
views invert on a dark palette -- so keeping only the colour would
silently turn one into the other on the next start, which is the reported
problem one step removed.

The colour is written as HexRgb on purpose. The SVG export gives
Diagram::background_color an alpha of 0 to render a transparent
background and never puts it back, and that transient value must not be
persisted as a permanently transparent sheet.

Applied from main() after the headless export and scripting branch -- those
return before reaching it and must keep rendering on plain white, the rule
ProjectPrintWindow already enforces for printing -- and before QETApp is
constructed, since that constructor already loads the projects given on
the command line. The GUI export dialog is left alone: it renders through
drawBackground(), so what you see is what you export, as it already was
within a session.

Saved at the moment the colour is applied rather than at shutdown, so
neither the print window's temporary white nor the SVG export's alpha can
reach it. The button's constructor now mirrors the stored state instead of
always claiming "system colour", and the "recently used" list is stored
alongside it.

Covered by tst_sheetbackgroundsetting, which pins the custom flag and the
dropped alpha -- the two rules a single stored colour would lose.
This commit is contained in:
Kellermorph
2026-09-24 10:30:01 +02:00
parent a06220e8dc
commit 9af562fcbd
7 changed files with 318 additions and 2 deletions
+18
View File
@@ -22,6 +22,8 @@
#include "logging/eventloopwatchdog.h"
#include "logging/qetlogger.h"
#include "machine_info.h"
#include "diagram.h"
#include "palettegraphicsview.h"
#include "qet.h"
#include "qetapp.h"
#include "qetmessagebox.h"
@@ -144,6 +146,22 @@ int main(int argc, char **argv)
#endif
}
// Re-apply the sheet background last picked in the diagram editor, so
// every project opened from here on -- existing or new, whichever one
// it is -- draws that background instead of the built-in default that
// would otherwise force the user to pick it again after each start.
//
// Done here rather than in main()'s first lines on purpose: the
// headless export and scripting runs above return before reaching
// this point and must keep rendering on plain white. It also has to
// happen before QETApp is constructed below, since that constructor
// already loads the projects given on the command line.
{
const QetSettings::SheetBackground sheet_background = QetSettings::sheetBackground();
PaletteGraphicsView::setCustomBackgroundColor(sheet_background.custom);
Diagram::background_color = sheet_background.color;
}
// Resolve the logger's state (log directory, session filename, open
// file handle) explicitly here, immediately before installing the
// handler -- not implicitly on whichever thread happens to log