Skip to content

Commit

Permalink
Fixed Invalidate bug where Header/footer wasn't updating when changed
Browse files Browse the repository at this point in the history
  • Loading branch information
tig committed May 2, 2020
1 parent c65ed8e commit 287f4e8
Show file tree
Hide file tree
Showing 12 changed files with 134 additions and 203 deletions.
2 changes: 1 addition & 1 deletion src/WinPrint.Console/WinPrint.Console.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@
<AssemblyName>winprint</AssemblyName>
<StartupObject></StartupObject>

<Version>2.0.4.100</Version>
<Version>2.0.4.103</Version>
<Company>Kindel Systems</Company>
<Product>winprint</Product>
<Authors>Charlie Kindel</Authors>
Expand Down
82 changes: 15 additions & 67 deletions src/WinPrint.Core/ViewModels/SheetViewModel.cs
Original file line number Diff line number Diff line change
Expand Up @@ -194,19 +194,17 @@ protected void OnReflowProgress(string msg) {
ReflowProgress?.Invoke(this, msg);
}

public bool CacheEnabled { get => _cacheEnabled; set => SetField(ref _cacheEnabled, value); }

private bool _cacheEnabled = false;

public class SheetViewModelSettingsChangedEvent {
public bool Reflow { get; set; }
public string PropertyName { get; set; }
}
// if bool is true, reflow. Otherwise just paint
public event EventHandler<bool> SettingsChanged;
protected void OnSettingsChanged(bool reflow) {
public event EventHandler<SheetViewModelSettingsChangedEvent> SettingsChanged;
protected void OnSettingsChanged(bool reflow, string propertyName) {
LogService.TraceMessage();
SettingsChanged?.Invoke(this, reflow);
}

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

public SheetViewModel() {
}
Expand All @@ -225,8 +223,6 @@ public void Reset() {
ContentEngine.PropertyChanged -= OnContentEnginePropertyChanged();
ContentEngine = null;
}

ClearCache();
_numPages = 0;
}

Expand Down Expand Up @@ -269,17 +265,17 @@ public void SetSheet(SheetSettings newSheet) {
}

if (_headerVM != null) {
_headerVM.SettingsChanged -= (s, reflow) => OnSettingsChanged(reflow);
_headerVM.SettingsChanged -= (s, reflow) => OnSettingsChanged(reflow, "Header");
}

Header = new HeaderViewModel(this, newSheet.Header);
_headerVM.SettingsChanged += (s, reflow) => OnSettingsChanged(reflow);
_headerVM.SettingsChanged += (s, reflow) => OnSettingsChanged(reflow, "Header");
if (_footerVM != null) {
_footerVM.SettingsChanged -= (s, reflow) => OnSettingsChanged(reflow);
_footerVM.SettingsChanged -= (s, reflow) => OnSettingsChanged(reflow, "Footer");
}

Footer = new FooterViewModel(this, newSheet.Footer);
_footerVM.SettingsChanged += (s, reflow) => OnSettingsChanged(reflow);
_footerVM.SettingsChanged += (s, reflow) => OnSettingsChanged(reflow, "Footer");

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

Ready = false;

if (CacheEnabled) {
ClearCache();
}

if (ContentEngine is null) {
LogService.TraceMessage("SheetViewModel.ReflowAsync - ContentEngine is null");
return;
Expand Down Expand Up @@ -590,18 +582,6 @@ public SheetSettings FindSheet(string sheetName, out string sheetID) {
return sheet;
}

private void ClearCache() {
if (!CacheEnabled) {
return;// throw new InvalidOperationException("Cache is not enabled!");
}

LogService.TraceMessage();
foreach (var i in _cachedSheets) {
i.Dispose();
}
_cachedSheets.Clear();
}

private System.ComponentModel.PropertyChangedEventHandler OnSheetPropertyChanged() {
return (s, e) => {
var reflow = false;
Expand Down Expand Up @@ -643,7 +623,7 @@ private System.ComponentModel.PropertyChangedEventHandler OnSheetPropertyChanged
default:
throw new InvalidOperationException($"Property change not handled: {e.PropertyName}");
}
OnSettingsChanged(reflow);
OnSettingsChanged(reflow, e.PropertyName);
};
}

Expand Down Expand Up @@ -710,7 +690,7 @@ private System.ComponentModel.PropertyChangedEventHandler OnContentSettingsPrope
default:
throw new InvalidOperationException($"Property change not handled: {e.PropertyName}");
}
OnSettingsChanged(reflow);
OnSettingsChanged(reflow, e.PropertyName);
};
}

Expand Down Expand Up @@ -738,7 +718,7 @@ private System.ComponentModel.PropertyChangedEventHandler OnContentEnginePropert
return;
}

OnSettingsChanged(reflow);
OnSettingsChanged(reflow, e.PropertyName);
};
}

Expand Down Expand Up @@ -813,38 +793,6 @@ public void PrintSheet(Graphics graphics, int sheetNum) {
graphics.Restore(state);
}


/// <summary>
/// Returns an Image with the specified sheet painted on it. Image will be of the size & resolution of the selected printer.
/// </summary>
/// <param name="sheetNum">Sheet to print. 1-based.</param>
/// <returns></returns>
public Image GetCachedSheet(Graphics graphics, int sheetNum) {
if (!CacheEnabled) {
throw new InvalidOperationException("Cache is not enabled!");
}

const int dpiMultiplier = 1;
float xDpi = PrinterResolution.X * dpiMultiplier;
float yDpi = PrinterResolution.Y * dpiMultiplier;
var xRes = (int)(Bounds.Width / 100 * xDpi);
var yRes = (int)(Bounds.Height / 100 * yDpi);
if (_cachedSheets.Count < sheetNum) {
// Create a new bitmap object with the resolution of a printer page
var bmp = new Bitmap(xRes, yRes);
//bmp.SetResolution(xDpi, yDpi);

// Obtain a Graphics object from that bitmap
var g = Graphics.FromImage(bmp);
g.PageUnit = GraphicsUnit.Pixel;
PaintSheet(g, sheetNum);
_cachedSheets.Add(bmp);
}

LogService.TraceMessage($"GetCachedSheet({sheetNum}) returning image.");
return _cachedSheets[sheetNum - 1];
}

private void PaintSheet(Graphics g, int sheetNum) {
LogService.TraceMessage($"{sheetNum}");
// background needs to be filled image scaling to work right
Expand Down
2 changes: 1 addition & 1 deletion src/WinPrint.Core/WinPrint.Core.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
<PropertyGroup>
<TargetFramework>netcoreapp3.1</TargetFramework>
<Platforms>AnyCPU;x64;x86</Platforms>
<Version>2.0.4.100</Version>
<Version>2.0.4.105</Version>
<Company>Kindel Systems</Company>
<Product>winprint</Product>
<Authors>Charlie Kindel</Authors>
Expand Down
27 changes: 1 addition & 26 deletions src/WinPrint.Installer/setup.cs
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,6 @@ private static void Main() {
var versionFile = $"{sourceBaseDir}\\WinPrint.Core.dll";
Debug.WriteLine($"version path: {versionFile}");
var info = FileVersionInfo.GetVersionInfo(versionFile);

var feature = new Feature(new Id("winprint"));

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

//Binaries = new[] {
//},

//Actions = new[] {
// new InstalledFileAction("winprintgui_exe", "")
// {
// Step = Step.InstallFinalize,
// When = When.After,
// Return = Return.asyncNoWait,
// Execute = Execute.immediate,
// Impersonate = true,
// //Condition = Feature.BeingInstall(),
// }
//},

Properties = new[]{
//setting property to be used in install condition
new Property("ALLUSERS", "1"),
Expand All @@ -68,16 +52,14 @@ private static void Main() {
project.SourceBaseDir = sourceBaseDir;
project.OutDir = outDir;

project.Version = new Version(info.ProductVersion); //new Version("2.0.1.10040");
project.Version = new Version(info.ProductVersion);
project.MajorUpgrade = new MajorUpgrade {
Schedule = UpgradeSchedule.afterInstallInitialize,
AllowSameVersionUpgrades = true,
DowngradeErrorMessage = "A later version of [ProductName] is already installed. Setup will now exit."
};
project.Platform = Platform.x64;

//project.LicenceFile = "license.rtf";

project.ControlPanelInfo.Comments = $"winprint by Charlie Kindel";
project.ControlPanelInfo.Readme = "https://tig.github.io/winprint";
project.ControlPanelInfo.HelpLink = "https://tig.github.io/winprint";
Expand All @@ -86,16 +68,9 @@ private static void Main() {
project.ControlPanelInfo.Manufacturer = info.CompanyName;
project.ControlPanelInfo.InstallLocation = "[INSTALLDIR]";
project.ControlPanelInfo.NoModify = true;
//project.ControlPanelInfo.NoRepair = true,
//project.ControlPanelInfo.NoRemove = true,
//project.ControlPanelInfo.SystemComponent = true, //if set will not be shown in Control Panel

project.PreserveTempFiles = true;

//project.UI = WUI.WixUI_ProgressOnly;

//project.RemoveDialogsBetween(NativeDialogs.WelcomeDlg, NativeDialogs.);

//project.SetNetFxPrerequisite("NETFRAMEWORK20='#1'");

project.EmbeddedUI = new EmbeddedAssembly(System.Reflection.Assembly.GetExecutingAssembly().Location);
Expand Down
66 changes: 1 addition & 65 deletions src/WinPrint.WinForms/MainWindow.Designer.cs

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Loading

0 comments on commit 287f4e8

Please sign in to comment.