diff --git a/program/MapWindow.cs b/program/MapWindow.cs index 328052f..dc2f049 100644 --- a/program/MapWindow.cs +++ b/program/MapWindow.cs @@ -587,7 +587,8 @@ DisposePixbufs(); _body = LoadBody(); - _map = LoadMap(MapPathForView()); + // _map = LoadMap(MapPathForView()); + _map = LoadMap(MapPathForView(), MapNeedsMirror()); MapArea.QueueDraw(); UpdateTunerInfo(); @@ -917,7 +918,8 @@ ReloadBody(); if (_map != null) { _map.Dispose(); _map = null; } if (_mapRaw != null) { _mapRaw.Dispose(); _mapRaw = null; } - _map = LoadMap(MapPathForView()); + // _map = LoadMap(MapPathForView()); + _map = LoadMap(MapPathForView(), MapNeedsMirror()); UpdateTunerInfo(); MapArea.QueueDraw(); }), true, true, 0); @@ -1311,7 +1313,8 @@ if (_map != null) { _map.Dispose(); _map = null; } if (_mapRaw != null) { _mapRaw.Dispose(); _mapRaw = null; } - _map = LoadMap(MapPathForView()); + // _map = LoadMap(MapPathForView()); + _map = LoadMap(MapPathForView(), MapNeedsMirror()); SyncSpins(); UpdateTunerInfo(); @@ -1379,6 +1382,14 @@ } } + /// Back view with no dedicated Image_Back in the CSV — Form2's + /// CreateFlippedImage fallback. Computed from _view every call, so it + /// cannot go stale when the view changes. + private bool MapNeedsMirror() + { + return _case != null && _view == "back" && string.IsNullOrEmpty(_case.MapBack); + } + private string MapPathForView() { if (_case == null) return null; @@ -1414,7 +1425,7 @@ } } - private Gdk.Pixbuf LoadMap(string path) + private Gdk.Pixbuf LoadMap(string path, bool mirror) { _mapPath = path ?? "(none)"; @@ -1426,6 +1437,16 @@ var keyed = raw.AddAlpha(true, 0, 0, 0); raw.Dispose(); + if (mirror) + { + var flipped = keyed.Flip(true); + keyed.Dispose(); + keyed = flipped; + Logger.Write("map", "mirrored front map for back view"); + } + + if (_mapRaw != null) { _mapRaw.Dispose(); _mapRaw = null; } // defensive + // Keep the keyed original for FitBody mode — the calibrator never // resized to 546, so its zoom numbers refer to THIS pixbuf. _mapRaw = keyed.Copy();