ImageEditView.st
author Claus Gittinger <cg@exept.de>
Sat, 25 Apr 1998 14:19:07 +0200
changeset 877 27e63233141d
parent 840 93f209fc0f7a
child 994 5727c2484ecd
permissions -rw-r--r--
add inspect comment to generated method
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
636
d53428252193 revised version
tz
parents: 633
diff changeset
     1
"
704
01140e14c065 Fix copyright.
Stefan Vogel <sv@exept.de>
parents: 694
diff changeset
     2
 COPYRIGHT (c) 1997 by eXept Software AG
636
d53428252193 revised version
tz
parents: 633
diff changeset
     3
              All Rights Reserved
d53428252193 revised version
tz
parents: 633
diff changeset
     4
d53428252193 revised version
tz
parents: 633
diff changeset
     5
 This software is furnished under a license and may be used
d53428252193 revised version
tz
parents: 633
diff changeset
     6
 only in accordance with the terms of that license and with the
d53428252193 revised version
tz
parents: 633
diff changeset
     7
 inclusion of the above copyright notice. This software may not
d53428252193 revised version
tz
parents: 633
diff changeset
     8
 be provided or otherwise made available to, or used by, any
d53428252193 revised version
tz
parents: 633
diff changeset
     9
 other person. No title to or ownership of the software is
d53428252193 revised version
tz
parents: 633
diff changeset
    10
 hereby transferred.
d53428252193 revised version
tz
parents: 633
diff changeset
    11
"
d53428252193 revised version
tz
parents: 633
diff changeset
    12
1
c6ca7bfedf31 Initial revision
claus
parents:
diff changeset
    13
ImageView subclass:#ImageEditView
686
33833bcbb5cd some cleans
tz
parents: 678
diff changeset
    14
	instanceVariableNames:'magnification selectColors imageReaderClass resourceClass
694
343910836894 instance variable editMode move to class variables
tz
parents: 693
diff changeset
    15
		resourceSelector mouseKeyColorMode undoImage modified
737
b703128f2f60 no class var EditMode
tz
parents: 725
diff changeset
    16
		masterApplication editMode'
b703128f2f60 no class var EditMode
tz
parents: 725
diff changeset
    17
	classVariableNames:'Clipboard GridMagnification'
161
5b6e284959a4 examples
Claus Gittinger <cg@exept.de>
parents: 86
diff changeset
    18
	poolDictionaries:''
5b6e284959a4 examples
Claus Gittinger <cg@exept.de>
parents: 86
diff changeset
    19
	category:'Views-Misc'
1
c6ca7bfedf31 Initial revision
claus
parents:
diff changeset
    20
!
c6ca7bfedf31 Initial revision
claus
parents:
diff changeset
    21
636
d53428252193 revised version
tz
parents: 633
diff changeset
    22
!ImageEditView class methodsFor:'documentation'!
d53428252193 revised version
tz
parents: 633
diff changeset
    23
d53428252193 revised version
tz
parents: 633
diff changeset
    24
copyright
d53428252193 revised version
tz
parents: 633
diff changeset
    25
"
704
01140e14c065 Fix copyright.
Stefan Vogel <sv@exept.de>
parents: 694
diff changeset
    26
 COPYRIGHT (c) 1997 by eXept Software AG
636
d53428252193 revised version
tz
parents: 633
diff changeset
    27
              All Rights Reserved
d53428252193 revised version
tz
parents: 633
diff changeset
    28
d53428252193 revised version
tz
parents: 633
diff changeset
    29
 This software is furnished under a license and may be used
d53428252193 revised version
tz
parents: 633
diff changeset
    30
 only in accordance with the terms of that license and with the
d53428252193 revised version
tz
parents: 633
diff changeset
    31
 inclusion of the above copyright notice. This software may not
d53428252193 revised version
tz
parents: 633
diff changeset
    32
 be provided or otherwise made available to, or used by, any
d53428252193 revised version
tz
parents: 633
diff changeset
    33
 other person. No title to or ownership of the software is
d53428252193 revised version
tz
parents: 633
diff changeset
    34
 hereby transferred.
d53428252193 revised version
tz
parents: 633
diff changeset
    35
"
d53428252193 revised version
tz
parents: 633
diff changeset
    36
!
d53428252193 revised version
tz
parents: 633
diff changeset
    37
d53428252193 revised version
tz
parents: 633
diff changeset
    38
documentation
d53428252193 revised version
tz
parents: 633
diff changeset
    39
"
d53428252193 revised version
tz
parents: 633
diff changeset
    40
    The ImageEditView is a view class which can be used by applications
d53428252193 revised version
tz
parents: 633
diff changeset
    41
    like the Image Editor for modifying or inspecting images.
d53428252193 revised version
tz
parents: 633
diff changeset
    42
d53428252193 revised version
tz
parents: 633
diff changeset
    43
    [see also:]
d53428252193 revised version
tz
parents: 633
diff changeset
    44
        ImageEditor Image
d53428252193 revised version
tz
parents: 633
diff changeset
    45
d53428252193 revised version
tz
parents: 633
diff changeset
    46
    [author:]
d53428252193 revised version
tz
parents: 633
diff changeset
    47
        Thomas Zwick
d53428252193 revised version
tz
parents: 633
diff changeset
    48
"
d53428252193 revised version
tz
parents: 633
diff changeset
    49
! !
353
0442fc169b82 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 322
diff changeset
    50
7
19b36b78ee01 *** empty log message ***
claus
parents: 5
diff changeset
    51
!ImageEditView methodsFor:'accessing'!
19b36b78ee01 *** empty log message ***
claus
parents: 5
diff changeset
    52
624
d98fe4700fc2 checkin from browser
tz
parents: 606
diff changeset
    53
magnification
d98fe4700fc2 checkin from browser
tz
parents: 606
diff changeset
    54
d98fe4700fc2 checkin from browser
tz
parents: 606
diff changeset
    55
    ^magnification
d98fe4700fc2 checkin from browser
tz
parents: 606
diff changeset
    56
255
1dfa8deddaef checkin from browser
Claus Gittinger <cg@exept.de>
parents: 251
diff changeset
    57
!
1dfa8deddaef checkin from browser
Claus Gittinger <cg@exept.de>
parents: 251
diff changeset
    58
636
d53428252193 revised version
tz
parents: 633
diff changeset
    59
magnification: aPoint
255
1dfa8deddaef checkin from browser
Claus Gittinger <cg@exept.de>
parents: 251
diff changeset
    60
627
e0bf28f61361 many many fixes/enhancements
tz
parents: 624
diff changeset
    61
    magnification ~= aPoint
624
d98fe4700fc2 checkin from browser
tz
parents: 606
diff changeset
    62
    ifTrue:
d98fe4700fc2 checkin from browser
tz
parents: 606
diff changeset
    63
    [
627
e0bf28f61361 many many fixes/enhancements
tz
parents: 624
diff changeset
    64
        magnification := aPoint asPoint.
624
d98fe4700fc2 checkin from browser
tz
parents: 606
diff changeset
    65
        self scrollToTopLeft.
d98fe4700fc2 checkin from browser
tz
parents: 606
diff changeset
    66
        self contentsChanged.
686
33833bcbb5cd some cleans
tz
parents: 678
diff changeset
    67
        self invalidate
33833bcbb5cd some cleans
tz
parents: 678
diff changeset
    68
    ]
624
d98fe4700fc2 checkin from browser
tz
parents: 606
diff changeset
    69
!
255
1dfa8deddaef checkin from browser
Claus Gittinger <cg@exept.de>
parents: 251
diff changeset
    70
662
61b7601829ea with modal support
tz
parents: 636
diff changeset
    71
masterApplication
61b7601829ea with modal support
tz
parents: 636
diff changeset
    72
61b7601829ea with modal support
tz
parents: 636
diff changeset
    73
    ^masterApplication
61b7601829ea with modal support
tz
parents: 636
diff changeset
    74
!
61b7601829ea with modal support
tz
parents: 636
diff changeset
    75
61b7601829ea with modal support
tz
parents: 636
diff changeset
    76
masterApplication: anApplicationModel
61b7601829ea with modal support
tz
parents: 636
diff changeset
    77
61b7601829ea with modal support
tz
parents: 636
diff changeset
    78
    masterApplication := anApplicationModel
61b7601829ea with modal support
tz
parents: 636
diff changeset
    79
!
61b7601829ea with modal support
tz
parents: 636
diff changeset
    80
627
e0bf28f61361 many many fixes/enhancements
tz
parents: 624
diff changeset
    81
resourceClass
e0bf28f61361 many many fixes/enhancements
tz
parents: 624
diff changeset
    82
e0bf28f61361 many many fixes/enhancements
tz
parents: 624
diff changeset
    83
    ^resourceClass
e0bf28f61361 many many fixes/enhancements
tz
parents: 624
diff changeset
    84
!
e0bf28f61361 many many fixes/enhancements
tz
parents: 624
diff changeset
    85
e0bf28f61361 many many fixes/enhancements
tz
parents: 624
diff changeset
    86
resourceClass: aClassOrSymbol
e0bf28f61361 many many fixes/enhancements
tz
parents: 624
diff changeset
    87
686
33833bcbb5cd some cleans
tz
parents: 678
diff changeset
    88
    resourceClass := aClassOrSymbol isClass ifTrue: [aClassOrSymbol name] ifFalse: [aClassOrSymbol asSymbol]
627
e0bf28f61361 many many fixes/enhancements
tz
parents: 624
diff changeset
    89
!
e0bf28f61361 many many fixes/enhancements
tz
parents: 624
diff changeset
    90
e0bf28f61361 many many fixes/enhancements
tz
parents: 624
diff changeset
    91
resourceMessage
e0bf28f61361 many many fixes/enhancements
tz
parents: 624
diff changeset
    92
e0bf28f61361 many many fixes/enhancements
tz
parents: 624
diff changeset
    93
    ^resourceClass, ' ', resourceSelector
e0bf28f61361 many many fixes/enhancements
tz
parents: 624
diff changeset
    94
!
e0bf28f61361 many many fixes/enhancements
tz
parents: 624
diff changeset
    95
636
d53428252193 revised version
tz
parents: 633
diff changeset
    96
resourceMessage: aString
627
e0bf28f61361 many many fixes/enhancements
tz
parents: 624
diff changeset
    97
636
d53428252193 revised version
tz
parents: 633
diff changeset
    98
    (aString isString and: [aString trimBlanks size > 0])
627
e0bf28f61361 many many fixes/enhancements
tz
parents: 624
diff changeset
    99
    ifTrue:
e0bf28f61361 many many fixes/enhancements
tz
parents: 624
diff changeset
   100
    [
636
d53428252193 revised version
tz
parents: 633
diff changeset
   101
        resourceClass := (aString readStream upTo: Character space) asSymbol.
686
33833bcbb5cd some cleans
tz
parents: 678
diff changeset
   102
        resourceSelector := (aString copy reverse readStream upTo: Character space) reverse asSymbol
627
e0bf28f61361 many many fixes/enhancements
tz
parents: 624
diff changeset
   103
    ]
e0bf28f61361 many many fixes/enhancements
tz
parents: 624
diff changeset
   104
    ifFalse:
e0bf28f61361 many many fixes/enhancements
tz
parents: 624
diff changeset
   105
    [
e0bf28f61361 many many fixes/enhancements
tz
parents: 624
diff changeset
   106
        ^nil
686
33833bcbb5cd some cleans
tz
parents: 678
diff changeset
   107
    ]
627
e0bf28f61361 many many fixes/enhancements
tz
parents: 624
diff changeset
   108
e0bf28f61361 many many fixes/enhancements
tz
parents: 624
diff changeset
   109
   
e0bf28f61361 many many fixes/enhancements
tz
parents: 624
diff changeset
   110
!
e0bf28f61361 many many fixes/enhancements
tz
parents: 624
diff changeset
   111
e0bf28f61361 many many fixes/enhancements
tz
parents: 624
diff changeset
   112
resourceSelector
e0bf28f61361 many many fixes/enhancements
tz
parents: 624
diff changeset
   113
e0bf28f61361 many many fixes/enhancements
tz
parents: 624
diff changeset
   114
    ^resourceSelector
e0bf28f61361 many many fixes/enhancements
tz
parents: 624
diff changeset
   115
!
e0bf28f61361 many many fixes/enhancements
tz
parents: 624
diff changeset
   116
e0bf28f61361 many many fixes/enhancements
tz
parents: 624
diff changeset
   117
resourceSelector: aStringOrSymbol
e0bf28f61361 many many fixes/enhancements
tz
parents: 624
diff changeset
   118
e0bf28f61361 many many fixes/enhancements
tz
parents: 624
diff changeset
   119
    resourceSelector := aStringOrSymbol asSymbol
e0bf28f61361 many many fixes/enhancements
tz
parents: 624
diff changeset
   120
!
e0bf28f61361 many many fixes/enhancements
tz
parents: 624
diff changeset
   121
840
93f209fc0f7a selectColors
tz
parents: 839
diff changeset
   122
selectColors
93f209fc0f7a selectColors
tz
parents: 839
diff changeset
   123
93f209fc0f7a selectColors
tz
parents: 839
diff changeset
   124
    ^selectColors
93f209fc0f7a selectColors
tz
parents: 839
diff changeset
   125
!
93f209fc0f7a selectColors
tz
parents: 839
diff changeset
   126
93f209fc0f7a selectColors
tz
parents: 839
diff changeset
   127
selectColors: anArrayTwoColors
633
594edef86630 revised version
tz
parents: 632
diff changeset
   128
594edef86630 revised version
tz
parents: 632
diff changeset
   129
    selectColors := anArrayTwoColors
594edef86630 revised version
tz
parents: 632
diff changeset
   130
!
594edef86630 revised version
tz
parents: 632
diff changeset
   131
627
e0bf28f61361 many many fixes/enhancements
tz
parents: 624
diff changeset
   132
selectedColor
e0bf28f61361 many many fixes/enhancements
tz
parents: 624
diff changeset
   133
633
594edef86630 revised version
tz
parents: 632
diff changeset
   134
   ^selectColors at: mouseKeyColorMode
627
e0bf28f61361 many many fixes/enhancements
tz
parents: 624
diff changeset
   135
!
e0bf28f61361 many many fixes/enhancements
tz
parents: 624
diff changeset
   136
e0bf28f61361 many many fixes/enhancements
tz
parents: 624
diff changeset
   137
selectedColor: aColor
e0bf28f61361 many many fixes/enhancements
tz
parents: 624
diff changeset
   138
e0bf28f61361 many many fixes/enhancements
tz
parents: 624
diff changeset
   139
    selectColors at: mouseKeyColorMode put: aColor
e0bf28f61361 many many fixes/enhancements
tz
parents: 624
diff changeset
   140
! !
e0bf28f61361 many many fixes/enhancements
tz
parents: 624
diff changeset
   141
e0bf28f61361 many many fixes/enhancements
tz
parents: 624
diff changeset
   142
!ImageEditView methodsFor:'drawing'!
e0bf28f61361 many many fixes/enhancements
tz
parents: 624
diff changeset
   143
662
61b7601829ea with modal support
tz
parents: 636
diff changeset
   144
fillFramedRectangle: aRectangle
61b7601829ea with modal support
tz
parents: 636
diff changeset
   145
61b7601829ea with modal support
tz
parents: 636
diff changeset
   146
    self fillRectangle: aRectangle.
61b7601829ea with modal support
tz
parents: 636
diff changeset
   147
    self drawFramesIn: aRectangle
61b7601829ea with modal support
tz
parents: 636
diff changeset
   148
!
61b7601829ea with modal support
tz
parents: 636
diff changeset
   149
627
e0bf28f61361 many many fixes/enhancements
tz
parents: 624
diff changeset
   150
redrawImageX:x y:y width:w height:h
636
d53428252193 revised version
tz
parents: 633
diff changeset
   151
662
61b7601829ea with modal support
tz
parents: 636
diff changeset
   152
    |ih iw magX magY minX maxX minY maxY color lastColor lastY runW x0 xI yI maskColor sizeOfMaskPoint|
627
e0bf28f61361 many many fixes/enhancements
tz
parents: 624
diff changeset
   153
e0bf28f61361 many many fixes/enhancements
tz
parents: 624
diff changeset
   154
    ih := image height.
e0bf28f61361 many many fixes/enhancements
tz
parents: 624
diff changeset
   155
    iw := image width.
662
61b7601829ea with modal support
tz
parents: 636
diff changeset
   156
    magX := magnification x.
61b7601829ea with modal support
tz
parents: 636
diff changeset
   157
    magY := magnification y.
627
e0bf28f61361 many many fixes/enhancements
tz
parents: 624
diff changeset
   158
662
61b7601829ea with modal support
tz
parents: 636
diff changeset
   159
    minX := (x // magX - 1) max: 0.
725
0e051202859d checkin from browser
tz
parents: 724
diff changeset
   160
    minX >= iw ifTrue:[minX := (iw - 1) max: 0].
662
61b7601829ea with modal support
tz
parents: 636
diff changeset
   161
    minY := (y // magY - 1) max: 0.
725
0e051202859d checkin from browser
tz
parents: 724
diff changeset
   162
    minY >= ih ifTrue:[minY := (ih - 1) max: 0].
662
61b7601829ea with modal support
tz
parents: 636
diff changeset
   163
    maxX := (x + w) // magX + 1.
627
e0bf28f61361 many many fixes/enhancements
tz
parents: 624
diff changeset
   164
    maxX > iw ifTrue:[maxX := iw].
662
61b7601829ea with modal support
tz
parents: 636
diff changeset
   165
    maxY := (y + h) // magY + 1.
627
e0bf28f61361 many many fixes/enhancements
tz
parents: 624
diff changeset
   166
    maxY > ih ifTrue:[maxY := ih].
e0bf28f61361 many many fixes/enhancements
tz
parents: 624
diff changeset
   167
e0bf28f61361 many many fixes/enhancements
tz
parents: 624
diff changeset
   168
    lastY := -1.
e0bf28f61361 many many fixes/enhancements
tz
parents: 624
diff changeset
   169
e0bf28f61361 many many fixes/enhancements
tz
parents: 624
diff changeset
   170
    x0 := minX.
e0bf28f61361 many many fixes/enhancements
tz
parents: 624
diff changeset
   171
    runW := 0.
e0bf28f61361 many many fixes/enhancements
tz
parents: 624
diff changeset
   172
    maskColor := false.
662
61b7601829ea with modal support
tz
parents: 636
diff changeset
   173
    sizeOfMaskPoint := magnification//3.
61b7601829ea with modal support
tz
parents: 636
diff changeset
   174
    image colorsFromX: minX y: minY toX: maxX-1 y: maxY-1 do:
627
e0bf28f61361 many many fixes/enhancements
tz
parents: 624
diff changeset
   175
    [:xx :yy :color|
633
594edef86630 revised version
tz
parents: 632
diff changeset
   176
        yy ~~ lastY
594edef86630 revised version
tz
parents: 632
diff changeset
   177
        ifTrue:
627
e0bf28f61361 many many fixes/enhancements
tz
parents: 624
diff changeset
   178
        [
633
594edef86630 revised version
tz
parents: 632
diff changeset
   179
            runW ~~ 0
594edef86630 revised version
tz
parents: 632
diff changeset
   180
            ifTrue:
627
e0bf28f61361 many many fixes/enhancements
tz
parents: 624
diff changeset
   181
            [
e0bf28f61361 many many fixes/enhancements
tz
parents: 624
diff changeset
   182
                |origin|
662
61b7601829ea with modal support
tz
parents: 636
diff changeset
   183
                origin := (x0 * magX + margin)@(lastY * magY + margin).
61b7601829ea with modal support
tz
parents: 636
diff changeset
   184
                self fillFramedRectangle: (origin extent: (runW@magY)).                    
627
e0bf28f61361 many many fixes/enhancements
tz
parents: 624
diff changeset
   185
                maskColor ifTrue:
e0bf28f61361 many many fixes/enhancements
tz
parents: 624
diff changeset
   186
                [
662
61b7601829ea with modal support
tz
parents: 636
diff changeset
   187
                    self xoring: [self fillRectangle: (origin + sizeOfMaskPoint extent: sizeOfMaskPoint)]
627
e0bf28f61361 many many fixes/enhancements
tz
parents: 624
diff changeset
   188
                ].
e0bf28f61361 many many fixes/enhancements
tz
parents: 624
diff changeset
   189
                runW := 0.
e0bf28f61361 many many fixes/enhancements
tz
parents: 624
diff changeset
   190
            ]. 
e0bf28f61361 many many fixes/enhancements
tz
parents: 624
diff changeset
   191
            x0 := xx.
e0bf28f61361 many many fixes/enhancements
tz
parents: 624
diff changeset
   192
            lastY := yy.
e0bf28f61361 many many fixes/enhancements
tz
parents: 624
diff changeset
   193
        ]. 
624
d98fe4700fc2 checkin from browser
tz
parents: 606
diff changeset
   194
662
61b7601829ea with modal support
tz
parents: 636
diff changeset
   195
        color ~~ lastColor
633
594edef86630 revised version
tz
parents: 632
diff changeset
   196
        ifTrue:
627
e0bf28f61361 many many fixes/enhancements
tz
parents: 624
diff changeset
   197
        [
633
594edef86630 revised version
tz
parents: 632
diff changeset
   198
            runW ~~ 0
594edef86630 revised version
tz
parents: 632
diff changeset
   199
            ifTrue:
627
e0bf28f61361 many many fixes/enhancements
tz
parents: 624
diff changeset
   200
            [
e0bf28f61361 many many fixes/enhancements
tz
parents: 624
diff changeset
   201
                |origin|
662
61b7601829ea with modal support
tz
parents: 636
diff changeset
   202
                origin := (x0 * magX + margin)@(yy * magY + margin).
61b7601829ea with modal support
tz
parents: 636
diff changeset
   203
                self fillFramedRectangle: (origin extent: (runW@magY)).
627
e0bf28f61361 many many fixes/enhancements
tz
parents: 624
diff changeset
   204
                maskColor ifTrue:
e0bf28f61361 many many fixes/enhancements
tz
parents: 624
diff changeset
   205
                [
662
61b7601829ea with modal support
tz
parents: 636
diff changeset
   206
                    self xoring: [self fillRectangle: (origin + sizeOfMaskPoint extent: sizeOfMaskPoint)]
627
e0bf28f61361 many many fixes/enhancements
tz
parents: 624
diff changeset
   207
                ].
e0bf28f61361 many many fixes/enhancements
tz
parents: 624
diff changeset
   208
                runW := 0.
e0bf28f61361 many many fixes/enhancements
tz
parents: 624
diff changeset
   209
            ].
e0bf28f61361 many many fixes/enhancements
tz
parents: 624
diff changeset
   210
662
61b7601829ea with modal support
tz
parents: 636
diff changeset
   211
            self paint: (lastColor := color).
627
e0bf28f61361 many many fixes/enhancements
tz
parents: 624
diff changeset
   212
            image mask notNil ifTrue:
e0bf28f61361 many many fixes/enhancements
tz
parents: 624
diff changeset
   213
            [  
e0bf28f61361 many many fixes/enhancements
tz
parents: 624
diff changeset
   214
                maskColor := false.
e0bf28f61361 many many fixes/enhancements
tz
parents: 624
diff changeset
   215
                (image mask colorAt: xx@yy) = Color black ifTrue:
e0bf28f61361 many many fixes/enhancements
tz
parents: 624
diff changeset
   216
                [
662
61b7601829ea with modal support
tz
parents: 636
diff changeset
   217
                    self paint: (lastColor := self viewBackground).
627
e0bf28f61361 many many fixes/enhancements
tz
parents: 624
diff changeset
   218
                    maskColor := true.
e0bf28f61361 many many fixes/enhancements
tz
parents: 624
diff changeset
   219
                ].
662
61b7601829ea with modal support
tz
parents: 636
diff changeset
   220
                lastColor := nil.
627
e0bf28f61361 many many fixes/enhancements
tz
parents: 624
diff changeset
   221
            ].
e0bf28f61361 many many fixes/enhancements
tz
parents: 624
diff changeset
   222
            runW := 0.
e0bf28f61361 many many fixes/enhancements
tz
parents: 624
diff changeset
   223
            x0 := xx.
e0bf28f61361 many many fixes/enhancements
tz
parents: 624
diff changeset
   224
        ].  
662
61b7601829ea with modal support
tz
parents: 636
diff changeset
   225
        runW := runW + magX
627
e0bf28f61361 many many fixes/enhancements
tz
parents: 624
diff changeset
   226
    ].
e0bf28f61361 many many fixes/enhancements
tz
parents: 624
diff changeset
   227
    runW ~~ 0 ifTrue:
e0bf28f61361 many many fixes/enhancements
tz
parents: 624
diff changeset
   228
    [
e0bf28f61361 many many fixes/enhancements
tz
parents: 624
diff changeset
   229
        |origin|
662
61b7601829ea with modal support
tz
parents: 636
diff changeset
   230
        origin := (x0 * magX + margin)@(lastY * magY + margin).
61b7601829ea with modal support
tz
parents: 636
diff changeset
   231
        self fillFramedRectangle: (origin extent: runW@magY).
627
e0bf28f61361 many many fixes/enhancements
tz
parents: 624
diff changeset
   232
        maskColor ifTrue:
e0bf28f61361 many many fixes/enhancements
tz
parents: 624
diff changeset
   233
        [
662
61b7601829ea with modal support
tz
parents: 636
diff changeset
   234
            self xoring: [self fillRectangle: (origin + sizeOfMaskPoint extent: sizeOfMaskPoint)]
627
e0bf28f61361 many many fixes/enhancements
tz
parents: 624
diff changeset
   235
        ].
e0bf28f61361 many many fixes/enhancements
tz
parents: 624
diff changeset
   236
        runW := 0.
e0bf28f61361 many many fixes/enhancements
tz
parents: 624
diff changeset
   237
    ].
e0bf28f61361 many many fixes/enhancements
tz
parents: 624
diff changeset
   238
!
e0bf28f61361 many many fixes/enhancements
tz
parents: 624
diff changeset
   239
e0bf28f61361 many many fixes/enhancements
tz
parents: 624
diff changeset
   240
redrawX:x y:y width:w height:h
636
d53428252193 revised version
tz
parents: 633
diff changeset
   241
627
e0bf28f61361 many many fixes/enhancements
tz
parents: 624
diff changeset
   242
    |ih iw xI yI|
e0bf28f61361 many many fixes/enhancements
tz
parents: 624
diff changeset
   243
662
61b7601829ea with modal support
tz
parents: 636
diff changeset
   244
    magnification = (1@1) ifTrue: [^super redrawX:x y:y width:w height:h].
61b7601829ea with modal support
tz
parents: 636
diff changeset
   245
627
e0bf28f61361 many many fixes/enhancements
tz
parents: 624
diff changeset
   246
    image isNil ifTrue:[^self].
e0bf28f61361 many many fixes/enhancements
tz
parents: 624
diff changeset
   247
662
61b7601829ea with modal support
tz
parents: 636
diff changeset
   248
    self clippingRectangle: (x@y extent: w@h).
627
e0bf28f61361 many many fixes/enhancements
tz
parents: 624
diff changeset
   249
e0bf28f61361 many many fixes/enhancements
tz
parents: 624
diff changeset
   250
    self redrawImageX:x y:y width:w height:h.
e0bf28f61361 many many fixes/enhancements
tz
parents: 624
diff changeset
   251
e0bf28f61361 many many fixes/enhancements
tz
parents: 624
diff changeset
   252
    "/ right of image ?
e0bf28f61361 many many fixes/enhancements
tz
parents: 624
diff changeset
   253
    adjust == #center ifTrue:
e0bf28f61361 many many fixes/enhancements
tz
parents: 624
diff changeset
   254
    [
633
594edef86630 revised version
tz
parents: 632
diff changeset
   255
        xI := (width - ih) // 2 - margin.
594edef86630 revised version
tz
parents: 632
diff changeset
   256
        yI := (height - iw) // 2 - margin.
627
e0bf28f61361 many many fixes/enhancements
tz
parents: 624
diff changeset
   257
    ]
e0bf28f61361 many many fixes/enhancements
tz
parents: 624
diff changeset
   258
    ifFalse:
e0bf28f61361 many many fixes/enhancements
tz
parents: 624
diff changeset
   259
    [
e0bf28f61361 many many fixes/enhancements
tz
parents: 624
diff changeset
   260
        xI := yI := margin
e0bf28f61361 many many fixes/enhancements
tz
parents: 624
diff changeset
   261
    ].
e0bf28f61361 many many fixes/enhancements
tz
parents: 624
diff changeset
   262
    (x + w - 1) > (xI + (magnification x * image width)) ifTrue:
e0bf28f61361 many many fixes/enhancements
tz
parents: 624
diff changeset
   263
    [
e0bf28f61361 many many fixes/enhancements
tz
parents: 624
diff changeset
   264
        self clearRectangleX:(xI + (magnification x * image width))
e0bf28f61361 many many fixes/enhancements
tz
parents: 624
diff changeset
   265
                           y:y
e0bf28f61361 many many fixes/enhancements
tz
parents: 624
diff changeset
   266
                       width:(x + w - (magnification x * image width) - xI)
e0bf28f61361 many many fixes/enhancements
tz
parents: 624
diff changeset
   267
                      height:h
e0bf28f61361 many many fixes/enhancements
tz
parents: 624
diff changeset
   268
    ].
e0bf28f61361 many many fixes/enhancements
tz
parents: 624
diff changeset
   269
    (y + h - 1) > (yI + (magnification y * image height)) ifTrue:
e0bf28f61361 many many fixes/enhancements
tz
parents: 624
diff changeset
   270
    [
e0bf28f61361 many many fixes/enhancements
tz
parents: 624
diff changeset
   271
        self clearRectangleX:margin
e0bf28f61361 many many fixes/enhancements
tz
parents: 624
diff changeset
   272
                           y:(yI + (magnification y * image height))
e0bf28f61361 many many fixes/enhancements
tz
parents: 624
diff changeset
   273
                       width:w
e0bf28f61361 many many fixes/enhancements
tz
parents: 624
diff changeset
   274
                      height:(y + h - (magnification y * image height) - yI)  
e0bf28f61361 many many fixes/enhancements
tz
parents: 624
diff changeset
   275
    ].
e0bf28f61361 many many fixes/enhancements
tz
parents: 624
diff changeset
   276
    self drawFrame.
e0bf28f61361 many many fixes/enhancements
tz
parents: 624
diff changeset
   277
    self clippingRectangle: nil.
e0bf28f61361 many many fixes/enhancements
tz
parents: 624
diff changeset
   278
! !
e0bf28f61361 many many fixes/enhancements
tz
parents: 624
diff changeset
   279
e0bf28f61361 many many fixes/enhancements
tz
parents: 624
diff changeset
   280
!ImageEditView methodsFor:'edit modes'!
e0bf28f61361 many many fixes/enhancements
tz
parents: 624
diff changeset
   281
e0bf28f61361 many many fixes/enhancements
tz
parents: 624
diff changeset
   282
editMode
e0bf28f61361 many many fixes/enhancements
tz
parents: 624
diff changeset
   283
737
b703128f2f60 no class var EditMode
tz
parents: 725
diff changeset
   284
    ^editMode ? (editMode := 'point')
627
e0bf28f61361 many many fixes/enhancements
tz
parents: 624
diff changeset
   285
!
e0bf28f61361 many many fixes/enhancements
tz
parents: 624
diff changeset
   286
e0bf28f61361 many many fixes/enhancements
tz
parents: 624
diff changeset
   287
editMode:aMode
e0bf28f61361 many many fixes/enhancements
tz
parents: 624
diff changeset
   288
737
b703128f2f60 no class var EditMode
tz
parents: 725
diff changeset
   289
    editMode := aMode
627
e0bf28f61361 many many fixes/enhancements
tz
parents: 624
diff changeset
   290
!
e0bf28f61361 many many fixes/enhancements
tz
parents: 624
diff changeset
   291
e0bf28f61361 many many fixes/enhancements
tz
parents: 624
diff changeset
   292
mouseKeyColorMode
e0bf28f61361 many many fixes/enhancements
tz
parents: 624
diff changeset
   293
e0bf28f61361 many many fixes/enhancements
tz
parents: 624
diff changeset
   294
    ^mouseKeyColorMode printString
e0bf28f61361 many many fixes/enhancements
tz
parents: 624
diff changeset
   295
!
e0bf28f61361 many many fixes/enhancements
tz
parents: 624
diff changeset
   296
e0bf28f61361 many many fixes/enhancements
tz
parents: 624
diff changeset
   297
mouseKeyColorMode:aMode
e0bf28f61361 many many fixes/enhancements
tz
parents: 624
diff changeset
   298
e0bf28f61361 many many fixes/enhancements
tz
parents: 624
diff changeset
   299
    mouseKeyColorMode := aMode asInteger
e0bf28f61361 many many fixes/enhancements
tz
parents: 624
diff changeset
   300
! !
e0bf28f61361 many many fixes/enhancements
tz
parents: 624
diff changeset
   301
e0bf28f61361 many many fixes/enhancements
tz
parents: 624
diff changeset
   302
!ImageEditView methodsFor:'event handling'!
e0bf28f61361 many many fixes/enhancements
tz
parents: 624
diff changeset
   303
e0bf28f61361 many many fixes/enhancements
tz
parents: 624
diff changeset
   304
buttonMotion:state x:x y:y
e0bf28f61361 many many fixes/enhancements
tz
parents: 624
diff changeset
   305
632
be1ac8ea33a7 checkin from browser
tz
parents: 628
diff changeset
   306
    self drawCursorAt: x@y.
686
33833bcbb5cd some cleans
tz
parents: 678
diff changeset
   307
    state ~~ 0
33833bcbb5cd some cleans
tz
parents: 678
diff changeset
   308
    ifTrue:
33833bcbb5cd some cleans
tz
parents: 678
diff changeset
   309
    [
737
b703128f2f60 no class var EditMode
tz
parents: 725
diff changeset
   310
        self selectedColor notNil & image notNil & (self imageContainsPoint: x@y) & (editMode = 'point')
686
33833bcbb5cd some cleans
tz
parents: 678
diff changeset
   311
            ifTrue: [^self pointAt: x@y]
33833bcbb5cd some cleans
tz
parents: 678
diff changeset
   312
    ]
624
d98fe4700fc2 checkin from browser
tz
parents: 606
diff changeset
   313
!
255
1dfa8deddaef checkin from browser
Claus Gittinger <cg@exept.de>
parents: 251
diff changeset
   314
627
e0bf28f61361 many many fixes/enhancements
tz
parents: 624
diff changeset
   315
buttonPress:button x:x y:y
e0bf28f61361 many many fixes/enhancements
tz
parents: 624
diff changeset
   316
632
be1ac8ea33a7 checkin from browser
tz
parents: 628
diff changeset
   317
    self drawCursorAt: x@y.
627
e0bf28f61361 many many fixes/enhancements
tz
parents: 624
diff changeset
   318
    self selectedColor notNil & image notNil & (self imageContainsPoint: x@y)
e0bf28f61361 many many fixes/enhancements
tz
parents: 624
diff changeset
   319
    ifTrue:
822
cace81f0a86b do not overwrite method categories + toggle between mouse button colors
tz
parents: 796
diff changeset
   320
    [   
cace81f0a86b do not overwrite method categories + toggle between mouse button colors
tz
parents: 796
diff changeset
   321
        |mouseButtonColorToolBar|
cace81f0a86b do not overwrite method categories + toggle between mouse button colors
tz
parents: 796
diff changeset
   322
        mouseKeyColorMode := button.
cace81f0a86b do not overwrite method categories + toggle between mouse button colors
tz
parents: 796
diff changeset
   323
        mouseButtonColorToolBar := masterApplication builder componentAt: #MouseButtonColorToolBar.
627
e0bf28f61361 many many fixes/enhancements
tz
parents: 624
diff changeset
   324
        undoImage := image copy.
724
d6f4b89940ed undo disabling
tz
parents: 704
diff changeset
   325
        masterApplication valueOfCanUndo value: true.
822
cace81f0a86b do not overwrite method categories + toggle between mouse button colors
tz
parents: 796
diff changeset
   326
        (mouseButtonColorToolBar itemAt: mouseKeyColorMode) toggleIndication.
cace81f0a86b do not overwrite method categories + toggle between mouse button colors
tz
parents: 796
diff changeset
   327
        mouseButtonColorToolBar do: [:i| i updateIndicators].
737
b703128f2f60 no class var EditMode
tz
parents: 725
diff changeset
   328
        self perform: (editMode, 'At:') asSymbol with: x@y
686
33833bcbb5cd some cleans
tz
parents: 678
diff changeset
   329
    ]
632
be1ac8ea33a7 checkin from browser
tz
parents: 628
diff changeset
   330
!
be1ac8ea33a7 checkin from browser
tz
parents: 628
diff changeset
   331
686
33833bcbb5cd some cleans
tz
parents: 678
diff changeset
   332
pointerLeave:state
33833bcbb5cd some cleans
tz
parents: 678
diff changeset
   333
688
e1c30adb37bf updates coord info label while defining boxes
tz
parents: 686
diff changeset
   334
    super pointerLeave: state.
686
33833bcbb5cd some cleans
tz
parents: 678
diff changeset
   335
783
c81a097b84b8 revised version
tz
parents: 747
diff changeset
   336
    self drawLabel: self imageInfoString.
686
33833bcbb5cd some cleans
tz
parents: 678
diff changeset
   337
    Cursor normal show
627
e0bf28f61361 many many fixes/enhancements
tz
parents: 624
diff changeset
   338
! !
e0bf28f61361 many many fixes/enhancements
tz
parents: 624
diff changeset
   339
636
d53428252193 revised version
tz
parents: 633
diff changeset
   340
!ImageEditView methodsFor:'image editing'!
627
e0bf28f61361 many many fixes/enhancements
tz
parents: 624
diff changeset
   341
e0bf28f61361 many many fixes/enhancements
tz
parents: 624
diff changeset
   342
boxAt: aPoint
e0bf28f61361 many many fixes/enhancements
tz
parents: 624
diff changeset
   343
662
61b7601829ea with modal support
tz
parents: 636
diff changeset
   344
    |choosedBox imageBox|
636
d53428252193 revised version
tz
parents: 633
diff changeset
   345
    choosedBox := self drawRectangleStartingAt: aPoint emphasis: #box.
662
61b7601829ea with modal support
tz
parents: 636
diff changeset
   346
    image rectangle: (imageBox := choosedBox origin//magnification extent: (choosedBox extent//magnification)) withColor: self selectedColor.
632
be1ac8ea33a7 checkin from browser
tz
parents: 628
diff changeset
   347
    image restored.
662
61b7601829ea with modal support
tz
parents: 636
diff changeset
   348
    self redraw: (choosedBox expandedBy: 1).
724
d6f4b89940ed undo disabling
tz
parents: 704
diff changeset
   349
    masterApplication imagePreView redraw: (imageBox expandedBy: 1).
676
fd7918a3e6e6 load + preview redraw errors removed
tz
parents: 674
diff changeset
   350
    modified := true
632
be1ac8ea33a7 checkin from browser
tz
parents: 628
diff changeset
   351
!
be1ac8ea33a7 checkin from browser
tz
parents: 628
diff changeset
   352
be1ac8ea33a7 checkin from browser
tz
parents: 628
diff changeset
   353
copyAt: aPoint
be1ac8ea33a7 checkin from browser
tz
parents: 628
diff changeset
   354
be1ac8ea33a7 checkin from browser
tz
parents: 628
diff changeset
   355
    |choosedBox|
636
d53428252193 revised version
tz
parents: 633
diff changeset
   356
    choosedBox := self drawRectangleStartingAt: aPoint emphasis: #inverseFilledBox.
632
be1ac8ea33a7 checkin from browser
tz
parents: 628
diff changeset
   357
    Clipboard := image subImageIn: (choosedBox origin//magnification extent: (choosedBox extent//magnification)).
662
61b7601829ea with modal support
tz
parents: 636
diff changeset
   358
    self redraw: (choosedBox expandedBy: 1)    
632
be1ac8ea33a7 checkin from browser
tz
parents: 628
diff changeset
   359
be1ac8ea33a7 checkin from browser
tz
parents: 628
diff changeset
   360
!
be1ac8ea33a7 checkin from browser
tz
parents: 628
diff changeset
   361
be1ac8ea33a7 checkin from browser
tz
parents: 628
diff changeset
   362
fillAt: aPoint
627
e0bf28f61361 many many fixes/enhancements
tz
parents: 624
diff changeset
   363
632
be1ac8ea33a7 checkin from browser
tz
parents: 628
diff changeset
   364
    Cursor execute showWhile:
be1ac8ea33a7 checkin from browser
tz
parents: 628
diff changeset
   365
    [
be1ac8ea33a7 checkin from browser
tz
parents: 628
diff changeset
   366
        |filledPoints|
be1ac8ea33a7 checkin from browser
tz
parents: 628
diff changeset
   367
        filledPoints := image floodFillAt: aPoint//magnification withColor: self selectedColor.
be1ac8ea33a7 checkin from browser
tz
parents: 628
diff changeset
   368
        image restored.
633
594edef86630 revised version
tz
parents: 632
diff changeset
   369
        filledPoints size < 300
632
be1ac8ea33a7 checkin from browser
tz
parents: 628
diff changeset
   370
        ifTrue:
be1ac8ea33a7 checkin from browser
tz
parents: 628
diff changeset
   371
        [
662
61b7601829ea with modal support
tz
parents: 636
diff changeset
   372
            filledPoints do: [:p| self redraw: ((p * magnification extent: magnification) expandedBy: 1)]
632
be1ac8ea33a7 checkin from browser
tz
parents: 628
diff changeset
   373
        ]
be1ac8ea33a7 checkin from browser
tz
parents: 628
diff changeset
   374
        ifFalse:
be1ac8ea33a7 checkin from browser
tz
parents: 628
diff changeset
   375
        [
be1ac8ea33a7 checkin from browser
tz
parents: 628
diff changeset
   376
            self invalidate
be1ac8ea33a7 checkin from browser
tz
parents: 628
diff changeset
   377
        ].
724
d6f4b89940ed undo disabling
tz
parents: 704
diff changeset
   378
        masterApplication imagePreView invalidate.
632
be1ac8ea33a7 checkin from browser
tz
parents: 628
diff changeset
   379
        modified := true
be1ac8ea33a7 checkin from browser
tz
parents: 628
diff changeset
   380
    ]
be1ac8ea33a7 checkin from browser
tz
parents: 628
diff changeset
   381
!
be1ac8ea33a7 checkin from browser
tz
parents: 628
diff changeset
   382
be1ac8ea33a7 checkin from browser
tz
parents: 628
diff changeset
   383
filledBoxAt: aPoint
be1ac8ea33a7 checkin from browser
tz
parents: 628
diff changeset
   384
662
61b7601829ea with modal support
tz
parents: 636
diff changeset
   385
    |choosedBox imageBox|
636
d53428252193 revised version
tz
parents: 633
diff changeset
   386
    choosedBox := self drawRectangleStartingAt: aPoint emphasis: #filledBox.
662
61b7601829ea with modal support
tz
parents: 636
diff changeset
   387
    image fillRectangle: (imageBox := choosedBox origin//magnification extent: (choosedBox extent//magnification)) withColor: self selectedColor.
632
be1ac8ea33a7 checkin from browser
tz
parents: 628
diff changeset
   388
    image restored.
662
61b7601829ea with modal support
tz
parents: 636
diff changeset
   389
    self redraw: (choosedBox expandedBy: 1).
724
d6f4b89940ed undo disabling
tz
parents: 704
diff changeset
   390
    masterApplication imagePreView redraw: (imageBox expandedBy: 1).
686
33833bcbb5cd some cleans
tz
parents: 678
diff changeset
   391
    modified := true
632
be1ac8ea33a7 checkin from browser
tz
parents: 628
diff changeset
   392
!
be1ac8ea33a7 checkin from browser
tz
parents: 628
diff changeset
   393
636
d53428252193 revised version
tz
parents: 633
diff changeset
   394
flipHorizontal
d53428252193 revised version
tz
parents: 633
diff changeset
   395
725
0e051202859d checkin from browser
tz
parents: 724
diff changeset
   396
    self image: image copy flipHorizontal
636
d53428252193 revised version
tz
parents: 633
diff changeset
   397
d53428252193 revised version
tz
parents: 633
diff changeset
   398
!
d53428252193 revised version
tz
parents: 633
diff changeset
   399
d53428252193 revised version
tz
parents: 633
diff changeset
   400
flipVertical
d53428252193 revised version
tz
parents: 633
diff changeset
   401
725
0e051202859d checkin from browser
tz
parents: 724
diff changeset
   402
    self image: image copy flipVertical
636
d53428252193 revised version
tz
parents: 633
diff changeset
   403
d53428252193 revised version
tz
parents: 633
diff changeset
   404
!
d53428252193 revised version
tz
parents: 633
diff changeset
   405
d53428252193 revised version
tz
parents: 633
diff changeset
   406
magnifyImage
d53428252193 revised version
tz
parents: 633
diff changeset
   407
d53428252193 revised version
tz
parents: 633
diff changeset
   408
    |box newSize|
d53428252193 revised version
tz
parents: 633
diff changeset
   409
    box := EnterBox new.
d53428252193 revised version
tz
parents: 633
diff changeset
   410
    box title:'Image new size:'.
d53428252193 revised version
tz
parents: 633
diff changeset
   411
    box okText:'OK'.
d53428252193 revised version
tz
parents: 633
diff changeset
   412
    box abortText:'Cancel'.
d53428252193 revised version
tz
parents: 633
diff changeset
   413
    box initialText:image extent printString.
d53428252193 revised version
tz
parents: 633
diff changeset
   414
    box showAtPointer.
d53428252193 revised version
tz
parents: 633
diff changeset
   415
    (box accepted and: [(newSize := Object readFromString: box contents onError:nil) notNil])
d53428252193 revised version
tz
parents: 633
diff changeset
   416
    ifTrue:
d53428252193 revised version
tz
parents: 633
diff changeset
   417
    [
d53428252193 revised version
tz
parents: 633
diff changeset
   418
        self image: (image magnifiedBy: newSize/image extent)
686
33833bcbb5cd some cleans
tz
parents: 678
diff changeset
   419
    ]
636
d53428252193 revised version
tz
parents: 633
diff changeset
   420
!
d53428252193 revised version
tz
parents: 633
diff changeset
   421
d53428252193 revised version
tz
parents: 633
diff changeset
   422
negativeImage
d53428252193 revised version
tz
parents: 633
diff changeset
   423
725
0e051202859d checkin from browser
tz
parents: 724
diff changeset
   424
    self image: image copy negative
636
d53428252193 revised version
tz
parents: 633
diff changeset
   425
d53428252193 revised version
tz
parents: 633
diff changeset
   426
!
d53428252193 revised version
tz
parents: 633
diff changeset
   427
d53428252193 revised version
tz
parents: 633
diff changeset
   428
pasteAt: aPoint
d53428252193 revised version
tz
parents: 633
diff changeset
   429
d53428252193 revised version
tz
parents: 633
diff changeset
   430
    Object errorSignal handle:
d53428252193 revised version
tz
parents: 633
diff changeset
   431
    [:ex|
d53428252193 revised version
tz
parents: 633
diff changeset
   432
        self warn: 'Pasting at selected point failed!!'
d53428252193 revised version
tz
parents: 633
diff changeset
   433
    ] 
d53428252193 revised version
tz
parents: 633
diff changeset
   434
    do:
d53428252193 revised version
tz
parents: 633
diff changeset
   435
    [   
662
61b7601829ea with modal support
tz
parents: 636
diff changeset
   436
        |imagePoint imageBox|
636
d53428252193 revised version
tz
parents: 633
diff changeset
   437
        imagePoint := aPoint//magnification.
d53428252193 revised version
tz
parents: 633
diff changeset
   438
        image copyFrom: Clipboard x:0 y:0 toX: imagePoint x y: imagePoint y width: Clipboard width height: Clipboard height.
d53428252193 revised version
tz
parents: 633
diff changeset
   439
        image restored.
662
61b7601829ea with modal support
tz
parents: 636
diff changeset
   440
        self redraw: (imageBox := (imagePoint * magnification extent: (Clipboard extent * magnification)) expandedBy: 1@1).
724
d6f4b89940ed undo disabling
tz
parents: 704
diff changeset
   441
        masterApplication imagePreView redraw: (imageBox expandedBy: 1).
676
fd7918a3e6e6 load + preview redraw errors removed
tz
parents: 674
diff changeset
   442
        modified := true
636
d53428252193 revised version
tz
parents: 633
diff changeset
   443
    ]
d53428252193 revised version
tz
parents: 633
diff changeset
   444
!
d53428252193 revised version
tz
parents: 633
diff changeset
   445
d53428252193 revised version
tz
parents: 633
diff changeset
   446
pointAt: aPoint
d53428252193 revised version
tz
parents: 633
diff changeset
   447
662
61b7601829ea with modal support
tz
parents: 636
diff changeset
   448
    |imagePoint imageBox|
636
d53428252193 revised version
tz
parents: 633
diff changeset
   449
    imagePoint := aPoint//magnification.
d53428252193 revised version
tz
parents: 633
diff changeset
   450
    image atImageAndMask: imagePoint put: self selectedColor.
d53428252193 revised version
tz
parents: 633
diff changeset
   451
    image restored.
662
61b7601829ea with modal support
tz
parents: 636
diff changeset
   452
    self redraw: (imageBox := (imagePoint * magnification extent: magnification) expandedBy: 1).
796
b68b09ddc62b preview redrawing
tz
parents: 783
diff changeset
   453
    masterApplication imagePreView redraw: ((imagePoint - 1) extent: 3@3).
b68b09ddc62b preview redrawing
tz
parents: 783
diff changeset
   454
    modified := true.
b68b09ddc62b preview redrawing
tz
parents: 783
diff changeset
   455
636
d53428252193 revised version
tz
parents: 633
diff changeset
   456
!
d53428252193 revised version
tz
parents: 633
diff changeset
   457
d53428252193 revised version
tz
parents: 633
diff changeset
   458
resizeImage
d53428252193 revised version
tz
parents: 633
diff changeset
   459
d53428252193 revised version
tz
parents: 633
diff changeset
   460
    |box newSize|
d53428252193 revised version
tz
parents: 633
diff changeset
   461
    box := EnterBox new.
d53428252193 revised version
tz
parents: 633
diff changeset
   462
    box title:'Image new size:'.
d53428252193 revised version
tz
parents: 633
diff changeset
   463
    box okText:'OK'.
d53428252193 revised version
tz
parents: 633
diff changeset
   464
    box abortText:'Cancel'.
d53428252193 revised version
tz
parents: 633
diff changeset
   465
    box initialText:image extent printString.
d53428252193 revised version
tz
parents: 633
diff changeset
   466
    box showAtPointer.
d53428252193 revised version
tz
parents: 633
diff changeset
   467
    (box accepted and: [(newSize := Object readFromString: box contents onError:nil) notNil])
d53428252193 revised version
tz
parents: 633
diff changeset
   468
    ifTrue:
d53428252193 revised version
tz
parents: 633
diff changeset
   469
    [
d53428252193 revised version
tz
parents: 633
diff changeset
   470
        |newImage|
d53428252193 revised version
tz
parents: 633
diff changeset
   471
        newImage := image class width: newSize x height: newSize y depth: image depth.
d53428252193 revised version
tz
parents: 633
diff changeset
   472
        newImage photometric:image photometric.
d53428252193 revised version
tz
parents: 633
diff changeset
   473
        newImage colorMap:image colorMap copy.
d53428252193 revised version
tz
parents: 633
diff changeset
   474
        newImage bits: (ByteArray new: newImage bytesPerRow * newSize y).
d53428252193 revised version
tz
parents: 633
diff changeset
   475
d53428252193 revised version
tz
parents: 633
diff changeset
   476
        image mask notNil
d53428252193 revised version
tz
parents: 633
diff changeset
   477
        ifTrue: 
d53428252193 revised version
tz
parents: 633
diff changeset
   478
        [
d53428252193 revised version
tz
parents: 633
diff changeset
   479
            |newMaskImage|
d53428252193 revised version
tz
parents: 633
diff changeset
   480
            newMaskImage := Depth1Image width: newSize x height: newSize y.
d53428252193 revised version
tz
parents: 633
diff changeset
   481
            newMaskImage photometric: image mask photometric.
d53428252193 revised version
tz
parents: 633
diff changeset
   482
            newMaskImage colorMap: image mask colorMap copy.
d53428252193 revised version
tz
parents: 633
diff changeset
   483
            newMaskImage bits:(ByteArray new: newMaskImage bytesPerRow * newSize y).
d53428252193 revised version
tz
parents: 633
diff changeset
   484
            newImage mask: newMaskImage
d53428252193 revised version
tz
parents: 633
diff changeset
   485
        ].
d53428252193 revised version
tz
parents: 633
diff changeset
   486
d53428252193 revised version
tz
parents: 633
diff changeset
   487
        newImage copyFrom:image x:0 y:0 toX:0 y:0 width: (image width min:newSize x) height: (image height min:newSize y).
827
155b4ed10c7c remember the file name if changed
tz
parents: 823
diff changeset
   488
        self image: newImage.
686
33833bcbb5cd some cleans
tz
parents: 678
diff changeset
   489
    ]
636
d53428252193 revised version
tz
parents: 633
diff changeset
   490
!
d53428252193 revised version
tz
parents: 633
diff changeset
   491
d53428252193 revised version
tz
parents: 633
diff changeset
   492
rotateImage
d53428252193 revised version
tz
parents: 633
diff changeset
   493
d53428252193 revised version
tz
parents: 633
diff changeset
   494
    |box rotation|
d53428252193 revised version
tz
parents: 633
diff changeset
   495
    box := EnterBox new.
d53428252193 revised version
tz
parents: 633
diff changeset
   496
    box title:'Image new rotation:'.
d53428252193 revised version
tz
parents: 633
diff changeset
   497
    box okText:'OK'.
d53428252193 revised version
tz
parents: 633
diff changeset
   498
    box abortText:'Cancel'.
d53428252193 revised version
tz
parents: 633
diff changeset
   499
    box initialText: '0'.
d53428252193 revised version
tz
parents: 633
diff changeset
   500
    box showAtPointer.
d53428252193 revised version
tz
parents: 633
diff changeset
   501
    (box accepted and: [(rotation := Object readFromString: box contents onError:nil) notNil])
d53428252193 revised version
tz
parents: 633
diff changeset
   502
    ifTrue:
d53428252193 revised version
tz
parents: 633
diff changeset
   503
    [   Object errorSignal handle:
d53428252193 revised version
tz
parents: 633
diff changeset
   504
        [:ex|
d53428252193 revised version
tz
parents: 633
diff changeset
   505
            self warn: 'Image rotation failed.\' withCRs, 'An increase of image depth could help.'.
d53428252193 revised version
tz
parents: 633
diff changeset
   506
        ] 
d53428252193 revised version
tz
parents: 633
diff changeset
   507
        do:
d53428252193 revised version
tz
parents: 633
diff changeset
   508
        [   
d53428252193 revised version
tz
parents: 633
diff changeset
   509
            self image: (image hardRotated: rotation)
d53428252193 revised version
tz
parents: 633
diff changeset
   510
        ]
686
33833bcbb5cd some cleans
tz
parents: 678
diff changeset
   511
    ]
636
d53428252193 revised version
tz
parents: 633
diff changeset
   512
!
d53428252193 revised version
tz
parents: 633
diff changeset
   513
d53428252193 revised version
tz
parents: 633
diff changeset
   514
undo
d53428252193 revised version
tz
parents: 633
diff changeset
   515
d53428252193 revised version
tz
parents: 633
diff changeset
   516
    undoImage notNil
d53428252193 revised version
tz
parents: 633
diff changeset
   517
    ifTrue:
725
0e051202859d checkin from browser
tz
parents: 724
diff changeset
   518
    [           
636
d53428252193 revised version
tz
parents: 633
diff changeset
   519
        modified := false.
d53428252193 revised version
tz
parents: 633
diff changeset
   520
        self image: undoImage.
839
c77a86a62ac2 use #findColorMapMode for undo
tz
parents: 827
diff changeset
   521
        masterApplication findColorMapMode.
724
d6f4b89940ed undo disabling
tz
parents: 704
diff changeset
   522
        masterApplication valueOfCanUndo value: false.
636
d53428252193 revised version
tz
parents: 633
diff changeset
   523
        self invalidate
d53428252193 revised version
tz
parents: 633
diff changeset
   524
    ]
d53428252193 revised version
tz
parents: 633
diff changeset
   525
! !
d53428252193 revised version
tz
parents: 633
diff changeset
   526
d53428252193 revised version
tz
parents: 633
diff changeset
   527
!ImageEditView methodsFor:'image emphasis'!
d53428252193 revised version
tz
parents: 633
diff changeset
   528
d53428252193 revised version
tz
parents: 633
diff changeset
   529
drawCursorAt: aPoint
d53428252193 revised version
tz
parents: 633
diff changeset
   530
783
c81a097b84b8 revised version
tz
parents: 747
diff changeset
   531
    image isNil ifTrue: [self drawLabel: self imageInfoString. ^Cursor stop show].
636
d53428252193 revised version
tz
parents: 633
diff changeset
   532
    ((0@0 extent: image extent * magnification) containsPoint: aPoint)
783
c81a097b84b8 revised version
tz
parents: 747
diff changeset
   533
         ifFalse:[self drawLabel: self imageInfoString. Cursor stop show]
693
e229810e61fb save method as with superclass #Object
tz
parents: 691
diff changeset
   534
         ifTrue: [self drawLabel: (aPoint//magnification + 1) printString.Cursor crossHair show].
688
e1c30adb37bf updates coord info label while defining boxes
tz
parents: 686
diff changeset
   535
e1c30adb37bf updates coord info label while defining boxes
tz
parents: 686
diff changeset
   536
!
e1c30adb37bf updates coord info label while defining boxes
tz
parents: 686
diff changeset
   537
e1c30adb37bf updates coord info label while defining boxes
tz
parents: 686
diff changeset
   538
drawCursorAt: aPoint withLabel: aLabel
e1c30adb37bf updates coord info label while defining boxes
tz
parents: 686
diff changeset
   539
e1c30adb37bf updates coord info label while defining boxes
tz
parents: 686
diff changeset
   540
    ((0@0 extent: image extent * magnification) containsPoint: aPoint)
e1c30adb37bf updates coord info label while defining boxes
tz
parents: 686
diff changeset
   541
         ifFalse:[Cursor stop show]
694
343910836894 instance variable editMode move to class variables
tz
parents: 693
diff changeset
   542
         ifTrue: [Cursor crossHair show].
343910836894 instance variable editMode move to class variables
tz
parents: 693
diff changeset
   543
     self drawLabel: aLabel.
636
d53428252193 revised version
tz
parents: 633
diff changeset
   544
!
d53428252193 revised version
tz
parents: 633
diff changeset
   545
d53428252193 revised version
tz
parents: 633
diff changeset
   546
drawFrame
d53428252193 revised version
tz
parents: 633
diff changeset
   547
d53428252193 revised version
tz
parents: 633
diff changeset
   548
    self paint:Color black.
d53428252193 revised version
tz
parents: 633
diff changeset
   549
    self lineWidth: (magnification x//3 min: 3).
d53428252193 revised version
tz
parents: 633
diff changeset
   550
    self displayRectangle: ((0@0) extent:(image extent * magnification) + 2).
d53428252193 revised version
tz
parents: 633
diff changeset
   551
    self lineWidth:1.
d53428252193 revised version
tz
parents: 633
diff changeset
   552
!
d53428252193 revised version
tz
parents: 633
diff changeset
   553
662
61b7601829ea with modal support
tz
parents: 636
diff changeset
   554
drawFramesIn: aRectangle
636
d53428252193 revised version
tz
parents: 633
diff changeset
   555
686
33833bcbb5cd some cleans
tz
parents: 678
diff changeset
   556
    magnification > GridMagnification
636
d53428252193 revised version
tz
parents: 633
diff changeset
   557
    ifTrue:
d53428252193 revised version
tz
parents: 633
diff changeset
   558
    [   
662
61b7601829ea with modal support
tz
parents: 636
diff changeset
   559
        |origin lineStartingPoint lineEndingPoint oldColor|
61b7601829ea with modal support
tz
parents: 636
diff changeset
   560
        origin := aRectangle origin - 1.
61b7601829ea with modal support
tz
parents: 636
diff changeset
   561
        lineStartingPoint := origin + (0@magnification y).
61b7601829ea with modal support
tz
parents: 636
diff changeset
   562
        lineEndingPoint   := lineStartingPoint + (aRectangle width@0).
636
d53428252193 revised version
tz
parents: 633
diff changeset
   563
        oldColor := self paint.
d53428252193 revised version
tz
parents: 633
diff changeset
   564
        self xoring:
d53428252193 revised version
tz
parents: 633
diff changeset
   565
        [
662
61b7601829ea with modal support
tz
parents: 636
diff changeset
   566
            self displayLineFrom: lineStartingPoint to: lineEndingPoint.
61b7601829ea with modal support
tz
parents: 636
diff changeset
   567
            lineStartingPoint x to: lineStartingPoint x + aRectangle width - magnification x by: magnification x do:
61b7601829ea with modal support
tz
parents: 636
diff changeset
   568
            [:x|   
61b7601829ea with modal support
tz
parents: 636
diff changeset
   569
                self displayLineFrom: x@(origin y) to: x@(origin y + magnification y)
61b7601829ea with modal support
tz
parents: 636
diff changeset
   570
            ].
636
d53428252193 revised version
tz
parents: 633
diff changeset
   571
        ].
d53428252193 revised version
tz
parents: 633
diff changeset
   572
        self paint: oldColor.
d53428252193 revised version
tz
parents: 633
diff changeset
   573
    ]
662
61b7601829ea with modal support
tz
parents: 636
diff changeset
   574
61b7601829ea with modal support
tz
parents: 636
diff changeset
   575
61b7601829ea with modal support
tz
parents: 636
diff changeset
   576
636
d53428252193 revised version
tz
parents: 633
diff changeset
   577
!
d53428252193 revised version
tz
parents: 633
diff changeset
   578
d53428252193 revised version
tz
parents: 633
diff changeset
   579
drawLabel: aLabel
d53428252193 revised version
tz
parents: 633
diff changeset
   580
686
33833bcbb5cd some cleans
tz
parents: 678
diff changeset
   581
    (masterApplication respondsTo: #coordLabel)
636
d53428252193 revised version
tz
parents: 633
diff changeset
   582
    ifTrue:
688
e1c30adb37bf updates coord info label while defining boxes
tz
parents: 686
diff changeset
   583
    [  
e1c30adb37bf updates coord info label while defining boxes
tz
parents: 686
diff changeset
   584
        masterApplication coordLabel label ~= aLabel
e1c30adb37bf updates coord info label while defining boxes
tz
parents: 686
diff changeset
   585
        ifTrue:
693
e229810e61fb save method as with superclass #Object
tz
parents: 691
diff changeset
   586
        [         
688
e1c30adb37bf updates coord info label while defining boxes
tz
parents: 686
diff changeset
   587
            masterApplication coordLabel label: aLabel printString.
e1c30adb37bf updates coord info label while defining boxes
tz
parents: 686
diff changeset
   588
            masterApplication coordLabel redraw
e1c30adb37bf updates coord info label while defining boxes
tz
parents: 686
diff changeset
   589
        ]
636
d53428252193 revised version
tz
parents: 633
diff changeset
   590
    ]
d53428252193 revised version
tz
parents: 633
diff changeset
   591
!
d53428252193 revised version
tz
parents: 633
diff changeset
   592
d53428252193 revised version
tz
parents: 633
diff changeset
   593
drawRectangleStartingAt: aPoint emphasis: emphasis
632
be1ac8ea33a7 checkin from browser
tz
parents: 628
diff changeset
   594
688
e1c30adb37bf updates coord info label while defining boxes
tz
parents: 686
diff changeset
   595
    |currentPoint currentExtent firstPoint lastCurrentPoint gridCorrection p whichQuarter|
632
be1ac8ea33a7 checkin from browser
tz
parents: 628
diff changeset
   596
    firstPoint := currentPoint := lastCurrentPoint := aPoint//magnification*magnification.
686
33833bcbb5cd some cleans
tz
parents: 678
diff changeset
   597
    magnification > GridMagnification ifFalse: [gridCorrection := 0] ifTrue: [gridCorrection := 1].
33833bcbb5cd some cleans
tz
parents: 678
diff changeset
   598
    [device anyButtonPressed]
627
e0bf28f61361 many many fixes/enhancements
tz
parents: 624
diff changeset
   599
    whileTrue:
e0bf28f61361 many many fixes/enhancements
tz
parents: 624
diff changeset
   600
    [   
632
be1ac8ea33a7 checkin from browser
tz
parents: 628
diff changeset
   601
        currentPoint := (0@0) max: (image extent * magnification min: (p := self translation negated + (device translatePoint: self sensor mousePoint from:device rootView id to:self id))).
627
e0bf28f61361 many many fixes/enhancements
tz
parents: 624
diff changeset
   602
        currentPoint := currentPoint//magnification*magnification.
e0bf28f61361 many many fixes/enhancements
tz
parents: 624
diff changeset
   603
        currentExtent := (firstPoint - currentPoint) abs.
688
e1c30adb37bf updates coord info label while defining boxes
tz
parents: 686
diff changeset
   604
        whichQuarter := (firstPoint x - currentPoint x) > 0 
e1c30adb37bf updates coord info label while defining boxes
tz
parents: 686
diff changeset
   605
             ifTrue:  [(firstPoint y - currentPoint y) > 0 ifTrue: ["4"1@1] ifFalse: ["3"1@0]]
e1c30adb37bf updates coord info label while defining boxes
tz
parents: 686
diff changeset
   606
             ifFalse: [(firstPoint y - currentPoint y) > 0 ifTrue: ["1"0@1] ifFalse: ["2"0@0]].
e1c30adb37bf updates coord info label while defining boxes
tz
parents: 686
diff changeset
   607
747
62bfe8d8fb4d show extent when defining boxes
tz
parents: 737
diff changeset
   608
        self drawCursorAt: p withLabel: 
62bfe8d8fb4d show extent when defining boxes
tz
parents: 737
diff changeset
   609
            ((firstPoint//magnification - whichQuarter + 1) printString, 
62bfe8d8fb4d show extent when defining boxes
tz
parents: 737
diff changeset
   610
            ' to: ', 
62bfe8d8fb4d show extent when defining boxes
tz
parents: 737
diff changeset
   611
            (currentPoint//magnification + whichQuarter) printString),
62bfe8d8fb4d show extent when defining boxes
tz
parents: 737
diff changeset
   612
            ' (extent: ',
62bfe8d8fb4d show extent when defining boxes
tz
parents: 737
diff changeset
   613
            (currentExtent//magnification) printString, ')'.
632
be1ac8ea33a7 checkin from browser
tz
parents: 628
diff changeset
   614
627
e0bf28f61361 many many fixes/enhancements
tz
parents: 624
diff changeset
   615
        currentPoint ~= lastCurrentPoint ifTrue:
632
be1ac8ea33a7 checkin from browser
tz
parents: 628
diff changeset
   616
        [          
be1ac8ea33a7 checkin from browser
tz
parents: 628
diff changeset
   617
            emphasis = #inverseFilledBox
627
e0bf28f61361 many many fixes/enhancements
tz
parents: 624
diff changeset
   618
            ifTrue:
e0bf28f61361 many many fixes/enhancements
tz
parents: 624
diff changeset
   619
            [
662
61b7601829ea with modal support
tz
parents: 636
diff changeset
   620
                self redraw: ((firstPoint min: lastCurrentPoint) - 1 extent: (firstPoint - lastCurrentPoint) abs + 2).
633
594edef86630 revised version
tz
parents: 632
diff changeset
   621
                self xoring: [self fillRectangle: ((firstPoint min: currentPoint) + 1 extent: currentExtent - gridCorrection)]
627
e0bf28f61361 many many fixes/enhancements
tz
parents: 624
diff changeset
   622
            ].
632
be1ac8ea33a7 checkin from browser
tz
parents: 628
diff changeset
   623
            emphasis = #box
627
e0bf28f61361 many many fixes/enhancements
tz
parents: 624
diff changeset
   624
            ifTrue:
e0bf28f61361 many many fixes/enhancements
tz
parents: 624
diff changeset
   625
            [
662
61b7601829ea with modal support
tz
parents: 636
diff changeset
   626
                |origin extent lineWidthY lineWidthX|
61b7601829ea with modal support
tz
parents: 636
diff changeset
   627
                origin := (firstPoint min: lastCurrentPoint) - 1.
61b7601829ea with modal support
tz
parents: 636
diff changeset
   628
                extent := (firstPoint - lastCurrentPoint) abs + 2.
61b7601829ea with modal support
tz
parents: 636
diff changeset
   629
                lineWidthY := extent y min: (magnification y + 2).
61b7601829ea with modal support
tz
parents: 636
diff changeset
   630
                lineWidthX := extent x min: (magnification x + 2).
61b7601829ea with modal support
tz
parents: 636
diff changeset
   631
                self redraw: (origin extent: (extent x@lineWidthY)).
61b7601829ea with modal support
tz
parents: 636
diff changeset
   632
                self redraw: ((origin x@(origin y + extent y - lineWidthY)) extent: (extent x@lineWidthY)).
61b7601829ea with modal support
tz
parents: 636
diff changeset
   633
                self redraw: ((origin x@(origin y + lineWidthY)) extent: (lineWidthX@(0 max: (extent y - (lineWidthY * 2))))).
61b7601829ea with modal support
tz
parents: 636
diff changeset
   634
                self redraw: (((origin x + extent x - lineWidthX)@(origin y + lineWidthY)) extent: (lineWidthX@(extent y - (lineWidthY * 2)))).
627
e0bf28f61361 many many fixes/enhancements
tz
parents: 624
diff changeset
   635
                self selectedColor ~= Color noColor
e0bf28f61361 many many fixes/enhancements
tz
parents: 624
diff changeset
   636
                    ifTrue: [self paint: self selectedColor]
e0bf28f61361 many many fixes/enhancements
tz
parents: 624
diff changeset
   637
                    ifFalse: [self paint: self viewBackground].
662
61b7601829ea with modal support
tz
parents: 636
diff changeset
   638
                origin := (firstPoint min: currentPoint) + 1.
61b7601829ea with modal support
tz
parents: 636
diff changeset
   639
                extent := currentExtent - gridCorrection.
61b7601829ea with modal support
tz
parents: 636
diff changeset
   640
                lineWidthY := extent y min: magnification y.
61b7601829ea with modal support
tz
parents: 636
diff changeset
   641
                lineWidthX := extent x min: magnification x.
61b7601829ea with modal support
tz
parents: 636
diff changeset
   642
                (lineWidthY > 0) & (lineWidthX > 0)
61b7601829ea with modal support
tz
parents: 636
diff changeset
   643
                ifTrue:
61b7601829ea with modal support
tz
parents: 636
diff changeset
   644
                [
61b7601829ea with modal support
tz
parents: 636
diff changeset
   645
                    self fillRectangle: (origin extent: (extent x@lineWidthY)).
61b7601829ea with modal support
tz
parents: 636
diff changeset
   646
                    self fillRectangle: ((origin x@(origin y + extent y - lineWidthY)) extent: (extent x@lineWidthY)).
61b7601829ea with modal support
tz
parents: 636
diff changeset
   647
                    self fillRectangle: ((origin x@(origin y + lineWidthY)) extent: (lineWidthX@(0 max: (extent y - (lineWidthY * 2))))).
61b7601829ea with modal support
tz
parents: 636
diff changeset
   648
                    self fillRectangle: (((origin x + extent x - lineWidthX)@(origin y + lineWidthY)) extent: (lineWidthX@(extent y - (lineWidthY * 2)))).
61b7601829ea with modal support
tz
parents: 636
diff changeset
   649
                ]
632
be1ac8ea33a7 checkin from browser
tz
parents: 628
diff changeset
   650
            ].
be1ac8ea33a7 checkin from browser
tz
parents: 628
diff changeset
   651
            emphasis = #filledBox
be1ac8ea33a7 checkin from browser
tz
parents: 628
diff changeset
   652
            ifTrue:
be1ac8ea33a7 checkin from browser
tz
parents: 628
diff changeset
   653
            [
662
61b7601829ea with modal support
tz
parents: 636
diff changeset
   654
                self redraw: ((firstPoint min: lastCurrentPoint) - 1 extent: (firstPoint - lastCurrentPoint) abs + 2).
632
be1ac8ea33a7 checkin from browser
tz
parents: 628
diff changeset
   655
                self selectedColor ~= Color noColor
be1ac8ea33a7 checkin from browser
tz
parents: 628
diff changeset
   656
                    ifTrue: [self paint: self selectedColor]
be1ac8ea33a7 checkin from browser
tz
parents: 628
diff changeset
   657
                    ifFalse: [self paint: self viewBackground].
633
594edef86630 revised version
tz
parents: 632
diff changeset
   658
                self fillRectangle: ((firstPoint min: currentPoint) + 1 extent: currentExtent - gridCorrection).
632
be1ac8ea33a7 checkin from browser
tz
parents: 628
diff changeset
   659
            ].
627
e0bf28f61361 many many fixes/enhancements
tz
parents: 624
diff changeset
   660
        ]. 
e0bf28f61361 many many fixes/enhancements
tz
parents: 624
diff changeset
   661
        lastCurrentPoint := currentPoint.
e0bf28f61361 many many fixes/enhancements
tz
parents: 624
diff changeset
   662
    ].
662
61b7601829ea with modal support
tz
parents: 636
diff changeset
   663
694
343910836894 instance variable editMode move to class variables
tz
parents: 693
diff changeset
   664
    ^((0@0) max: (firstPoint min: currentPoint)) extent: (firstPoint - currentPoint) abs
627
e0bf28f61361 many many fixes/enhancements
tz
parents: 624
diff changeset
   665
! !
e0bf28f61361 many many fixes/enhancements
tz
parents: 624
diff changeset
   666
e0bf28f61361 many many fixes/enhancements
tz
parents: 624
diff changeset
   667
!ImageEditView methodsFor:'image setting'!
e0bf28f61361 many many fixes/enhancements
tz
parents: 624
diff changeset
   668
e0bf28f61361 many many fixes/enhancements
tz
parents: 624
diff changeset
   669
image:anImage
e0bf28f61361 many many fixes/enhancements
tz
parents: 624
diff changeset
   670
688
e1c30adb37bf updates coord info label while defining boxes
tz
parents: 686
diff changeset
   671
    anImage isImage
627
e0bf28f61361 many many fixes/enhancements
tz
parents: 624
diff changeset
   672
    ifTrue:
725
0e051202859d checkin from browser
tz
parents: 724
diff changeset
   673
    [           
688
e1c30adb37bf updates coord info label while defining boxes
tz
parents: 686
diff changeset
   674
        (image isNil or: [self checkModified])
e1c30adb37bf updates coord info label while defining boxes
tz
parents: 686
diff changeset
   675
        ifTrue:
e1c30adb37bf updates coord info label while defining boxes
tz
parents: 686
diff changeset
   676
        [
827
155b4ed10c7c remember the file name if changed
tz
parents: 823
diff changeset
   677
            |fileName|
725
0e051202859d checkin from browser
tz
parents: 724
diff changeset
   678
            undoImage := image.
796
b68b09ddc62b preview redrawing
tz
parents: 783
diff changeset
   679
            masterApplication notNil 
b68b09ddc62b preview redrawing
tz
parents: 783
diff changeset
   680
            ifTrue: 
b68b09ddc62b preview redrawing
tz
parents: 783
diff changeset
   681
            [
b68b09ddc62b preview redrawing
tz
parents: 783
diff changeset
   682
                undoImage notNil ifTrue: [masterApplication valueOfCanUndo value: true].
b68b09ddc62b preview redrawing
tz
parents: 783
diff changeset
   683
                masterApplication imagePreView image: anImage
b68b09ddc62b preview redrawing
tz
parents: 783
diff changeset
   684
            ].
827
155b4ed10c7c remember the file name if changed
tz
parents: 823
diff changeset
   685
            image notNil
155b4ed10c7c remember the file name if changed
tz
parents: 823
diff changeset
   686
            ifTrue:
155b4ed10c7c remember the file name if changed
tz
parents: 823
diff changeset
   687
            [
155b4ed10c7c remember the file name if changed
tz
parents: 823
diff changeset
   688
                fileName := image fileName.
155b4ed10c7c remember the file name if changed
tz
parents: 823
diff changeset
   689
                anImage fileName isNil ifTrue: [anImage fileName: fileName].
155b4ed10c7c remember the file name if changed
tz
parents: 823
diff changeset
   690
            ].
688
e1c30adb37bf updates coord info label while defining boxes
tz
parents: 686
diff changeset
   691
            super image: anImage.
e1c30adb37bf updates coord info label while defining boxes
tz
parents: 686
diff changeset
   692
            ^self
e1c30adb37bf updates coord info label while defining boxes
tz
parents: 686
diff changeset
   693
        ].
e1c30adb37bf updates coord info label while defining boxes
tz
parents: 686
diff changeset
   694
        ^nil
674
f24ca336b717 if none image found for loading clear image
tz
parents: 662
diff changeset
   695
    ]
f24ca336b717 if none image found for loading clear image
tz
parents: 662
diff changeset
   696
    ifFalse:
f24ca336b717 if none image found for loading clear image
tz
parents: 662
diff changeset
   697
    [
f24ca336b717 if none image found for loading clear image
tz
parents: 662
diff changeset
   698
        super image: nil.
f24ca336b717 if none image found for loading clear image
tz
parents: 662
diff changeset
   699
        ^nil
f24ca336b717 if none image found for loading clear image
tz
parents: 662
diff changeset
   700
    ]
627
e0bf28f61361 many many fixes/enhancements
tz
parents: 624
diff changeset
   701
!
e0bf28f61361 many many fixes/enhancements
tz
parents: 624
diff changeset
   702
e0bf28f61361 many many fixes/enhancements
tz
parents: 624
diff changeset
   703
loadFromFile: aFileName
624
d98fe4700fc2 checkin from browser
tz
parents: 606
diff changeset
   704
676
fd7918a3e6e6 load + preview redraw errors removed
tz
parents: 674
diff changeset
   705
    aFileName isNil ifTrue: [^nil].
624
d98fe4700fc2 checkin from browser
tz
parents: 606
diff changeset
   706
    Object errorSignal handle:
d98fe4700fc2 checkin from browser
tz
parents: 606
diff changeset
   707
    [:exeption|
674
f24ca336b717 if none image found for loading clear image
tz
parents: 662
diff changeset
   708
        modified := false.
632
be1ac8ea33a7 checkin from browser
tz
parents: 628
diff changeset
   709
        self warn: exeption errorString.
624
d98fe4700fc2 checkin from browser
tz
parents: 606
diff changeset
   710
        ^nil
d98fe4700fc2 checkin from browser
tz
parents: 606
diff changeset
   711
    ] 
d98fe4700fc2 checkin from browser
tz
parents: 606
diff changeset
   712
    do:
676
fd7918a3e6e6 load + preview redraw errors removed
tz
parents: 674
diff changeset
   713
    [ 
fd7918a3e6e6 load + preview redraw errors removed
tz
parents: 674
diff changeset
   714
        |imageFromFile|
fd7918a3e6e6 load + preview redraw errors removed
tz
parents: 674
diff changeset
   715
        (imageFromFile := Image fromFile: aFileName) notNil
632
be1ac8ea33a7 checkin from browser
tz
parents: 628
diff changeset
   716
        ifTrue:
be1ac8ea33a7 checkin from browser
tz
parents: 628
diff changeset
   717
        [
676
fd7918a3e6e6 load + preview redraw errors removed
tz
parents: 674
diff changeset
   718
            self image: imageFromFile. 
632
be1ac8ea33a7 checkin from browser
tz
parents: 628
diff changeset
   719
            imageReaderClass := ImageReader allSubclasses
be1ac8ea33a7 checkin from browser
tz
parents: 628
diff changeset
   720
                detect: [:cls| cls isValidImageFile: aFileName]
be1ac8ea33a7 checkin from browser
tz
parents: 628
diff changeset
   721
                ifNone: [self error: 'Unknown image file format!!']
be1ac8ea33a7 checkin from browser
tz
parents: 628
diff changeset
   722
        ]
be1ac8ea33a7 checkin from browser
tz
parents: 628
diff changeset
   723
        ifFalse:
be1ac8ea33a7 checkin from browser
tz
parents: 628
diff changeset
   724
        [
be1ac8ea33a7 checkin from browser
tz
parents: 628
diff changeset
   725
            self error: 'Image on file not found!!'
be1ac8ea33a7 checkin from browser
tz
parents: 628
diff changeset
   726
        ]
676
fd7918a3e6e6 load + preview redraw errors removed
tz
parents: 674
diff changeset
   727
    ]
624
d98fe4700fc2 checkin from browser
tz
parents: 606
diff changeset
   728
!
255
1dfa8deddaef checkin from browser
Claus Gittinger <cg@exept.de>
parents: 251
diff changeset
   729
633
594edef86630 revised version
tz
parents: 632
diff changeset
   730
loadFromMessage: aMessage
594edef86630 revised version
tz
parents: 632
diff changeset
   731
594edef86630 revised version
tz
parents: 632
diff changeset
   732
    (self resourceMessage: aMessage) isNil
594edef86630 revised version
tz
parents: 632
diff changeset
   733
    ifTrue:
594edef86630 revised version
tz
parents: 632
diff changeset
   734
    [
594edef86630 revised version
tz
parents: 632
diff changeset
   735
        ^nil
594edef86630 revised version
tz
parents: 632
diff changeset
   736
    ].
624
d98fe4700fc2 checkin from browser
tz
parents: 606
diff changeset
   737
633
594edef86630 revised version
tz
parents: 632
diff changeset
   738
    ^self loadfromClass: resourceClass andSelector: resourceSelector
594edef86630 revised version
tz
parents: 632
diff changeset
   739
594edef86630 revised version
tz
parents: 632
diff changeset
   740
   
594edef86630 revised version
tz
parents: 632
diff changeset
   741
!
594edef86630 revised version
tz
parents: 632
diff changeset
   742
594edef86630 revised version
tz
parents: 632
diff changeset
   743
loadfromClass: aClassOrSymbol andSelector: aStringOrSymbol
594edef86630 revised version
tz
parents: 632
diff changeset
   744
678
9afa8810a8be image must not be nil after load failure
tz
parents: 676
diff changeset
   745
    |aClass| 
9afa8810a8be image must not be nil after load failure
tz
parents: 676
diff changeset
   746
627
e0bf28f61361 many many fixes/enhancements
tz
parents: 624
diff changeset
   747
    imageReaderClass := nil.
e0bf28f61361 many many fixes/enhancements
tz
parents: 624
diff changeset
   748
    self resourceClass: aClassOrSymbol.
e0bf28f61361 many many fixes/enhancements
tz
parents: 624
diff changeset
   749
    self resourceSelector: aStringOrSymbol.
678
9afa8810a8be image must not be nil after load failure
tz
parents: 676
diff changeset
   750
9afa8810a8be image must not be nil after load failure
tz
parents: 676
diff changeset
   751
    ((aClass := Smalltalk at: resourceClass) isClass and: 
9afa8810a8be image must not be nil after load failure
tz
parents: 676
diff changeset
   752
    [aClass class implements: resourceSelector])
624
d98fe4700fc2 checkin from browser
tz
parents: 606
diff changeset
   753
    ifTrue:
d98fe4700fc2 checkin from browser
tz
parents: 606
diff changeset
   754
    [ 
627
e0bf28f61361 many many fixes/enhancements
tz
parents: 624
diff changeset
   755
        ^self image: (aClass perform: resourceSelector) copy
674
f24ca336b717 if none image found for loading clear image
tz
parents: 662
diff changeset
   756
    ]
f24ca336b717 if none image found for loading clear image
tz
parents: 662
diff changeset
   757
    ifFalse:
f24ca336b717 if none image found for loading clear image
tz
parents: 662
diff changeset
   758
    [
f24ca336b717 if none image found for loading clear image
tz
parents: 662
diff changeset
   759
        modified := false.
f24ca336b717 if none image found for loading clear image
tz
parents: 662
diff changeset
   760
        ^nil
f24ca336b717 if none image found for loading clear image
tz
parents: 662
diff changeset
   761
    ]
f24ca336b717 if none image found for loading clear image
tz
parents: 662
diff changeset
   762
161
5b6e284959a4 examples
Claus Gittinger <cg@exept.de>
parents: 86
diff changeset
   763
! !
5b6e284959a4 examples
Claus Gittinger <cg@exept.de>
parents: 86
diff changeset
   764
1
c6ca7bfedf31 Initial revision
claus
parents:
diff changeset
   765
!ImageEditView methodsFor:'initialization'!
c6ca7bfedf31 Initial revision
claus
parents:
diff changeset
   766
161
5b6e284959a4 examples
Claus Gittinger <cg@exept.de>
parents: 86
diff changeset
   767
initialize
624
d98fe4700fc2 checkin from browser
tz
parents: 606
diff changeset
   768
161
5b6e284959a4 examples
Claus Gittinger <cg@exept.de>
parents: 86
diff changeset
   769
    super initialize.
627
e0bf28f61361 many many fixes/enhancements
tz
parents: 624
diff changeset
   770
686
33833bcbb5cd some cleans
tz
parents: 678
diff changeset
   771
    self enableMotionEvents.
33833bcbb5cd some cleans
tz
parents: 678
diff changeset
   772
    GridMagnification := GridMagnification ? (8@8).
783
c81a097b84b8 revised version
tz
parents: 747
diff changeset
   773
    magnification := GridMagnification + 2.
627
e0bf28f61361 many many fixes/enhancements
tz
parents: 624
diff changeset
   774
    modified := false.
e0bf28f61361 many many fixes/enhancements
tz
parents: 624
diff changeset
   775
    mouseKeyColorMode := 1.
e0bf28f61361 many many fixes/enhancements
tz
parents: 624
diff changeset
   776
    resourceClass := resourceSelector := ''.
e0bf28f61361 many many fixes/enhancements
tz
parents: 624
diff changeset
   777
    selectColors := Array with: nil with: nil.
1
c6ca7bfedf31 Initial revision
claus
parents:
diff changeset
   778
! !
c6ca7bfedf31 Initial revision
claus
parents:
diff changeset
   779
636
d53428252193 revised version
tz
parents: 633
diff changeset
   780
!ImageEditView methodsFor:'printing & storing'!
1
c6ca7bfedf31 Initial revision
claus
parents:
diff changeset
   781
724
d6f4b89940ed undo disabling
tz
parents: 704
diff changeset
   782
loadFromClass
404
322e32d8f099 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 398
diff changeset
   783
676
fd7918a3e6e6 load + preview redraw errors removed
tz
parents: 674
diff changeset
   784
    ^self loadFromMessage: 
636
d53428252193 revised version
tz
parents: 633
diff changeset
   785
        (ResourceSelectionBrowser
662
61b7601829ea with modal support
tz
parents: 636
diff changeset
   786
            request: 'Load Image From Class'
724
d6f4b89940ed undo disabling
tz
parents: 704
diff changeset
   787
            onSuperclass: nil
636
d53428252193 revised version
tz
parents: 633
diff changeset
   788
            andClass: self resourceClass
d53428252193 revised version
tz
parents: 633
diff changeset
   789
            andSelector: self resourceSelector
d53428252193 revised version
tz
parents: 633
diff changeset
   790
            withResourceTypes: #(image fileImage))
d53428252193 revised version
tz
parents: 633
diff changeset
   791
            
477
37f12d35c359 added #resize.
Claus Gittinger <cg@exept.de>
parents: 430
diff changeset
   792
161
5b6e284959a4 examples
Claus Gittinger <cg@exept.de>
parents: 86
diff changeset
   793
!
5b6e284959a4 examples
Claus Gittinger <cg@exept.de>
parents: 86
diff changeset
   794
627
e0bf28f61361 many many fixes/enhancements
tz
parents: 624
diff changeset
   795
print
624
d98fe4700fc2 checkin from browser
tz
parents: 606
diff changeset
   796
686
33833bcbb5cd some cleans
tz
parents: 678
diff changeset
   797
    image notNil 
33833bcbb5cd some cleans
tz
parents: 678
diff changeset
   798
    ifTrue: 
636
d53428252193 revised version
tz
parents: 633
diff changeset
   799
    [
686
33833bcbb5cd some cleans
tz
parents: 678
diff changeset
   800
        |stream|
33833bcbb5cd some cleans
tz
parents: 678
diff changeset
   801
        Printer supportsPostscript ifFalse:
33833bcbb5cd some cleans
tz
parents: 678
diff changeset
   802
        [
33833bcbb5cd some cleans
tz
parents: 678
diff changeset
   803
            ^self warn:'No postscript printer detected!!'
33833bcbb5cd some cleans
tz
parents: 678
diff changeset
   804
        ].
33833bcbb5cd some cleans
tz
parents: 678
diff changeset
   805
        stream := Printer newNative.
33833bcbb5cd some cleans
tz
parents: 678
diff changeset
   806
        stream isNil ifTrue:
33833bcbb5cd some cleans
tz
parents: 678
diff changeset
   807
        [
33833bcbb5cd some cleans
tz
parents: 678
diff changeset
   808
            ^self warn:'Cannot open printer stream!!'
33833bcbb5cd some cleans
tz
parents: 678
diff changeset
   809
        ].
33833bcbb5cd some cleans
tz
parents: 678
diff changeset
   810
        self withWaitCursorDo:
33833bcbb5cd some cleans
tz
parents: 678
diff changeset
   811
        [
33833bcbb5cd some cleans
tz
parents: 678
diff changeset
   812
            |psgc|
823
a290d145a09f resource method comment
tz
parents: 822
diff changeset
   813
            psgc := PSGraphicsContext on:stream.  
686
33833bcbb5cd some cleans
tz
parents: 678
diff changeset
   814
            psgc displayForm: (image magnifiedBy: magnification) x:0 y:0.
33833bcbb5cd some cleans
tz
parents: 678
diff changeset
   815
            psgc close
33833bcbb5cd some cleans
tz
parents: 678
diff changeset
   816
        ]
398
7b7255a4db0d show a wait cursor while printing
Claus Gittinger <cg@exept.de>
parents: 362
diff changeset
   817
    ]
624
d98fe4700fc2 checkin from browser
tz
parents: 606
diff changeset
   818
!
d98fe4700fc2 checkin from browser
tz
parents: 606
diff changeset
   819
d98fe4700fc2 checkin from browser
tz
parents: 606
diff changeset
   820
save
d98fe4700fc2 checkin from browser
tz
parents: 606
diff changeset
   821
632
be1ac8ea33a7 checkin from browser
tz
parents: 628
diff changeset
   822
    self saveImageOrMask: #image.
be1ac8ea33a7 checkin from browser
tz
parents: 628
diff changeset
   823
624
d98fe4700fc2 checkin from browser
tz
parents: 606
diff changeset
   824
!
d98fe4700fc2 checkin from browser
tz
parents: 606
diff changeset
   825
297
d733af1b0ffe better saving functions;
Claus Gittinger <cg@exept.de>
parents: 296
diff changeset
   826
saveAs
d733af1b0ffe better saving functions;
Claus Gittinger <cg@exept.de>
parents: 296
diff changeset
   827
627
e0bf28f61361 many many fixes/enhancements
tz
parents: 624
diff changeset
   828
    self saveImageFileAs
297
d733af1b0ffe better saving functions;
Claus Gittinger <cg@exept.de>
parents: 296
diff changeset
   829
!
d733af1b0ffe better saving functions;
Claus Gittinger <cg@exept.de>
parents: 296
diff changeset
   830
627
e0bf28f61361 many many fixes/enhancements
tz
parents: 624
diff changeset
   831
saveImageFileAs
e0bf28f61361 many many fixes/enhancements
tz
parents: 624
diff changeset
   832
633
594edef86630 revised version
tz
parents: 632
diff changeset
   833
    self saveImageFileAs:
594edef86630 revised version
tz
parents: 632
diff changeset
   834
        (FileSelectionBrowser
822
cace81f0a86b do not overwrite method categories + toggle between mouse button colors
tz
parents: 796
diff changeset
   835
            request: 'Save Image To File'
827
155b4ed10c7c remember the file name if changed
tz
parents: 823
diff changeset
   836
            fileName: self image fileName
155b4ed10c7c remember the file name if changed
tz
parents: 823
diff changeset
   837
            withFileFilters: FileSelectionBrowser saveImageFileNameFilters)
627
e0bf28f61361 many many fixes/enhancements
tz
parents: 624
diff changeset
   838
!
297
d733af1b0ffe better saving functions;
Claus Gittinger <cg@exept.de>
parents: 296
diff changeset
   839
627
e0bf28f61361 many many fixes/enhancements
tz
parents: 624
diff changeset
   840
saveImageFileAs: aFileName
297
d733af1b0ffe better saving functions;
Claus Gittinger <cg@exept.de>
parents: 296
diff changeset
   841
633
594edef86630 revised version
tz
parents: 632
diff changeset
   842
    aFileName isNil ifTrue: [^nil].
636
d53428252193 revised version
tz
parents: 633
diff changeset
   843
    image notNil
627
e0bf28f61361 many many fixes/enhancements
tz
parents: 624
diff changeset
   844
    ifTrue:
e0bf28f61361 many many fixes/enhancements
tz
parents: 624
diff changeset
   845
    [
e0bf28f61361 many many fixes/enhancements
tz
parents: 624
diff changeset
   846
        image fileName: aFileName.
632
be1ac8ea33a7 checkin from browser
tz
parents: 628
diff changeset
   847
        self saveImageOrMask: #image
be1ac8ea33a7 checkin from browser
tz
parents: 628
diff changeset
   848
    ]
be1ac8ea33a7 checkin from browser
tz
parents: 628
diff changeset
   849
    ifFalse:
be1ac8ea33a7 checkin from browser
tz
parents: 628
diff changeset
   850
    [
633
594edef86630 revised version
tz
parents: 632
diff changeset
   851
        self warn: 'No image or file name for saving detected!!'
632
be1ac8ea33a7 checkin from browser
tz
parents: 628
diff changeset
   852
    ]
be1ac8ea33a7 checkin from browser
tz
parents: 628
diff changeset
   853
!
be1ac8ea33a7 checkin from browser
tz
parents: 628
diff changeset
   854
be1ac8ea33a7 checkin from browser
tz
parents: 628
diff changeset
   855
saveImageMaskFileAs
be1ac8ea33a7 checkin from browser
tz
parents: 628
diff changeset
   856
633
594edef86630 revised version
tz
parents: 632
diff changeset
   857
    self saveImageMaskFileAs:
636
d53428252193 revised version
tz
parents: 633
diff changeset
   858
        (FileSelectionBrowser
822
cace81f0a86b do not overwrite method categories + toggle between mouse button colors
tz
parents: 796
diff changeset
   859
            request: 'Save Image Mask To File'
827
155b4ed10c7c remember the file name if changed
tz
parents: 823
diff changeset
   860
            fileName: self image fileName 
155b4ed10c7c remember the file name if changed
tz
parents: 823
diff changeset
   861
            withFileFilters: FileSelectionBrowser saveImageFileNameFilters)
632
be1ac8ea33a7 checkin from browser
tz
parents: 628
diff changeset
   862
!
be1ac8ea33a7 checkin from browser
tz
parents: 628
diff changeset
   863
be1ac8ea33a7 checkin from browser
tz
parents: 628
diff changeset
   864
saveImageMaskFileAs: aFileName
be1ac8ea33a7 checkin from browser
tz
parents: 628
diff changeset
   865
633
594edef86630 revised version
tz
parents: 632
diff changeset
   866
    aFileName isNil ifTrue: [^nil].
632
be1ac8ea33a7 checkin from browser
tz
parents: 628
diff changeset
   867
    (image notNil and: [image mask notNil])
be1ac8ea33a7 checkin from browser
tz
parents: 628
diff changeset
   868
    ifTrue:
be1ac8ea33a7 checkin from browser
tz
parents: 628
diff changeset
   869
    [
be1ac8ea33a7 checkin from browser
tz
parents: 628
diff changeset
   870
        image mask fileName: aFileName.
be1ac8ea33a7 checkin from browser
tz
parents: 628
diff changeset
   871
        self saveImageOrMask: #mask
627
e0bf28f61361 many many fixes/enhancements
tz
parents: 624
diff changeset
   872
    ]
e0bf28f61361 many many fixes/enhancements
tz
parents: 624
diff changeset
   873
    ifFalse:
e0bf28f61361 many many fixes/enhancements
tz
parents: 624
diff changeset
   874
    [
632
be1ac8ea33a7 checkin from browser
tz
parents: 628
diff changeset
   875
        self warn: 'No image or image mask detected!!'
627
e0bf28f61361 many many fixes/enhancements
tz
parents: 624
diff changeset
   876
    ]
628
7f36d8a7735f popup menu starts image editor
tz
parents: 627
diff changeset
   877
!
7f36d8a7735f popup menu starts image editor
tz
parents: 627
diff changeset
   878
632
be1ac8ea33a7 checkin from browser
tz
parents: 628
diff changeset
   879
saveImageOrMask: what
628
7f36d8a7735f popup menu starts image editor
tz
parents: 627
diff changeset
   880
632
be1ac8ea33a7 checkin from browser
tz
parents: 628
diff changeset
   881
    Object errorSignal handle:
be1ac8ea33a7 checkin from browser
tz
parents: 628
diff changeset
   882
    [:ex|
be1ac8ea33a7 checkin from browser
tz
parents: 628
diff changeset
   883
        self warn: ex errorString.
be1ac8ea33a7 checkin from browser
tz
parents: 628
diff changeset
   884
        ^nil                                 
be1ac8ea33a7 checkin from browser
tz
parents: 628
diff changeset
   885
    ] 
be1ac8ea33a7 checkin from browser
tz
parents: 628
diff changeset
   886
    do:
be1ac8ea33a7 checkin from browser
tz
parents: 628
diff changeset
   887
    [   
be1ac8ea33a7 checkin from browser
tz
parents: 628
diff changeset
   888
        |fileName|
be1ac8ea33a7 checkin from browser
tz
parents: 628
diff changeset
   889
        image isNil ifTrue: [^self error: 'No image to save!!'].
be1ac8ea33a7 checkin from browser
tz
parents: 628
diff changeset
   890
        what = #image
be1ac8ea33a7 checkin from browser
tz
parents: 628
diff changeset
   891
        ifTrue:
be1ac8ea33a7 checkin from browser
tz
parents: 628
diff changeset
   892
        [   
be1ac8ea33a7 checkin from browser
tz
parents: 628
diff changeset
   893
            image fileName isNil ifTrue: [^self error: 'No file name for image detected!!'].
be1ac8ea33a7 checkin from browser
tz
parents: 628
diff changeset
   894
            fileName := image fileName asFilename
be1ac8ea33a7 checkin from browser
tz
parents: 628
diff changeset
   895
        ].
be1ac8ea33a7 checkin from browser
tz
parents: 628
diff changeset
   896
        what = #mask
be1ac8ea33a7 checkin from browser
tz
parents: 628
diff changeset
   897
        ifTrue:
be1ac8ea33a7 checkin from browser
tz
parents: 628
diff changeset
   898
        [   
be1ac8ea33a7 checkin from browser
tz
parents: 628
diff changeset
   899
            image mask isNil ifTrue: [^self error: 'No image mask to save!!'].
be1ac8ea33a7 checkin from browser
tz
parents: 628
diff changeset
   900
            image mask fileName isNil ifTrue: [^self error: 'No file name for image mask detected!!'].
be1ac8ea33a7 checkin from browser
tz
parents: 628
diff changeset
   901
            fileName := image mask fileName asFilename
be1ac8ea33a7 checkin from browser
tz
parents: 628
diff changeset
   902
        ].
678
9afa8810a8be image must not be nil after load failure
tz
parents: 676
diff changeset
   903
        fileName name size = 0 ifTrue: [^self error: 'No file name detected!!'].
632
be1ac8ea33a7 checkin from browser
tz
parents: 628
diff changeset
   904
        (fileName suffix = 'tiff') | (fileName suffix = 'tif') ifTrue: [imageReaderClass := TIFFReader].
be1ac8ea33a7 checkin from browser
tz
parents: 628
diff changeset
   905
        fileName suffix = 'xpm' ifTrue: [imageReaderClass := XPMReader].
be1ac8ea33a7 checkin from browser
tz
parents: 628
diff changeset
   906
        fileName suffix = 'xbm' ifTrue: [imageReaderClass := XBMReader].
678
9afa8810a8be image must not be nil after load failure
tz
parents: 676
diff changeset
   907
        fileName suffix = 'gif' ifTrue: [imageReaderClass := GIFReader].
632
be1ac8ea33a7 checkin from browser
tz
parents: 628
diff changeset
   908
        (fileName suffix = 'jpg') | (fileName suffix = 'jpeg') ifTrue: [imageReaderClass := JPEGReader].
be1ac8ea33a7 checkin from browser
tz
parents: 628
diff changeset
   909
        imageReaderClass isNil ifTrue: [imageReaderClass := XPMReader. image fileName: image fileName, '.xpm'].
be1ac8ea33a7 checkin from browser
tz
parents: 628
diff changeset
   910
        what = #image ifTrue: [image saveOn: image fileName using: imageReaderClass. modified := false].
be1ac8ea33a7 checkin from browser
tz
parents: 628
diff changeset
   911
        what = #mask ifTrue: [image mask saveOn: image mask fileName using: imageReaderClass].
678
9afa8810a8be image must not be nil after load failure
tz
parents: 676
diff changeset
   912
    ]   
632
be1ac8ea33a7 checkin from browser
tz
parents: 628
diff changeset
   913
be1ac8ea33a7 checkin from browser
tz
parents: 628
diff changeset
   914
       
633
594edef86630 revised version
tz
parents: 632
diff changeset
   915
!
594edef86630 revised version
tz
parents: 632
diff changeset
   916
594edef86630 revised version
tz
parents: 632
diff changeset
   917
saveMethod
594edef86630 revised version
tz
parents: 632
diff changeset
   918
594edef86630 revised version
tz
parents: 632
diff changeset
   919
    Object errorSignal handle:
594edef86630 revised version
tz
parents: 632
diff changeset
   920
    [:ex|
594edef86630 revised version
tz
parents: 632
diff changeset
   921
        self warn: ex errorString.
594edef86630 revised version
tz
parents: 632
diff changeset
   922
        ^nil                                 
594edef86630 revised version
tz
parents: 632
diff changeset
   923
    ] 
594edef86630 revised version
tz
parents: 632
diff changeset
   924
    do:
594edef86630 revised version
tz
parents: 632
diff changeset
   925
    [   
822
cace81f0a86b do not overwrite method categories + toggle between mouse button colors
tz
parents: 796
diff changeset
   926
        |category imageStoreStream cls sel mthd imageKey|
cace81f0a86b do not overwrite method categories + toggle between mouse button colors
tz
parents: 796
diff changeset
   927
633
594edef86630 revised version
tz
parents: 632
diff changeset
   928
        (self resourceSelector trimBlanks size = 0) | (cls := Smalltalk at: self resourceClass) isClass not 
822
cace81f0a86b do not overwrite method categories + toggle between mouse button colors
tz
parents: 796
diff changeset
   929
            ifTrue: [^self saveMethodAs].
690
cf1754e78ba5 image caching support for gui stuff added
tz
parents: 688
diff changeset
   930
633
594edef86630 revised version
tz
parents: 632
diff changeset
   931
        self image storeOn: (imageStoreStream := WriteStream on: '').
690
cf1754e78ba5 image caching support for gui stuff added
tz
parents: 688
diff changeset
   932
        sel := self resourceSelector.
822
cace81f0a86b do not overwrite method categories + toggle between mouse button colors
tz
parents: 796
diff changeset
   933
cace81f0a86b do not overwrite method categories + toggle between mouse button colors
tz
parents: 796
diff changeset
   934
        "/ if that method already exists, do not overwrite the category
cace81f0a86b do not overwrite method categories + toggle between mouse button colors
tz
parents: 796
diff changeset
   935
        category := 'image specs'.
cace81f0a86b do not overwrite method categories + toggle between mouse button colors
tz
parents: 796
diff changeset
   936
        (mthd := cls class compiledMethodAt:sel) notNil ifTrue:[
cace81f0a86b do not overwrite method categories + toggle between mouse button colors
tz
parents: 796
diff changeset
   937
            category := mthd category.
cace81f0a86b do not overwrite method categories + toggle between mouse button colors
tz
parents: 796
diff changeset
   938
        ].
cace81f0a86b do not overwrite method categories + toggle between mouse button colors
tz
parents: 796
diff changeset
   939
690
cf1754e78ba5 image caching support for gui stuff added
tz
parents: 688
diff changeset
   940
        imageKey :=  (cls name, ' ', sel) asSymbol.
cf1754e78ba5 image caching support for gui stuff added
tz
parents: 688
diff changeset
   941
        Icon constantNamed: imageKey put:nil.
633
594edef86630 revised version
tz
parents: 632
diff changeset
   942
        ByteCodeCompiler 
823
a290d145a09f resource method comment
tz
parents: 822
diff changeset
   943
            compile: ((sel,
a290d145a09f resource method comment
tz
parents: 822
diff changeset
   944
                '\', (ResourceSpecEditor codeGenerationCommentForClass: ImageEditor),
a290d145a09f resource method comment
tz
parents: 822
diff changeset
   945
                '\\' , 
a290d145a09f resource method comment
tz
parents: 822
diff changeset
   946
                '    "\',
877
27e63233141d add inspect comment to generated method
Claus Gittinger <cg@exept.de>
parents: 840
diff changeset
   947
                '     self ' , self resourceSelector , ' inspect\',
823
a290d145a09f resource method comment
tz
parents: 822
diff changeset
   948
                '     ImageEditor openOnClass:self andSelector:#', self resourceSelector, 
a290d145a09f resource method comment
tz
parents: 822
diff changeset
   949
                '\    "',
a290d145a09f resource method comment
tz
parents: 822
diff changeset
   950
                '\\',
a290d145a09f resource method comment
tz
parents: 822
diff changeset
   951
                '    <resource: #image>',
a290d145a09f resource method comment
tz
parents: 822
diff changeset
   952
                '\\',
a290d145a09f resource method comment
tz
parents: 822
diff changeset
   953
                '    ^Icon\') withCRs, 
a290d145a09f resource method comment
tz
parents: 822
diff changeset
   954
                '        constantNamed:#''', imageKey, '''\' withCRs,
a290d145a09f resource method comment
tz
parents: 822
diff changeset
   955
                '        ifAbsentPut:[', imageStoreStream contents, ']')
822
cace81f0a86b do not overwrite method categories + toggle between mouse button colors
tz
parents: 796
diff changeset
   956
            forClass: cls class inCategory: category.
633
594edef86630 revised version
tz
parents: 632
diff changeset
   957
        modified := false.
594edef86630 revised version
tz
parents: 632
diff changeset
   958
    ]
594edef86630 revised version
tz
parents: 632
diff changeset
   959
!
594edef86630 revised version
tz
parents: 632
diff changeset
   960
594edef86630 revised version
tz
parents: 632
diff changeset
   961
saveMethodAs
594edef86630 revised version
tz
parents: 632
diff changeset
   962
636
d53428252193 revised version
tz
parents: 633
diff changeset
   963
    (self resourceMessage:
d53428252193 revised version
tz
parents: 633
diff changeset
   964
        (ResourceSelectionBrowser
822
cace81f0a86b do not overwrite method categories + toggle between mouse button colors
tz
parents: 796
diff changeset
   965
            request: 'Save Image In Class'
693
e229810e61fb save method as with superclass #Object
tz
parents: 691
diff changeset
   966
            onSuperclass: #Object
636
d53428252193 revised version
tz
parents: 633
diff changeset
   967
            andClass: self resourceClass
d53428252193 revised version
tz
parents: 633
diff changeset
   968
            andSelector: self resourceSelector
d53428252193 revised version
tz
parents: 633
diff changeset
   969
            withResourceTypes: #(image fileImage))) notNil
633
594edef86630 revised version
tz
parents: 632
diff changeset
   970
    ifTrue:
674
f24ca336b717 if none image found for loading clear image
tz
parents: 662
diff changeset
   971
    [   
633
594edef86630 revised version
tz
parents: 632
diff changeset
   972
        ^self saveMethod
674
f24ca336b717 if none image found for loading clear image
tz
parents: 662
diff changeset
   973
    ].  
633
594edef86630 revised version
tz
parents: 632
diff changeset
   974
    ^nil
1
c6ca7bfedf31 Initial revision
claus
parents:
diff changeset
   975
! !
c6ca7bfedf31 Initial revision
claus
parents:
diff changeset
   976
161
5b6e284959a4 examples
Claus Gittinger <cg@exept.de>
parents: 86
diff changeset
   977
!ImageEditView methodsFor:'queries'!
5
be72e6ba4822 *** empty log message ***
claus
parents: 1
diff changeset
   978
161
5b6e284959a4 examples
Claus Gittinger <cg@exept.de>
parents: 86
diff changeset
   979
heightOfContents
5b6e284959a4 examples
Claus Gittinger <cg@exept.de>
parents: 86
diff changeset
   980
686
33833bcbb5cd some cleans
tz
parents: 678
diff changeset
   981
    image isNil ifTrue:[^0].
33833bcbb5cd some cleans
tz
parents: 678
diff changeset
   982
    ^(image height * magnification y) rounded
5
be72e6ba4822 *** empty log message ***
claus
parents: 1
diff changeset
   983
!
be72e6ba4822 *** empty log message ***
claus
parents: 1
diff changeset
   984
627
e0bf28f61361 many many fixes/enhancements
tz
parents: 624
diff changeset
   985
imageContainsPoint: aPoint
632
be1ac8ea33a7 checkin from browser
tz
parents: 628
diff changeset
   986
be1ac8ea33a7 checkin from browser
tz
parents: 628
diff changeset
   987
    ^image notNil and:
be1ac8ea33a7 checkin from browser
tz
parents: 628
diff changeset
   988
        [((0@0 corner:(image extent) - 1) containsPoint: (((aPoint - margin + 1) / magnification) floor))]
627
e0bf28f61361 many many fixes/enhancements
tz
parents: 624
diff changeset
   989
!
e0bf28f61361 many many fixes/enhancements
tz
parents: 624
diff changeset
   990
783
c81a097b84b8 revised version
tz
parents: 747
diff changeset
   991
imageInfoString
c81a097b84b8 revised version
tz
parents: 747
diff changeset
   992
c81a097b84b8 revised version
tz
parents: 747
diff changeset
   993
    |imageInfoString usedColors|
c81a097b84b8 revised version
tz
parents: 747
diff changeset
   994
    image isNil ifTrue: [imageInfoString := 'No image loaded.'] ifFalse: [
c81a097b84b8 revised version
tz
parents: 747
diff changeset
   995
    image colorMap isNil ifTrue: [usedColors := '?'] ifFalse: [usedColors := image usedColors size].
c81a097b84b8 revised version
tz
parents: 747
diff changeset
   996
    imageInfoString := image width printString, 'x',
c81a097b84b8 revised version
tz
parents: 747
diff changeset
   997
        image height printString, 'x',
c81a097b84b8 revised version
tz
parents: 747
diff changeset
   998
        (2 raisedTo: image depth) printString,
c81a097b84b8 revised version
tz
parents: 747
diff changeset
   999
        (image mask notNil ifTrue: [' (mask + '] ifFalse: ['(']),
c81a097b84b8 revised version
tz
parents: 747
diff changeset
  1000
        usedColors printString,
c81a097b84b8 revised version
tz
parents: 747
diff changeset
  1001
        ' used colors)'].
c81a097b84b8 revised version
tz
parents: 747
diff changeset
  1002
c81a097b84b8 revised version
tz
parents: 747
diff changeset
  1003
    ^imageInfoString
c81a097b84b8 revised version
tz
parents: 747
diff changeset
  1004
!
c81a097b84b8 revised version
tz
parents: 747
diff changeset
  1005
161
5b6e284959a4 examples
Claus Gittinger <cg@exept.de>
parents: 86
diff changeset
  1006
widthOfContents
5
be72e6ba4822 *** empty log message ***
claus
parents: 1
diff changeset
  1007
686
33833bcbb5cd some cleans
tz
parents: 678
diff changeset
  1008
    image isNil ifTrue:[^0].
33833bcbb5cd some cleans
tz
parents: 678
diff changeset
  1009
    ^(image width * magnification x) rounded
5
be72e6ba4822 *** empty log message ***
claus
parents: 1
diff changeset
  1010
! !
be72e6ba4822 *** empty log message ***
claus
parents: 1
diff changeset
  1011
627
e0bf28f61361 many many fixes/enhancements
tz
parents: 624
diff changeset
  1012
!ImageEditView methodsFor:'release'!
e0bf28f61361 many many fixes/enhancements
tz
parents: 624
diff changeset
  1013
e0bf28f61361 many many fixes/enhancements
tz
parents: 624
diff changeset
  1014
destroy
e0bf28f61361 many many fixes/enhancements
tz
parents: 624
diff changeset
  1015
686
33833bcbb5cd some cleans
tz
parents: 678
diff changeset
  1016
    Clipboard := undoImage := nil.
33833bcbb5cd some cleans
tz
parents: 678
diff changeset
  1017
33833bcbb5cd some cleans
tz
parents: 678
diff changeset
  1018
    super destroy
627
e0bf28f61361 many many fixes/enhancements
tz
parents: 624
diff changeset
  1019
e0bf28f61361 many many fixes/enhancements
tz
parents: 624
diff changeset
  1020
! !
e0bf28f61361 many many fixes/enhancements
tz
parents: 624
diff changeset
  1021
632
be1ac8ea33a7 checkin from browser
tz
parents: 628
diff changeset
  1022
!ImageEditView methodsFor:'testing'!
be1ac8ea33a7 checkin from browser
tz
parents: 628
diff changeset
  1023
be1ac8ea33a7 checkin from browser
tz
parents: 628
diff changeset
  1024
checkModified
be1ac8ea33a7 checkin from browser
tz
parents: 628
diff changeset
  1025
be1ac8ea33a7 checkin from browser
tz
parents: 628
diff changeset
  1026
    modified
be1ac8ea33a7 checkin from browser
tz
parents: 628
diff changeset
  1027
    ifTrue:
be1ac8ea33a7 checkin from browser
tz
parents: 628
diff changeset
  1028
    [
be1ac8ea33a7 checkin from browser
tz
parents: 628
diff changeset
  1029
        ((YesNoBox title:'Image was modified!!')        
be1ac8ea33a7 checkin from browser
tz
parents: 628
diff changeset
  1030
            noText:'Cancel';
be1ac8ea33a7 checkin from browser
tz
parents: 628
diff changeset
  1031
            yesText:'Waste it and proceed';
be1ac8ea33a7 checkin from browser
tz
parents: 628
diff changeset
  1032
            showAtPointer;
be1ac8ea33a7 checkin from browser
tz
parents: 628
diff changeset
  1033
            accepted) ifFalse: [^false].
be1ac8ea33a7 checkin from browser
tz
parents: 628
diff changeset
  1034
        modified := false
be1ac8ea33a7 checkin from browser
tz
parents: 628
diff changeset
  1035
    ].
be1ac8ea33a7 checkin from browser
tz
parents: 628
diff changeset
  1036
    ^true
be1ac8ea33a7 checkin from browser
tz
parents: 628
diff changeset
  1037
! !
be1ac8ea33a7 checkin from browser
tz
parents: 628
diff changeset
  1038
255
1dfa8deddaef checkin from browser
Claus Gittinger <cg@exept.de>
parents: 251
diff changeset
  1039
!ImageEditView class methodsFor:'documentation'!
161
5b6e284959a4 examples
Claus Gittinger <cg@exept.de>
parents: 86
diff changeset
  1040
5b6e284959a4 examples
Claus Gittinger <cg@exept.de>
parents: 86
diff changeset
  1041
version
877
27e63233141d add inspect comment to generated method
Claus Gittinger <cg@exept.de>
parents: 840
diff changeset
  1042
    ^ '$Header: /cvs/stx/stx/libwidg2/ImageEditView.st,v 1.76 1998-04-25 12:19:07 cg Exp $'
161
5b6e284959a4 examples
Claus Gittinger <cg@exept.de>
parents: 86
diff changeset
  1043
! !