diff --git a/config/themes.json b/config/themes.json index eedb2f83..ed46caf7 100644 --- a/config/themes.json +++ b/config/themes.json @@ -21,7 +21,6 @@ "TabRowHeightInPixels": "50", "IconFontSize": "14", "IconButtonSize": "35", - "WinUtilIconSize": "Auto", "SettingsIconFontSize": "18", "CloseIconFontSize": "18", diff --git a/functions/private/ConvertTo-Icon.ps1 b/functions/private/ConvertTo-Icon.ps1 deleted file mode 100644 index a4017755..00000000 --- a/functions/private/ConvertTo-Icon.ps1 +++ /dev/null @@ -1,92 +0,0 @@ -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'." - } -} diff --git a/functions/private/Invoke-WinUtilLogoviewbox.ps1 b/functions/private/Invoke-WinUtilLogoviewbox.ps1 new file mode 100644 index 00000000..72919a74 --- /dev/null +++ b/functions/private/Invoke-WinUtilLogoviewbox.ps1 @@ -0,0 +1,88 @@ +function Invoke-WinUtilLogoviewbox { + param ($Size) + + # Create the Viewbox and set its size + $LogoViewbox = New-Object Windows.Controls.Viewbox + $LogoViewbox.Width = $Size + $LogoViewbox.Height = $Size + + # Define a scale factor for the content inside the Canvas + $scaleFactor = $Size / 100 + + # Part 1 + $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 = [Windows.Media.Brushes]::Blue # Set fill color for left part + + # Part 2 + $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 = [Windows.Media.Brushes]::Blue # Set fill color for right part + + # Part 3 + $LogoPathData3 = @" + M 20.00,46.00 + C 22.36,47.14 29.67,50.71 31.01,52.63 + 32.17,54.30 31.99,57.04 32.00,59.00 + 32.04,65.41 31.35,72.16 34.56,78.00 + 39.19,86.45 47.10,89.04 55.00,93.31 + 57.55,94.69 61.10,97.20 64.00,97.22 + 66.50,97.24 69.77,95.36 72.00,94.25 + 77.42,91.55 85.51,87.78 89.82,83.68 + 95.56,78.20 96.96,70.59 97.00,63.00 + 97.01,60.24 96.59,54.63 98.02,52.39 + 99.80,49.60 104.95,47.87 108.00,47.00 + 108.00,47.00 108.00,67.00 108.00,67.00 + 107.90,87.69 97.10,93.85 81.00,103.00 + 77.51,104.98 67.66,110.67 64.00,110.52 + 61.33,110.41 56.55,107.53 54.00,106.25 + 47.21,102.83 37.63,98.57 32.04,93.68 + 17.88,81.28 20.00,62.88 20.00,46.00 Z +"@ + $LogoPath3 = New-Object Windows.Shapes.Path + $LogoPath3.Data = [Windows.Media.Geometry]::Parse($LogoPathData3) + $LogoPath3.Fill = [Windows.Media.Brushes]::Gray # Set fill color for bottom part + + # Create a Canvas to hold the paths + $LogoCanvas = New-Object Windows.Controls.Canvas + $LogoCanvas.Width = 100 + $LogoCanvas.Height = 100 + + # Apply a scale transform to the Canvas content + $scaleTransform = New-Object Windows.Media.ScaleTransform($scaleFactor, $scaleFactor) + $LogoCanvas.LayoutTransform = $scaleTransform + + # Add the paths to the Canvas + $LogoCanvas.Children.Add($LogoPath1) | Out-Null + $LogoCanvas.Children.Add($LogoPath2) | Out-Null + $LogoCanvas.Children.Add($LogoPath3) | Out-Null + + # Add the Canvas to the Viewbox + $LogoViewbox.Child = $LogoCanvas + + return $LogoViewbox +} diff --git a/functions/private/Show-CustomDialog.ps1 b/functions/private/Show-CustomDialog.ps1 index 7180b60c..7e6c63ef 100644 --- a/functions/private/Show-CustomDialog.ps1 +++ b/functions/private/Show-CustomDialog.ps1 @@ -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.ButtonBackgroundPressedColor + $logocolor = $sync.configs.themes.$ctttheme.LabelboxForegroundColor # Create a custom dialog window $dialog = New-Object Windows.Window @@ -128,73 +128,15 @@ 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($viewbox) + $stackPanel.Children.Add((Invoke-WinUtilLogoviewbox -Size 25)) # 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, 5, 10, 5) # Add margins around the text block + $winutilTextBlock.Margin = New-Object Windows.Thickness(10, 10, 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 diff --git a/functions/public/Invoke-WPFShortcut.ps1 b/functions/public/Invoke-WPFShortcut.ps1 index 6b25bdfe..e4e47871 100644 --- a/functions/public/Invoke-WPFShortcut.ps1 +++ b/functions/public/Invoke-WPFShortcut.ps1 @@ -51,6 +51,9 @@ 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"] } diff --git a/scripts/main.ps1 b/scripts/main.ps1 index 0d706c32..752ddc3e 100644 --- a/scripts/main.ps1 +++ b/scripts/main.ps1 @@ -445,35 +445,20 @@ $sync["Form"].Add_Loaded({ $sync["Form"].MaxHeight = [Double]::PositiveInfinity }) +$NavLogoPanel = $sync["Form"].FindName("NavLogoPanel") +$NavLogoPanel.Children.Add((Invoke-WinUtilLogoviewbox -Size 25)) | Out-Null + # Initialize the hashtable $winutildir = @{} # Set the path for the winutil directory $winutildir["path"] = "$env:LOCALAPPDATA\winutil\" -if (-NOT (Test-Path -Path $winutildir["path"])) { - New-Item -Path $winutildir["path"] -ItemType Directory -} +[System.IO.Directory]::CreateDirectory($winutildir["path"]) | 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 (-NOT (Test-Path -Path $winutildir["logo.png"])) { - Invoke-WebRequest -Uri "https://christitus.com/images/logo-full.png" -OutFile $winutildir["logo.png"] -} - -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"] -} +#$sync["Form"].Icon = [System.Drawing.Icon]::ExtractAssociatedIcon($winutildir["logo.ico"]).ToBitmap() +#$sync["logo.svg"] = [System.Drawing.Bitmap]::FromStream([System.IO.MemoryStream]::new([System.Convert]::FromBase64String($sync["icon.svg"]))) Set-WinUtilTaskbaritem -overlay "logo" @@ -522,10 +507,10 @@ Version : - + +