fix: svg scaling
This commit is contained in:
parent
e86b31cc11
commit
60d0f2c3e3
1 changed files with 23 additions and 3 deletions
|
@ -48,16 +48,36 @@ VesktopNative.tray.createIconRequest(async (iconName: string, svgIcon: string =
|
||||||
var svg = svgIcon || (await VesktopNative.tray.getIcon(iconName));
|
var svg = svgIcon || (await VesktopNative.tray.getIcon(iconName));
|
||||||
svg = changeColorsInSvg(svg, "#f6bfac", (await VesktopNative.app.getAccentColor()).substring(1));
|
svg = changeColorsInSvg(svg, "#f6bfac", (await VesktopNative.app.getAccentColor()).substring(1));
|
||||||
|
|
||||||
|
const parser = new DOMParser();
|
||||||
|
const svgDoc = parser.parseFromString(svg, "image/svg+xml");
|
||||||
|
const svgElement = svgDoc.documentElement;
|
||||||
|
|
||||||
|
if (!svgElement.hasAttribute("viewBox")) {
|
||||||
|
const width = parseFloat(svgElement.getAttribute("width") || "128");
|
||||||
|
const height = parseFloat(svgElement.getAttribute("height") || "128");
|
||||||
|
svgElement.setAttribute("viewBox", `0 0 ${width} ${height}`);
|
||||||
|
}
|
||||||
|
svg = new XMLSerializer().serializeToString(svgElement);
|
||||||
|
|
||||||
const canvas = document.createElement("canvas");
|
const canvas = document.createElement("canvas");
|
||||||
canvas.width = 128;
|
canvas.width = 128;
|
||||||
canvas.height = 128;
|
canvas.height = 128;
|
||||||
const img = new Image();
|
const img = new Image();
|
||||||
img.width = 128;
|
|
||||||
img.height = 128;
|
|
||||||
img.onload = () => {
|
img.onload = () => {
|
||||||
const ctx = canvas.getContext("2d");
|
const ctx = canvas.getContext("2d");
|
||||||
if (ctx) {
|
if (ctx) {
|
||||||
ctx.drawImage(img, 0, 0);
|
ctx.clearRect(0, 0, canvas.width, canvas.height);
|
||||||
|
const scaleX = canvas.width / img.width;
|
||||||
|
const scaleY = canvas.height / img.height;
|
||||||
|
const scale = Math.max(scaleX, scaleY);
|
||||||
|
|
||||||
|
const scaledWidth = img.width * scale;
|
||||||
|
const scaledHeight = img.height * scale;
|
||||||
|
|
||||||
|
const offsetX = (canvas.width - scaledWidth) / 2;
|
||||||
|
const offsetY = (canvas.height - scaledHeight) / 2;
|
||||||
|
ctx.drawImage(img, offsetX, offsetY, scaledWidth, scaledHeight);
|
||||||
|
|
||||||
const dataURL = canvas.toDataURL("image/png");
|
const dataURL = canvas.toDataURL("image/png");
|
||||||
const isSvg = svgIcon !== "";
|
const isSvg = svgIcon !== "";
|
||||||
VesktopNative.tray.createIconResponse(iconName, dataURL, isSvg, isSvg); // custom if svgIcon is provided
|
VesktopNative.tray.createIconResponse(iconName, dataURL, isSvg, isSvg); // custom if svgIcon is provided
|
||||||
|
|
Loading…
Reference in a new issue