ImageEditView.st
author claus
Mon, 03 Jul 1995 04:35:33 +0200
changeset 64 10910b8b003a
parent 61 bf2e9153bc5a
child 71 9f9243f5813b
permissions -rw-r--r--
.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
1
c6ca7bfedf31 Initial revision
claus
parents:
diff changeset
     1
"
c6ca7bfedf31 Initial revision
claus
parents:
diff changeset
     2
 COPYRIGHT (c) 1993 by Claus Gittinger
26
ff148983c183 *** empty log message ***
claus
parents: 11
diff changeset
     3
	      All Rights Reserved
1
c6ca7bfedf31 Initial revision
claus
parents:
diff changeset
     4
c6ca7bfedf31 Initial revision
claus
parents:
diff changeset
     5
 This software is furnished under a license and may be used
c6ca7bfedf31 Initial revision
claus
parents:
diff changeset
     6
 only in accordance with the terms of that license and with the
c6ca7bfedf31 Initial revision
claus
parents:
diff changeset
     7
 inclusion of the above copyright notice.   This software may not
c6ca7bfedf31 Initial revision
claus
parents:
diff changeset
     8
 be provided or otherwise made available to, or used by, any
c6ca7bfedf31 Initial revision
claus
parents:
diff changeset
     9
 other person.  No title to or ownership of the software is
c6ca7bfedf31 Initial revision
claus
parents:
diff changeset
    10
 hereby transferred.
c6ca7bfedf31 Initial revision
claus
parents:
diff changeset
    11
"
c6ca7bfedf31 Initial revision
claus
parents:
diff changeset
    12
c6ca7bfedf31 Initial revision
claus
parents:
diff changeset
    13
ImageView subclass:#ImageEditView
26
ff148983c183 *** empty log message ***
claus
parents: 11
diff changeset
    14
	 instanceVariableNames:'magnification colors magnifiedImage
40
2248adab2995 *** empty log message ***
claus
parents: 32
diff changeset
    15
				colorPanel'
26
ff148983c183 *** empty log message ***
claus
parents: 11
diff changeset
    16
	 classVariableNames:''
ff148983c183 *** empty log message ***
claus
parents: 11
diff changeset
    17
	 poolDictionaries:''
ff148983c183 *** empty log message ***
claus
parents: 11
diff changeset
    18
	 category:'Views-Misc'
1
c6ca7bfedf31 Initial revision
claus
parents:
diff changeset
    19
!
c6ca7bfedf31 Initial revision
claus
parents:
diff changeset
    20
c6ca7bfedf31 Initial revision
claus
parents:
diff changeset
    21
ImageEditView comment:'
c6ca7bfedf31 Initial revision
claus
parents:
diff changeset
    22
COPYRIGHT (c) 1993 by Claus Gittinger
26
ff148983c183 *** empty log message ***
claus
parents: 11
diff changeset
    23
	      All Rights Reserved
1
c6ca7bfedf31 Initial revision
claus
parents:
diff changeset
    24
c6ca7bfedf31 Initial revision
claus
parents:
diff changeset
    25
a View to edit images - in construction
c6ca7bfedf31 Initial revision
claus
parents:
diff changeset
    26
64
claus
parents: 61
diff changeset
    27
$Header: /cvs/stx/stx/libwidg2/ImageEditView.st,v 1.13 1995-07-03 02:35:15 claus Exp $
1
c6ca7bfedf31 Initial revision
claus
parents:
diff changeset
    28
'!
c6ca7bfedf31 Initial revision
claus
parents:
diff changeset
    29
64
claus
parents: 61
diff changeset
    30
!ImageEditView class methodsFor:'documentation'!
claus
parents: 61
diff changeset
    31
claus
parents: 61
diff changeset
    32
copyright
claus
parents: 61
diff changeset
    33
"
claus
parents: 61
diff changeset
    34
 COPYRIGHT (c) 1993 by Claus Gittinger
claus
parents: 61
diff changeset
    35
	      All Rights Reserved
claus
parents: 61
diff changeset
    36
claus
parents: 61
diff changeset
    37
 This software is furnished under a license and may be used
claus
parents: 61
diff changeset
    38
 only in accordance with the terms of that license and with the
claus
parents: 61
diff changeset
    39
 inclusion of the above copyright notice.   This software may not
claus
parents: 61
diff changeset
    40
 be provided or otherwise made available to, or used by, any
claus
parents: 61
diff changeset
    41
 other person.  No title to or ownership of the software is
claus
parents: 61
diff changeset
    42
 hereby transferred.
claus
parents: 61
diff changeset
    43
"
claus
parents: 61
diff changeset
    44
!
claus
parents: 61
diff changeset
    45
claus
parents: 61
diff changeset
    46
documentation
claus
parents: 61
diff changeset
    47
"
claus
parents: 61
diff changeset
    48
    This View will eventually be able to edit bitmap images.
claus
parents: 61
diff changeset
    49
    For now, it is not.
claus
parents: 61
diff changeset
    50
"
claus
parents: 61
diff changeset
    51
! !
claus
parents: 61
diff changeset
    52
1
c6ca7bfedf31 Initial revision
claus
parents:
diff changeset
    53
!ImageEditView methodsFor:'queries'!
c6ca7bfedf31 Initial revision
claus
parents:
diff changeset
    54
c6ca7bfedf31 Initial revision
claus
parents:
diff changeset
    55
widthOfContents
c6ca7bfedf31 Initial revision
claus
parents:
diff changeset
    56
    "return the images width"
c6ca7bfedf31 Initial revision
claus
parents:
diff changeset
    57
c6ca7bfedf31 Initial revision
claus
parents:
diff changeset
    58
    image isNil ifTrue:[^ 0].
c6ca7bfedf31 Initial revision
claus
parents:
diff changeset
    59
    ^ (image width * magnification x) rounded
c6ca7bfedf31 Initial revision
claus
parents:
diff changeset
    60
!
c6ca7bfedf31 Initial revision
claus
parents:
diff changeset
    61
c6ca7bfedf31 Initial revision
claus
parents:
diff changeset
    62
heightOfContents
c6ca7bfedf31 Initial revision
claus
parents:
diff changeset
    63
    "return the images height"
c6ca7bfedf31 Initial revision
claus
parents:
diff changeset
    64
c6ca7bfedf31 Initial revision
claus
parents:
diff changeset
    65
    image isNil ifTrue:[^ 0].
c6ca7bfedf31 Initial revision
claus
parents:
diff changeset
    66
    ^ (image height * magnification y) rounded
c6ca7bfedf31 Initial revision
claus
parents:
diff changeset
    67
! !
c6ca7bfedf31 Initial revision
claus
parents:
diff changeset
    68
7
19b36b78ee01 *** empty log message ***
claus
parents: 5
diff changeset
    69
!ImageEditView methodsFor:'accessing'!
19b36b78ee01 *** empty log message ***
claus
parents: 5
diff changeset
    70
19b36b78ee01 *** empty log message ***
claus
parents: 5
diff changeset
    71
image:anImage
19b36b78ee01 *** empty log message ***
claus
parents: 5
diff changeset
    72
    magnification := 1@1.
19b36b78ee01 *** empty log message ***
claus
parents: 5
diff changeset
    73
    magnifiedImage := nil.
19b36b78ee01 *** empty log message ***
claus
parents: 5
diff changeset
    74
    super image:anImage
19b36b78ee01 *** empty log message ***
claus
parents: 5
diff changeset
    75
! !
19b36b78ee01 *** empty log message ***
claus
parents: 5
diff changeset
    76
1
c6ca7bfedf31 Initial revision
claus
parents:
diff changeset
    77
!ImageEditView methodsFor:'menu actions'!
c6ca7bfedf31 Initial revision
claus
parents:
diff changeset
    78
c6ca7bfedf31 Initial revision
claus
parents:
diff changeset
    79
saveAs
c6ca7bfedf31 Initial revision
claus
parents:
diff changeset
    80
    "save contents into a file 
c6ca7bfedf31 Initial revision
claus
parents:
diff changeset
    81
     - ask user for filename using a fileSelectionBox."
c6ca7bfedf31 Initial revision
claus
parents:
diff changeset
    82
40
2248adab2995 *** empty log message ***
claus
parents: 32
diff changeset
    83
    |fileName|
2248adab2995 *** empty log message ***
claus
parents: 32
diff changeset
    84
41
f80c7cd310dc *** empty log message ***
claus
parents: 40
diff changeset
    85
    fileName := Dialog
40
2248adab2995 *** empty log message ***
claus
parents: 32
diff changeset
    86
		    requestFileName:'save image in:'
2248adab2995 *** empty log message ***
claus
parents: 32
diff changeset
    87
		    default:''
2248adab2995 *** empty log message ***
claus
parents: 32
diff changeset
    88
		    ok:'save'
2248adab2995 *** empty log message ***
claus
parents: 32
diff changeset
    89
		    abort:'abort'
2248adab2995 *** empty log message ***
claus
parents: 32
diff changeset
    90
		    pattern:'*.tiff'.
2248adab2995 *** empty log message ***
claus
parents: 32
diff changeset
    91
2248adab2995 *** empty log message ***
claus
parents: 32
diff changeset
    92
    fileName notNil ifTrue:[
2248adab2995 *** empty log message ***
claus
parents: 32
diff changeset
    93
	image saveOn:fileName
1
c6ca7bfedf31 Initial revision
claus
parents:
diff changeset
    94
    ].
c6ca7bfedf31 Initial revision
claus
parents:
diff changeset
    95
!
c6ca7bfedf31 Initial revision
claus
parents:
diff changeset
    96
c6ca7bfedf31 Initial revision
claus
parents:
diff changeset
    97
showColors
c6ca7bfedf31 Initial revision
claus
parents:
diff changeset
    98
    colorPanel isNil ifTrue:[
26
ff148983c183 *** empty log message ***
claus
parents: 11
diff changeset
    99
	colorPanel := ColorPanel new
1
c6ca7bfedf31 Initial revision
claus
parents:
diff changeset
   100
    ].
c6ca7bfedf31 Initial revision
claus
parents:
diff changeset
   101
    colorPanel shown ifFalse:[
26
ff148983c183 *** empty log message ***
claus
parents: 11
diff changeset
   102
	colorPanel realize
1
c6ca7bfedf31 Initial revision
claus
parents:
diff changeset
   103
    ]
c6ca7bfedf31 Initial revision
claus
parents:
diff changeset
   104
!
c6ca7bfedf31 Initial revision
claus
parents:
diff changeset
   105
c6ca7bfedf31 Initial revision
claus
parents:
diff changeset
   106
changeMagnification
c6ca7bfedf31 Initial revision
claus
parents:
diff changeset
   107
    |b|
c6ca7bfedf31 Initial revision
claus
parents:
diff changeset
   108
c6ca7bfedf31 Initial revision
claus
parents:
diff changeset
   109
    b := EnterBox new.
c6ca7bfedf31 Initial revision
claus
parents:
diff changeset
   110
    b title:'magnification (magX @ magY)'.
c6ca7bfedf31 Initial revision
claus
parents:
diff changeset
   111
    b okText:'apply'.
c6ca7bfedf31 Initial revision
claus
parents:
diff changeset
   112
    b abortText:'abort'.
c6ca7bfedf31 Initial revision
claus
parents:
diff changeset
   113
    b action:[:string | self magnification:(Object readFromString:string)].
c6ca7bfedf31 Initial revision
claus
parents:
diff changeset
   114
    b initialText:(magnification printString).
c6ca7bfedf31 Initial revision
claus
parents:
diff changeset
   115
    b showAtPointer
c6ca7bfedf31 Initial revision
claus
parents:
diff changeset
   116
!
c6ca7bfedf31 Initial revision
claus
parents:
diff changeset
   117
c6ca7bfedf31 Initial revision
claus
parents:
diff changeset
   118
magnification:aMagnificationPoint
c6ca7bfedf31 Initial revision
claus
parents:
diff changeset
   119
    |nPixel savedImage|
c6ca7bfedf31 Initial revision
claus
parents:
diff changeset
   120
c6ca7bfedf31 Initial revision
claus
parents:
diff changeset
   121
    magnification ~= aMagnificationPoint ifTrue:[
26
ff148983c183 *** empty log message ***
claus
parents: 11
diff changeset
   122
	"show wait cursor; although magnification is fast, dithering may take a while"
ff148983c183 *** empty log message ***
claus
parents: 11
diff changeset
   123
	self cursor:Cursor wait.
1
c6ca7bfedf31 Initial revision
claus
parents:
diff changeset
   124
26
ff148983c183 *** empty log message ***
claus
parents: 11
diff changeset
   125
	(device visualType == #PseudoColor) ifTrue:[
ff148983c183 *** empty log message ***
claus
parents: 11
diff changeset
   126
	    "keep colors - otherwise they might get collected & changed"
ff148983c183 *** empty log message ***
claus
parents: 11
diff changeset
   127
	    colors := IdentitySet new.
ff148983c183 *** empty log message ***
claus
parents: 11
diff changeset
   128
	].
1
c6ca7bfedf31 Initial revision
claus
parents:
diff changeset
   129
26
ff148983c183 *** empty log message ***
claus
parents: 11
diff changeset
   130
	magnification := aMagnificationPoint asPoint.
1
c6ca7bfedf31 Initial revision
claus
parents:
diff changeset
   131
26
ff148983c183 *** empty log message ***
claus
parents: 11
diff changeset
   132
	"use a magnified image, if its size wont be too big"
ff148983c183 *** empty log message ***
claus
parents: 11
diff changeset
   133
	magnifiedImage := nil.
1
c6ca7bfedf31 Initial revision
claus
parents:
diff changeset
   134
26
ff148983c183 *** empty log message ***
claus
parents: 11
diff changeset
   135
	"avoid slow scroll"
ff148983c183 *** empty log message ***
claus
parents: 11
diff changeset
   136
	savedImage := image.
ff148983c183 *** empty log message ***
claus
parents: 11
diff changeset
   137
	image := nil.
ff148983c183 *** empty log message ***
claus
parents: 11
diff changeset
   138
	self scrollToTopLeft.
ff148983c183 *** empty log message ***
claus
parents: 11
diff changeset
   139
	image := savedImage.
1
c6ca7bfedf31 Initial revision
claus
parents:
diff changeset
   140
26
ff148983c183 *** empty log message ***
claus
parents: 11
diff changeset
   141
	magnification ~= (1@1) ifTrue:[
ff148983c183 *** empty log message ***
claus
parents: 11
diff changeset
   142
	    nPixel := image width * image height * magnification x * magnification y.
ff148983c183 *** empty log message ***
claus
parents: 11
diff changeset
   143
	    nPixel <= (device width * device height) ifTrue:[
ff148983c183 *** empty log message ***
claus
parents: 11
diff changeset
   144
		Transcript showCr:'magnifying ..'; endEntry.
ff148983c183 *** empty log message ***
claus
parents: 11
diff changeset
   145
		magnifiedImage := image magnifyBy:magnification
ff148983c183 *** empty log message ***
claus
parents: 11
diff changeset
   146
	    ].
ff148983c183 *** empty log message ***
claus
parents: 11
diff changeset
   147
	].
1
c6ca7bfedf31 Initial revision
claus
parents:
diff changeset
   148
26
ff148983c183 *** empty log message ***
claus
parents: 11
diff changeset
   149
	self contentsChanged.
ff148983c183 *** empty log message ***
claus
parents: 11
diff changeset
   150
	self redraw.
ff148983c183 *** empty log message ***
claus
parents: 11
diff changeset
   151
	self cursor:Cursor normal
1
c6ca7bfedf31 Initial revision
claus
parents:
diff changeset
   152
    ]
c6ca7bfedf31 Initial revision
claus
parents:
diff changeset
   153
! !
c6ca7bfedf31 Initial revision
claus
parents:
diff changeset
   154
c6ca7bfedf31 Initial revision
claus
parents:
diff changeset
   155
!ImageEditView methodsFor:'drawing'!
c6ca7bfedf31 Initial revision
claus
parents:
diff changeset
   156
c6ca7bfedf31 Initial revision
claus
parents:
diff changeset
   157
redraw
c6ca7bfedf31 Initial revision
claus
parents:
diff changeset
   158
    |x0 y h w dotW dotH color last runW|
c6ca7bfedf31 Initial revision
claus
parents:
diff changeset
   159
c6ca7bfedf31 Initial revision
claus
parents:
diff changeset
   160
    image isNil ifTrue:[^ self].
c6ca7bfedf31 Initial revision
claus
parents:
diff changeset
   161
c6ca7bfedf31 Initial revision
claus
parents:
diff changeset
   162
    magnification = (1@1) ifTrue:[
26
ff148983c183 *** empty log message ***
claus
parents: 11
diff changeset
   163
	^ super redraw
1
c6ca7bfedf31 Initial revision
claus
parents:
diff changeset
   164
    ].
c6ca7bfedf31 Initial revision
claus
parents:
diff changeset
   165
    magnifiedImage notNil ifTrue:[
26
ff148983c183 *** empty log message ***
claus
parents: 11
diff changeset
   166
	magnifiedImage := magnifiedImage on:device.
ff148983c183 *** empty log message ***
claus
parents: 11
diff changeset
   167
	self clear.
ff148983c183 *** empty log message ***
claus
parents: 11
diff changeset
   168
	self foreground:Black background:White.
ff148983c183 *** empty log message ***
claus
parents: 11
diff changeset
   169
	self function:#copy.
46
bd949a9cc2c7 *** empty log message ***
claus
parents: 42
diff changeset
   170
	self displayOpaqueForm:magnifiedImage x:0 y:0.
26
ff148983c183 *** empty log message ***
claus
parents: 11
diff changeset
   171
	^ self
1
c6ca7bfedf31 Initial revision
claus
parents:
diff changeset
   172
    ].
c6ca7bfedf31 Initial revision
claus
parents:
diff changeset
   173
c6ca7bfedf31 Initial revision
claus
parents:
diff changeset
   174
    self clear.
c6ca7bfedf31 Initial revision
claus
parents:
diff changeset
   175
c6ca7bfedf31 Initial revision
claus
parents:
diff changeset
   176
    h := image height.
c6ca7bfedf31 Initial revision
claus
parents:
diff changeset
   177
    w := image width.
c6ca7bfedf31 Initial revision
claus
parents:
diff changeset
   178
    dotW := magnification x.
c6ca7bfedf31 Initial revision
claus
parents:
diff changeset
   179
    dotH := magnification y.
46
bd949a9cc2c7 *** empty log message ***
claus
parents: 42
diff changeset
   180
    ((h * dotH > height) or:[w * dotW > width]) ifTrue:[
26
ff148983c183 *** empty log message ***
claus
parents: 11
diff changeset
   181
	^ self redrawX:0 y:0 width:width height:height
1
c6ca7bfedf31 Initial revision
claus
parents:
diff changeset
   182
    ].
c6ca7bfedf31 Initial revision
claus
parents:
diff changeset
   183
c6ca7bfedf31 Initial revision
claus
parents:
diff changeset
   184
    y := 0.
c6ca7bfedf31 Initial revision
claus
parents:
diff changeset
   185
    0 to:h-1 do:[:row |
26
ff148983c183 *** empty log message ***
claus
parents: 11
diff changeset
   186
	runW := 0.
ff148983c183 *** empty log message ***
claus
parents: 11
diff changeset
   187
	x0 := 0.
ff148983c183 *** empty log message ***
claus
parents: 11
diff changeset
   188
	image atY:row from:0 to:(w-1) do:[:x :color |
ff148983c183 *** empty log message ***
claus
parents: 11
diff changeset
   189
	    color ~= last ifTrue:[
ff148983c183 *** empty log message ***
claus
parents: 11
diff changeset
   190
		runW ~~ 0 ifTrue:[
ff148983c183 *** empty log message ***
claus
parents: 11
diff changeset
   191
		    self fillRectangleX:x0 y:y width:runW height:dotH.
ff148983c183 *** empty log message ***
claus
parents: 11
diff changeset
   192
		].
ff148983c183 *** empty log message ***
claus
parents: 11
diff changeset
   193
		colors notNil ifTrue:[colors add:color].
ff148983c183 *** empty log message ***
claus
parents: 11
diff changeset
   194
		self paint:color.
ff148983c183 *** empty log message ***
claus
parents: 11
diff changeset
   195
		last := color.
ff148983c183 *** empty log message ***
claus
parents: 11
diff changeset
   196
		x0 := x.
ff148983c183 *** empty log message ***
claus
parents: 11
diff changeset
   197
		runW := 0.
ff148983c183 *** empty log message ***
claus
parents: 11
diff changeset
   198
	    ].
ff148983c183 *** empty log message ***
claus
parents: 11
diff changeset
   199
	    runW := runW + dotW
ff148983c183 *** empty log message ***
claus
parents: 11
diff changeset
   200
	].
ff148983c183 *** empty log message ***
claus
parents: 11
diff changeset
   201
	self fillRectangleX:x0 y:y width:runW height:dotH.
ff148983c183 *** empty log message ***
claus
parents: 11
diff changeset
   202
	y := y + dotH
1
c6ca7bfedf31 Initial revision
claus
parents:
diff changeset
   203
    ]
c6ca7bfedf31 Initial revision
claus
parents:
diff changeset
   204
!
c6ca7bfedf31 Initial revision
claus
parents:
diff changeset
   205
c6ca7bfedf31 Initial revision
claus
parents:
diff changeset
   206
redrawX:x y:y width:w height:h
c6ca7bfedf31 Initial revision
claus
parents:
diff changeset
   207
    |area dx dy ih iw dotW dotH minX maxX minY maxY color last runW x0|
c6ca7bfedf31 Initial revision
claus
parents:
diff changeset
   208
c6ca7bfedf31 Initial revision
claus
parents:
diff changeset
   209
    image isNil ifTrue:[^ self].
c6ca7bfedf31 Initial revision
claus
parents:
diff changeset
   210
c6ca7bfedf31 Initial revision
claus
parents:
diff changeset
   211
    area := Rectangle left:x top:y width:w height:h.      
c6ca7bfedf31 Initial revision
claus
parents:
diff changeset
   212
    self clippedTo:area do:[
26
ff148983c183 *** empty log message ***
claus
parents: 11
diff changeset
   213
	magnification = (1@1) ifTrue:[
ff148983c183 *** empty log message ***
claus
parents: 11
diff changeset
   214
	    self redraw
ff148983c183 *** empty log message ***
claus
parents: 11
diff changeset
   215
	] ifFalse:[
ff148983c183 *** empty log message ***
claus
parents: 11
diff changeset
   216
	    magnifiedImage notNil ifTrue:[
ff148983c183 *** empty log message ***
claus
parents: 11
diff changeset
   217
		self redraw
ff148983c183 *** empty log message ***
claus
parents: 11
diff changeset
   218
	    ] ifFalse:[
ff148983c183 *** empty log message ***
claus
parents: 11
diff changeset
   219
		self clear.
ff148983c183 *** empty log message ***
claus
parents: 11
diff changeset
   220
		ih := image height.
ff148983c183 *** empty log message ***
claus
parents: 11
diff changeset
   221
		iw := image width.
ff148983c183 *** empty log message ***
claus
parents: 11
diff changeset
   222
		dotW := magnification x.
ff148983c183 *** empty log message ***
claus
parents: 11
diff changeset
   223
		dotH := magnification y.
1
c6ca7bfedf31 Initial revision
claus
parents:
diff changeset
   224
46
bd949a9cc2c7 *** empty log message ***
claus
parents: 42
diff changeset
   225
		minX := x // dotW.
bd949a9cc2c7 *** empty log message ***
claus
parents: 42
diff changeset
   226
		minY := y // dotW.
bd949a9cc2c7 *** empty log message ***
claus
parents: 42
diff changeset
   227
		maxX := (x + w) // dotW + 1.
26
ff148983c183 *** empty log message ***
claus
parents: 11
diff changeset
   228
		maxX > iw ifTrue:[
ff148983c183 *** empty log message ***
claus
parents: 11
diff changeset
   229
		    maxX := iw
ff148983c183 *** empty log message ***
claus
parents: 11
diff changeset
   230
		].
46
bd949a9cc2c7 *** empty log message ***
claus
parents: 42
diff changeset
   231
		maxY := (y + h) // dotH + 1.
26
ff148983c183 *** empty log message ***
claus
parents: 11
diff changeset
   232
		maxY > ih ifTrue:[
ff148983c183 *** empty log message ***
claus
parents: 11
diff changeset
   233
		    maxY := ih
ff148983c183 *** empty log message ***
claus
parents: 11
diff changeset
   234
		].
1
c6ca7bfedf31 Initial revision
claus
parents:
diff changeset
   235
46
bd949a9cc2c7 *** empty log message ***
claus
parents: 42
diff changeset
   236
		dy := minY * dotH.
26
ff148983c183 *** empty log message ***
claus
parents: 11
diff changeset
   237
		minY to:maxY-1 do:[:row |
46
bd949a9cc2c7 *** empty log message ***
claus
parents: 42
diff changeset
   238
		    dx := minX * dotW.
26
ff148983c183 *** empty log message ***
claus
parents: 11
diff changeset
   239
		    x0 := dx.
ff148983c183 *** empty log message ***
claus
parents: 11
diff changeset
   240
		    runW := 0.
ff148983c183 *** empty log message ***
claus
parents: 11
diff changeset
   241
		    image atY:row from:minX to:(maxX-1) do:[:x :color |
ff148983c183 *** empty log message ***
claus
parents: 11
diff changeset
   242
			runW ~~ 0 ifTrue:[
ff148983c183 *** empty log message ***
claus
parents: 11
diff changeset
   243
			    self fillRectangleX:x0 y:dy width:runW height:dotH.
ff148983c183 *** empty log message ***
claus
parents: 11
diff changeset
   244
			].
ff148983c183 *** empty log message ***
claus
parents: 11
diff changeset
   245
			color ~= last ifTrue:[
ff148983c183 *** empty log message ***
claus
parents: 11
diff changeset
   246
			    colors notNil ifTrue:[colors add:color].
ff148983c183 *** empty log message ***
claus
parents: 11
diff changeset
   247
			    self paint:color.
ff148983c183 *** empty log message ***
claus
parents: 11
diff changeset
   248
			    last := color.
ff148983c183 *** empty log message ***
claus
parents: 11
diff changeset
   249
			    runW := 0.
46
bd949a9cc2c7 *** empty log message ***
claus
parents: 42
diff changeset
   250
			    x0 := x * dotW.
26
ff148983c183 *** empty log message ***
claus
parents: 11
diff changeset
   251
			].
ff148983c183 *** empty log message ***
claus
parents: 11
diff changeset
   252
			runW := runW + dotW
ff148983c183 *** empty log message ***
claus
parents: 11
diff changeset
   253
		    ].
ff148983c183 *** empty log message ***
claus
parents: 11
diff changeset
   254
		    self fillRectangleX:x0 y:dy width:runW height:dotH.
ff148983c183 *** empty log message ***
claus
parents: 11
diff changeset
   255
		    dy := dy + dotH
ff148983c183 *** empty log message ***
claus
parents: 11
diff changeset
   256
		]
ff148983c183 *** empty log message ***
claus
parents: 11
diff changeset
   257
	    ]
ff148983c183 *** empty log message ***
claus
parents: 11
diff changeset
   258
	]
1
c6ca7bfedf31 Initial revision
claus
parents:
diff changeset
   259
    ]
c6ca7bfedf31 Initial revision
claus
parents:
diff changeset
   260
! !
c6ca7bfedf31 Initial revision
claus
parents:
diff changeset
   261
c6ca7bfedf31 Initial revision
claus
parents:
diff changeset
   262
!ImageEditView methodsFor:'initialization'!
c6ca7bfedf31 Initial revision
claus
parents:
diff changeset
   263
c6ca7bfedf31 Initial revision
claus
parents:
diff changeset
   264
initializeMiddleButtonMenu
5
be72e6ba4822 *** empty log message ***
claus
parents: 1
diff changeset
   265
    |m|
be72e6ba4822 *** empty log message ***
claus
parents: 1
diff changeset
   266
be72e6ba4822 *** empty log message ***
claus
parents: 1
diff changeset
   267
    m := (PopUpMenu
26
ff148983c183 *** empty log message ***
claus
parents: 11
diff changeset
   268
	       labels:(resources array:
ff148983c183 *** empty log message ***
claus
parents: 11
diff changeset
   269
			  #('save as ...'
ff148983c183 *** empty log message ***
claus
parents: 11
diff changeset
   270
			    '-'
ff148983c183 *** empty log message ***
claus
parents: 11
diff changeset
   271
			    'magnification'
ff148983c183 *** empty log message ***
claus
parents: 11
diff changeset
   272
"/                            'colors'
ff148983c183 *** empty log message ***
claus
parents: 11
diff changeset
   273
			    'effects'
ff148983c183 *** empty log message ***
claus
parents: 11
diff changeset
   274
			   ))
ff148983c183 *** empty log message ***
claus
parents: 11
diff changeset
   275
	    selectors:#(saveAs
ff148983c183 *** empty log message ***
claus
parents: 11
diff changeset
   276
			nil
ff148983c183 *** empty log message ***
claus
parents: 11
diff changeset
   277
			changeMagnification
ff148983c183 *** empty log message ***
claus
parents: 11
diff changeset
   278
"/                        showColors
ff148983c183 *** empty log message ***
claus
parents: 11
diff changeset
   279
			effects
ff148983c183 *** empty log message ***
claus
parents: 11
diff changeset
   280
		       )
ff148983c183 *** empty log message ***
claus
parents: 11
diff changeset
   281
	     receiver:self
ff148983c183 *** empty log message ***
claus
parents: 11
diff changeset
   282
		  for:self).
5
be72e6ba4822 *** empty log message ***
claus
parents: 1
diff changeset
   283
    self middleButtonMenu:m.
be72e6ba4822 *** empty log message ***
claus
parents: 1
diff changeset
   284
be72e6ba4822 *** empty log message ***
claus
parents: 1
diff changeset
   285
    m subMenuAt:#effects put:(
26
ff148983c183 *** empty log message ***
claus
parents: 11
diff changeset
   286
	PopUpMenu labels:(resources array:#(
ff148983c183 *** empty log message ***
claus
parents: 11
diff changeset
   287
			    'flip - vertical'
ff148983c183 *** empty log message ***
claus
parents: 11
diff changeset
   288
			    'flip - horizontal'
11
793044d4bc90 *** empty log message ***
claus
parents: 9
diff changeset
   289
"
26
ff148983c183 *** empty log message ***
claus
parents: 11
diff changeset
   290
			    '-'
ff148983c183 *** empty log message ***
claus
parents: 11
diff changeset
   291
			    'blurr'
11
793044d4bc90 *** empty log message ***
claus
parents: 9
diff changeset
   292
"
26
ff148983c183 *** empty log message ***
claus
parents: 11
diff changeset
   293
			   ))
ff148983c183 *** empty log message ***
claus
parents: 11
diff changeset
   294
	       selectors:#(
ff148983c183 *** empty log message ***
claus
parents: 11
diff changeset
   295
			    flipVertical
ff148983c183 *** empty log message ***
claus
parents: 11
diff changeset
   296
			    flipHorizontal
11
793044d4bc90 *** empty log message ***
claus
parents: 9
diff changeset
   297
"
26
ff148983c183 *** empty log message ***
claus
parents: 11
diff changeset
   298
			    nil
ff148983c183 *** empty log message ***
claus
parents: 11
diff changeset
   299
			    blurr
11
793044d4bc90 *** empty log message ***
claus
parents: 9
diff changeset
   300
"
26
ff148983c183 *** empty log message ***
claus
parents: 11
diff changeset
   301
			   )
ff148983c183 *** empty log message ***
claus
parents: 11
diff changeset
   302
		receiver:self
ff148983c183 *** empty log message ***
claus
parents: 11
diff changeset
   303
		     for:self
5
be72e6ba4822 *** empty log message ***
claus
parents: 1
diff changeset
   304
be72e6ba4822 *** empty log message ***
claus
parents: 1
diff changeset
   305
    ).
1
c6ca7bfedf31 Initial revision
claus
parents:
diff changeset
   306
26
ff148983c183 *** empty log message ***
claus
parents: 11
diff changeset
   307
    "
ff148983c183 *** empty log message ***
claus
parents: 11
diff changeset
   308
     ImageEditView openOn:'bitmaps/SBrowser.xbm'
ff148983c183 *** empty log message ***
claus
parents: 11
diff changeset
   309
     ImageEditView openOn:'bitmaps/garfield.gif'
ff148983c183 *** empty log message ***
claus
parents: 11
diff changeset
   310
    "
1
c6ca7bfedf31 Initial revision
claus
parents:
diff changeset
   311
!
c6ca7bfedf31 Initial revision
claus
parents:
diff changeset
   312
c6ca7bfedf31 Initial revision
claus
parents:
diff changeset
   313
initialize
c6ca7bfedf31 Initial revision
claus
parents:
diff changeset
   314
    super initialize.
c6ca7bfedf31 Initial revision
claus
parents:
diff changeset
   315
    magnification := 1@1.
c6ca7bfedf31 Initial revision
claus
parents:
diff changeset
   316
    colors := nil
c6ca7bfedf31 Initial revision
claus
parents:
diff changeset
   317
! !
c6ca7bfedf31 Initial revision
claus
parents:
diff changeset
   318
32
1cca9793eb39 *** empty log message ***
claus
parents: 26
diff changeset
   319
!ImageEditView methodsFor:'event handling'!
1
c6ca7bfedf31 Initial revision
claus
parents:
diff changeset
   320
c6ca7bfedf31 Initial revision
claus
parents:
diff changeset
   321
showColorAtX:x y:y
c6ca7bfedf31 Initial revision
claus
parents:
diff changeset
   322
    |pi clr|
c6ca7bfedf31 Initial revision
claus
parents:
diff changeset
   323
46
bd949a9cc2c7 *** empty log message ***
claus
parents: 42
diff changeset
   324
    pi := (x @ y) - margin.
42
3f8d31db2b1c *** empty log message ***
claus
parents: 41
diff changeset
   325
    pi := pi // magnification.
3f8d31db2b1c *** empty log message ***
claus
parents: 41
diff changeset
   326
    ((0@0 corner:image extent) containsPoint:pi) ifTrue:[
3f8d31db2b1c *** empty log message ***
claus
parents: 41
diff changeset
   327
	clr := image at:pi.
3f8d31db2b1c *** empty log message ***
claus
parents: 41
diff changeset
   328
	colorPanel notNil ifTrue:[
26
ff148983c183 *** empty log message ***
claus
parents: 11
diff changeset
   329
	    colorPanel setColor:clr.
42
3f8d31db2b1c *** empty log message ***
claus
parents: 41
diff changeset
   330
	] ifFalse:[
3f8d31db2b1c *** empty log message ***
claus
parents: 41
diff changeset
   331
	    Transcript showCr:clr displayString
26
ff148983c183 *** empty log message ***
claus
parents: 11
diff changeset
   332
	]
1
c6ca7bfedf31 Initial revision
claus
parents:
diff changeset
   333
    ]
c6ca7bfedf31 Initial revision
claus
parents:
diff changeset
   334
!
c6ca7bfedf31 Initial revision
claus
parents:
diff changeset
   335
c6ca7bfedf31 Initial revision
claus
parents:
diff changeset
   336
buttonMotion:state x:x y:y
c6ca7bfedf31 Initial revision
claus
parents:
diff changeset
   337
    self showColorAtX:x y:y.
c6ca7bfedf31 Initial revision
claus
parents:
diff changeset
   338
!
c6ca7bfedf31 Initial revision
claus
parents:
diff changeset
   339
c6ca7bfedf31 Initial revision
claus
parents:
diff changeset
   340
buttonPress:button x:x y:y
c6ca7bfedf31 Initial revision
claus
parents:
diff changeset
   341
    button == 1 ifTrue:[
26
ff148983c183 *** empty log message ***
claus
parents: 11
diff changeset
   342
	self showColorAtX:x y:y.
ff148983c183 *** empty log message ***
claus
parents: 11
diff changeset
   343
	^ self
1
c6ca7bfedf31 Initial revision
claus
parents:
diff changeset
   344
    ].
c6ca7bfedf31 Initial revision
claus
parents:
diff changeset
   345
    super buttonPress:button x:x y:y
c6ca7bfedf31 Initial revision
claus
parents:
diff changeset
   346
! !
c6ca7bfedf31 Initial revision
claus
parents:
diff changeset
   347
5
be72e6ba4822 *** empty log message ***
claus
parents: 1
diff changeset
   348
!ImageEditView methodsFor:'image processing'!
be72e6ba4822 *** empty log message ***
claus
parents: 1
diff changeset
   349
be72e6ba4822 *** empty log message ***
claus
parents: 1
diff changeset
   350
performImageOperation:operation withArguments:args
be72e6ba4822 *** empty log message ***
claus
parents: 1
diff changeset
   351
    |oldMag|
be72e6ba4822 *** empty log message ***
claus
parents: 1
diff changeset
   352
61
claus
parents: 46
diff changeset
   353
    windowGroup withCursor:Cursor wait do:[
26
ff148983c183 *** empty log message ***
claus
parents: 11
diff changeset
   354
	oldMag := magnification.
ff148983c183 *** empty log message ***
claus
parents: 11
diff changeset
   355
	magnifiedImage := nil.
ff148983c183 *** empty log message ***
claus
parents: 11
diff changeset
   356
	magnification := 1@1.
ff148983c183 *** empty log message ***
claus
parents: 11
diff changeset
   357
	image perform:operation withArguments:args.
ff148983c183 *** empty log message ***
claus
parents: 11
diff changeset
   358
	(oldMag isNil or:[oldMag = magnification]) ifTrue:[
ff148983c183 *** empty log message ***
claus
parents: 11
diff changeset
   359
	    self redraw
ff148983c183 *** empty log message ***
claus
parents: 11
diff changeset
   360
	] ifFalse:[
ff148983c183 *** empty log message ***
claus
parents: 11
diff changeset
   361
	    self magnification:oldMag.
ff148983c183 *** empty log message ***
claus
parents: 11
diff changeset
   362
	]
5
be72e6ba4822 *** empty log message ***
claus
parents: 1
diff changeset
   363
    ]
be72e6ba4822 *** empty log message ***
claus
parents: 1
diff changeset
   364
!
be72e6ba4822 *** empty log message ***
claus
parents: 1
diff changeset
   365
be72e6ba4822 *** empty log message ***
claus
parents: 1
diff changeset
   366
flipVertical
be72e6ba4822 *** empty log message ***
claus
parents: 1
diff changeset
   367
    self performImageOperation:#flipVertical withArguments:nil
be72e6ba4822 *** empty log message ***
claus
parents: 1
diff changeset
   368
!
be72e6ba4822 *** empty log message ***
claus
parents: 1
diff changeset
   369
be72e6ba4822 *** empty log message ***
claus
parents: 1
diff changeset
   370
flipHorizontal
be72e6ba4822 *** empty log message ***
claus
parents: 1
diff changeset
   371
    self performImageOperation:#flipHorizontal withArguments:nil
be72e6ba4822 *** empty log message ***
claus
parents: 1
diff changeset
   372
!
be72e6ba4822 *** empty log message ***
claus
parents: 1
diff changeset
   373
be72e6ba4822 *** empty log message ***
claus
parents: 1
diff changeset
   374
blurr
be72e6ba4822 *** empty log message ***
claus
parents: 1
diff changeset
   375
    self performImageOperation:#blurr withArguments:nil
be72e6ba4822 *** empty log message ***
claus
parents: 1
diff changeset
   376
! !
be72e6ba4822 *** empty log message ***
claus
parents: 1
diff changeset
   377
1
c6ca7bfedf31 Initial revision
claus
parents:
diff changeset
   378
!ImageEditView methodsFor:'release'!
c6ca7bfedf31 Initial revision
claus
parents:
diff changeset
   379
c6ca7bfedf31 Initial revision
claus
parents:
diff changeset
   380
destroy
c6ca7bfedf31 Initial revision
claus
parents:
diff changeset
   381
    colors := nil.
c6ca7bfedf31 Initial revision
claus
parents:
diff changeset
   382
    magnifiedImage := nil.
c6ca7bfedf31 Initial revision
claus
parents:
diff changeset
   383
    colorPanel notNil ifTrue:[
26
ff148983c183 *** empty log message ***
claus
parents: 11
diff changeset
   384
	colorPanel destroy.
ff148983c183 *** empty log message ***
claus
parents: 11
diff changeset
   385
	colorPanel := nil.
1
c6ca7bfedf31 Initial revision
claus
parents:
diff changeset
   386
    ].
c6ca7bfedf31 Initial revision
claus
parents:
diff changeset
   387
    super destroy.
c6ca7bfedf31 Initial revision
claus
parents:
diff changeset
   388
! !