diff --git a/packaging/internal/package_darwin.go b/packaging/internal/package_darwin.go
index d7d202db3..08bac6c76 100644
--- a/packaging/internal/package_darwin.go
+++ b/packaging/internal/package_darwin.go
@@ -19,6 +19,7 @@ import (
"text/template"
"github.com/richardwilkes/gcs/v5/model/gurps"
+ "github.com/richardwilkes/gcs/v5/svg"
"github.com/richardwilkes/toolbox/cmdline"
"github.com/richardwilkes/toolbox/errs"
"github.com/richardwilkes/toolbox/formats/icon"
@@ -68,7 +69,7 @@ func writeICNS(dstPath string, img image.Image) (err error) {
func writeDocICNS(dir string, base image.Image) error {
for i := range gurps.KnownFileTypes {
if fi := &gurps.KnownFileTypes[i]; fi.IsGCSData {
- overlay, err := CreateImageFromSVG(fi.SVG, 512)
+ overlay, err := svg.CreateImageFromSVG(fi.SVG, 512)
if err != nil {
return err
}
diff --git a/packaging/internal/package_windows.go b/packaging/internal/package_windows.go
index e173a1874..1a269c9ec 100644
--- a/packaging/internal/package_windows.go
+++ b/packaging/internal/package_windows.go
@@ -20,6 +20,7 @@ import (
"time"
"github.com/richardwilkes/gcs/v5/model/gurps"
+ "github.com/richardwilkes/gcs/v5/svg"
"github.com/richardwilkes/gcs/v5/ux"
"github.com/richardwilkes/toolbox/cmdline"
"github.com/richardwilkes/toolbox/errs"
@@ -114,7 +115,7 @@ func addWindowsIcon(rs *winres.ResourceSet) error {
for i := range gurps.KnownFileTypes {
if fi := &gurps.KnownFileTypes[i]; fi.IsGCSData {
var overlay image.Image
- if overlay, err = CreateImageFromSVG(fi.SVG, 512); err != nil {
+ if overlay, err = svg.CreateImageFromSVG(fi.SVG, 512); err != nil {
return err
}
var extIcon *winres.Icon
diff --git a/packaging/internal/svg_image.go b/packaging/internal/svg_image.go
deleted file mode 100644
index 627fac575..000000000
--- a/packaging/internal/svg_image.go
+++ /dev/null
@@ -1,38 +0,0 @@
-// Copyright (c) 1998-2024 by Richard A. Wilkes. All rights reserved.
-//
-// This Source Code Form is subject to the terms of the Mozilla Public
-// License, version 2.0. If a copy of the MPL was not distributed with
-// this file, You can obtain one at http://mozilla.org/MPL/2.0/.
-//
-// This Source Code Form is "Incompatible With Secondary Licenses", as
-// defined by the Mozilla Public License, version 2.0.
-
-package internal
-
-import (
- "bytes"
- "fmt"
- "image"
-
- "github.com/richardwilkes/toolbox/errs"
- "github.com/richardwilkes/unison"
- "github.com/srwiley/oksvg"
- "github.com/srwiley/rasterx"
-)
-
-// CreateImageFromSVG turns one of our svg-as-a-path objects into an actual SVG document, then renders it into an image
-// at the specified square size. Note that this is not currently GPU accelerated, as I haven't added the necessary bits
-// to unison to support scribbling into arbitrary offscreen images yet.
-func CreateImageFromSVG(svg *unison.SVG, size int) (image.Image, error) {
- var buffer bytes.Buffer
- fmt.Fprintf(&buffer, ``,
- svg.Size().Width, svg.Size().Height, svg.PathScaledTo(1).ToSVGString(true))
- icon, err := oksvg.ReadIconStream(&buffer)
- if err != nil {
- return nil, errs.Wrap(err)
- }
- icon.SetTarget(0, 0, float64(size), float64(size))
- img := image.NewRGBA(image.Rect(0, 0, size, size))
- icon.Draw(rasterx.NewDasher(size, size, rasterx.NewScannerGV(size, size, img, img.Bounds())), 1)
- return img, nil
-}
diff --git a/svg/svg.go b/svg/svg.go
index dfde005cb..763f44c50 100644
--- a/svg/svg.go
+++ b/svg/svg.go
@@ -10,9 +10,15 @@
package svg
import (
+ "bytes"
_ "embed"
+ "fmt"
+ "image"
+ "github.com/richardwilkes/toolbox/errs"
"github.com/richardwilkes/unison"
+ "github.com/srwiley/oksvg"
+ "github.com/srwiley/rasterx"
)
// Pre-defined SVG images used by GCS.
@@ -253,3 +259,20 @@ var (
weightData string
Weight = unison.MustSVGFromContentString(weightData)
)
+
+// CreateImageFromSVG turns one of our svg-as-a-path objects into an actual SVG document, then renders it into an image
+// at the specified square size. Note that this is not currently GPU accelerated, as I haven't added the necessary bits
+// to unison to support scribbling into arbitrary offscreen images yet.
+func CreateImageFromSVG(svg *unison.SVG, size int) (image.Image, error) {
+ var buffer bytes.Buffer
+ fmt.Fprintf(&buffer, ``,
+ svg.Size().Width, svg.Size().Height, svg.PathScaledTo(1).ToSVGString(true))
+ icon, err := oksvg.ReadIconStream(&buffer)
+ if err != nil {
+ return nil, errs.Wrap(err)
+ }
+ icon.SetTarget(0, 0, float64(size), float64(size))
+ img := image.NewRGBA(image.Rect(0, 0, size, size))
+ icon.Draw(rasterx.NewDasher(size, size, rasterx.NewScannerGV(size, size, img, img.Bounds())), 1)
+ return img, nil
+}
diff --git a/ux/platform_linux.go b/ux/platform_linux.go
index 30252173d..22f88be09 100644
--- a/ux/platform_linux.go
+++ b/ux/platform_linux.go
@@ -23,6 +23,7 @@ import (
"strings"
"github.com/richardwilkes/gcs/v5/model/gurps"
+ "github.com/richardwilkes/gcs/v5/svg"
"github.com/richardwilkes/toolbox/cmdline"
"github.com/richardwilkes/toolbox/errs"
"github.com/richardwilkes/toolbox/formats/icon"
@@ -99,7 +100,7 @@ func installDesktopIcons() error {
for i := range gurps.KnownFileTypes {
if fi := &gurps.KnownFileTypes[i]; fi.IsGCSData {
var overlay image.Image
- overlay, err = CreateImageFromSVG(fi.SVG, 128)
+ overlay, err = svg.CreateImageFromSVG(fi.SVG, 128)
if err != nil {
return err
}
diff --git a/ux/platform_windows.go b/ux/platform_windows.go
index fb5bd5ea8..72c0bfbdb 100644
--- a/ux/platform_windows.go
+++ b/ux/platform_windows.go
@@ -19,6 +19,7 @@ import (
"syscall"
"github.com/richardwilkes/gcs/v5/model/gurps"
+ "github.com/richardwilkes/gcs/v5/svg"
"github.com/richardwilkes/toolbox/cmdline"
"github.com/richardwilkes/toolbox/errs"
"github.com/richardwilkes/toolbox/formats/icon"
@@ -67,7 +68,7 @@ func configureRegistry() error {
if fi := &gurps.KnownFileTypes[i]; fi.IsGCSData {
// Create the doc icon
var overlay image.Image
- if overlay, err = CreateImageFromSVG(fi.SVG, 128); err != nil {
+ if overlay, err = svg.CreateImageFromSVG(fi.SVG, 128); err != nil {
return err
}
docPath := filepath.Join(appDataDir, fi.Extensions[0][1:]+".ico")