ScaleTransform.st
author Jan Vrany <jan.vrany@fit.cvut.cz>
Thu, 14 Sep 2017 09:28:09 +0100
branchjv
changeset 8182 c730140a0156
parent 7415 9a5397d090bf
child 7950 6319458fdf4e
child 8595 7f9b84978a2e
permissions -rw-r--r--
X11: compile `GLXWorkstation` with OpenGL OpenGL compiler and linker flags are configured locally in `Make.proto` rather than in target config - this moves the configuration closer to the code. Currently all supported (and considered) platforms have OpenGL implementation. Later on one may use conditionals in makefile to deal exceptions.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
7057
336206a77c6e #FEATURE
Stefan Vogel <sv@exept.de>
parents: 6749
diff changeset
     1
"{ Encoding: utf8 }"
336206a77c6e #FEATURE
Stefan Vogel <sv@exept.de>
parents: 6749
diff changeset
     2
6695
a864ecedd754 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     3
"{ Package: 'stx:libview' }"
a864ecedd754 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     4
6747
352ff5d5ada8 bugfix: missing return
az
parents: 6695
diff changeset
     5
"{ NameSpace: Smalltalk }"
352ff5d5ada8 bugfix: missing return
az
parents: 6695
diff changeset
     6
6695
a864ecedd754 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     7
DisplayTransform variableFloatSubclass:#ScaleTransform
a864ecedd754 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     8
	instanceVariableNames:'scale'
a864ecedd754 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     9
	classVariableNames:''
a864ecedd754 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    10
	poolDictionaries:''
a864ecedd754 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    11
	category:'Graphics-Transformations'
a864ecedd754 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    12
!
a864ecedd754 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    13
a864ecedd754 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    14
!ScaleTransform class methodsFor:'documentation'!
a864ecedd754 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    15
a864ecedd754 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    16
documentation
a864ecedd754 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    17
"
a864ecedd754 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    18
    instances of ScaleTransform can be used to scale other objects in 2D space.
a864ecedd754 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    19
    This one is used, if only a scale is applied, but no translation.
a864ecedd754 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    20
 
a864ecedd754 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    21
    All 2-D objects are supposed to be able to be transformed using instances of me.  
a864ecedd754 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    22
    Multiple instances of me can also be combined to form a single composite transformation.
a864ecedd754 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    23
a864ecedd754 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    24
    [Instance variables:]
a864ecedd754 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    25
        scale           <Number> or <Point> representing a linear scaling factor.
a864ecedd754 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    26
                        nil is interpreted as 1@1
a864ecedd754 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    27
a864ecedd754 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    28
    [author:]
a864ecedd754 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    29
        Claus Gittinger
a864ecedd754 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    30
"
a864ecedd754 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    31
!
a864ecedd754 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    32
a864ecedd754 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    33
examples
a864ecedd754 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    34
"
a864ecedd754 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    35
    example :
a864ecedd754 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    36
                                                                        [exBegin]
a864ecedd754 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    37
     |v|
a864ecedd754 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    38
a864ecedd754 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    39
     v := View new extent:200@200; openAndWait.
a864ecedd754 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    40
     v paint:Color green.
a864ecedd754 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    41
     v fillRectangle:(10@10 corner:40@40).
a864ecedd754 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    42
     v displayLineFrom:50@50 to:75@100. 
a864ecedd754 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    43
a864ecedd754 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    44
     v transformation:(ScaleTransform withScale:2).
a864ecedd754 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    45
     v paint:Color red.
a864ecedd754 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    46
     v fillRectangle:(10@10 corner:40@40).
a864ecedd754 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    47
     v displayLineFrom:50@50 to:75@100. 
a864ecedd754 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    48
                                                                        [exEnd]
a864ecedd754 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    49
a864ecedd754 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    50
"
a864ecedd754 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    51
! !
a864ecedd754 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    52
a864ecedd754 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    53
!ScaleTransform class methodsFor:'instance creation'!
a864ecedd754 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    54
a864ecedd754 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    55
scale:scaleFactor
a864ecedd754 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    56
    ^ self new scale:scaleFactor
a864ecedd754 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    57
!
a864ecedd754 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    58
a864ecedd754 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    59
withScale:scaleFactor
a864ecedd754 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    60
    ^ self new scale:scaleFactor
a864ecedd754 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    61
! !
a864ecedd754 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    62
a864ecedd754 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    63
!ScaleTransform methodsFor:'accessing'!
a864ecedd754 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    64
a864ecedd754 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    65
inverseTransformation
a864ecedd754 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    66
    "Return the inverse transformation of the receiver"
a864ecedd754 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    67
a864ecedd754 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    68
    ^ ScaleTransform withScale:(1 / scale)
a864ecedd754 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    69
!
a864ecedd754 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    70
a864ecedd754 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    71
scale
a864ecedd754 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    72
    "return a copy of the Point that represents the
a864ecedd754 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    73
     current scale of the receiver."
a864ecedd754 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    74
a864ecedd754 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    75
    scale isNil ifTrue:[^ Point x:1 y:1 ].
a864ecedd754 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    76
    ^ scale copy
a864ecedd754 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    77
!
a864ecedd754 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    78
a864ecedd754 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    79
scale:aScale
a864ecedd754 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    80
    "Set the receiver's scale to aScale, a Point or Number."
a864ecedd754 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    81
a864ecedd754 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    82
    aScale isNil ifTrue:[
a864ecedd754 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    83
        scale := aScale
a864ecedd754 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    84
    ] ifFalse:[
a864ecedd754 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    85
        aScale = 1 ifTrue:[
a864ecedd754 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    86
            scale := nil
a864ecedd754 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    87
        ] ifFalse:[
a864ecedd754 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    88
            scale := aScale asPoint.
6749
fcc5b03b21b7 class: ScaleTransform
Claus Gittinger <cg@exept.de>
parents: 6747
diff changeset
    89
            (scale x = 1 and:[scale y = 1]) ifTrue:[
fcc5b03b21b7 class: ScaleTransform
Claus Gittinger <cg@exept.de>
parents: 6747
diff changeset
    90
                scale := nil
fcc5b03b21b7 class: ScaleTransform
Claus Gittinger <cg@exept.de>
parents: 6747
diff changeset
    91
            ].
6695
a864ecedd754 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    92
        ]
a864ecedd754 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    93
    ].
a864ecedd754 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    94
a864ecedd754 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    95
    "Modified: / 13.6.1998 / 14:04:51 / cg"
a864ecedd754 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    96
!
a864ecedd754 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    97
a864ecedd754 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    98
scaleOfOne
a864ecedd754 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    99
    "Set the scale of the receiver to the identity scale"
a864ecedd754 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   100
a864ecedd754 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   101
    scale := nil
a864ecedd754 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   102
!
a864ecedd754 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   103
a864ecedd754 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   104
scaleX
a864ecedd754 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   105
    "return the current x-scale of the receiver."
a864ecedd754 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   106
a864ecedd754 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   107
    scale isNil ifTrue:[^ 1].
a864ecedd754 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   108
    ^ scale x
a864ecedd754 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   109
a864ecedd754 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   110
    "Created: 21.5.1996 / 21:13:49 / cg"
a864ecedd754 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   111
!
a864ecedd754 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   112
a864ecedd754 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   113
scaleY
a864ecedd754 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   114
    "return the current x-scale of the receiver."
a864ecedd754 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   115
a864ecedd754 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   116
    scale isNil ifTrue:[^ 1].
a864ecedd754 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   117
    ^ scale y
a864ecedd754 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   118
a864ecedd754 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   119
    "Created: 21.5.1996 / 21:13:59 / cg"
a864ecedd754 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   120
!
a864ecedd754 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   121
a864ecedd754 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   122
translation
a864ecedd754 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   123
    "return a copy of the receiver's translation."
a864ecedd754 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   124
a864ecedd754 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   125
    ^ Point x:0 y:0
a864ecedd754 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   126
!
a864ecedd754 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   127
a864ecedd754 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   128
translationX
a864ecedd754 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   129
    "return the x part of the receiver's translation."
a864ecedd754 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   130
a864ecedd754 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   131
    ^ 0 
a864ecedd754 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   132
!
a864ecedd754 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   133
a864ecedd754 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   134
translationY
a864ecedd754 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   135
    "return the y part of the receiver's translation."
a864ecedd754 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   136
a864ecedd754 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   137
    ^ 0 
a864ecedd754 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   138
! !
a864ecedd754 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   139
a864ecedd754 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   140
!ScaleTransform methodsFor:'applying transform'!
a864ecedd754 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   141
a864ecedd754 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   142
applyInverseScaleX:aNumber
a864ecedd754 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   143
    "apply the scale only (if widths are to be transformed)"
a864ecedd754 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   144
a864ecedd754 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   145
    scale isNil ifTrue:[^ aNumber].
a864ecedd754 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   146
    ^ aNumber / scale x
a864ecedd754 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   147
!
a864ecedd754 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   148
a864ecedd754 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   149
applyInverseScaleY:aNumber
a864ecedd754 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   150
    "apply the scale only (if heights are to be transformed)"
a864ecedd754 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   151
a864ecedd754 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   152
    scale isNil ifTrue:[^ aNumber].
a864ecedd754 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   153
    ^ aNumber / scale y
a864ecedd754 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   154
!
a864ecedd754 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   155
a864ecedd754 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   156
applyInverseTo:anObject 
a864ecedd754 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   157
    "Apply the inverse of the receiver to anObject
a864ecedd754 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   158
     and return the result. This can be used to map back from logical
a864ecedd754 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   159
     to physical coordinates, for example."
a864ecedd754 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   160
a864ecedd754 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   161
    scale isNil ifTrue:[
a864ecedd754 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   162
        ^ anObject
a864ecedd754 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   163
    ].
a864ecedd754 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   164
    ^ anObject scaledBy:self inverseScale 
a864ecedd754 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   165
!
a864ecedd754 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   166
a864ecedd754 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   167
applyInverseToX:aNumber
a864ecedd754 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   168
    "Apply the receiver to a number representing an x-coordinate
a864ecedd754 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   169
     and return the result."
a864ecedd754 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   170
a864ecedd754 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   171
    |s|
a864ecedd754 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   172
a864ecedd754 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   173
    scale isNil ifTrue:[s := 1] ifFalse:[s := scale x].
a864ecedd754 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   174
    ^ aNumber / s
a864ecedd754 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   175
!
a864ecedd754 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   176
a864ecedd754 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   177
applyInverseToY:aNumber
a864ecedd754 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   178
    "Apply the receiver to a number representing an y-coordinate
a864ecedd754 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   179
     and return the result."
a864ecedd754 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   180
a864ecedd754 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   181
    |s|
a864ecedd754 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   182
a864ecedd754 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   183
    scale isNil ifTrue:[s := 1] ifFalse:[s := scale y].
a864ecedd754 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   184
    ^ aNumber / s
a864ecedd754 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   185
!
a864ecedd754 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   186
a864ecedd754 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   187
applyScaleX:aNumber
a864ecedd754 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   188
    "apply the scale only (if widths are to be transformed)"
a864ecedd754 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   189
a864ecedd754 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   190
    scale isNil ifTrue:[^ aNumber].
a864ecedd754 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   191
    ^ aNumber * scale x
a864ecedd754 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   192
!
a864ecedd754 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   193
a864ecedd754 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   194
applyScaleY:aNumber
a864ecedd754 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   195
    "apply the scale only (if heights are to be transformed)"
a864ecedd754 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   196
a864ecedd754 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   197
    scale isNil ifTrue:[^ aNumber].
a864ecedd754 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   198
    ^ aNumber * scale y
a864ecedd754 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   199
!
a864ecedd754 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   200
a864ecedd754 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   201
transformPoint:p 
a864ecedd754 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   202
    "Apply the receiver to a point, returning a new point."
a864ecedd754 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   203
a864ecedd754 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   204
    scale isNil ifTrue:[
a864ecedd754 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   205
        ^ p
a864ecedd754 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   206
    ].
a864ecedd754 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   207
    ^ p * scale
7057
336206a77c6e #FEATURE
Stefan Vogel <sv@exept.de>
parents: 6749
diff changeset
   208
!
336206a77c6e #FEATURE
Stefan Vogel <sv@exept.de>
parents: 6749
diff changeset
   209
336206a77c6e #FEATURE
Stefan Vogel <sv@exept.de>
parents: 6749
diff changeset
   210
transformRectangle:aRectangle 
336206a77c6e #FEATURE
Stefan Vogel <sv@exept.de>
parents: 6749
diff changeset
   211
    "Apply the receiver to a rectangle, returning a new rectangle."
336206a77c6e #FEATURE
Stefan Vogel <sv@exept.de>
parents: 6749
diff changeset
   212
336206a77c6e #FEATURE
Stefan Vogel <sv@exept.de>
parents: 6749
diff changeset
   213
    scale isNil ifTrue:[
336206a77c6e #FEATURE
Stefan Vogel <sv@exept.de>
parents: 6749
diff changeset
   214
        ^ aRectangle.
336206a77c6e #FEATURE
Stefan Vogel <sv@exept.de>
parents: 6749
diff changeset
   215
    ].
336206a77c6e #FEATURE
Stefan Vogel <sv@exept.de>
parents: 6749
diff changeset
   216
    ^ aRectangle scaledBy:scale.
6695
a864ecedd754 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   217
! !
a864ecedd754 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   218
a864ecedd754 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   219
!ScaleTransform methodsFor:'printing & storing'!
a864ecedd754 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   220
a864ecedd754 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   221
printOn:aStream
a864ecedd754 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   222
    "append a user printed representation of the receiver to aStream.
a864ecedd754 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   223
     The format is suitable for a human - not meant to be read back."
a864ecedd754 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   224
a864ecedd754 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   225
    aStream nextPutAll:self class name.
a864ecedd754 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   226
    aStream nextPutAll:' scale: '.
a864ecedd754 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   227
    scale printOn:aStream.
a864ecedd754 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   228
! !
a864ecedd754 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   229
a864ecedd754 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   230
!ScaleTransform methodsFor:'private'!
a864ecedd754 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   231
a864ecedd754 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   232
checkScale:aScale
a864ecedd754 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   233
    "Converts aScale to the internal format of a floating-point Point."
a864ecedd754 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   234
a864ecedd754 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   235
    |checkedScale|
a864ecedd754 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   236
a864ecedd754 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   237
    checkedScale := aScale asPoint.
6747
352ff5d5ada8 bugfix: missing return
az
parents: 6695
diff changeset
   238
    ^ (checkedScale x asFloat) @ (checkedScale y asFloat)
352ff5d5ada8 bugfix: missing return
az
parents: 6695
diff changeset
   239
352ff5d5ada8 bugfix: missing return
az
parents: 6695
diff changeset
   240
    "Modified: / 22-01-2015 / 14:21:11 / az"
6695
a864ecedd754 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   241
!
a864ecedd754 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   242
a864ecedd754 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   243
inverseScale
a864ecedd754 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   244
    "return with a Point representing the inverse of my
a864ecedd754 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   245
     scale."
a864ecedd754 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   246
a864ecedd754 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   247
    |newScale|
a864ecedd754 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   248
a864ecedd754 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   249
    newScale := self checkScale:scale.
a864ecedd754 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   250
    ^ (1.0 / newScale x) @ (1.0 / newScale y)
a864ecedd754 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   251
! !
a864ecedd754 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   252
a864ecedd754 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   253
!ScaleTransform methodsFor:'testing'!
a864ecedd754 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   254
7415
9a5397d090bf #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7057
diff changeset
   255
isIdentityTransformation
9a5397d090bf #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7057
diff changeset
   256
    "return true if this is an identity transformation;
9a5397d090bf #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7057
diff changeset
   257
     return false, otherwise."
9a5397d090bf #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7057
diff changeset
   258
9a5397d090bf #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7057
diff changeset
   259
    ^ scale isNil or:[scale x = 1 and:[scale y = 1]]
9a5397d090bf #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7057
diff changeset
   260
!
9a5397d090bf #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 7057
diff changeset
   261
6695
a864ecedd754 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   262
isNoScale
a864ecedd754 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   263
    "return true if the identity scale is in effect (i.e. saleFactor is 1);
a864ecedd754 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   264
     return false, otherwise."
a864ecedd754 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   265
a864ecedd754 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   266
    scale isNil ifTrue:[^ true].
a864ecedd754 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   267
    ^ scale x = 1 and:[scale y = 1]
a864ecedd754 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   268
! !
a864ecedd754 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   269
a864ecedd754 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   270
!ScaleTransform methodsFor:'transformations'!
a864ecedd754 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   271
a864ecedd754 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   272
scaleBy:aScale 
a864ecedd754 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   273
    "scale the receiver.
a864ecedd754 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   274
     This is a destructive operation, modifying the transformation
a864ecedd754 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   275
     represented by the receiver"
a864ecedd754 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   276
a864ecedd754 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   277
    |newScale|
a864ecedd754 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   278
a864ecedd754 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   279
    aScale isNil ifTrue:[^ self].
a864ecedd754 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   280
a864ecedd754 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   281
    scale isNil ifTrue:[
a864ecedd754 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   282
        newScale := aScale asPoint
a864ecedd754 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   283
    ] ifFalse:[
a864ecedd754 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   284
        newScale := scale * aScale
a864ecedd754 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   285
    ].
6749
fcc5b03b21b7 class: ScaleTransform
Claus Gittinger <cg@exept.de>
parents: 6747
diff changeset
   286
    self scale:newScale.
6695
a864ecedd754 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   287
!
a864ecedd754 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   288
a864ecedd754 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   289
scaledBy:aScale 
a864ecedd754 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   290
    "return a new WindowingTransformation with the scale and translation of 
a864ecedd754 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   291
     the receiver both scaled by aScale."
a864ecedd754 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   292
a864ecedd754 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   293
    |checkedScale newScale|
a864ecedd754 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   294
a864ecedd754 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   295
    aScale isNil ifTrue:[
a864ecedd754 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   296
        newScale := scale.
a864ecedd754 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   297
    ] ifFalse:[
a864ecedd754 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   298
        checkedScale := self checkScale:aScale.
a864ecedd754 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   299
        scale isNil ifTrue:[
a864ecedd754 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   300
            newScale := checkedScale
a864ecedd754 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   301
        ] ifFalse:[
a864ecedd754 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   302
            newScale := scale * checkedScale
a864ecedd754 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   303
        ].
a864ecedd754 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   304
    ].
a864ecedd754 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   305
    ^ (self class) withScale:newScale
a864ecedd754 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   306
!
a864ecedd754 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   307
a864ecedd754 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   308
translateBy:aTranslation 
a864ecedd754 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   309
    "translate the receiver.
a864ecedd754 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   310
     This is a destructive operation, modifying the transformation
a864ecedd754 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   311
     represented by the receiver"
a864ecedd754 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   312
a864ecedd754 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   313
    self error:'not allowed'
a864ecedd754 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   314
!
a864ecedd754 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   315
a864ecedd754 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   316
translatedBy:aPoint 
a864ecedd754 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   317
    "return a new WindowingTransformation with the same scale and 
a864ecedd754 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   318
     rotations as the receiver and with a translation of the current 
a864ecedd754 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   319
     translation plus aPoint."
a864ecedd754 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   320
a864ecedd754 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   321
    ^ WindowingTransformation
a864ecedd754 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   322
          scale:scale
a864ecedd754 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   323
          translation:aPoint
a864ecedd754 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   324
! !
a864ecedd754 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   325
a864ecedd754 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   326
!ScaleTransform class methodsFor:'documentation'!
a864ecedd754 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   327
a864ecedd754 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   328
version
7057
336206a77c6e #FEATURE
Stefan Vogel <sv@exept.de>
parents: 6749
diff changeset
   329
    ^ '$Header$'
6695
a864ecedd754 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   330
!
a864ecedd754 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   331
a864ecedd754 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   332
version_CVS
7057
336206a77c6e #FEATURE
Stefan Vogel <sv@exept.de>
parents: 6749
diff changeset
   333
    ^ '$Header$'
6695
a864ecedd754 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   334
! !
a864ecedd754 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   335