Skip to content

Commit 287f4e8

Browse files
committed
Fixed Invalidate bug where Header/footer wasn't updating when changed
1 parent c65ed8e commit 287f4e8

File tree

12 files changed

+134
-203
lines changed

12 files changed

+134
-203
lines changed

src/WinPrint.Console/WinPrint.Console.csproj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
<AssemblyName>winprint</AssemblyName>
1010
<StartupObject></StartupObject>
1111

12-
<Version>2.0.4.100</Version>
12+
<Version>2.0.4.103</Version>
1313
<Company>Kindel Systems</Company>
1414
<Product>winprint</Product>
1515
<Authors>Charlie Kindel</Authors>

src/WinPrint.Core/ViewModels/SheetViewModel.cs

Lines changed: 15 additions & 67 deletions
Original file line numberDiff line numberDiff line change
@@ -194,19 +194,17 @@ protected void OnReflowProgress(string msg) {
194194
ReflowProgress?.Invoke(this, msg);
195195
}
196196

197-
public bool CacheEnabled { get => _cacheEnabled; set => SetField(ref _cacheEnabled, value); }
198-
199-
private bool _cacheEnabled = false;
200-
197+
public class SheetViewModelSettingsChangedEvent {
198+
public bool Reflow { get; set; }
199+
public string PropertyName { get; set; }
200+
}
201201
// if bool is true, reflow. Otherwise just paint
202-
public event EventHandler<bool> SettingsChanged;
203-
protected void OnSettingsChanged(bool reflow) {
202+
public event EventHandler<SheetViewModelSettingsChangedEvent> SettingsChanged;
203+
protected void OnSettingsChanged(bool reflow, string propertyName) {
204204
LogService.TraceMessage();
205-
SettingsChanged?.Invoke(this, reflow);
206-
}
207205

208-
// Caching of pages as bitmaps. Enables faster paint/zoom as well as usage from XAML
209-
private List<Image> _cachedSheets = new List<Image>();
206+
SettingsChanged?.Invoke(this, new SheetViewModelSettingsChangedEvent() { Reflow = reflow, PropertyName = propertyName }) ;
207+
}
210208

211209
public SheetViewModel() {
212210
}
@@ -225,8 +223,6 @@ public void Reset() {
225223
ContentEngine.PropertyChanged -= OnContentEnginePropertyChanged();
226224
ContentEngine = null;
227225
}
228-
229-
ClearCache();
230226
_numPages = 0;
231227
}
232228

@@ -269,17 +265,17 @@ public void SetSheet(SheetSettings newSheet) {
269265
}
270266

271267
if (_headerVM != null) {
272-
_headerVM.SettingsChanged -= (s, reflow) => OnSettingsChanged(reflow);
268+
_headerVM.SettingsChanged -= (s, reflow) => OnSettingsChanged(reflow, "Header");
273269
}
274270

275271
Header = new HeaderViewModel(this, newSheet.Header);
276-
_headerVM.SettingsChanged += (s, reflow) => OnSettingsChanged(reflow);
272+
_headerVM.SettingsChanged += (s, reflow) => OnSettingsChanged(reflow, "Header");
277273
if (_footerVM != null) {
278-
_footerVM.SettingsChanged -= (s, reflow) => OnSettingsChanged(reflow);
274+
_footerVM.SettingsChanged -= (s, reflow) => OnSettingsChanged(reflow, "Footer");
279275
}
280276

281277
Footer = new FooterViewModel(this, newSheet.Footer);
282-
_footerVM.SettingsChanged += (s, reflow) => OnSettingsChanged(reflow);
278+
_footerVM.SettingsChanged += (s, reflow) => OnSettingsChanged(reflow, "Footer");
283279

284280
// Subscribe to all settings properties
285281
newSheet.PropertyChanged += OnSheetPropertyChanged();
@@ -532,10 +528,6 @@ public async Task ReflowAsync() {
532528

533529
Ready = false;
534530

535-
if (CacheEnabled) {
536-
ClearCache();
537-
}
538-
539531
if (ContentEngine is null) {
540532
LogService.TraceMessage("SheetViewModel.ReflowAsync - ContentEngine is null");
541533
return;
@@ -590,18 +582,6 @@ public SheetSettings FindSheet(string sheetName, out string sheetID) {
590582
return sheet;
591583
}
592584

593-
private void ClearCache() {
594-
if (!CacheEnabled) {
595-
return;// throw new InvalidOperationException("Cache is not enabled!");
596-
}
597-
598-
LogService.TraceMessage();
599-
foreach (var i in _cachedSheets) {
600-
i.Dispose();
601-
}
602-
_cachedSheets.Clear();
603-
}
604-
605585
private System.ComponentModel.PropertyChangedEventHandler OnSheetPropertyChanged() {
606586
return (s, e) => {
607587
var reflow = false;
@@ -643,7 +623,7 @@ private System.ComponentModel.PropertyChangedEventHandler OnSheetPropertyChanged
643623
default:
644624
throw new InvalidOperationException($"Property change not handled: {e.PropertyName}");
645625
}
646-
OnSettingsChanged(reflow);
626+
OnSettingsChanged(reflow, e.PropertyName);
647627
};
648628
}
649629

@@ -710,7 +690,7 @@ private System.ComponentModel.PropertyChangedEventHandler OnContentSettingsPrope
710690
default:
711691
throw new InvalidOperationException($"Property change not handled: {e.PropertyName}");
712692
}
713-
OnSettingsChanged(reflow);
693+
OnSettingsChanged(reflow, e.PropertyName);
714694
};
715695
}
716696

@@ -738,7 +718,7 @@ private System.ComponentModel.PropertyChangedEventHandler OnContentEnginePropert
738718
return;
739719
}
740720

741-
OnSettingsChanged(reflow);
721+
OnSettingsChanged(reflow, e.PropertyName);
742722
};
743723
}
744724

@@ -813,38 +793,6 @@ public void PrintSheet(Graphics graphics, int sheetNum) {
813793
graphics.Restore(state);
814794
}
815795

816-
817-
/// <summary>
818-
/// Returns an Image with the specified sheet painted on it. Image will be of the size & resolution of the selected printer.
819-
/// </summary>
820-
/// <param name="sheetNum">Sheet to print. 1-based.</param>
821-
/// <returns></returns>
822-
public Image GetCachedSheet(Graphics graphics, int sheetNum) {
823-
if (!CacheEnabled) {
824-
throw new InvalidOperationException("Cache is not enabled!");
825-
}
826-
827-
const int dpiMultiplier = 1;
828-
float xDpi = PrinterResolution.X * dpiMultiplier;
829-
float yDpi = PrinterResolution.Y * dpiMultiplier;
830-
var xRes = (int)(Bounds.Width / 100 * xDpi);
831-
var yRes = (int)(Bounds.Height / 100 * yDpi);
832-
if (_cachedSheets.Count < sheetNum) {
833-
// Create a new bitmap object with the resolution of a printer page
834-
var bmp = new Bitmap(xRes, yRes);
835-
//bmp.SetResolution(xDpi, yDpi);
836-
837-
// Obtain a Graphics object from that bitmap
838-
var g = Graphics.FromImage(bmp);
839-
g.PageUnit = GraphicsUnit.Pixel;
840-
PaintSheet(g, sheetNum);
841-
_cachedSheets.Add(bmp);
842-
}
843-
844-
LogService.TraceMessage($"GetCachedSheet({sheetNum}) returning image.");
845-
return _cachedSheets[sheetNum - 1];
846-
}
847-
848796
private void PaintSheet(Graphics g, int sheetNum) {
849797
LogService.TraceMessage($"{sheetNum}");
850798
// background needs to be filled image scaling to work right

src/WinPrint.Core/WinPrint.Core.csproj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
<PropertyGroup>
55
<TargetFramework>netcoreapp3.1</TargetFramework>
66
<Platforms>AnyCPU;x64;x86</Platforms>
7-
<Version>2.0.4.100</Version>
7+
<Version>2.0.4.105</Version>
88
<Company>Kindel Systems</Company>
99
<Product>winprint</Product>
1010
<Authors>Charlie Kindel</Authors>

src/WinPrint.Installer/setup.cs

Lines changed: 1 addition & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,6 @@ private static void Main() {
1313
var versionFile = $"{sourceBaseDir}\\WinPrint.Core.dll";
1414
Debug.WriteLine($"version path: {versionFile}");
1515
var info = FileVersionInfo.GetVersionInfo(versionFile);
16-
1716
var feature = new Feature(new Id("winprint"));
1817

1918
var project = new Project(info.ProductName, new EnvironmentVariable("PATH", "[INSTALLDIR]") { Part = EnvVarPart.last }) {
@@ -40,21 +39,6 @@ private static void Main() {
4039
new ExeFileShortcut("WinPrint", "[INSTALLDIR]winprintgui.exe", arguments: ""))
4140
},
4241

43-
//Binaries = new[] {
44-
//},
45-
46-
//Actions = new[] {
47-
// new InstalledFileAction("winprintgui_exe", "")
48-
// {
49-
// Step = Step.InstallFinalize,
50-
// When = When.After,
51-
// Return = Return.asyncNoWait,
52-
// Execute = Execute.immediate,
53-
// Impersonate = true,
54-
// //Condition = Feature.BeingInstall(),
55-
// }
56-
//},
57-
5842
Properties = new[]{
5943
//setting property to be used in install condition
6044
new Property("ALLUSERS", "1"),
@@ -68,16 +52,14 @@ private static void Main() {
6852
project.SourceBaseDir = sourceBaseDir;
6953
project.OutDir = outDir;
7054

71-
project.Version = new Version(info.ProductVersion); //new Version("2.0.1.10040");
55+
project.Version = new Version(info.ProductVersion);
7256
project.MajorUpgrade = new MajorUpgrade {
7357
Schedule = UpgradeSchedule.afterInstallInitialize,
7458
AllowSameVersionUpgrades = true,
7559
DowngradeErrorMessage = "A later version of [ProductName] is already installed. Setup will now exit."
7660
};
7761
project.Platform = Platform.x64;
7862

79-
//project.LicenceFile = "license.rtf";
80-
8163
project.ControlPanelInfo.Comments = $"winprint by Charlie Kindel";
8264
project.ControlPanelInfo.Readme = "https://tig.github.io/winprint";
8365
project.ControlPanelInfo.HelpLink = "https://tig.github.io/winprint";
@@ -86,16 +68,9 @@ private static void Main() {
8668
project.ControlPanelInfo.Manufacturer = info.CompanyName;
8769
project.ControlPanelInfo.InstallLocation = "[INSTALLDIR]";
8870
project.ControlPanelInfo.NoModify = true;
89-
//project.ControlPanelInfo.NoRepair = true,
90-
//project.ControlPanelInfo.NoRemove = true,
91-
//project.ControlPanelInfo.SystemComponent = true, //if set will not be shown in Control Panel
9271

9372
project.PreserveTempFiles = true;
9473

95-
//project.UI = WUI.WixUI_ProgressOnly;
96-
97-
//project.RemoveDialogsBetween(NativeDialogs.WelcomeDlg, NativeDialogs.);
98-
9974
//project.SetNetFxPrerequisite("NETFRAMEWORK20='#1'");
10075

10176
project.EmbeddedUI = new EmbeddedAssembly(System.Reflection.Assembly.GetExecutingAssembly().Location);

src/WinPrint.WinForms/MainWindow.Designer.cs

Lines changed: 1 addition & 65 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)