MacOSXIconReader.st
author Claus Gittinger <cg@exept.de>
Mon, 06 May 2013 19:24:22 +0200
changeset 3132 32f94ccd6bf0
parent 3121 98e10307cc6a
child 3133 15c6915a53dc
permissions -rw-r--r--
class: MacOSXIconReader comment/format in: #documentation
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
3121
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     1
"
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     2
 COPYRIGHT (c) 2013 by Claus Gittinger
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     3
              All Rights Reserved
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     4
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     5
 This software is furnished under a license and may be used
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     6
 only in accordance with the terms of that license and with the
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     7
 inclusion of the above copyright notice.   This software may not
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     8
 be provided or otherwise made available to, or used by, any
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     9
 other person.  No title to or ownership of the software is
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    10
 hereby transferred.
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    11
"
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    12
"{ Package: 'stx:libview2' }"
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    13
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    14
ImageReader subclass:#MacOSXIconReader
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    15
	instanceVariableNames:'image'
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    16
	classVariableNames:''
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    17
	poolDictionaries:''
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    18
	category:'Graphics-Images-Readers'
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    19
!
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    20
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    21
!MacOSXIconReader class methodsFor:'documentation'!
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    22
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    23
copyright
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    24
"
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    25
 COPYRIGHT (c) 2013 by Claus Gittinger
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    26
              All Rights Reserved
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    27
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    28
 This software is furnished under a license and may be used
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    29
 only in accordance with the terms of that license and with the
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    30
 inclusion of the above copyright notice.   This software may not
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    31
 be provided or otherwise made available to, or used by, any
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    32
 other person.  No title to or ownership of the software is
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    33
 hereby transferred.
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    34
"
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    35
!
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    36
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    37
documentation
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    38
"
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    39
    Reader for mac osx icon files.
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    40
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    41
    These files are actually bundles of a sequence of icons (in possibly different resolutions,
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    42
    colors and sizes).
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    43
    When such a file is read, I return the first image as usual, 
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    44
    and all images as an imagesequence.
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    45
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    46
    Only a subset of the supported image formats are supported by this reader
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    47
    (i.e. JPEG and PNG based image encodings only). This means, that only 10.8-and later
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    48
    icon files are really supported.
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    49
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    50
    [See also:]
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    51
        Image Form Icon
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    52
        GIFReader JPEGReader PNGReader TIFFReader WindowsIconReader
3132
32f94ccd6bf0 class: MacOSXIconReader
Claus Gittinger <cg@exept.de>
parents: 3121
diff changeset
    53
        http://en.wikipedia.org/wiki/Apple_Icon_Image_format
3121
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    54
"
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    55
! !
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    56
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    57
!MacOSXIconReader class methodsFor:'initialization'!
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    58
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    59
initialize
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    60
    "install myself in the Image classes fileFormat table
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    61
     for the `.icns' extension."
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    62
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    63
    "/ MIMETypes defineImageType:'image/x-icns' suffix:'icns'  reader:self.
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    64
    MIMETypes defineImageType:nil          suffix:'icns' reader:self.
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    65
! !
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    66
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    67
!MacOSXIconReader class methodsFor:'testing'!
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    68
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    69
canRepresent:anImage
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    70
    "return true, if anImage can be represented in my file format.
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    71
     Assuming that we store in PNG format, delegate that decision."
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    72
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    73
    ^ PNGReader canRepresent:anImage
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    74
!
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    75
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    76
isValidImageFile:aFileName
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    77
    "return true, if aFileName is an apple osx icon file"
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    78
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    79
    |id inStream|
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    80
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    81
    inStream := self streamReadingFile:aFileName.
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    82
    inStream isNil ifTrue:[^ false].
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    83
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    84
    inStream text.
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    85
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    86
    id := String new:4.
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    87
    inStream nextBytes:4 into:id.
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    88
    inStream close.
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    89
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    90
    ^ (id = 'icns')
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    91
! !
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    92
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    93
!MacOSXIconReader methodsFor:'image reading'!
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    94
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    95
fromStream:aStream
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    96
    "read a stream containing an icon image (or a collection of images).
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    97
     Leave image description in instance variables."
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    98
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    99
    |sizeRemaining id img firstImage frame imageCount chunkType numChunkBytes chunkData|
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   100
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   101
    inStream := aStream.
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   102
    aStream text.
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   103
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   104
    "icon-files are always msb"
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   105
    byteOrder := #msb.
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   106
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   107
    id := aStream nextBytes:4.
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   108
    id size ~~ 4 ifTrue:[
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   109
        ^ self fileFormatError:'not an icns file (short read)'.
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   110
    ].
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   111
    id := id asString.
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   112
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   113
    (id ~= 'icns') ifTrue:[
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   114
        ^ self fileFormatError:('not an icns file (id=''' , id , ''')').
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   115
    ].
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   116
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   117
    imageCount := 0.
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   118
    sizeRemaining := aStream nextUnsignedLongMSB:true.
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   119
    sizeRemaining := sizeRemaining - 4 - 4. "/ file magic and size are included in count
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   120
    [ sizeRemaining > 0 ] whileTrue:[
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   121
        chunkType := aStream nextBytes:4.
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   122
        chunkType size ~~ 4 ifTrue:[
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   123
            ^ self fileFormatError:'not an icns file (short read on icon type)'.
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   124
        ].
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   125
        chunkType := chunkType asString.
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   126
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   127
        numChunkBytes := aStream nextUnsignedLongMSB:true.
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   128
        numChunkBytes := numChunkBytes - 4 - 4. "/ type and size are included in count
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   129
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   130
        chunkData := aStream next:numChunkBytes.
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   131
        sizeRemaining := sizeRemaining - 4 - numChunkBytes.
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   132
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   133
        img := self readSingleIcon:chunkType from:chunkData.
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   134
        imageCount == 0 ifTrue:[
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   135
            firstImage := image := img.
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   136
        ] ifFalse:[
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   137
            imageCount == 1 ifTrue:[
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   138
                imageSequence := ImageSequence new.
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   139
                img imageSequence:imageSequence.
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   140
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   141
                "/ add frame for first image.
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   142
                frame := ImageFrame new image:firstImage.
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   143
                imageSequence add:frame.
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   144
            ].  
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   145
            img imageSequence:imageSequence.
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   146
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   147
            "/ add frame for this image.
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   148
            frame := ImageFrame new image:img.
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   149
            imageSequence add:frame.
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   150
        ].
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   151
        imageCount := imageCount + 1.
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   152
    ].
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   153
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   154
    "
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   155
     Image fromFile:'/Applications/TextEdit.app/Contents/Resources/txt.icns'
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   156
    "
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   157
!
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   158
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   159
readSingleIcon:iconType from:iconBytes
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   160
    "read a single image from the inputStream."
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   161
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   162
    ^ self 
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   163
        perform:('read_',(iconType copyReplaceAll:$# with:$_),'_from:') asSymbol 
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   164
        with:iconBytes
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   165
        ifNotUnderstood:[
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   166
            self breakPoint:#cg.
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   167
self halt.
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   168
            ('MacOSXIconReader: unsupported icon format: ',iconType) infoPrintCR.
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   169
            ^ self fileFormatError:'unsupported icon format: ',iconType
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   170
        ].
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   171
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   172
    "
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   173
     self fromFile:'/Applications/TextEdit.app/Contents/Resources/txt.icns'
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   174
     self fromFile:'test.icns'
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   175
    "
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   176
! !
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   177
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   178
!MacOSXIconReader methodsFor:'image writing'!
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   179
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   180
save:anImage onStream:aStream
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   181
    "save an icon to aStream."
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   182
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   183
    self saveAll:(Array with:anImage) onStream:aStream.
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   184
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   185
    "
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   186
     self 
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   187
        save:(Image fromScreen:(0@0 corner:16@16))
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   188
        onFile:'test.icns'
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   189
    "
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   190
!
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   191
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   192
saveAll:aCollectionOfImages onStream:aStream
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   193
    "save a number of images to aStream."
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   194
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   195
    |tempFile tempFileStream|
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   196
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   197
    (aCollectionOfImages conform:
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   198
        [:eachImage |
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   199
            (eachImage width = eachImage height)
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   200
            and:[ (#(16 32 128 256 512 1024) includes:eachImage width)]
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   201
        ]
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   202
    ) ifFalse:[
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   203
        ^ self fileFormatError:'unsupported image size (must be square and width 16, 32, 128, 512 or 1024)'.
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   204
    ].
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   205
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   206
    tempFile := Filename newTemporary asAutoDeletedFilename.
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   207
    tempFileStream := tempFile writeStream.
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   208
    tempFileStream binary.
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   209
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   210
    aCollectionOfImages do:[:eachImage |
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   211
        |typeCode s data|
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   212
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   213
        s := WriteStream on:(ByteArray new:1024).
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   214
        PNGReader save:eachImage onStream:s.
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   215
        data := s contents.
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   216
        self assert:data notEmptyOrNil.
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   217
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   218
        typeCode := #(16 32 128 256 512 1024) 
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   219
                    map: #('ipc4' 'ipc5' 'ic07' 'ic08' 'ic09' 'ic10')
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   220
                    at:eachImage width ifAbsent:[self error]. 
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   221
        tempFileStream nextPutBytes:typeCode.
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   222
        tempFileStream nextPutLong:(data size + 4 + 4) MSB:true.
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   223
        tempFileStream nextPutAll:data.
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   224
    ].
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   225
    tempFileStream close.
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   226
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   227
    aStream binary.
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   228
    aStream nextPutBytes:'icns'.
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   229
    aStream nextPutLong:(tempFile fileSize + 4 + 4) MSB:true.
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   230
    aStream nextPutAll:(tempFile binaryContentsOfEntireFile).
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   231
    tempFile delete.
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   232
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   233
    "
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   234
     self 
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   235
        save:(Image fromScreen:(0@0 corner:16@16))
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   236
        onFile:'test.icns'
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   237
    "
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   238
! !
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   239
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   240
!MacOSXIconReader methodsFor:'private'!
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   241
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   242
makeImage
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   243
    "image is already made"
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   244
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   245
    ^ image
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   246
! !
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   247
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   248
!MacOSXIconReader methodsFor:'private reading'!
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   249
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   250
readPNGOrJPEGFrom:bytes expectedSize:expectedSizeOrNil
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   251
    "read a PNG or JPEG image.
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   252
     Helper for ipc4, ipc5, ic07, ic09, ic10 formats"
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   253
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   254
    |img|
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   255
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   256
    img := PNGReader fromStream:(bytes readStream).
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   257
    img isNil ifTrue:[
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   258
        img := JPEGReader fromStream:(bytes readStream).
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   259
    ].
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   260
    expectedSizeOrNil notNil ifTrue:[
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   261
        self assert:(img width = expectedSizeOrNil).
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   262
        self assert:(img height = expectedSizeOrNil).
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   263
    ].
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   264
    ^ img
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   265
!
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   266
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   267
read_ICN__from:bytes
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   268
    "read an ICN# format icon"
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   269
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   270
self halt.
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   271
    ^ nil
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   272
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   273
    "
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   274
     self fromFile:'/Applications/TextEdit.app/Contents/Resources/txt.icns'
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   275
    "
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   276
!
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   277
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   278
read_ic07_from:bytes
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   279
    "read an ic07 (PNG or JPEG, 128) format icon"
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   280
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   281
    ^ self readPNGOrJPEGFrom:bytes expectedSize:128.
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   282
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   283
    "
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   284
     self fromFile:'/Applications/TextEdit.app/Contents/Resources/txt.icns'
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   285
     self fromFile:'test.icns'
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   286
    "
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   287
!
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   288
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   289
read_ic08_from:bytes
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   290
    "read an ic08 (PNG or JPEG, 256) format icon"
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   291
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   292
    ^ self readPNGOrJPEGFrom:bytes expectedSize:256.
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   293
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   294
    "
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   295
     self fromFile:'/Applications/TextEdit.app/Contents/Resources/txt.icns'
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   296
     self fromFile:'test.icns'
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   297
    "
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   298
!
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   299
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   300
read_ic09_from:bytes
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   301
    "read an ic09 (PNG or JPEG, 512) format icon"
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   302
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   303
    ^ self readPNGOrJPEGFrom:bytes expectedSize:512.
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   304
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   305
    "
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   306
     self fromFile:'/Applications/TextEdit.app/Contents/Resources/txt.icns'
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   307
     self fromFile:'test.icns'
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   308
    "
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   309
!
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   310
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   311
read_ic10_from:bytes
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   312
    "read an ic10 (PNG or JPEG, 1024) format icon"
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   313
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   314
    ^ self readPNGOrJPEGFrom:bytes expectedSize:1024.
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   315
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   316
    "
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   317
     self fromFile:'/Applications/TextEdit.app/Contents/Resources/txt.icns'
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   318
     self fromFile:'test.icns'
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   319
    "
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   320
!
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   321
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   322
read_icl8_from:bytes
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   323
    "read an icl8 format icon"
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   324
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   325
self halt.
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   326
    ^ nil
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   327
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   328
    "
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   329
     self fromFile:'/Applications/TextEdit.app/Contents/Resources/txt.icns'
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   330
    "
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   331
!
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   332
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   333
read_ics8_from:bytes
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   334
    "read an ics8 format icon"
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   335
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   336
self halt.
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   337
    ^ nil
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   338
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   339
    "
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   340
     self fromFile:'/Applications/TextEdit.app/Contents/Resources/txt.icns'
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   341
    "
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   342
!
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   343
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   344
read_ics__from:bytes
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   345
    "read an ics# format icon"
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   346
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   347
self halt.
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   348
    ^ nil
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   349
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   350
    "
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   351
     self fromFile:'/Applications/TextEdit.app/Contents/Resources/txt.icns'
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   352
    "
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   353
!
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   354
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   355
read_il32_from:bytes
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   356
    "read an il32 format icon"
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   357
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   358
self halt.
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   359
    ^ nil
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   360
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   361
    "
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   362
     self fromFile:'/Applications/TextEdit.app/Contents/Resources/txt.icns'
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   363
    "
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   364
!
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   365
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   366
read_ipc4_from:bytes
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   367
    "read an ipc4 (PNG or JPEG, 16x16) format icon"
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   368
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   369
    ^ self readPNGOrJPEGFrom:bytes expectedSize:16.
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   370
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   371
    "
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   372
     self fromFile:'/Applications/TextEdit.app/Contents/Resources/txt.icns'
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   373
     self fromFile:'test.icns'
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   374
    "
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   375
!
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   376
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   377
read_ipc5_from:bytes
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   378
    "read an ipc5 (PNG or JPEG, 32) format icon"
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   379
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   380
    ^ self readPNGOrJPEGFrom:bytes expectedSize:32.
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   381
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   382
    "
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   383
     self fromFile:'/Applications/TextEdit.app/Contents/Resources/txt.icns'
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   384
     self fromFile:'test.icns'
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   385
    "
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   386
!
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   387
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   388
read_is32_from:bytes
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   389
    "read an is32 format icon"
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   390
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   391
self halt.
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   392
    ^ nil
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   393
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   394
    "
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   395
     self fromFile:'/Applications/TextEdit.app/Contents/Resources/txt.icns'
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   396
    "
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   397
!
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   398
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   399
read_it32_from:bytes
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   400
    "read an it32 format icon"
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   401
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   402
self halt.
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   403
    ^ nil
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   404
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   405
    "
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   406
     self fromFile:'/Applications/TextEdit.app/Contents/Resources/txt.icns'
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   407
    "
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   408
!
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   409
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   410
read_l8mk_from:bytes
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   411
    "read an l8mk format icon"
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   412
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   413
self halt.
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   414
    ^ nil
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   415
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   416
    "
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   417
     self fromFile:'/Applications/TextEdit.app/Contents/Resources/txt.icns'
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   418
    "
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   419
!
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   420
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   421
read_s8mk_from:bytes
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   422
    "read an s8mk format icon"
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   423
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   424
self halt.
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   425
    ^ nil
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   426
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   427
    "
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   428
     self fromFile:'/Applications/TextEdit.app/Contents/Resources/txt.icns'
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   429
    "
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   430
!
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   431
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   432
read_t8mk_from:bytes
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   433
    "read an t8mk format icon"
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   434
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   435
self halt.
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   436
    ^ nil
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   437
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   438
    "
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   439
     self fromFile:'/Applications/TextEdit.app/Contents/Resources/txt.icns'
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   440
    "
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   441
! !
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   442
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   443
!MacOSXIconReader class methodsFor:'documentation'!
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   444
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   445
version
3132
32f94ccd6bf0 class: MacOSXIconReader
Claus Gittinger <cg@exept.de>
parents: 3121
diff changeset
   446
    ^ '$Header: /cvs/stx/stx/libview2/MacOSXIconReader.st,v 1.2 2013-05-06 17:24:22 cg Exp $'
3121
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   447
!
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   448
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   449
version_CVS
3132
32f94ccd6bf0 class: MacOSXIconReader
Claus Gittinger <cg@exept.de>
parents: 3121
diff changeset
   450
    ^ '$Header: /cvs/stx/stx/libview2/MacOSXIconReader.st,v 1.2 2013-05-06 17:24:22 cg Exp $'
3121
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   451
! !
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   452
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   453
98e10307cc6a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   454
MacOSXIconReader initialize!