commit d29b74d338adafe9c180b07529010c25111931e2
parent aa0f7edd7c72fc24bf1d7a67d7ceb535f3021904
Author: Jack Mordaunt <jackmordaunt@gmail.com>
Date: Fri, 9 Feb 2018 17:07:04 +0100
[*] Merged encoding implementations into a single file.
Diffstat:
| D | icon.go | | | 71 | ----------------------------------------------------------------------- |
| D | iconset.go | | | 67 | ------------------------------------------------------------------- |
| A | writer.go | | | 132 | +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
3 files changed, 132 insertions(+), 138 deletions(-)
diff --git a/icon.go b/icon.go
@@ -1,71 +0,0 @@
-package icns
-
-import (
- "bytes"
- "image"
- "image/png"
- "io"
-)
-
-// OsType is a 4 character identifier used to differentiate icon types.
-type OsType string
-
-// Icon encodes an icns icon.
-type Icon struct {
- Type OsType
- Image image.Image
-
- header [8]byte
- headerSet bool
- data []byte
-}
-
-// WriteTo encodes the icon into wr.
-func (i *Icon) WriteTo(wr io.Writer) (int64, error) {
- var written int64
- if err := i.encodePng(); err != nil {
- return written, err
- }
- size, err := i.writeHeader(wr)
- written += size
- if err != nil {
- return written, err
- }
- size, err = i.writeData(wr)
- written += size
- if err != nil {
- return written, err
- }
- return written, nil
-}
-
-func (i *Icon) encodePng() error {
- if len(i.data) > 0 {
- return nil
- }
- buf := bytes.NewBuffer(nil)
- if err := png.Encode(buf, i.Image); err != nil {
- return err
- }
- i.data = buf.Bytes()
- return nil
-}
-
-func (i *Icon) writeHeader(wr io.Writer) (int64, error) {
- if !i.headerSet {
- defer func() { i.headerSet = true }()
- i.header[0] = i.Type[0]
- i.header[1] = i.Type[1]
- i.header[2] = i.Type[2]
- i.header[3] = i.Type[3]
- length := uint32(len(i.data) + 8)
- writeUint32(i.header[4:8], length)
- }
- written, err := wr.Write(i.header[:8])
- return int64(written), err
-}
-
-func (i *Icon) writeData(wr io.Writer) (int64, error) {
- written, err := wr.Write(i.data)
- return int64(written), err
-}
diff --git a/iconset.go b/iconset.go
@@ -1,67 +0,0 @@
-package icns
-
-import (
- "bytes"
- "io"
-)
-
-// IconSet encodes a set of icons into an ICNS file.
-type IconSet struct {
- Icons []*Icon
-
- header [8]byte
- headerSet bool
- data []byte
-}
-
-// WriteTo writes the ICNS file to wr.
-func (s *IconSet) WriteTo(wr io.Writer) (int64, error) {
- var written int64
- if err := s.encodeIcons(); err != nil {
- return written, err
- }
- size, err := s.writeHeader(wr)
- written += size
- if err != nil {
- return written, err
- }
- size, err = s.writeData(wr)
- written += size
- if err != nil {
- return written, err
- }
- return written, nil
-}
-
-func (s *IconSet) encodeIcons() error {
- if len(s.data) > 0 {
- return nil
- }
- buf := bytes.NewBuffer(nil)
- for _, icon := range s.Icons {
- if _, err := icon.WriteTo(buf); err != nil {
- return err
- }
- }
- s.data = buf.Bytes()
- return nil
-}
-
-func (s *IconSet) writeHeader(wr io.Writer) (int64, error) {
- if !s.headerSet {
- defer func() { s.headerSet = true }()
- s.header[0] = 'i'
- s.header[1] = 'c'
- s.header[2] = 'n'
- s.header[3] = 's'
- length := uint32(len(s.data) + 8)
- writeUint32(s.header[4:8], length)
- }
- written, err := wr.Write(s.header[:8])
- return int64(written), err
-}
-
-func (s *IconSet) writeData(wr io.Writer) (int64, error) {
- written, err := wr.Write(s.data)
- return int64(written), err
-}
diff --git a/writer.go b/writer.go
@@ -0,0 +1,132 @@
+package icns
+
+import (
+ "bytes"
+ "image"
+ "image/png"
+ "io"
+)
+
+// OsType is a 4 character identifier used to differentiate icon types.
+type OsType string
+
+// Icon encodes an icns icon.
+type Icon struct {
+ Type OsType
+ Image image.Image
+
+ header [8]byte
+ headerSet bool
+ data []byte
+}
+
+// WriteTo encodes the icon into wr.
+func (i *Icon) WriteTo(wr io.Writer) (int64, error) {
+ var written int64
+ if err := i.encodePng(); err != nil {
+ return written, err
+ }
+ size, err := i.writeHeader(wr)
+ written += size
+ if err != nil {
+ return written, err
+ }
+ size, err = i.writeData(wr)
+ written += size
+ if err != nil {
+ return written, err
+ }
+ return written, nil
+}
+
+func (i *Icon) encodePng() error {
+ if len(i.data) > 0 {
+ return nil
+ }
+ buf := bytes.NewBuffer(nil)
+ if err := png.Encode(buf, i.Image); err != nil {
+ return err
+ }
+ i.data = buf.Bytes()
+ return nil
+}
+
+func (i *Icon) writeHeader(wr io.Writer) (int64, error) {
+ if !i.headerSet {
+ defer func() { i.headerSet = true }()
+ i.header[0] = i.Type[0]
+ i.header[1] = i.Type[1]
+ i.header[2] = i.Type[2]
+ i.header[3] = i.Type[3]
+ length := uint32(len(i.data) + 8)
+ writeUint32(i.header[4:8], length)
+ }
+ written, err := wr.Write(i.header[:8])
+ return int64(written), err
+}
+
+func (i *Icon) writeData(wr io.Writer) (int64, error) {
+ written, err := wr.Write(i.data)
+ return int64(written), err
+}
+
+// IconSet encodes a set of icons into an ICNS file.
+type IconSet struct {
+ Icons []*Icon
+
+ header [8]byte
+ headerSet bool
+ data []byte
+}
+
+// WriteTo writes the ICNS file to wr.
+func (s *IconSet) WriteTo(wr io.Writer) (int64, error) {
+ var written int64
+ if err := s.encodeIcons(); err != nil {
+ return written, err
+ }
+ size, err := s.writeHeader(wr)
+ written += size
+ if err != nil {
+ return written, err
+ }
+ size, err = s.writeData(wr)
+ written += size
+ if err != nil {
+ return written, err
+ }
+ return written, nil
+}
+
+func (s *IconSet) encodeIcons() error {
+ if len(s.data) > 0 {
+ return nil
+ }
+ buf := bytes.NewBuffer(nil)
+ for _, icon := range s.Icons {
+ if _, err := icon.WriteTo(buf); err != nil {
+ return err
+ }
+ }
+ s.data = buf.Bytes()
+ return nil
+}
+
+func (s *IconSet) writeHeader(wr io.Writer) (int64, error) {
+ if !s.headerSet {
+ defer func() { s.headerSet = true }()
+ s.header[0] = 'i'
+ s.header[1] = 'c'
+ s.header[2] = 'n'
+ s.header[3] = 's'
+ length := uint32(len(s.data) + 8)
+ writeUint32(s.header[4:8], length)
+ }
+ written, err := wr.Write(s.header[:8])
+ return int64(written), err
+}
+
+func (s *IconSet) writeData(wr io.Writer) (int64, error) {
+ written, err := wr.Write(s.data)
+ return int64(written), err
+}