Compare commits

..

1 Commits

Author SHA1 Message Date
1da39b1717 Revert "Better Image handling (#2665)"
This reverts commit 5059b93cd7.
2024-09-11 11:40:34 -05:00
10 changed files with 230 additions and 316 deletions

View File

@ -21,6 +21,7 @@
"TabRowHeightInPixels": "50",
"IconFontSize": "14",
"IconButtonSize": "35",
"WinUtilIconSize": "Auto",
"SettingsIconFontSize": "18",
"CloseIconFontSize": "18",

View File

@ -0,0 +1,92 @@
function ConvertTo-Icon {
<#
.DESCRIPTION
This function will convert BMP, GIF, EXIF, JPG, PNG and TIFF to ICO file
.PARAMETER bitmapPath
The file path to bitmap image to make '.ico' file out of.
Supported file types according to Microsoft Documentation is the following:
BMP, GIF, EXIF, JPG, PNG and TIFF.
.PARAMETER iconPath
The file path to write the new '.ico' resource.
.PARAMETER overrideIconFile
An optional boolean Parameter that makes the function overrides
the Icon File Path if the file exists. Defaults to $true.
.EXAMPLE
try {
ConvertTo-Icon -bitmapPath "$env:TEMP\cttlogo.png" -iconPath "$env:TEMP\cttlogo.ico"
} catch [System.IO.FileNotFoundException] {
# Handle the thrown exception here...
}
This Example makes a '.ico' file at "$env:TEMP\cttlogo.ico" File Path using the bitmap file
found in "$env:TEMP\cttlogo.png", the function overrides the '.ico' File if it's found.
this function will throw a FileNotFound Exception at the event of not finding the provided bitmap File Path.
.EXAMPLE
try {
ConvertTo-Icon "$env:TEMP\cttlogo.png" "$env:TEMP\cttlogo.ico"
} catch [System.IO.FileNotFoundException] {
# Handle the thrown exception here...
}
This Example is the same as Example 1, but uses Positional Parameters instead.
.EXAMPLE
if (Test-Path "$env:TEMP\cttlogo.png") {
ConvertTo-Icon -bitmapPath "$env:TEMP\cttlogo.png" -iconPath "$env:TEMP\cttlogo.ico"
}
This Example is same as Example 1, but checks if the bitmap File exists before calling 'ConvertTo-Icon' Function.
This's the recommended way of using this function, as it doesn't require any try-catch blocks.
.EXAMPLE
try {
ConvertTo-Icon -bitmapPath "$env:TEMP\cttlogo.png" -iconPath "$env:TEMP\cttlogo.ico" -overrideIconFile $false
} catch [System.IO.FileNotFoundException] {
# Handle the thrown exception here...
}
This Example make use of '-overrideIconFile' Optional Parameter, the default for this parameter is $true.
By doing '-overrideIconFile $false', the 'ConvertTo-Icon' function will raise an exception that needs to be catched throw a 'catch' Code Block,
otherwise it'll crash the running PowerShell instance/process.
#>
param(
[Parameter(Mandatory, position=0)]
[string]$bitmapPath,
[Parameter(Mandatory, position=1)]
[string]$iconPath,
[Parameter(position=2)]
[bool]$overrideIconFile = $true
)
Add-Type -AssemblyName System.Drawing
if (Test-Path $bitmapPath) {
if ((Test-Path $iconPath) -AND ($overrideIconFile -eq $false)) {
Write-Host "[ConvertTo-Icon] Icon File is found at '$iconPath', and the 'overrideIconFile' Parameter is set to '$overrideIconFile'. Skipping the bitmap to icon convertion..." -ForegroundColor Yellow
return
}
# Load bitmap file into memory, and make an Icon version out of it
$b = [System.Drawing.Bitmap]::FromFile($bitmapPath)
$icon = [System.Drawing.Icon]::FromHandle($b.GetHicon())
# Create the folder for the new icon file if it doesn't exists
$iconFolder = (New-Object System.IO.FileInfo($iconPath)).Directory.FullName
[System.IO.Directory]::CreateDirectory($iconFolder) | Out-Null
# Write the Icon File and do some cleaning-up
$file = New-Object System.IO.FileStream($iconPath, 'OpenOrCreate')
$icon.Save($file)
$file.Close()
$icon.Dispose()
} else {
throw [System.IO.FileNotFoundException] "[ConvertTo-Icon] The provided bitmap File Path is not found at '$bitmapPath'."
}
}

View File

@ -1,199 +0,0 @@
function Invoke-WinUtilAssets {
param (
$type,
$Size,
[switch]$render
)
# Create the Viewbox and set its size
$LogoViewbox = New-Object Windows.Controls.Viewbox
$LogoViewbox.Width = $Size
$LogoViewbox.Height = $Size
# Create a Canvas to hold the paths
$canvas = New-Object Windows.Controls.Canvas
$canvas.Width = 100
$canvas.Height = 100
# Define a scale factor for the content inside the Canvas
$scaleFactor = $Size / 100
# Apply a scale transform to the Canvas content
$scaleTransform = New-Object Windows.Media.ScaleTransform($scaleFactor, $scaleFactor)
$canvas.LayoutTransform = $scaleTransform
switch ($type) {
'logo' {
$LogoPathData1 = @"
M 18.00,14.00
C 18.00,14.00 45.00,27.74 45.00,27.74
45.00,27.74 57.40,34.63 57.40,34.63
57.40,34.63 59.00,43.00 59.00,43.00
59.00,43.00 59.00,83.00 59.00,83.00
55.35,81.66 46.99,77.79 44.72,74.79
41.17,70.10 42.01,59.80 42.00,54.00
42.00,51.62 42.20,48.29 40.98,46.21
38.34,41.74 25.78,38.60 21.28,33.79
16.81,29.02 18.00,20.20 18.00,14.00 Z
"@
$LogoPath1 = New-Object Windows.Shapes.Path
$LogoPath1.Data = [Windows.Media.Geometry]::Parse($LogoPathData1)
$LogoPath1.Fill = [System.Windows.Media.BrushConverter]::new().ConvertFromString("#0567ff")
$LogoPathData2 = @"
M 107.00,14.00
C 109.01,19.06 108.93,30.37 104.66,34.21
100.47,37.98 86.38,43.10 84.60,47.21
83.94,48.74 84.01,51.32 84.00,53.00
83.97,57.04 84.46,68.90 83.26,72.00
81.06,77.70 72.54,81.42 67.00,83.00
67.00,83.00 67.00,43.00 67.00,43.00
67.00,43.00 67.99,35.63 67.99,35.63
67.99,35.63 80.00,28.26 80.00,28.26
80.00,28.26 107.00,14.00 107.00,14.00 Z
"@
$LogoPath2 = New-Object Windows.Shapes.Path
$LogoPath2.Data = [Windows.Media.Geometry]::Parse($LogoPathData2)
$LogoPath2.Fill = [System.Windows.Media.BrushConverter]::new().ConvertFromString("#0567ff")
$LogoPathData3 = @"
M 19.00,46.00
C 21.36,47.14 28.67,50.71 30.01,52.63
31.17,54.30 30.99,57.04 31.00,59.00
31.04,65.41 30.35,72.16 33.56,78.00
38.19,86.45 46.10,89.04 54.00,93.31
56.55,94.69 60.10,97.20 63.00,97.22
65.50,97.24 68.77,95.36 71.00,94.25
76.42,91.55 84.51,87.78 88.82,83.68
94.56,78.20 95.96,70.59 96.00,63.00
96.01,60.24 95.59,54.63 97.02,52.39
98.80,49.60 103.95,47.87 107.00,47.00
107.00,47.00 107.00,67.00 107.00,67.00
106.90,87.69 96.10,93.85 80.00,103.00
76.51,104.98 66.66,110.67 63.00,110.52
60.33,110.41 55.55,107.53 53.00,106.25
46.21,102.83 36.63,98.57 31.04,93.68
16.88,81.28 19.00,62.88 19.00,46.00 Z
"@
$LogoPath3 = New-Object Windows.Shapes.Path
$LogoPath3.Data = [Windows.Media.Geometry]::Parse($LogoPathData3)
$LogoPath3.Fill = [System.Windows.Media.BrushConverter]::new().ConvertFromString("#a3a4a6")
$canvas.Children.Add($LogoPath1) | Out-Null
$canvas.Children.Add($LogoPath2) | Out-Null
$canvas.Children.Add($LogoPath3) | Out-Null
}
'checkmark' {
$canvas.Width = 512
$canvas.Height = 512
$scaleFactor = $Size / 2.54
$scaleTransform = New-Object Windows.Media.ScaleTransform($scaleFactor, $scaleFactor)
$canvas.LayoutTransform = $scaleTransform
# Define the circle path
$circlePathData = "M 1.27,0 A 1.27,1.27 0 1,0 1.27,2.54 A 1.27,1.27 0 1,0 1.27,0"
$circlePath = New-Object Windows.Shapes.Path
$circlePath.Data = [Windows.Media.Geometry]::Parse($circlePathData)
$circlePath.Fill = [System.Windows.Media.BrushConverter]::new().ConvertFromString("#39ba00")
# Define the checkmark path
$checkmarkPathData = "M 0.873 1.89 L 0.41 1.391 A 0.17 0.17 0 0 1 0.418 1.151 A 0.17 0.17 0 0 1 0.658 1.16 L 1.016 1.543 L 1.583 1.013 A 0.17 0.17 0 0 1 1.599 1 L 1.865 0.751 A 0.17 0.17 0 0 1 2.105 0.759 A 0.17 0.17 0 0 1 2.097 0.999 L 1.282 1.759 L 0.999 2.022 L 0.874 1.888 Z"
$checkmarkPath = New-Object Windows.Shapes.Path
$checkmarkPath.Data = [Windows.Media.Geometry]::Parse($checkmarkPathData)
$checkmarkPath.Fill = [Windows.Media.Brushes]::White
# Add the paths to the Canvas
$canvas.Children.Add($circlePath) | Out-Null
$canvas.Children.Add($checkmarkPath) | Out-Null
}
'warning' {
$canvas.Width = 512
$canvas.Height = 512
# Define a scale factor for the content inside the Canvas
$scaleFactor = $Size / 512 # Adjust scaling based on the canvas size
$scaleTransform = New-Object Windows.Media.ScaleTransform($scaleFactor, $scaleFactor)
$canvas.LayoutTransform = $scaleTransform
# Define the circle path
$circlePathData = "M 256,0 A 256,256 0 1,0 256,512 A 256,256 0 1,0 256,0"
$circlePath = New-Object Windows.Shapes.Path
$circlePath.Data = [Windows.Media.Geometry]::Parse($circlePathData)
$circlePath.Fill = [System.Windows.Media.BrushConverter]::new().ConvertFromString("#f41b43")
# Define the exclamation mark path
$exclamationPathData = "M 256 307.2 A 35.89 35.89 0 0 1 220.14 272.74 L 215.41 153.3 A 35.89 35.89 0 0 1 251.27 116 H 260.73 A 35.89 35.89 0 0 1 296.59 153.3 L 291.86 272.74 A 35.89 35.89 0 0 1 256 307.2 Z"
$exclamationPath = New-Object Windows.Shapes.Path
$exclamationPath.Data = [Windows.Media.Geometry]::Parse($exclamationPathData)
$exclamationPath.Fill = [Windows.Media.Brushes]::White
# Get the bounds of the exclamation mark path
$exclamationBounds = $exclamationPath.Data.Bounds
# Calculate the center position for the exclamation mark path
$exclamationCenterX = ($canvas.Width - $exclamationBounds.Width) / 2 - $exclamationBounds.X
$exclamationPath.SetValue([Windows.Controls.Canvas]::LeftProperty, $exclamationCenterX)
# Define the rounded rectangle at the bottom (dot of exclamation mark)
$roundedRectangle = New-Object Windows.Shapes.Rectangle
$roundedRectangle.Width = 80
$roundedRectangle.Height = 80
$roundedRectangle.RadiusX = 30
$roundedRectangle.RadiusY = 30
$roundedRectangle.Fill = [Windows.Media.Brushes]::White
# Calculate the center position for the rounded rectangle
$centerX = ($canvas.Width - $roundedRectangle.Width) / 2
$roundedRectangle.SetValue([Windows.Controls.Canvas]::LeftProperty, $centerX)
$roundedRectangle.SetValue([Windows.Controls.Canvas]::TopProperty, 324.34)
# Add the paths to the Canvas
$canvas.Children.Add($circlePath) | Out-Null
$canvas.Children.Add($exclamationPath) | Out-Null
$canvas.Children.Add($roundedRectangle) | Out-Null
}
default {
Write-Host "Invalid type: $type"
}
}
# Add the Canvas to the Viewbox
$LogoViewbox.Child = $canvas
if ($render) {
# Measure and arrange the canvas to ensure proper rendering
$canvas.Measure([Windows.Size]::new($canvas.Width, $canvas.Height))
$canvas.Arrange([Windows.Rect]::new(0, 0, $canvas.Width, $canvas.Height))
$canvas.UpdateLayout()
# Initialize RenderTargetBitmap correctly with dimensions
$renderTargetBitmap = New-Object Windows.Media.Imaging.RenderTargetBitmap($canvas.Width, $canvas.Height, 96, 96, [Windows.Media.PixelFormats]::Pbgra32)
# Render the canvas to the bitmap
$renderTargetBitmap.Render($canvas)
# Create a BitmapFrame from the RenderTargetBitmap
$bitmapFrame = [Windows.Media.Imaging.BitmapFrame]::Create($renderTargetBitmap)
# Create a PngBitmapEncoder and add the frame
$bitmapEncoder = [Windows.Media.Imaging.PngBitmapEncoder]::new()
$bitmapEncoder.Frames.Add($bitmapFrame)
# Save to a memory stream
$imageStream = New-Object System.IO.MemoryStream
$bitmapEncoder.Save($imageStream)
$imageStream.Position = 0
# Load the stream into a BitmapImage
$bitmapImage = [Windows.Media.Imaging.BitmapImage]::new()
$bitmapImage.BeginInit()
$bitmapImage.StreamSource = $imageStream
$bitmapImage.CacheOption = [Windows.Media.Imaging.BitmapCacheOption]::OnLoad
$bitmapImage.EndInit()
return $bitmapImage
} else {
return $LogoViewbox
}
}

View File

@ -61,13 +61,13 @@ function Set-WinUtilTaskbaritem {
if ($overlay) {
switch ($overlay) {
'logo' {
$sync["Form"].taskbarItemInfo.Overlay = $sync["logorender"]
$sync["Form"].taskbarItemInfo.Overlay = "$env:LOCALAPPDATA\winutil\cttlogo.png"
}
'checkmark' {
$sync["Form"].taskbarItemInfo.Overlay = $sync["checkmarkrender"]
$sync["Form"].taskbarItemInfo.Overlay = "$env:LOCALAPPDATA\winutil\checkmark.png"
}
'warning' {
$sync["Form"].taskbarItemInfo.Overlay = $sync["warningrender"]
$sync["Form"].taskbarItemInfo.Overlay = "$env:LOCALAPPDATA\winutil\warning.png"
}
'None' {
$sync["Form"].taskbarItemInfo.Overlay = $null

View File

@ -51,7 +51,7 @@ function Show-CustomDialog {
$buttonBackgroundColor = $sync.configs.themes.$ctttheme.ButtonInstallBackgroundColor
$buttonForegroundColor = $sync.configs.themes.$ctttheme.ButtonInstallForegroundColor
$shadowColor = [Windows.Media.ColorConverter]::ConvertFromString("#AAAAAAAA")
$logocolor = $sync.configs.themes.$ctttheme.LabelboxForegroundColor
$logocolor = $sync.configs.themes.$ctttheme.ButtonBackgroundPressedColor
# Create a custom dialog window
$dialog = New-Object Windows.Window
@ -128,15 +128,73 @@ function Show-CustomDialog {
$grid.Children.Add($stackPanel)
[Windows.Controls.Grid]::SetRow($stackPanel, 0) # Set the row to the second row (0-based index)
$viewbox = New-Object Windows.Controls.Viewbox
$viewbox.Width = $IconSize
$viewbox.Height = $IconSize
# Combine the paths into a single string
# $cttLogoPath = @"
# M174 1094 c-4 -14 -4 -55 -2 -92 3 -57 9 -75 41 -122 41 -60 45 -75 22 -84 -25 -9 -17 -21 30 -44 l45 -22 0 -103 c0 -91 3 -109 26 -155 30 -60 65 -87 204 -157 l95 -48 110 58 c184 96 205 127 205 293 l0 108 45 22 c47 23 55 36 30 46 -22 8 -18 30 9 63 13 16 34 48 46 71 20 37 21 52 15 116 l-6 73 -69 -23 c-38 -12 -137 -59 -220 -103 -82 -45 -160 -81 -171 -81 -12 0 -47 15 -78 34 -85 51 -239 127 -309 151 l-62 22 -6 -23z m500 -689 c20 -8 36 -19 36 -24 0 -18 -53 -51 -80 -51 -28 0 -80 33 -80 51 0 10 55 38 76 39 6 0 28 -7 48 -15z
# M177 711 c-19 -88 4 -242 49 -318 43 -74 107 -127 232 -191 176 -90 199 -84 28 7 -169 91 -214 129 -258 220 -29 58 -32 74 -37 190 -4 90 -8 116 -14 92z
# M1069 610 c-4 -131 -5 -137 -38 -198 -43 -79 -89 -119 -210 -181 -53 -27 -116 -61 -141 -76 -74 -43 -6 -20 115 40 221 109 296 217 294 425 -1 144 -16 137 -20 -10z
# "@
$cttLogoPath = @"
M 18.00,14.00
C 18.00,14.00 45.00,27.74 45.00,27.74
45.00,27.74 57.40,34.63 57.40,34.63
57.40,34.63 59.00,43.00 59.00,43.00
59.00,43.00 59.00,83.00 59.00,83.00
55.35,81.66 46.99,77.79 44.72,74.79
41.17,70.10 42.01,59.80 42.00,54.00
42.00,51.62 42.20,48.29 40.98,46.21
38.34,41.74 25.78,38.60 21.28,33.79
16.81,29.02 18.00,20.20 18.00,14.00 Z
M 107.00,14.00
C 109.01,19.06 108.93,30.37 104.66,34.21
100.47,37.98 86.38,43.10 84.60,47.21
83.94,48.74 84.01,51.32 84.00,53.00
83.97,57.04 84.46,68.90 83.26,72.00
81.06,77.70 72.54,81.42 67.00,83.00
67.00,83.00 67.00,43.00 67.00,43.00
67.00,43.00 67.99,35.63 67.99,35.63
67.99,35.63 80.00,28.26 80.00,28.26
80.00,28.26 107.00,14.00 107.00,14.00 Z
M 19.00,46.00
C 21.36,47.14 28.67,50.71 30.01,52.63
31.17,54.30 30.99,57.04 31.00,59.00
31.04,65.41 30.35,72.16 33.56,78.00
38.19,86.45 46.10,89.04 54.00,93.31
56.55,94.69 60.10,97.20 63.00,97.22
65.50,97.24 68.77,95.36 71.00,94.25
76.42,91.55 84.51,87.78 88.82,83.68
94.56,78.20 95.96,70.59 96.00,63.00
96.01,60.24 95.59,54.63 97.02,52.39
98.80,49.60 103.95,47.87 107.00,47.00
107.00,47.00 107.00,67.00 107.00,67.00
106.90,87.69 96.10,93.85 80.00,103.00
76.51,104.98 66.66,110.67 63.00,110.52
60.33,110.41 55.55,107.53 53.00,106.25
46.21,102.83 36.63,98.57 31.04,93.68
16.88,81.28 19.00,62.88 19.00,46.00 Z
"@
# Add SVG path
$svgPath = New-Object Windows.Shapes.Path
$svgPath.Data = [Windows.Media.Geometry]::Parse($cttLogoPath)
$svgPath.Fill = $logocolor # Set fill color to white
# Add SVG path to Viewbox
$viewbox.Child = $svgPath
# Add SVG path to the stack panel
$stackPanel.Children.Add((Invoke-WinUtilAssets -Type "logo" -Size 25))
$stackPanel.Children.Add($viewbox)
# Add "Winutil" text
$winutilTextBlock = New-Object Windows.Controls.TextBlock
$winutilTextBlock.Text = "Winutil"
$winutilTextBlock.FontSize = $HeaderFontSize
$winutilTextBlock.Foreground = $logocolor
$winutilTextBlock.Margin = New-Object Windows.Thickness(10, 10, 10, 5) # Add margins around the text block
$winutilTextBlock.Margin = New-Object Windows.Thickness(10, 5, 10, 5) # Add margins around the text block
$stackPanel.Children.Add($winutilTextBlock)
# Add TextBlock for information with text wrapping and margins
$messageTextBlock = New-Object Windows.Controls.TextBlock

View File

@ -20,52 +20,31 @@ function Invoke-WPFRunspace {
[CmdletBinding()]
Param (
[Parameter(Mandatory=$true)]
[scriptblock]$ScriptBlock,
[Parameter(Mandatory=$false)]
[object[]]$ArgumentList,
[Parameter(Mandatory=$false)]
[System.Management.Automation.ActionPreference]$DebugPreference = 'SilentlyContinue'
$ScriptBlock,
$ArgumentList,
$DebugPreference
)
try {
# Create a PowerShell instance
$powershell = [powershell]::Create()
# Create a PowerShell instance
$script:powershell = [powershell]::Create()
# Add Scriptblock and Arguments to runspace
$powershell.AddScript($ScriptBlock)
if ($ArgumentList) {
foreach ($Argument in $ArgumentList) {
$powershell.AddArgument($Argument)
}
}
$powershell.AddArgument($DebugPreference)
# Ensure runspace pool is available
if (-not $sync.runspace -or $sync.runspace.IsDisposed) {
throw "Runspace pool is not initialized or has been disposed."
}
$powershell.RunspacePool = $sync.runspace
# Execute the RunspacePool asynchronously
$handle = $powershell.BeginInvoke()
# Set up an event to handle completion
$null = Register-ObjectEvent -InputObject $powershell -EventName InvocationStateChanged -Action {
if ($EventArgs.InvocationStateInfo.State -eq "Completed") {
$powershell.EndInvoke($handle)
$powershell.Dispose()
[System.GC]::Collect()
Unregister-Event -SourceIdentifier $EventSubscriber.SourceIdentifier
}
}
# Return the handle
return $handle
# Add Scriptblock and Arguments to runspace
$script:powershell.AddScript($ScriptBlock)
foreach ($Argument in $ArgumentList) {
$script:powershell.AddArgument($Argument)
}
catch {
Write-Error "Error in Invoke-WPFRunspace: $_"
if ($powershell) { $powershell.Dispose() }
throw
$script:powershell.AddArgument($DebugPreference) # Pass DebugPreference to the script block
$script:powershell.RunspacePool = $sync.runspace
# Execute the RunspacePool
$script:handle = $script:powershell.BeginInvoke()
# Clean up the RunspacePool threads when they are complete, and invoke the garbage collector to clean up the memory
if ($script:handle.IsCompleted) {
$script:powershell.EndInvoke($script:handle)
$script:powershell.Dispose()
$sync.runspace.Dispose()
$sync.runspace.Close()
[System.GC]::Collect()
}
}

View File

@ -51,9 +51,6 @@ function Invoke-WPFShortcut {
$Shortcut = $WshShell.CreateShortcut($FileBrowser.FileName)
$Shortcut.TargetPath = $shell
$Shortcut.Arguments = $shellArgs
if (-NOT (Test-Path -Path $winutildir["logo.ico"])) {
Invoke-WebRequest -Uri "https://christitus.com/images/logo-full.ico" -OutFile $winutildir["logo.ico"]
}
if (Test-Path -Path $winutildir["logo.ico"]) {
$shortcut.IconLocation = $winutildir["logo.ico"]
}

View File

@ -13,66 +13,45 @@ function Invoke-WPFtweaksbutton {
}
$Tweaks = (Get-WinUtilCheckBoxes)["WPFTweaks"]
$DNSChange = $sync["WPFchangedns"].text -ne "Default"
if ($DNSChange) {
Set-WinUtilDNS -DNSProvider $sync["WPFchangedns"].text
}
Set-WinUtilDNS -DNSProvider $sync["WPFchangedns"].text
if ($tweaks.count -eq 0 -and -not $DNSChange) {
$msg = "Please check the tweaks you wish to perform or select a DNS provider."
if ($tweaks.count -eq 0 -and $sync["WPFchangedns"].text -eq "Default") {
$msg = "Please check the tweaks you wish to perform."
[System.Windows.MessageBox]::Show($msg, "Winutil", [System.Windows.MessageBoxButton]::OK, [System.Windows.MessageBoxImage]::Warning)
return
}
Write-Debug "Number of tweaks to process: $($Tweaks.Count)"
try {
$handle = Invoke-WPFRunspace -ArgumentList $Tweaks, $DNSChange -DebugPreference $DebugPreference -ScriptBlock {
param($Tweaks, $DNSChange, $DebugPreference)
Write-Debug "Inside Number of tweaks to process: $($Tweaks.Count)"
Invoke-WPFRunspace -ArgumentList $Tweaks -DebugPreference $DebugPreference -ScriptBlock {
param($Tweaks, $DebugPreference)
Write-Debug "Inside Number of tweaks to process: $($Tweaks.Count)"
$sync.ProcessRunning = $true
$sync.ProcessRunning = $true
if ($Tweaks.count -eq 0 -and $DNSChange) {
$sync.form.Dispatcher.Invoke([action]{ Set-WinUtilTaskbaritem -state "Indeterminate" -value 0.01 -overlay "logo" })
} elseif ($Tweaks.count -eq 1) {
$sync.form.Dispatcher.Invoke([action]{ Set-WinUtilTaskbaritem -state "Indeterminate" -value 0.01 -overlay "logo" })
} else {
$sync.form.Dispatcher.Invoke([action]{ Set-WinUtilTaskbaritem -state "Normal" -value 0.01 -overlay "logo" })
}
# Execute selected tweaks
for ($i = 0; $i -lt $Tweaks.Count; $i++) {
$currentTweak = $Tweaks[$i]
Set-WinUtilProgressBar -Label "Applying $currentTweak" -Percent ($i / $Tweaks.Count * 100)
# Apply the current tweak
Invoke-WinUtilTweaks $currentTweak
# Update taskbar progress
$sync.form.Dispatcher.Invoke([action]{ Set-WinUtilTaskbaritem -value (($i + 1) / $Tweaks.Count) })
}
Set-WinUtilProgressBar -Label "Tweaks finished" -Percent 100
$sync.ProcessRunning = $false
$sync.form.Dispatcher.Invoke([action]{ Set-WinUtilTaskbaritem -state "None" -overlay "checkmark" })
Write-Host "================================="
Write-Host "-- Tweaks are Finished ---"
Write-Host "================================="
if ($Tweaks.count -eq 1) {
$sync.form.Dispatcher.Invoke([action]{ Set-WinUtilTaskbaritem -state "Indeterminate" -value 0.01 -overlay "logo" })
} else {
$sync.form.Dispatcher.Invoke([action]{ Set-WinUtilTaskbaritem -state "Normal" -value 0.01 -overlay "logo" })
}
# Execute other selected tweaks
# Optionally, you can add code here to update the UI or perform other tasks while the runspace is executing
# For example, you might want to disable certain UI elements until the runspace completes
for ($i = 0; $i -lt $Tweaks.Count; $i++) {
Set-WinUtilProgressBar -Label "Applying $($tweaks[$i])" -Percent ($i / $Tweaks.Count * 100)
Invoke-WinUtilTweaks $tweaks[$i]$sync.form.Dispatcher.Invoke([action]{ Set-WinUtilTaskbaritem -value ($i/$Tweaks.Count) })
}
Set-WinUtilProgressBar -Label "Tweaks finished" -Percent 100
$sync.ProcessRunning = $false
$sync.form.Dispatcher.Invoke([action]{ Set-WinUtilTaskbaritem -state "None" -overlay "checkmark" })
Write-Host "================================="
Write-Host "-- Tweaks are Finished ---"
Write-Host "================================="
# If you need to wait for completion before proceeding, you can use:
# $handle.AsyncWaitHandle.WaitOne()
# But be cautious about blocking the UI thread
Write-Host "Tweaks execution started in background."
}
catch {
Write-Error "Failed to start tweaks execution: $_"
[System.Windows.MessageBox]::Show("An error occurred while starting tweaks execution. Please check the logs for more information.", "Error", [System.Windows.MessageBoxButton]::OK, [System.Windows.MessageBoxImage]::Error)
# $ButtonType = [System.Windows.MessageBoxButton]::OK
# $MessageboxTitle = "Tweaks are Finished "
# $Messageboxbody = ("Done")
# $MessageIcon = [System.Windows.MessageBoxImage]::Information
# [System.Windows.MessageBox]::Show($Messageboxbody, $MessageboxTitle, $ButtonType, $MessageIcon)
}
}

View File

@ -453,25 +453,32 @@ $sync["Form"].Add_Loaded({
$sync["Form"].MaxHeight = [Double]::PositiveInfinity
})
$NavLogoPanel = $sync["Form"].FindName("NavLogoPanel")
$NavLogoPanel.Children.Add((Invoke-WinUtilAssets -Type "logo" -Size 25)) | Out-Null
# Initialize the hashtable
$winutildir = @{}
# Set the path for the winutil directory
$winutildir["path"] = "$env:LOCALAPPDATA\winutil\"
[System.IO.Directory]::CreateDirectory($winutildir["path"]) | Out-Null
[System.IO.Directory]::CreateDirectory("$winutildir") | Out-Null
# Set the path for the logo and checkmark images
$winutildir["logo.png"] = $winutildir["path"] + "cttlogo.png"
$winutildir["logo.ico"] = $winutildir["path"] + "cttlogo.ico"
if (Test-Path $winutildir["logo.ico"]) {
$sync["logorender"] = $winutildir["logo.ico"]
} else {
$sync["logorender"] = (Invoke-WinUtilAssets -Type "Logo" -Size 90 -Render)
if (-NOT (Test-Path -Path $winutildir["logo.png"])) {
Invoke-WebRequest -Uri "https://christitus.com/images/logo-full.png" -OutFile $winutildir["logo.png"]
}
$sync["checkmarkrender"] = (Invoke-WinUtilAssets -Type "checkmark" -Size 512 -Render)
$sync["warningrender"] = (Invoke-WinUtilAssets -Type "warning" -Size 512 -Render)
if (-NOT (Test-Path -Path $winutildir["logo.ico"])) {
ConvertTo-Icon -bitmapPath $winutildir["logo.png"] -iconPath $winutildir["logo.ico"]
}
$winutildir["checkmark.png"] = $winutildir["path"] + "checkmark.png"
$winutildir["warning.png"] = $winutildir["path"] + "warning.png"
if (-NOT (Test-Path -Path $winutildir["checkmark.png"])) {
Invoke-WebRequest -Uri "https://christitus.com/images/checkmark.png" -OutFile $winutildir["checkmark.png"]
}
if (-NOT (Test-Path -Path $winutildir["warning.png"])) {
Invoke-WebRequest -Uri "https://christitus.com/images/warning.png" -OutFile $winutildir["warning.png"]
}
Set-WinUtilTaskbaritem -overlay "logo"
@ -520,10 +527,10 @@ Version : <a href="https://github.com/ChrisTitusTech/winutil/releases/tag/$($sy
"@
$FontSize = $sync.configs.themes.$ctttheme.CustomDialogFontSize
$HeaderFontSize = $sync.configs.themes.$ctttheme.CustomDialogFontSizeHeader
$LogoSize = $sync.configs.themes.$ctttheme.CustomDialogLogoSize
$IconSize = $sync.configs.themes.$ctttheme.CustomDialogIconSize
$Width = $sync.configs.themes.$ctttheme.CustomDialogWidth
$Height = $sync.configs.themes.$ctttheme.CustomDialogHeight
Show-CustomDialog -Message $authorInfo -Width $Width -Height $Height -FontSize $FontSize -HeaderFontSize $HeaderFontSize -LogoSize $LogoSize
Show-CustomDialog -Message $authorInfo -Width $Width -Height $Height -FontSize $FontSize -HeaderFontSize $HeaderFontSize -IconSize $IconSize
})
$sync["SponsorMenuItem"].Add_Click({
@ -546,10 +553,10 @@ $sync["SponsorMenuItem"].Add_Click({
$FontSize = $sync.configs.themes.$ctttheme.CustomDialogFontSize
$HeaderFontSize = $sync.configs.themes.$ctttheme.CustomDialogFontSizeHeader
$LogoSize = $sync.configs.themes.$ctttheme.CustomDialogLogoSize
$IconSize = $sync.configs.themes.$ctttheme.CustomDialogIconSize
$Width = $sync.configs.themes.$ctttheme.CustomDialogWidth
$Height = $sync.configs.themes.$ctttheme.CustomDialogHeight
Show-CustomDialog -Message $authorInfo -Width $Width -Height $Height -FontSize $FontSize -HeaderFontSize $HeaderFontSize -LogoSize $LogoSize -EnableScroll $true
Show-CustomDialog -Message $authorInfo -Width $Width -Height $Height -FontSize $FontSize -HeaderFontSize $HeaderFontSize -IconSize $IconSize -EnableScroll $true
})
$sync["Form"].ShowDialog() | out-null
Stop-Transcript

View File

@ -649,8 +649,8 @@
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<DockPanel HorizontalAlignment="Stretch" Background="{MainBackgroundColor}" SnapsToDevicePixels="True" Grid.Row="0" Width="Auto">
<StackPanel Name="NavLogoPanel" Orientation="Horizontal" HorizontalAlignment="Left" Background="{MainBackgroundColor}" SnapsToDevicePixels="True" Margin="10,0,20,0">
</StackPanel>
<Image Height="{WinUtilIconSize}" Width="{WinUtilIconSize}" Name="WPFIcon"
SnapsToDevicePixels="True" Source="https://christitus.com/images/logo-full.png" Margin="10"/>
<ToggleButton HorizontalAlignment="Left" Height="{TabButtonHeight}" Width="{TabButtonWidth}"
Background="{ButtonInstallBackgroundColor}" Foreground="white" FontWeight="Bold" Name="WPFTab1BT">
<ToggleButton.Content>