WindowingTransformation.st
author claus
Fri, 03 Jun 1994 02:54:39 +0200
changeset 46 7b331e9012fd
parent 5 e5942fea6925
child 54 29a6b2f8e042
permissions -rw-r--r--
*** empty log message ***
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
0
48194c26a46c Initial revision
claus
parents:
diff changeset
     1
"
48194c26a46c Initial revision
claus
parents:
diff changeset
     2
 COPYRIGHT (c) 1992 by Claus Gittinger
48194c26a46c Initial revision
claus
parents:
diff changeset
     3
              All Rights Reserved
48194c26a46c Initial revision
claus
parents:
diff changeset
     4
48194c26a46c Initial revision
claus
parents:
diff changeset
     5
 This software is furnished under a license and may be used
48194c26a46c Initial revision
claus
parents:
diff changeset
     6
 only in accordance with the terms of that license and with the
48194c26a46c Initial revision
claus
parents:
diff changeset
     7
 inclusion of the above copyright notice.   This software may not
48194c26a46c Initial revision
claus
parents:
diff changeset
     8
 be provided or otherwise made available to, or used by, any
48194c26a46c Initial revision
claus
parents:
diff changeset
     9
 other person.  No title to or ownership of the software is
48194c26a46c Initial revision
claus
parents:
diff changeset
    10
 hereby transferred.
48194c26a46c Initial revision
claus
parents:
diff changeset
    11
"
48194c26a46c Initial revision
claus
parents:
diff changeset
    12
48194c26a46c Initial revision
claus
parents:
diff changeset
    13
Object subclass: #WindowingTransformation
48194c26a46c Initial revision
claus
parents:
diff changeset
    14
        instanceVariableNames: 'scale translation'
48194c26a46c Initial revision
claus
parents:
diff changeset
    15
        classVariableNames: ''
48194c26a46c Initial revision
claus
parents:
diff changeset
    16
        poolDictionaries: ''
48194c26a46c Initial revision
claus
parents:
diff changeset
    17
        category: 'Graphics-Support'!
48194c26a46c Initial revision
claus
parents:
diff changeset
    18
48194c26a46c Initial revision
claus
parents:
diff changeset
    19
WindowingTransformation comment:'
48194c26a46c Initial revision
claus
parents:
diff changeset
    20
COPYRIGHT (c) 1992 by Claus Gittinger
48194c26a46c Initial revision
claus
parents:
diff changeset
    21
              All Rights Reserved
46
7b331e9012fd *** empty log message ***
claus
parents: 5
diff changeset
    22
'!
0
48194c26a46c Initial revision
claus
parents:
diff changeset
    23
46
7b331e9012fd *** empty log message ***
claus
parents: 5
diff changeset
    24
!WindowingTransformation class methodsFor: 'documentation'!
7b331e9012fd *** empty log message ***
claus
parents: 5
diff changeset
    25
7b331e9012fd *** empty log message ***
claus
parents: 5
diff changeset
    26
copyright
7b331e9012fd *** empty log message ***
claus
parents: 5
diff changeset
    27
"
7b331e9012fd *** empty log message ***
claus
parents: 5
diff changeset
    28
 COPYRIGHT (c) 1992 by Claus Gittinger
7b331e9012fd *** empty log message ***
claus
parents: 5
diff changeset
    29
              All Rights Reserved
0
48194c26a46c Initial revision
claus
parents:
diff changeset
    30
46
7b331e9012fd *** empty log message ***
claus
parents: 5
diff changeset
    31
 This software is furnished under a license and may be used
7b331e9012fd *** empty log message ***
claus
parents: 5
diff changeset
    32
 only in accordance with the terms of that license and with the
7b331e9012fd *** empty log message ***
claus
parents: 5
diff changeset
    33
 inclusion of the above copyright notice.   This software may not
7b331e9012fd *** empty log message ***
claus
parents: 5
diff changeset
    34
 be provided or otherwise made available to, or used by, any
7b331e9012fd *** empty log message ***
claus
parents: 5
diff changeset
    35
 other person.  No title to or ownership of the software is
7b331e9012fd *** empty log message ***
claus
parents: 5
diff changeset
    36
 hereby transferred.
7b331e9012fd *** empty log message ***
claus
parents: 5
diff changeset
    37
"
7b331e9012fd *** empty log message ***
claus
parents: 5
diff changeset
    38
!
0
48194c26a46c Initial revision
claus
parents:
diff changeset
    39
46
7b331e9012fd *** empty log message ***
claus
parents: 5
diff changeset
    40
version
7b331e9012fd *** empty log message ***
claus
parents: 5
diff changeset
    41
"
7b331e9012fd *** empty log message ***
claus
parents: 5
diff changeset
    42
$Header: /cvs/stx/stx/libview/WindowingTransformation.st,v 1.4 1994-06-03 00:54:06 claus Exp $
7b331e9012fd *** empty log message ***
claus
parents: 5
diff changeset
    43
"
7b331e9012fd *** empty log message ***
claus
parents: 5
diff changeset
    44
!
7b331e9012fd *** empty log message ***
claus
parents: 5
diff changeset
    45
7b331e9012fd *** empty log message ***
claus
parents: 5
diff changeset
    46
documentation
7b331e9012fd *** empty log message ***
claus
parents: 5
diff changeset
    47
"
7b331e9012fd *** empty log message ***
claus
parents: 5
diff changeset
    48
    I represent the ability to perform transformations in 2-D space.
0
48194c26a46c Initial revision
claus
parents:
diff changeset
    49
46
7b331e9012fd *** empty log message ***
claus
parents: 5
diff changeset
    50
    Instance variables are:
7b331e9012fd *** empty log message ***
claus
parents: 5
diff changeset
    51
        scale           <Number> or <Point> representing a linear scaling factor.
7b331e9012fd *** empty log message ***
claus
parents: 5
diff changeset
    52
        translation     <Number> or <Point> representing a translation in 2-D.
0
48194c26a46c Initial revision
claus
parents:
diff changeset
    53
46
7b331e9012fd *** empty log message ***
claus
parents: 5
diff changeset
    54
    All 2-D objects are supposed to be able to be transformed using
7b331e9012fd *** empty log message ***
claus
parents: 5
diff changeset
    55
    instances of me.  Instances of me can also be combined to form a
7b331e9012fd *** empty log message ***
claus
parents: 5
diff changeset
    56
    single composite transformation.
7b331e9012fd *** empty log message ***
claus
parents: 5
diff changeset
    57
"
7b331e9012fd *** empty log message ***
claus
parents: 5
diff changeset
    58
! !
0
48194c26a46c Initial revision
claus
parents:
diff changeset
    59
48194c26a46c Initial revision
claus
parents:
diff changeset
    60
!WindowingTransformation methodsFor: 'accessing'!
48194c26a46c Initial revision
claus
parents:
diff changeset
    61
48194c26a46c Initial revision
claus
parents:
diff changeset
    62
scale
48194c26a46c Initial revision
claus
parents:
diff changeset
    63
    "return a copy of the Point that represents the
48194c26a46c Initial revision
claus
parents:
diff changeset
    64
     current scale of the receiver."
48194c26a46c Initial revision
claus
parents:
diff changeset
    65
48194c26a46c Initial revision
claus
parents:
diff changeset
    66
    scale == nil ifTrue:[
48194c26a46c Initial revision
claus
parents:
diff changeset
    67
        ^ Point x:1 y:1
48194c26a46c Initial revision
claus
parents:
diff changeset
    68
    ].
48194c26a46c Initial revision
claus
parents:
diff changeset
    69
    ^ scale copy
48194c26a46c Initial revision
claus
parents:
diff changeset
    70
!
48194c26a46c Initial revision
claus
parents:
diff changeset
    71
48194c26a46c Initial revision
claus
parents:
diff changeset
    72
scaleOfOne
48194c26a46c Initial revision
claus
parents:
diff changeset
    73
    "Set the scale of the receiver to the identity scale"
48194c26a46c Initial revision
claus
parents:
diff changeset
    74
48194c26a46c Initial revision
claus
parents:
diff changeset
    75
    scale := nil
48194c26a46c Initial revision
claus
parents:
diff changeset
    76
!
48194c26a46c Initial revision
claus
parents:
diff changeset
    77
48194c26a46c Initial revision
claus
parents:
diff changeset
    78
translation
48194c26a46c Initial revision
claus
parents:
diff changeset
    79
    "return a copy of the receiver's translation."
48194c26a46c Initial revision
claus
parents:
diff changeset
    80
48194c26a46c Initial revision
claus
parents:
diff changeset
    81
    ^ translation copy
48194c26a46c Initial revision
claus
parents:
diff changeset
    82
!
48194c26a46c Initial revision
claus
parents:
diff changeset
    83
48194c26a46c Initial revision
claus
parents:
diff changeset
    84
translation: aValue
48194c26a46c Initial revision
claus
parents:
diff changeset
    85
    "Set the receiver's translation to aValue."
48194c26a46c Initial revision
claus
parents:
diff changeset
    86
48194c26a46c Initial revision
claus
parents:
diff changeset
    87
    translation := aValue
48194c26a46c Initial revision
claus
parents:
diff changeset
    88
! !
48194c26a46c Initial revision
claus
parents:
diff changeset
    89
48194c26a46c Initial revision
claus
parents:
diff changeset
    90
!WindowingTransformation methodsFor: 'testing'!
48194c26a46c Initial revision
claus
parents:
diff changeset
    91
48194c26a46c Initial revision
claus
parents:
diff changeset
    92
noScale
48194c26a46c Initial revision
claus
parents:
diff changeset
    93
    "return true if the identity scale is in effect;
48194c26a46c Initial revision
claus
parents:
diff changeset
    94
         answer false, otherwise."
48194c26a46c Initial revision
claus
parents:
diff changeset
    95
48194c26a46c Initial revision
claus
parents:
diff changeset
    96
    ^ scale == nil
48194c26a46c Initial revision
claus
parents:
diff changeset
    97
! !
48194c26a46c Initial revision
claus
parents:
diff changeset
    98
48194c26a46c Initial revision
claus
parents:
diff changeset
    99
!WindowingTransformation methodsFor: 'applying transform'!
48194c26a46c Initial revision
claus
parents:
diff changeset
   100
48194c26a46c Initial revision
claus
parents:
diff changeset
   101
applyInverseTo:anObject 
48194c26a46c Initial revision
claus
parents:
diff changeset
   102
    "Apply the inverse of the receiver to anObject
48194c26a46c Initial revision
claus
parents:
diff changeset
   103
     and answer the result."
48194c26a46c Initial revision
claus
parents:
diff changeset
   104
48194c26a46c Initial revision
claus
parents:
diff changeset
   105
    |transformedObject|
48194c26a46c Initial revision
claus
parents:
diff changeset
   106
2
b35336ab0de3 *** empty log message ***
claus
parents: 0
diff changeset
   107
    transformedObject := anObject translatedBy:(self inverseTranslation).
0
48194c26a46c Initial revision
claus
parents:
diff changeset
   108
    scale == nil ifFalse:[
2
b35336ab0de3 *** empty log message ***
claus
parents: 0
diff changeset
   109
        transformedObject scaleBy:(self inverseScale)
0
48194c26a46c Initial revision
claus
parents:
diff changeset
   110
    ].
48194c26a46c Initial revision
claus
parents:
diff changeset
   111
    ^ transformedObject
48194c26a46c Initial revision
claus
parents:
diff changeset
   112
!
48194c26a46c Initial revision
claus
parents:
diff changeset
   113
48194c26a46c Initial revision
claus
parents:
diff changeset
   114
applyTo:anObject 
48194c26a46c Initial revision
claus
parents:
diff changeset
   115
    "Apply the receiver to anObject and answer the result."
48194c26a46c Initial revision
claus
parents:
diff changeset
   116
48194c26a46c Initial revision
claus
parents:
diff changeset
   117
    |transformedObject|
48194c26a46c Initial revision
claus
parents:
diff changeset
   118
48194c26a46c Initial revision
claus
parents:
diff changeset
   119
    scale == nil ifTrue:[
2
b35336ab0de3 *** empty log message ***
claus
parents: 0
diff changeset
   120
        ^ anObject translateBy:translation.
0
48194c26a46c Initial revision
claus
parents:
diff changeset
   121
    ].
2
b35336ab0de3 *** empty log message ***
claus
parents: 0
diff changeset
   122
    transformedObject := anObject scaledBy:scale
b35336ab0de3 *** empty log message ***
claus
parents: 0
diff changeset
   123
    transformedObject translateBy:translation.
0
48194c26a46c Initial revision
claus
parents:
diff changeset
   124
    ^ transformedObject
48194c26a46c Initial revision
claus
parents:
diff changeset
   125
!
48194c26a46c Initial revision
claus
parents:
diff changeset
   126
48194c26a46c Initial revision
claus
parents:
diff changeset
   127
compose:aTransformation 
48194c26a46c Initial revision
claus
parents:
diff changeset
   128
    "return a new WindowingTransformation that is the
48194c26a46c Initial revision
claus
parents:
diff changeset
   129
     composition of the receiver and aTransformation.
48194c26a46c Initial revision
claus
parents:
diff changeset
   130
     The effect of applying the resulting WindowingTransformation
48194c26a46c Initial revision
claus
parents:
diff changeset
   131
     to an object is the same as that of first applying
48194c26a46c Initial revision
claus
parents:
diff changeset
   132
     aTransformation to the object and then applying the 
48194c26a46c Initial revision
claus
parents:
diff changeset
   133
     receiver to its result."
48194c26a46c Initial revision
claus
parents:
diff changeset
   134
48194c26a46c Initial revision
claus
parents:
diff changeset
   135
    |aTransformationScale newScale newTranslation|
48194c26a46c Initial revision
claus
parents:
diff changeset
   136
48194c26a46c Initial revision
claus
parents:
diff changeset
   137
    aTransformationScale := aTransformation scale.
48194c26a46c Initial revision
claus
parents:
diff changeset
   138
    scale == nil ifTrue:[
48194c26a46c Initial revision
claus
parents:
diff changeset
   139
        aTransformation noScale ifTrue:[
48194c26a46c Initial revision
claus
parents:
diff changeset
   140
            newScale := nil
48194c26a46c Initial revision
claus
parents:
diff changeset
   141
        ] ifFalse:[
48194c26a46c Initial revision
claus
parents:
diff changeset
   142
            newScale := aTransformationScale
48194c26a46c Initial revision
claus
parents:
diff changeset
   143
        ].
48194c26a46c Initial revision
claus
parents:
diff changeset
   144
        newTranslation := translation + aTransformation translation
48194c26a46c Initial revision
claus
parents:
diff changeset
   145
    ] ifFalse:[
48194c26a46c Initial revision
claus
parents:
diff changeset
   146
        aTransformation noScale ifTrue:[
48194c26a46c Initial revision
claus
parents:
diff changeset
   147
            newScale := scale
48194c26a46c Initial revision
claus
parents:
diff changeset
   148
        ] ifFalse:[
48194c26a46c Initial revision
claus
parents:
diff changeset
   149
            newScale := scale * aTransformationScale
48194c26a46c Initial revision
claus
parents:
diff changeset
   150
        ].
48194c26a46c Initial revision
claus
parents:
diff changeset
   151
        newTranslation := translation
48194c26a46c Initial revision
claus
parents:
diff changeset
   152
                          + (scale * aTransformation translation)
48194c26a46c Initial revision
claus
parents:
diff changeset
   153
    ].
48194c26a46c Initial revision
claus
parents:
diff changeset
   154
    ^ WindowingTransformation scale:newScale
48194c26a46c Initial revision
claus
parents:
diff changeset
   155
                        translation:newTranslation
48194c26a46c Initial revision
claus
parents:
diff changeset
   156
! !
48194c26a46c Initial revision
claus
parents:
diff changeset
   157
48194c26a46c Initial revision
claus
parents:
diff changeset
   158
!WindowingTransformation methodsFor: 'transforming'!
48194c26a46c Initial revision
claus
parents:
diff changeset
   159
2
b35336ab0de3 *** empty log message ***
claus
parents: 0
diff changeset
   160
scaledBy:aScale 
0
48194c26a46c Initial revision
claus
parents:
diff changeset
   161
    "return a new WindowingTransformation with the scale and translation of 
48194c26a46c Initial revision
claus
parents:
diff changeset
   162
     the receiver both scaled by aScale."
48194c26a46c Initial revision
claus
parents:
diff changeset
   163
48194c26a46c Initial revision
claus
parents:
diff changeset
   164
    |checkedScale newScale newTranslation|
48194c26a46c Initial revision
claus
parents:
diff changeset
   165
48194c26a46c Initial revision
claus
parents:
diff changeset
   166
    aScale == nil ifTrue:[
48194c26a46c Initial revision
claus
parents:
diff changeset
   167
        newScale := scale.
48194c26a46c Initial revision
claus
parents:
diff changeset
   168
        newTranslation := translation
48194c26a46c Initial revision
claus
parents:
diff changeset
   169
    ] ifFalse:[
48194c26a46c Initial revision
claus
parents:
diff changeset
   170
        checkedScale := self checkScale:aScale.
48194c26a46c Initial revision
claus
parents:
diff changeset
   171
        scale == nil ifTrue:[
48194c26a46c Initial revision
claus
parents:
diff changeset
   172
            newScale := checkedScale
48194c26a46c Initial revision
claus
parents:
diff changeset
   173
        ] ifFalse:[
48194c26a46c Initial revision
claus
parents:
diff changeset
   174
            newScale := scale * checkedScale
48194c26a46c Initial revision
claus
parents:
diff changeset
   175
        ].
48194c26a46c Initial revision
claus
parents:
diff changeset
   176
        newTranslation := checkedScale * translation
48194c26a46c Initial revision
claus
parents:
diff changeset
   177
    ].
48194c26a46c Initial revision
claus
parents:
diff changeset
   178
    ^ WindowingTransformation scale:newScale
48194c26a46c Initial revision
claus
parents:
diff changeset
   179
                        translation:newTranslation
48194c26a46c Initial revision
claus
parents:
diff changeset
   180
!
48194c26a46c Initial revision
claus
parents:
diff changeset
   181
2
b35336ab0de3 *** empty log message ***
claus
parents: 0
diff changeset
   182
translatedBy:aPoint 
0
48194c26a46c Initial revision
claus
parents:
diff changeset
   183
    "return a new WindowingTransformation with the same scale and 
48194c26a46c Initial revision
claus
parents:
diff changeset
   184
     rotations as the receiver and with a translation of the current 
48194c26a46c Initial revision
claus
parents:
diff changeset
   185
     translation plus aPoint."
48194c26a46c Initial revision
claus
parents:
diff changeset
   186
48194c26a46c Initial revision
claus
parents:
diff changeset
   187
    ^ WindowingTransformation scale:scale
48194c26a46c Initial revision
claus
parents:
diff changeset
   188
                        translation:(translation + aPoint)
48194c26a46c Initial revision
claus
parents:
diff changeset
   189
! !
48194c26a46c Initial revision
claus
parents:
diff changeset
   190
48194c26a46c Initial revision
claus
parents:
diff changeset
   191
!WindowingTransformation methodsFor: 'printing'!
48194c26a46c Initial revision
claus
parents:
diff changeset
   192
48194c26a46c Initial revision
claus
parents:
diff changeset
   193
printString
48194c26a46c Initial revision
claus
parents:
diff changeset
   194
    ^ (self class name, ' scale: ', scale printString,
48194c26a46c Initial revision
claus
parents:
diff changeset
   195
                  ' translation: ', translation printString)
48194c26a46c Initial revision
claus
parents:
diff changeset
   196
! !
48194c26a46c Initial revision
claus
parents:
diff changeset
   197
48194c26a46c Initial revision
claus
parents:
diff changeset
   198
!WindowingTransformation methodsFor: 'private'!
48194c26a46c Initial revision
claus
parents:
diff changeset
   199
48194c26a46c Initial revision
claus
parents:
diff changeset
   200
checkScale:aScale
48194c26a46c Initial revision
claus
parents:
diff changeset
   201
    "Converts aScale to the internal format of a floating-point Point."
48194c26a46c Initial revision
claus
parents:
diff changeset
   202
48194c26a46c Initial revision
claus
parents:
diff changeset
   203
    |checkedScale|
48194c26a46c Initial revision
claus
parents:
diff changeset
   204
48194c26a46c Initial revision
claus
parents:
diff changeset
   205
    checkedScale := aScale asPoint.
48194c26a46c Initial revision
claus
parents:
diff changeset
   206
    ^ Point x:checkedScale x asFloat
48194c26a46c Initial revision
claus
parents:
diff changeset
   207
            y:checkedScale y asFloat
48194c26a46c Initial revision
claus
parents:
diff changeset
   208
!
48194c26a46c Initial revision
claus
parents:
diff changeset
   209
48194c26a46c Initial revision
claus
parents:
diff changeset
   210
inverseScale
48194c26a46c Initial revision
claus
parents:
diff changeset
   211
    "return with a Point representing the inverse of my
48194c26a46c Initial revision
claus
parents:
diff changeset
   212
     scale."
48194c26a46c Initial revision
claus
parents:
diff changeset
   213
48194c26a46c Initial revision
claus
parents:
diff changeset
   214
    |newScale|
48194c26a46c Initial revision
claus
parents:
diff changeset
   215
48194c26a46c Initial revision
claus
parents:
diff changeset
   216
    newScale := self checkScale:scale.
48194c26a46c Initial revision
claus
parents:
diff changeset
   217
    ^ Point x:(1.0 / newScale x)
48194c26a46c Initial revision
claus
parents:
diff changeset
   218
            y:(1.0 / newScale y)
48194c26a46c Initial revision
claus
parents:
diff changeset
   219
!
48194c26a46c Initial revision
claus
parents:
diff changeset
   220
48194c26a46c Initial revision
claus
parents:
diff changeset
   221
inverseTranslation
48194c26a46c Initial revision
claus
parents:
diff changeset
   222
    "return with a Point representing the inverse of my
48194c26a46c Initial revision
claus
parents:
diff changeset
   223
     translation."
48194c26a46c Initial revision
claus
parents:
diff changeset
   224
48194c26a46c Initial revision
claus
parents:
diff changeset
   225
    |trans|
48194c26a46c Initial revision
claus
parents:
diff changeset
   226
48194c26a46c Initial revision
claus
parents:
diff changeset
   227
    trans := translation asPoint.
48194c26a46c Initial revision
claus
parents:
diff changeset
   228
    ^ Point x:trans x negated
48194c26a46c Initial revision
claus
parents:
diff changeset
   229
            y:trans y negated
48194c26a46c Initial revision
claus
parents:
diff changeset
   230
!
48194c26a46c Initial revision
claus
parents:
diff changeset
   231
48194c26a46c Initial revision
claus
parents:
diff changeset
   232
setScale:aScale translation:aTranslation
48194c26a46c Initial revision
claus
parents:
diff changeset
   233
    "Sets the scale to aScale and the translation to aTranslation."
48194c26a46c Initial revision
claus
parents:
diff changeset
   234
48194c26a46c Initial revision
claus
parents:
diff changeset
   235
    scale := aScale.
48194c26a46c Initial revision
claus
parents:
diff changeset
   236
    translation := aTranslation
48194c26a46c Initial revision
claus
parents:
diff changeset
   237
! !
48194c26a46c Initial revision
claus
parents:
diff changeset
   238
48194c26a46c Initial revision
claus
parents:
diff changeset
   239
!WindowingTransformation class methodsFor: 'instance creation'!
48194c26a46c Initial revision
claus
parents:
diff changeset
   240
48194c26a46c Initial revision
claus
parents:
diff changeset
   241
identity
48194c26a46c Initial revision
claus
parents:
diff changeset
   242
    "returns a windowing transformation with no scaling (nil) 
48194c26a46c Initial revision
claus
parents:
diff changeset
   243
     and no translation (0@0)."
48194c26a46c Initial revision
claus
parents:
diff changeset
   244
2
b35336ab0de3 *** empty log message ***
claus
parents: 0
diff changeset
   245
    ^ self new setScale:nil translation:(Point x:0.0 y:0.0)
0
48194c26a46c Initial revision
claus
parents:
diff changeset
   246
!
48194c26a46c Initial revision
claus
parents:
diff changeset
   247
48194c26a46c Initial revision
claus
parents:
diff changeset
   248
scale:aScale translation:aTranslation 
48194c26a46c Initial revision
claus
parents:
diff changeset
   249
    "returns a windowing transformation with a scale factor of  
48194c26a46c Initial revision
claus
parents:
diff changeset
   250
     aScale and a translation offset of aTranslation."
48194c26a46c Initial revision
claus
parents:
diff changeset
   251
2
b35336ab0de3 *** empty log message ***
claus
parents: 0
diff changeset
   252
    ^ self new setScale:aScale translation:aTranslation
0
48194c26a46c Initial revision
claus
parents:
diff changeset
   253
!
48194c26a46c Initial revision
claus
parents:
diff changeset
   254
48194c26a46c Initial revision
claus
parents:
diff changeset
   255
window:sourceRectangle viewport:destinationRectangle 
48194c26a46c Initial revision
claus
parents:
diff changeset
   256
    "returns a windowing transformation with a scale and
48194c26a46c Initial revision
claus
parents:
diff changeset
   257
     translation computed from sourceRectangle and destinationRectangle.
48194c26a46c Initial revision
claus
parents:
diff changeset
   258
     The scale and transformation are computed such that sourceRectangle
48194c26a46c Initial revision
claus
parents:
diff changeset
   259
     is transformed to destinationRectangle."
48194c26a46c Initial revision
claus
parents:
diff changeset
   260
48194c26a46c Initial revision
claus
parents:
diff changeset
   261
    |sX sY tX tY newScale|
48194c26a46c Initial revision
claus
parents:
diff changeset
   262
    sX := destinationRectangle width / sourceRectangle width.
48194c26a46c Initial revision
claus
parents:
diff changeset
   263
    sY := destinationRectangle height / sourceRectangle height.
48194c26a46c Initial revision
claus
parents:
diff changeset
   264
    tX := destinationRectangle left - sourceRectangle left.
48194c26a46c Initial revision
claus
parents:
diff changeset
   265
    tY := destinationRectangle top - sourceRectangle top.
48194c26a46c Initial revision
claus
parents:
diff changeset
   266
    ((sX = 1.0) and:[sY = 1.0]) ifTrue:[
48194c26a46c Initial revision
claus
parents:
diff changeset
   267
        newScale := nil
48194c26a46c Initial revision
claus
parents:
diff changeset
   268
    ] ifFalse:[
48194c26a46c Initial revision
claus
parents:
diff changeset
   269
        newScale := Point x:sX y:sY
48194c26a46c Initial revision
claus
parents:
diff changeset
   270
    ].
2
b35336ab0de3 *** empty log message ***
claus
parents: 0
diff changeset
   271
    ^ self new setScale:newScale translation:(Point x:tX y:tY)
0
48194c26a46c Initial revision
claus
parents:
diff changeset
   272
! !