View.st
author claus
Mon, 20 Dec 1993 00:42:23 +0100
changeset 20 ab35d92b9a4b
parent 15 ba1100f2ca03
child 21 7b3da079729d
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
"
6
7ee0cfde237d *** empty log message ***
claus
parents: 5
diff changeset
     2
 COPYRIGHT (c) 1989 by Claus Gittinger
0
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
PseudoView subclass:#View
48194c26a46c Initial revision
claus
parents:
diff changeset
    14
       instanceVariableNames:'superView subViews
48194c26a46c Initial revision
claus
parents:
diff changeset
    15
                              components style resources
48194c26a46c Initial revision
claus
parents:
diff changeset
    16
                              transformation viewport
48194c26a46c Initial revision
claus
parents:
diff changeset
    17
                              borderColor borderWidth borderShape viewShape
48194c26a46c Initial revision
claus
parents:
diff changeset
    18
                              top left
48194c26a46c Initial revision
claus
parents:
diff changeset
    19
                              extentChanged originChanged cornerChanged
48194c26a46c Initial revision
claus
parents:
diff changeset
    20
                              relativeOrigin relativeExtent relativeCorner
48194c26a46c Initial revision
claus
parents:
diff changeset
    21
                              originRule extentRule cornerRule
48194c26a46c Initial revision
claus
parents:
diff changeset
    22
                              topInset leftInset bottomInset rightInset
48194c26a46c Initial revision
claus
parents:
diff changeset
    23
                              shown hidden name
48194c26a46c Initial revision
claus
parents:
diff changeset
    24
                              level softEdge margin innerClipRect
48194c26a46c Initial revision
claus
parents:
diff changeset
    25
                              shadowColor lightColor
48194c26a46c Initial revision
claus
parents:
diff changeset
    26
                              halfShadowColor halfLightColor
48194c26a46c Initial revision
claus
parents:
diff changeset
    27
                              viewOrigin 
48194c26a46c Initial revision
claus
parents:
diff changeset
    28
                              contentsChangeAction originChangeAction
48194c26a46c Initial revision
claus
parents:
diff changeset
    29
                              bitGravity viewGravity
12
9f0995fac1fa *** empty log message ***
claus
parents: 6
diff changeset
    30
                              keyboardHandler model controller windowGroup
0
48194c26a46c Initial revision
claus
parents:
diff changeset
    31
                              aspectSymbol changeSymbol menuSymbol'
48194c26a46c Initial revision
claus
parents:
diff changeset
    32
       classVariableNames:   'Grey ZeroPoint CentPoint
2
b35336ab0de3 *** empty log message ***
claus
parents: 0
diff changeset
    33
                              ViewSpacing DefaultStyle'
0
48194c26a46c Initial revision
claus
parents:
diff changeset
    34
       poolDictionaries:     ''
48194c26a46c Initial revision
claus
parents:
diff changeset
    35
       category:'Views-Basic'
48194c26a46c Initial revision
claus
parents:
diff changeset
    36
!
48194c26a46c Initial revision
claus
parents:
diff changeset
    37
2
b35336ab0de3 *** empty log message ***
claus
parents: 0
diff changeset
    38
View class instanceVariableNames:'ClassResources'!
b35336ab0de3 *** empty log message ***
claus
parents: 0
diff changeset
    39
0
48194c26a46c Initial revision
claus
parents:
diff changeset
    40
View comment:'
48194c26a46c Initial revision
claus
parents:
diff changeset
    41
6
7ee0cfde237d *** empty log message ***
claus
parents: 5
diff changeset
    42
COPYRIGHT (c) 1989 by Claus Gittinger
0
48194c26a46c Initial revision
claus
parents:
diff changeset
    43
              All Rights Reserved
48194c26a46c Initial revision
claus
parents:
diff changeset
    44
20
ab35d92b9a4b *** empty log message ***
claus
parents: 15
diff changeset
    45
$Header: /cvs/stx/stx/libview/View.st,v 1.7 1993-12-19 23:42:23 claus Exp $
2
b35336ab0de3 *** empty log message ***
claus
parents: 0
diff changeset
    46
b35336ab0de3 *** empty log message ***
claus
parents: 0
diff changeset
    47
written spring/summer 89 by claus
b35336ab0de3 *** empty log message ***
claus
parents: 0
diff changeset
    48
3D effects summer 90 by claus
b35336ab0de3 *** empty log message ***
claus
parents: 0
diff changeset
    49
MVC, viewport and window stuff summer 92 by claus (for ST-80 compatibility)
b35336ab0de3 *** empty log message ***
claus
parents: 0
diff changeset
    50
'!
b35336ab0de3 *** empty log message ***
claus
parents: 0
diff changeset
    51
b35336ab0de3 *** empty log message ***
claus
parents: 0
diff changeset
    52
"this flag controls (globally) how views look"
b35336ab0de3 *** empty log message ***
claus
parents: 0
diff changeset
    53
b35336ab0de3 *** empty log message ***
claus
parents: 0
diff changeset
    54
Smalltalk at:#View3D put:false!
b35336ab0de3 *** empty log message ***
claus
parents: 0
diff changeset
    55
b35336ab0de3 *** empty log message ***
claus
parents: 0
diff changeset
    56
!View class methodsFor:'documentation'!
b35336ab0de3 *** empty log message ***
claus
parents: 0
diff changeset
    57
"
b35336ab0de3 *** empty log message ***
claus
parents: 0
diff changeset
    58
this class implements functions common to all Views. 
b35336ab0de3 *** empty log message ***
claus
parents: 0
diff changeset
    59
Instances of View are seldom used, most views in the system inherit from this class. 
b35336ab0de3 *** empty log message ***
claus
parents: 0
diff changeset
    60
However, sometimes a view is used to create a dummy view for framing purposes.
0
48194c26a46c Initial revision
claus
parents:
diff changeset
    61
48194c26a46c Initial revision
claus
parents:
diff changeset
    62
Instance variables:
48194c26a46c Initial revision
claus
parents:
diff changeset
    63
48194c26a46c Initial revision
claus
parents:
diff changeset
    64
superView               <aView>                 my superview i.e. the view I am in
48194c26a46c Initial revision
claus
parents:
diff changeset
    65
subViews                <aCollection>           the collection of subviews
48194c26a46c Initial revision
claus
parents:
diff changeset
    66
transformation          <WindowingTransformation>
48194c26a46c Initial revision
claus
parents:
diff changeset
    67
window                  <Rectangle>             my window i.e. local coordinate-system
48194c26a46c Initial revision
claus
parents:
diff changeset
    68
viewport                <Rectangle>             my Rectangle in superviews coordinates
48194c26a46c Initial revision
claus
parents:
diff changeset
    69
borderColor             <Color>                 color of border
48194c26a46c Initial revision
claus
parents:
diff changeset
    70
borderWidth             <Number>                borderWidth in pixels (device dep.)
48194c26a46c Initial revision
claus
parents:
diff changeset
    71
borderShape             <Form>                  shape of border (if device supports it)
48194c26a46c Initial revision
claus
parents:
diff changeset
    72
viewShape               <Form>                  shape of view (if device supports it)
48194c26a46c Initial revision
claus
parents:
diff changeset
    73
top                     <Number>                top coordinate in superview
48194c26a46c Initial revision
claus
parents:
diff changeset
    74
left                    <Number>                left coordinate in superview
48194c26a46c Initial revision
claus
parents:
diff changeset
    75
extendChanged           <Boolean>               true if extend changed during setup
48194c26a46c Initial revision
claus
parents:
diff changeset
    76
originChanged           <Boolean>               true if origin changed during setup
48194c26a46c Initial revision
claus
parents:
diff changeset
    77
relativeOrigin          <Number>                relative origin in percent within superview
48194c26a46c Initial revision
claus
parents:
diff changeset
    78
relativeExtent          <Number>                relative extent in percent within superview
48194c26a46c Initial revision
claus
parents:
diff changeset
    79
originRule              <Block>                 rule to compute origin if superview changes size
48194c26a46c Initial revision
claus
parents:
diff changeset
    80
extentRule              <Block>                 rule to compute extent if superview changes size
48194c26a46c Initial revision
claus
parents:
diff changeset
    81
shown                   <Boolean>               true if visible (false if iconified)
48194c26a46c Initial revision
claus
parents:
diff changeset
    82
hidden                  <Boolean>               dont show automatically when superview is realized
48194c26a46c Initial revision
claus
parents:
diff changeset
    83
name                    <String>                my name (future use for resources)
48194c26a46c Initial revision
claus
parents:
diff changeset
    84
level                   <Number>                3D level relative to superview
48194c26a46c Initial revision
claus
parents:
diff changeset
    85
margin                  <Number>                convenient margin
48194c26a46c Initial revision
claus
parents:
diff changeset
    86
innerClipRect           <Rectangle>             convenient inner clip (minus margin)
48194c26a46c Initial revision
claus
parents:
diff changeset
    87
shadowColor             <Color>                 color used to draw 3D shadowed edges
48194c26a46c Initial revision
claus
parents:
diff changeset
    88
lightColor              <Color>                 color used to draw 3D lighted edges
48194c26a46c Initial revision
claus
parents:
diff changeset
    89
viewOrigin              <Point>                 origin within model
48194c26a46c Initial revision
claus
parents:
diff changeset
    90
contentsChanngeAction   <Block>                 action to perform when model contents changes
48194c26a46c Initial revision
claus
parents:
diff changeset
    91
originChangeAction      <Block>                 action to perform when model origin changes
48194c26a46c Initial revision
claus
parents:
diff changeset
    92
bitGravity              <Symbol>                gravity of contents (if device supports it)
48194c26a46c Initial revision
claus
parents:
diff changeset
    93
viewGravity             <Symbol>                gravity of view (if device supports it)
48194c26a46c Initial revision
claus
parents:
diff changeset
    94
keyboardHandler         <anObject>              gets keyboard input if non-nil
12
9f0995fac1fa *** empty log message ***
claus
parents: 6
diff changeset
    95
model                   <anObject>              the model (if any)
9f0995fac1fa *** empty log message ***
claus
parents: 6
diff changeset
    96
controller              <aController>           the controller
0
48194c26a46c Initial revision
claus
parents:
diff changeset
    97
48194c26a46c Initial revision
claus
parents:
diff changeset
    98
Class variables:
48194c26a46c Initial revision
claus
parents:
diff changeset
    99
48194c26a46c Initial revision
claus
parents:
diff changeset
   100
Grey                    <Color>                 the color grey - its used so often
48194c26a46c Initial revision
claus
parents:
diff changeset
   101
ViewSpacing             <Number>                the number of pixels in a millimeter (prefered
48194c26a46c Initial revision
claus
parents:
diff changeset
   102
                                                spacing between views)
48194c26a46c Initial revision
claus
parents:
diff changeset
   103
ZeroPoint               <Point>                 0 @ 0 - its used so often
48194c26a46c Initial revision
claus
parents:
diff changeset
   104
CentPoint               <Point>                 100 @ 100 - its used so often
2
b35336ab0de3 *** empty log message ***
claus
parents: 0
diff changeset
   105
"
b35336ab0de3 *** empty log message ***
claus
parents: 0
diff changeset
   106
! !
0
48194c26a46c Initial revision
claus
parents:
diff changeset
   107
48194c26a46c Initial revision
claus
parents:
diff changeset
   108
!View class methodsFor:'initialization'!
48194c26a46c Initial revision
claus
parents:
diff changeset
   109
48194c26a46c Initial revision
claus
parents:
diff changeset
   110
initialize
48194c26a46c Initial revision
claus
parents:
diff changeset
   111
    "Workstation initialize."
48194c26a46c Initial revision
claus
parents:
diff changeset
   112
48194c26a46c Initial revision
claus
parents:
diff changeset
   113
    super initialize.
48194c26a46c Initial revision
claus
parents:
diff changeset
   114
    Form initialize.
48194c26a46c Initial revision
claus
parents:
diff changeset
   115
    Color initialize.
48194c26a46c Initial revision
claus
parents:
diff changeset
   116
! !
48194c26a46c Initial revision
claus
parents:
diff changeset
   117
48194c26a46c Initial revision
claus
parents:
diff changeset
   118
!View class methodsFor:'defaults'!
48194c26a46c Initial revision
claus
parents:
diff changeset
   119
48194c26a46c Initial revision
claus
parents:
diff changeset
   120
defaultExtent
48194c26a46c Initial revision
claus
parents:
diff changeset
   121
    "define the default extent"
48194c26a46c Initial revision
claus
parents:
diff changeset
   122
48194c26a46c Initial revision
claus
parents:
diff changeset
   123
    CentPoint isNil ifTrue:[CentPoint := 100 @ 100].
48194c26a46c Initial revision
claus
parents:
diff changeset
   124
    ^ CentPoint
48194c26a46c Initial revision
claus
parents:
diff changeset
   125
!
48194c26a46c Initial revision
claus
parents:
diff changeset
   126
48194c26a46c Initial revision
claus
parents:
diff changeset
   127
defaultStyle
12
9f0995fac1fa *** empty log message ***
claus
parents: 6
diff changeset
   128
    "return the default view style"
9f0995fac1fa *** empty log message ***
claus
parents: 6
diff changeset
   129
0
48194c26a46c Initial revision
claus
parents:
diff changeset
   130
    ^ DefaultStyle
48194c26a46c Initial revision
claus
parents:
diff changeset
   131
48194c26a46c Initial revision
claus
parents:
diff changeset
   132
    "View defaultStyle"
48194c26a46c Initial revision
claus
parents:
diff changeset
   133
!
48194c26a46c Initial revision
claus
parents:
diff changeset
   134
48194c26a46c Initial revision
claus
parents:
diff changeset
   135
defaultStyle:aStyle
12
9f0995fac1fa *** empty log message ***
claus
parents: 6
diff changeset
   136
    "set the default view style"
9f0995fac1fa *** empty log message ***
claus
parents: 6
diff changeset
   137
0
48194c26a46c Initial revision
claus
parents:
diff changeset
   138
    DefaultStyle := aStyle
48194c26a46c Initial revision
claus
parents:
diff changeset
   139
48194c26a46c Initial revision
claus
parents:
diff changeset
   140
    "View defaultStyle:#next"
2
b35336ab0de3 *** empty log message ***
claus
parents: 0
diff changeset
   141
!
b35336ab0de3 *** empty log message ***
claus
parents: 0
diff changeset
   142
b35336ab0de3 *** empty log message ***
claus
parents: 0
diff changeset
   143
classResources
12
9f0995fac1fa *** empty log message ***
claus
parents: 6
diff changeset
   144
    "if not already loaded, get the classes resourcePack
9f0995fac1fa *** empty log message ***
claus
parents: 6
diff changeset
   145
     and return it"
9f0995fac1fa *** empty log message ***
claus
parents: 6
diff changeset
   146
2
b35336ab0de3 *** empty log message ***
claus
parents: 0
diff changeset
   147
    ClassResources isNil ifTrue:[
b35336ab0de3 *** empty log message ***
claus
parents: 0
diff changeset
   148
        ClassResources := ResourcePack for:self.
b35336ab0de3 *** empty log message ***
claus
parents: 0
diff changeset
   149
    ].
b35336ab0de3 *** empty log message ***
claus
parents: 0
diff changeset
   150
    ^ ClassResources
0
48194c26a46c Initial revision
claus
parents:
diff changeset
   151
! !
48194c26a46c Initial revision
claus
parents:
diff changeset
   152
48194c26a46c Initial revision
claus
parents:
diff changeset
   153
!View class methodsFor:'instance creation'!
48194c26a46c Initial revision
claus
parents:
diff changeset
   154
48194c26a46c Initial revision
claus
parents:
diff changeset
   155
in:aView
48194c26a46c Initial revision
claus
parents:
diff changeset
   156
    "return a new view as a subview of aView"
48194c26a46c Initial revision
claus
parents:
diff changeset
   157
48194c26a46c Initial revision
claus
parents:
diff changeset
   158
    |newView|
48194c26a46c Initial revision
claus
parents:
diff changeset
   159
48194c26a46c Initial revision
claus
parents:
diff changeset
   160
    newView := self basicNew.
48194c26a46c Initial revision
claus
parents:
diff changeset
   161
    newView device:(aView device).
48194c26a46c Initial revision
claus
parents:
diff changeset
   162
    newView superView:(aView).
48194c26a46c Initial revision
claus
parents:
diff changeset
   163
    newView initialize.
48194c26a46c Initial revision
claus
parents:
diff changeset
   164
    aView addSubView:newView.
48194c26a46c Initial revision
claus
parents:
diff changeset
   165
    ^ newView
48194c26a46c Initial revision
claus
parents:
diff changeset
   166
!
48194c26a46c Initial revision
claus
parents:
diff changeset
   167
48194c26a46c Initial revision
claus
parents:
diff changeset
   168
extent:extent in:aView
48194c26a46c Initial revision
claus
parents:
diff changeset
   169
    "create a new view as a subview of aView with given extent"
48194c26a46c Initial revision
claus
parents:
diff changeset
   170
48194c26a46c Initial revision
claus
parents:
diff changeset
   171
    ^ self origin:nil extent:extent borderWidth:nil
48194c26a46c Initial revision
claus
parents:
diff changeset
   172
                      font:nil label:nil in:aView
48194c26a46c Initial revision
claus
parents:
diff changeset
   173
!
48194c26a46c Initial revision
claus
parents:
diff changeset
   174
48194c26a46c Initial revision
claus
parents:
diff changeset
   175
origin:origin in:aView
48194c26a46c Initial revision
claus
parents:
diff changeset
   176
    "create a new view as a subview of aView with given origin"
48194c26a46c Initial revision
claus
parents:
diff changeset
   177
48194c26a46c Initial revision
claus
parents:
diff changeset
   178
    ^ self origin:origin extent:nil borderWidth:nil
48194c26a46c Initial revision
claus
parents:
diff changeset
   179
                         font:nil label:nil in:aView
48194c26a46c Initial revision
claus
parents:
diff changeset
   180
!
48194c26a46c Initial revision
claus
parents:
diff changeset
   181
48194c26a46c Initial revision
claus
parents:
diff changeset
   182
extent:extent
48194c26a46c Initial revision
claus
parents:
diff changeset
   183
    "create a new view with given extent"
48194c26a46c Initial revision
claus
parents:
diff changeset
   184
48194c26a46c Initial revision
claus
parents:
diff changeset
   185
    ^ self origin:nil extent:extent borderWidth:nil
48194c26a46c Initial revision
claus
parents:
diff changeset
   186
                      font:nil label:nil in:nil
48194c26a46c Initial revision
claus
parents:
diff changeset
   187
!
48194c26a46c Initial revision
claus
parents:
diff changeset
   188
48194c26a46c Initial revision
claus
parents:
diff changeset
   189
origin:origin extent:extent
48194c26a46c Initial revision
claus
parents:
diff changeset
   190
    "create a new view with given origin and extent"
48194c26a46c Initial revision
claus
parents:
diff changeset
   191
48194c26a46c Initial revision
claus
parents:
diff changeset
   192
    ^ self origin:origin extent:extent borderWidth:nil
48194c26a46c Initial revision
claus
parents:
diff changeset
   193
                         font:nil label:nil in:nil
48194c26a46c Initial revision
claus
parents:
diff changeset
   194
!
48194c26a46c Initial revision
claus
parents:
diff changeset
   195
48194c26a46c Initial revision
claus
parents:
diff changeset
   196
origin:origin extent:extent in:aView
48194c26a46c Initial revision
claus
parents:
diff changeset
   197
    "create a new view as a subview of aView with given origin and extent"
48194c26a46c Initial revision
claus
parents:
diff changeset
   198
48194c26a46c Initial revision
claus
parents:
diff changeset
   199
    ^ self origin:origin extent:extent borderWidth:nil
48194c26a46c Initial revision
claus
parents:
diff changeset
   200
                         font:nil label:nil in:aView
48194c26a46c Initial revision
claus
parents:
diff changeset
   201
!
48194c26a46c Initial revision
claus
parents:
diff changeset
   202
48194c26a46c Initial revision
claus
parents:
diff changeset
   203
origin:origin extent:extent borderWidth:bw in:aView
48194c26a46c Initial revision
claus
parents:
diff changeset
   204
    "create a new view as a subview of aView with given origin, extent
48194c26a46c Initial revision
claus
parents:
diff changeset
   205
     and borderWidth"
48194c26a46c Initial revision
claus
parents:
diff changeset
   206
48194c26a46c Initial revision
claus
parents:
diff changeset
   207
    ^ self origin:origin extent:extent borderWidth:bw
48194c26a46c Initial revision
claus
parents:
diff changeset
   208
                         font:nil label:nil in:aView
48194c26a46c Initial revision
claus
parents:
diff changeset
   209
!
48194c26a46c Initial revision
claus
parents:
diff changeset
   210
48194c26a46c Initial revision
claus
parents:
diff changeset
   211
origin:origin extent:extent borderWidth:bw
48194c26a46c Initial revision
claus
parents:
diff changeset
   212
    "create a new view with given origin, extent and borderWidth"
48194c26a46c Initial revision
claus
parents:
diff changeset
   213
48194c26a46c Initial revision
claus
parents:
diff changeset
   214
    ^ self origin:origin extent:extent borderWidth:bw
48194c26a46c Initial revision
claus
parents:
diff changeset
   215
                         font:nil label:nil in:nil
48194c26a46c Initial revision
claus
parents:
diff changeset
   216
!
48194c26a46c Initial revision
claus
parents:
diff changeset
   217
48194c26a46c Initial revision
claus
parents:
diff changeset
   218
label:label
48194c26a46c Initial revision
claus
parents:
diff changeset
   219
    "create a new view with given label"
48194c26a46c Initial revision
claus
parents:
diff changeset
   220
48194c26a46c Initial revision
claus
parents:
diff changeset
   221
    ^ self origin:nil extent:nil borderWidth:nil
48194c26a46c Initial revision
claus
parents:
diff changeset
   222
                      font:nil label:label in:nil
48194c26a46c Initial revision
claus
parents:
diff changeset
   223
!
48194c26a46c Initial revision
claus
parents:
diff changeset
   224
48194c26a46c Initial revision
claus
parents:
diff changeset
   225
label:label in:aView
48194c26a46c Initial revision
claus
parents:
diff changeset
   226
    "create a new view as subview of aView with given label"
48194c26a46c Initial revision
claus
parents:
diff changeset
   227
48194c26a46c Initial revision
claus
parents:
diff changeset
   228
    ^ self origin:nil extent:nil borderWidth:nil
48194c26a46c Initial revision
claus
parents:
diff changeset
   229
                      font:nil label:label in:aView
48194c26a46c Initial revision
claus
parents:
diff changeset
   230
!
48194c26a46c Initial revision
claus
parents:
diff changeset
   231
48194c26a46c Initial revision
claus
parents:
diff changeset
   232
extent:extent label:label
48194c26a46c Initial revision
claus
parents:
diff changeset
   233
    "create a new view with given extent and label"
48194c26a46c Initial revision
claus
parents:
diff changeset
   234
48194c26a46c Initial revision
claus
parents:
diff changeset
   235
    ^ self origin:nil extent:extent borderWidth:nil
48194c26a46c Initial revision
claus
parents:
diff changeset
   236
                      font:nil label:label in:nil
48194c26a46c Initial revision
claus
parents:
diff changeset
   237
!
48194c26a46c Initial revision
claus
parents:
diff changeset
   238
48194c26a46c Initial revision
claus
parents:
diff changeset
   239
origin:origin extent:extent label:label
48194c26a46c Initial revision
claus
parents:
diff changeset
   240
    "create a new view with given origin, extent and label"
48194c26a46c Initial revision
claus
parents:
diff changeset
   241
48194c26a46c Initial revision
claus
parents:
diff changeset
   242
    ^ self origin:origin extent:extent borderWidth:nil
48194c26a46c Initial revision
claus
parents:
diff changeset
   243
                         font:nil label:label in:nil
48194c26a46c Initial revision
claus
parents:
diff changeset
   244
!
48194c26a46c Initial revision
claus
parents:
diff changeset
   245
48194c26a46c Initial revision
claus
parents:
diff changeset
   246
origin:origin extent:extent font:aFont label:label
48194c26a46c Initial revision
claus
parents:
diff changeset
   247
    ^ self origin:origin extent:extent borderWidth:nil
48194c26a46c Initial revision
claus
parents:
diff changeset
   248
                         font:nil label:label in:nil
48194c26a46c Initial revision
claus
parents:
diff changeset
   249
!
48194c26a46c Initial revision
claus
parents:
diff changeset
   250
48194c26a46c Initial revision
claus
parents:
diff changeset
   251
origin:origin extent:extent font:aFont label:label in:aView
48194c26a46c Initial revision
claus
parents:
diff changeset
   252
    ^ self origin:origin extent:extent borderWidth:nil
48194c26a46c Initial revision
claus
parents:
diff changeset
   253
                         font:aFont label:label in:aView
48194c26a46c Initial revision
claus
parents:
diff changeset
   254
!
48194c26a46c Initial revision
claus
parents:
diff changeset
   255
48194c26a46c Initial revision
claus
parents:
diff changeset
   256
origin:anOrigin extent:anExtent
48194c26a46c Initial revision
claus
parents:
diff changeset
   257
                label:aLabel icon:aForm
48194c26a46c Initial revision
claus
parents:
diff changeset
   258
                minExtent:minExtent maxExtent:maxExtent
48194c26a46c Initial revision
claus
parents:
diff changeset
   259
    |newView|
48194c26a46c Initial revision
claus
parents:
diff changeset
   260
48194c26a46c Initial revision
claus
parents:
diff changeset
   261
    newView := self on:Display.
48194c26a46c Initial revision
claus
parents:
diff changeset
   262
    anOrigin notNil ifTrue:[newView origin:anOrigin].
48194c26a46c Initial revision
claus
parents:
diff changeset
   263
    anExtent notNil ifTrue:[newView extent:anExtent].
48194c26a46c Initial revision
claus
parents:
diff changeset
   264
    aLabel notNil ifTrue:[newView label:aLabel].
48194c26a46c Initial revision
claus
parents:
diff changeset
   265
    aForm notNil ifTrue:[newView icon:aForm].
48194c26a46c Initial revision
claus
parents:
diff changeset
   266
    minExtent notNil ifTrue:[newView minExtent:minExtent].
48194c26a46c Initial revision
claus
parents:
diff changeset
   267
    maxExtent notNil ifTrue:[newView maxExtent:maxExtent].
48194c26a46c Initial revision
claus
parents:
diff changeset
   268
    ^ newView
48194c26a46c Initial revision
claus
parents:
diff changeset
   269
!
48194c26a46c Initial revision
claus
parents:
diff changeset
   270
48194c26a46c Initial revision
claus
parents:
diff changeset
   271
origin:anOrigin extent:anExtent borderWidth:bw
48194c26a46c Initial revision
claus
parents:
diff changeset
   272
                font:aFont label:aLabel in:aView
48194c26a46c Initial revision
claus
parents:
diff changeset
   273
    |newView|
48194c26a46c Initial revision
claus
parents:
diff changeset
   274
48194c26a46c Initial revision
claus
parents:
diff changeset
   275
    aView notNil ifTrue:[
48194c26a46c Initial revision
claus
parents:
diff changeset
   276
        newView := self basicNew.
48194c26a46c Initial revision
claus
parents:
diff changeset
   277
        newView device:(aView device).
48194c26a46c Initial revision
claus
parents:
diff changeset
   278
        aView addSubView:newView.
48194c26a46c Initial revision
claus
parents:
diff changeset
   279
        newView initialize
48194c26a46c Initial revision
claus
parents:
diff changeset
   280
    ] ifFalse:[
48194c26a46c Initial revision
claus
parents:
diff changeset
   281
        newView := self on:Display
48194c26a46c Initial revision
claus
parents:
diff changeset
   282
    ].
48194c26a46c Initial revision
claus
parents:
diff changeset
   283
    bw notNil ifTrue:[newView borderWidth:bw].
48194c26a46c Initial revision
claus
parents:
diff changeset
   284
    anExtent notNil ifTrue:[newView extent:anExtent].
48194c26a46c Initial revision
claus
parents:
diff changeset
   285
    anOrigin notNil ifTrue:[newView origin:anOrigin].
48194c26a46c Initial revision
claus
parents:
diff changeset
   286
    aFont notNil ifTrue:[newView font:aFont].
48194c26a46c Initial revision
claus
parents:
diff changeset
   287
    aLabel notNil ifTrue:[newView label:aLabel].
48194c26a46c Initial revision
claus
parents:
diff changeset
   288
    ^ newView
48194c26a46c Initial revision
claus
parents:
diff changeset
   289
!
48194c26a46c Initial revision
claus
parents:
diff changeset
   290
48194c26a46c Initial revision
claus
parents:
diff changeset
   291
origin:origin corner:corner 
48194c26a46c Initial revision
claus
parents:
diff changeset
   292
    "create a new view with given origin and extent"
48194c26a46c Initial revision
claus
parents:
diff changeset
   293
48194c26a46c Initial revision
claus
parents:
diff changeset
   294
    ^ self origin:origin corner:corner borderWidth:nil
48194c26a46c Initial revision
claus
parents:
diff changeset
   295
                         font:nil label:nil in:nil
48194c26a46c Initial revision
claus
parents:
diff changeset
   296
!
48194c26a46c Initial revision
claus
parents:
diff changeset
   297
48194c26a46c Initial revision
claus
parents:
diff changeset
   298
origin:origin corner:corner in:aView
48194c26a46c Initial revision
claus
parents:
diff changeset
   299
    "create a new view as a subview of aView with given origin and extent"
48194c26a46c Initial revision
claus
parents:
diff changeset
   300
48194c26a46c Initial revision
claus
parents:
diff changeset
   301
    ^ self origin:origin corner:corner borderWidth:nil
48194c26a46c Initial revision
claus
parents:
diff changeset
   302
                         font:nil label:nil in:aView
48194c26a46c Initial revision
claus
parents:
diff changeset
   303
!
48194c26a46c Initial revision
claus
parents:
diff changeset
   304
48194c26a46c Initial revision
claus
parents:
diff changeset
   305
origin:origin corner:corner borderWidth:bw in:aView
48194c26a46c Initial revision
claus
parents:
diff changeset
   306
    "create a new view as a subview of aView with given origin and extent"
48194c26a46c Initial revision
claus
parents:
diff changeset
   307
48194c26a46c Initial revision
claus
parents:
diff changeset
   308
    ^ self origin:origin corner:corner borderWidth:bw
48194c26a46c Initial revision
claus
parents:
diff changeset
   309
                         font:nil label:nil in:aView
48194c26a46c Initial revision
claus
parents:
diff changeset
   310
!
48194c26a46c Initial revision
claus
parents:
diff changeset
   311
48194c26a46c Initial revision
claus
parents:
diff changeset
   312
origin:anOrigin corner:aCorner borderWidth:bw
48194c26a46c Initial revision
claus
parents:
diff changeset
   313
                font:aFont label:aLabel in:aView
48194c26a46c Initial revision
claus
parents:
diff changeset
   314
    |newView|
48194c26a46c Initial revision
claus
parents:
diff changeset
   315
48194c26a46c Initial revision
claus
parents:
diff changeset
   316
    aView notNil ifTrue:[
48194c26a46c Initial revision
claus
parents:
diff changeset
   317
        newView := self basicNew.
48194c26a46c Initial revision
claus
parents:
diff changeset
   318
        newView device:(aView device).
48194c26a46c Initial revision
claus
parents:
diff changeset
   319
        aView addSubView:newView.
48194c26a46c Initial revision
claus
parents:
diff changeset
   320
        newView initialize
48194c26a46c Initial revision
claus
parents:
diff changeset
   321
    ] ifFalse:[
48194c26a46c Initial revision
claus
parents:
diff changeset
   322
        newView := self on:Display
48194c26a46c Initial revision
claus
parents:
diff changeset
   323
    ].
48194c26a46c Initial revision
claus
parents:
diff changeset
   324
    bw notNil ifTrue:[newView borderWidth:bw].
48194c26a46c Initial revision
claus
parents:
diff changeset
   325
    anOrigin notNil ifTrue:[newView origin:anOrigin].
48194c26a46c Initial revision
claus
parents:
diff changeset
   326
    aCorner notNil ifTrue:[newView corner:aCorner].
48194c26a46c Initial revision
claus
parents:
diff changeset
   327
    aFont notNil ifTrue:[newView font:aFont].
48194c26a46c Initial revision
claus
parents:
diff changeset
   328
    aLabel notNil ifTrue:[newView label:aLabel].
48194c26a46c Initial revision
claus
parents:
diff changeset
   329
    ^ newView
48194c26a46c Initial revision
claus
parents:
diff changeset
   330
!
48194c26a46c Initial revision
claus
parents:
diff changeset
   331
48194c26a46c Initial revision
claus
parents:
diff changeset
   332
on:anObject aspect:aspectMsg change:changeMsg menu:menuMsg
48194c26a46c Initial revision
claus
parents:
diff changeset
   333
    ^ self new on:anObject
48194c26a46c Initial revision
claus
parents:
diff changeset
   334
           aspect:aspectMsg
48194c26a46c Initial revision
claus
parents:
diff changeset
   335
           change:changeMsg
48194c26a46c Initial revision
claus
parents:
diff changeset
   336
             menu:menuMsg
48194c26a46c Initial revision
claus
parents:
diff changeset
   337
!
48194c26a46c Initial revision
claus
parents:
diff changeset
   338
48194c26a46c Initial revision
claus
parents:
diff changeset
   339
model:aModel
48194c26a46c Initial revision
claus
parents:
diff changeset
   340
    ^ self new model:aModel
48194c26a46c Initial revision
claus
parents:
diff changeset
   341
! !
48194c26a46c Initial revision
claus
parents:
diff changeset
   342
48194c26a46c Initial revision
claus
parents:
diff changeset
   343
!View methodsFor:'initialization'!
48194c26a46c Initial revision
claus
parents:
diff changeset
   344
48194c26a46c Initial revision
claus
parents:
diff changeset
   345
initialize
12
9f0995fac1fa *** empty log message ***
claus
parents: 6
diff changeset
   346
    "initialize all state of the view - usually redefined in subclasses,
9f0995fac1fa *** empty log message ***
claus
parents: 6
diff changeset
   347
     but always doing a 'super initialize'. Each class should setup its
9f0995fac1fa *** empty log message ***
claus
parents: 6
diff changeset
   348
     locals - and not forget the others.
9f0995fac1fa *** empty log message ***
claus
parents: 6
diff changeset
   349
     View setup is separated into two parts, the general setup done here
9f0995fac1fa *** empty log message ***
claus
parents: 6
diff changeset
   350
     and the style specific setup in initStyle. Each view should be prepared
9f0995fac1fa *** empty log message ***
claus
parents: 6
diff changeset
   351
     for a style change by beeing sent another initStyle with a new style value"
9f0995fac1fa *** empty log message ***
claus
parents: 6
diff changeset
   352
0
48194c26a46c Initial revision
claus
parents:
diff changeset
   353
    |ext|
48194c26a46c Initial revision
claus
parents:
diff changeset
   354
48194c26a46c Initial revision
claus
parents:
diff changeset
   355
    super initialize.
48194c26a46c Initial revision
claus
parents:
diff changeset
   356
    shown := false.
12
9f0995fac1fa *** empty log message ***
claus
parents: 6
diff changeset
   357
    hidden := false.
9f0995fac1fa *** empty log message ***
claus
parents: 6
diff changeset
   358
    realized := false.
0
48194c26a46c Initial revision
claus
parents:
diff changeset
   359
48194c26a46c Initial revision
claus
parents:
diff changeset
   360
    "fill in some defaults - some of them are usually redefined in subclasses
48194c26a46c Initial revision
claus
parents:
diff changeset
   361
     initialize methods"
48194c26a46c Initial revision
claus
parents:
diff changeset
   362
48194c26a46c Initial revision
claus
parents:
diff changeset
   363
    name := self class name.
48194c26a46c Initial revision
claus
parents:
diff changeset
   364
    ext := self class defaultExtent.
48194c26a46c Initial revision
claus
parents:
diff changeset
   365
48194c26a46c Initial revision
claus
parents:
diff changeset
   366
    level := 0.
48194c26a46c Initial revision
claus
parents:
diff changeset
   367
    margin := 0.
48194c26a46c Initial revision
claus
parents:
diff changeset
   368
    softEdge := false.
48194c26a46c Initial revision
claus
parents:
diff changeset
   369
2
b35336ab0de3 *** empty log message ***
claus
parents: 0
diff changeset
   370
    resources := self class classResources.
b35336ab0de3 *** empty log message ***
claus
parents: 0
diff changeset
   371
0
48194c26a46c Initial revision
claus
parents:
diff changeset
   372
    self initStyle.
48194c26a46c Initial revision
claus
parents:
diff changeset
   373
48194c26a46c Initial revision
claus
parents:
diff changeset
   374
    left := 0.
48194c26a46c Initial revision
claus
parents:
diff changeset
   375
    top := 0.
48194c26a46c Initial revision
claus
parents:
diff changeset
   376
    width := ext x.
48194c26a46c Initial revision
claus
parents:
diff changeset
   377
    height := ext y.
48194c26a46c Initial revision
claus
parents:
diff changeset
   378
    ZeroPoint isNil ifTrue:[ZeroPoint := 0 @ 0].
48194c26a46c Initial revision
claus
parents:
diff changeset
   379
    viewOrigin := ZeroPoint.
48194c26a46c Initial revision
claus
parents:
diff changeset
   380
    ViewSpacing isNil ifTrue:[
48194c26a46c Initial revision
claus
parents:
diff changeset
   381
        ViewSpacing := Display verticalPixelPerMillimeter rounded
48194c26a46c Initial revision
claus
parents:
diff changeset
   382
    ].
48194c26a46c Initial revision
claus
parents:
diff changeset
   383
    originChanged := false.
48194c26a46c Initial revision
claus
parents:
diff changeset
   384
    extentChanged := false.
48194c26a46c Initial revision
claus
parents:
diff changeset
   385
    bitGravity := nil.
48194c26a46c Initial revision
claus
parents:
diff changeset
   386
    viewGravity := nil.
48194c26a46c Initial revision
claus
parents:
diff changeset
   387
12
9f0995fac1fa *** empty log message ***
claus
parents: 6
diff changeset
   388
"
9f0995fac1fa *** empty log message ***
claus
parents: 6
diff changeset
   389
    controller := self defaultController new.
9f0995fac1fa *** empty log message ***
claus
parents: 6
diff changeset
   390
    controller view:self.
9f0995fac1fa *** empty log message ***
claus
parents: 6
diff changeset
   391
"
9f0995fac1fa *** empty log message ***
claus
parents: 6
diff changeset
   392
!
9f0995fac1fa *** empty log message ***
claus
parents: 6
diff changeset
   393
9f0995fac1fa *** empty log message ***
claus
parents: 6
diff changeset
   394
defaultController
9f0995fac1fa *** empty log message ***
claus
parents: 6
diff changeset
   395
    ^ Controller
0
48194c26a46c Initial revision
claus
parents:
diff changeset
   396
!
48194c26a46c Initial revision
claus
parents:
diff changeset
   397
48194c26a46c Initial revision
claus
parents:
diff changeset
   398
initStyle
12
9f0995fac1fa *** empty log message ***
claus
parents: 6
diff changeset
   399
    "this method sets up all style dependent things"
9f0995fac1fa *** empty log message ***
claus
parents: 6
diff changeset
   400
2
b35336ab0de3 *** empty log message ***
claus
parents: 0
diff changeset
   401
    Grey isNil ifTrue:[
b35336ab0de3 *** empty log message ***
claus
parents: 0
diff changeset
   402
        Grey := resources name:'VIEW_GREY' default:nil.
b35336ab0de3 *** empty log message ***
claus
parents: 0
diff changeset
   403
        Grey isNil ifTrue:[
b35336ab0de3 *** empty log message ***
claus
parents: 0
diff changeset
   404
            Grey := Color grey
b35336ab0de3 *** empty log message ***
claus
parents: 0
diff changeset
   405
        ].
b35336ab0de3 *** empty log message ***
claus
parents: 0
diff changeset
   406
    ].
b35336ab0de3 *** empty log message ***
claus
parents: 0
diff changeset
   407
    DefaultStyle isNil ifTrue:[
b35336ab0de3 *** empty log message ***
claus
parents: 0
diff changeset
   408
        DefaultStyle := resources name:'VIEW_STYLE' 
b35336ab0de3 *** empty log message ***
claus
parents: 0
diff changeset
   409
                               default:(View3D ifTrue:[#view3D] 
b35336ab0de3 *** empty log message ***
claus
parents: 0
diff changeset
   410
                                              ifFalse:[#normal]) 
b35336ab0de3 *** empty log message ***
claus
parents: 0
diff changeset
   411
    ].
b35336ab0de3 *** empty log message ***
claus
parents: 0
diff changeset
   412
0
48194c26a46c Initial revision
claus
parents:
diff changeset
   413
    style := DefaultStyle.
48194c26a46c Initial revision
claus
parents:
diff changeset
   414
48194c26a46c Initial revision
claus
parents:
diff changeset
   415
    self is3D ifTrue:[
48194c26a46c Initial revision
claus
parents:
diff changeset
   416
        borderWidth := 0
48194c26a46c Initial revision
claus
parents:
diff changeset
   417
    ] ifFalse:[
48194c26a46c Initial revision
claus
parents:
diff changeset
   418
        borderWidth := 1
48194c26a46c Initial revision
claus
parents:
diff changeset
   419
    ].
48194c26a46c Initial revision
claus
parents:
diff changeset
   420
48194c26a46c Initial revision
claus
parents:
diff changeset
   421
    (self is3D and:[device hasGreyscales]) ifTrue:[
48194c26a46c Initial revision
claus
parents:
diff changeset
   422
        viewBackground := Grey.
48194c26a46c Initial revision
claus
parents:
diff changeset
   423
        lightColor := White.
48194c26a46c Initial revision
claus
parents:
diff changeset
   424
        shadowColor := Black.
48194c26a46c Initial revision
claus
parents:
diff changeset
   425
        halfShadowColor := Color darkGrey.
48194c26a46c Initial revision
claus
parents:
diff changeset
   426
        halfLightColor := White.
48194c26a46c Initial revision
claus
parents:
diff changeset
   427
    ] ifFalse:[
48194c26a46c Initial revision
claus
parents:
diff changeset
   428
        viewBackground := White.
48194c26a46c Initial revision
claus
parents:
diff changeset
   429
        lightColor := Color grey 
48194c26a46c Initial revision
claus
parents:
diff changeset
   430
                      "or White" 
48194c26a46c Initial revision
claus
parents:
diff changeset
   431
                      "or Color lightGrey".    "cant say which is better ..."
48194c26a46c Initial revision
claus
parents:
diff changeset
   432
        shadowColor := Black.
48194c26a46c Initial revision
claus
parents:
diff changeset
   433
        halfShadowColor := Color grey.
48194c26a46c Initial revision
claus
parents:
diff changeset
   434
        halfLightColor := White.
48194c26a46c Initial revision
claus
parents:
diff changeset
   435
    ].
48194c26a46c Initial revision
claus
parents:
diff changeset
   436
48194c26a46c Initial revision
claus
parents:
diff changeset
   437
    borderColor := Black.
48194c26a46c Initial revision
claus
parents:
diff changeset
   438
!
48194c26a46c Initial revision
claus
parents:
diff changeset
   439
48194c26a46c Initial revision
claus
parents:
diff changeset
   440
initEvents
48194c26a46c Initial revision
claus
parents:
diff changeset
   441
    "will be sent by create - can be redefined by subclasses to enable
48194c26a46c Initial revision
claus
parents:
diff changeset
   442
     view events"
48194c26a46c Initial revision
claus
parents:
diff changeset
   443
48194c26a46c Initial revision
claus
parents:
diff changeset
   444
    ^ self
48194c26a46c Initial revision
claus
parents:
diff changeset
   445
!
48194c26a46c Initial revision
claus
parents:
diff changeset
   446
12
9f0995fac1fa *** empty log message ***
claus
parents: 6
diff changeset
   447
prepareForReinit
9f0995fac1fa *** empty log message ***
claus
parents: 6
diff changeset
   448
    super prepareForReinit.
9f0995fac1fa *** empty log message ***
claus
parents: 6
diff changeset
   449
    windowGroup notNil ifTrue:[
15
ba1100f2ca03 fixed resize (smaller) border repaint bug
claus
parents: 12
diff changeset
   450
        windowGroup reinitialize
12
9f0995fac1fa *** empty log message ***
claus
parents: 6
diff changeset
   451
    ]
9f0995fac1fa *** empty log message ***
claus
parents: 6
diff changeset
   452
!
9f0995fac1fa *** empty log message ***
claus
parents: 6
diff changeset
   453
0
48194c26a46c Initial revision
claus
parents:
diff changeset
   454
reinitialize
48194c26a46c Initial revision
claus
parents:
diff changeset
   455
    "this is called right after snapIn"
48194c26a46c Initial revision
claus
parents:
diff changeset
   456
48194c26a46c Initial revision
claus
parents:
diff changeset
   457
    |myController|
48194c26a46c Initial revision
claus
parents:
diff changeset
   458
48194c26a46c Initial revision
claus
parents:
diff changeset
   459
    "if I have already been reinited - return"
48194c26a46c Initial revision
claus
parents:
diff changeset
   460
    drawableId notNil ifTrue:[
48194c26a46c Initial revision
claus
parents:
diff changeset
   461
        ^ self
48194c26a46c Initial revision
claus
parents:
diff changeset
   462
    ].
48194c26a46c Initial revision
claus
parents:
diff changeset
   463
48194c26a46c Initial revision
claus
parents:
diff changeset
   464
    myController := controller.
48194c26a46c Initial revision
claus
parents:
diff changeset
   465
    controller := nil.
48194c26a46c Initial revision
claus
parents:
diff changeset
   466
    self recreate.
48194c26a46c Initial revision
claus
parents:
diff changeset
   467
48194c26a46c Initial revision
claus
parents:
diff changeset
   468
    "if I was mapped, do it again"
48194c26a46c Initial revision
claus
parents:
diff changeset
   469
    realized ifTrue:[
48194c26a46c Initial revision
claus
parents:
diff changeset
   470
        "if it was iconified, try to remap iconified"
48194c26a46c Initial revision
claus
parents:
diff changeset
   471
        shown ifFalse:[
48194c26a46c Initial revision
claus
parents:
diff changeset
   472
            device mapWindow:drawableId iconified:true
48194c26a46c Initial revision
claus
parents:
diff changeset
   473
                                              atX:left y:top
48194c26a46c Initial revision
claus
parents:
diff changeset
   474
                                            width:width height:height
48194c26a46c Initial revision
claus
parents:
diff changeset
   475
        ] ifTrue:[
48194c26a46c Initial revision
claus
parents:
diff changeset
   476
            device mapWindow:drawableId iconified:false
48194c26a46c Initial revision
claus
parents:
diff changeset
   477
                                              atX:left y:top
48194c26a46c Initial revision
claus
parents:
diff changeset
   478
                                            width:width height:height
12
9f0995fac1fa *** empty log message ***
claus
parents: 6
diff changeset
   479
        ].
9f0995fac1fa *** empty log message ***
claus
parents: 6
diff changeset
   480
9f0995fac1fa *** empty log message ***
claus
parents: 6
diff changeset
   481
        "and restart the window-group process"
9f0995fac1fa *** empty log message ***
claus
parents: 6
diff changeset
   482
        windowGroup notNil ifTrue:[
9f0995fac1fa *** empty log message ***
claus
parents: 6
diff changeset
   483
            windowGroup startup
0
48194c26a46c Initial revision
claus
parents:
diff changeset
   484
        ]
48194c26a46c Initial revision
claus
parents:
diff changeset
   485
    ].
48194c26a46c Initial revision
claus
parents:
diff changeset
   486
48194c26a46c Initial revision
claus
parents:
diff changeset
   487
    "restore controller"
48194c26a46c Initial revision
claus
parents:
diff changeset
   488
    controller := myController
48194c26a46c Initial revision
claus
parents:
diff changeset
   489
!
48194c26a46c Initial revision
claus
parents:
diff changeset
   490
12
9f0995fac1fa *** empty log message ***
claus
parents: 6
diff changeset
   491
reinitStyle
9f0995fac1fa *** empty log message ***
claus
parents: 6
diff changeset
   492
    "this method is called for a style change"
9f0995fac1fa *** empty log message ***
claus
parents: 6
diff changeset
   493
9f0995fac1fa *** empty log message ***
claus
parents: 6
diff changeset
   494
    |t|
9f0995fac1fa *** empty log message ***
claus
parents: 6
diff changeset
   495
9f0995fac1fa *** empty log message ***
claus
parents: 6
diff changeset
   496
    Grey := nil.
9f0995fac1fa *** empty log message ***
claus
parents: 6
diff changeset
   497
    DefaultStyle := nil.
9f0995fac1fa *** empty log message ***
claus
parents: 6
diff changeset
   498
9f0995fac1fa *** empty log message ***
claus
parents: 6
diff changeset
   499
    self initStyle.
9f0995fac1fa *** empty log message ***
claus
parents: 6
diff changeset
   500
9f0995fac1fa *** empty log message ***
claus
parents: 6
diff changeset
   501
    drawableId notNil ifTrue:[
9f0995fac1fa *** empty log message ***
claus
parents: 6
diff changeset
   502
        "force a change"
9f0995fac1fa *** empty log message ***
claus
parents: 6
diff changeset
   503
        t := borderWidth. borderWidth := nil. self borderWidth:t.
9f0995fac1fa *** empty log message ***
claus
parents: 6
diff changeset
   504
        t := viewBackground. viewBackground := nil. self viewBackground:t.
9f0995fac1fa *** empty log message ***
claus
parents: 6
diff changeset
   505
        self clear.
9f0995fac1fa *** empty log message ***
claus
parents: 6
diff changeset
   506
        self redraw
9f0995fac1fa *** empty log message ***
claus
parents: 6
diff changeset
   507
    ].
9f0995fac1fa *** empty log message ***
claus
parents: 6
diff changeset
   508
!
9f0995fac1fa *** empty log message ***
claus
parents: 6
diff changeset
   509
0
48194c26a46c Initial revision
claus
parents:
diff changeset
   510
recreate
48194c26a46c Initial revision
claus
parents:
diff changeset
   511
    "recreate (i.e. tell X about me) after a snapin"
48194c26a46c Initial revision
claus
parents:
diff changeset
   512
48194c26a46c Initial revision
claus
parents:
diff changeset
   513
    drawableId isNil ifTrue:[
48194c26a46c Initial revision
claus
parents:
diff changeset
   514
        "associate cursor/colors to device"
48194c26a46c Initial revision
claus
parents:
diff changeset
   515
48194c26a46c Initial revision
claus
parents:
diff changeset
   516
        super recreate.
48194c26a46c Initial revision
claus
parents:
diff changeset
   517
48194c26a46c Initial revision
claus
parents:
diff changeset
   518
        borderColor notNil ifTrue:[
48194c26a46c Initial revision
claus
parents:
diff changeset
   519
            borderColor := borderColor on:device.
48194c26a46c Initial revision
claus
parents:
diff changeset
   520
        ].
48194c26a46c Initial revision
claus
parents:
diff changeset
   521
        shadowColor notNil ifTrue:[
48194c26a46c Initial revision
claus
parents:
diff changeset
   522
            shadowColor := shadowColor on:device.
48194c26a46c Initial revision
claus
parents:
diff changeset
   523
        ].
48194c26a46c Initial revision
claus
parents:
diff changeset
   524
        lightColor notNil ifTrue:[
48194c26a46c Initial revision
claus
parents:
diff changeset
   525
            lightColor := lightColor on:device.
48194c26a46c Initial revision
claus
parents:
diff changeset
   526
        ].
48194c26a46c Initial revision
claus
parents:
diff changeset
   527
        halfShadowColor notNil ifTrue:[
48194c26a46c Initial revision
claus
parents:
diff changeset
   528
            halfShadowColor := halfShadowColor on:device.
48194c26a46c Initial revision
claus
parents:
diff changeset
   529
        ].
48194c26a46c Initial revision
claus
parents:
diff changeset
   530
        halfLightColor notNil ifTrue:[
48194c26a46c Initial revision
claus
parents:
diff changeset
   531
            halfLightColor := halfLightColor on:device.
48194c26a46c Initial revision
claus
parents:
diff changeset
   532
        ].
48194c26a46c Initial revision
claus
parents:
diff changeset
   533
48194c26a46c Initial revision
claus
parents:
diff changeset
   534
        drawableId := device createWindowFor:self 
48194c26a46c Initial revision
claus
parents:
diff changeset
   535
                                        left:left top:top 
48194c26a46c Initial revision
claus
parents:
diff changeset
   536
                                       width:width height:height.
48194c26a46c Initial revision
claus
parents:
diff changeset
   537
48194c26a46c Initial revision
claus
parents:
diff changeset
   538
        extentChanged := false.
48194c26a46c Initial revision
claus
parents:
diff changeset
   539
        originChanged := false.
48194c26a46c Initial revision
claus
parents:
diff changeset
   540
48194c26a46c Initial revision
claus
parents:
diff changeset
   541
        borderShape notNil ifTrue:[
48194c26a46c Initial revision
claus
parents:
diff changeset
   542
            device setWindowBorderShape:(borderShape id) in:drawableId
48194c26a46c Initial revision
claus
parents:
diff changeset
   543
        ].
48194c26a46c Initial revision
claus
parents:
diff changeset
   544
        viewShape notNil ifTrue:[
48194c26a46c Initial revision
claus
parents:
diff changeset
   545
            device setWindowShape:(viewShape id) in:drawableId
48194c26a46c Initial revision
claus
parents:
diff changeset
   546
        ].
2
b35336ab0de3 *** empty log message ***
claus
parents: 0
diff changeset
   547
        (backed notNil and:[backed ~~ false]) ifTrue:[
0
48194c26a46c Initial revision
claus
parents:
diff changeset
   548
            device setBackingStore:backed in:drawableId
48194c26a46c Initial revision
claus
parents:
diff changeset
   549
        ].
48194c26a46c Initial revision
claus
parents:
diff changeset
   550
        saveUnder ifTrue:[
48194c26a46c Initial revision
claus
parents:
diff changeset
   551
            device setSaveUnder:saveUnder in:drawableId
48194c26a46c Initial revision
claus
parents:
diff changeset
   552
        ].
48194c26a46c Initial revision
claus
parents:
diff changeset
   553
48194c26a46c Initial revision
claus
parents:
diff changeset
   554
        font := font on:device.
48194c26a46c Initial revision
claus
parents:
diff changeset
   555
48194c26a46c Initial revision
claus
parents:
diff changeset
   556
        "XXX has to be changed: eventmasks are device specific -
48194c26a46c Initial revision
claus
parents:
diff changeset
   557
         will not allow restart on another Workstation-type"
48194c26a46c Initial revision
claus
parents:
diff changeset
   558
48194c26a46c Initial revision
claus
parents:
diff changeset
   559
        device setEventMask:eventMask in:drawableId
48194c26a46c Initial revision
claus
parents:
diff changeset
   560
    ]
48194c26a46c Initial revision
claus
parents:
diff changeset
   561
! !
48194c26a46c Initial revision
claus
parents:
diff changeset
   562
48194c26a46c Initial revision
claus
parents:
diff changeset
   563
!View methodsFor:'accessing-mvc'!
48194c26a46c Initial revision
claus
parents:
diff changeset
   564
12
9f0995fac1fa *** empty log message ***
claus
parents: 6
diff changeset
   565
windowGroup
9f0995fac1fa *** empty log message ***
claus
parents: 6
diff changeset
   566
    "return the window group. For old style views, return nil"
9f0995fac1fa *** empty log message ***
claus
parents: 6
diff changeset
   567
9f0995fac1fa *** empty log message ***
claus
parents: 6
diff changeset
   568
    ^ windowGroup
9f0995fac1fa *** empty log message ***
claus
parents: 6
diff changeset
   569
!
9f0995fac1fa *** empty log message ***
claus
parents: 6
diff changeset
   570
0
48194c26a46c Initial revision
claus
parents:
diff changeset
   571
controller
48194c26a46c Initial revision
claus
parents:
diff changeset
   572
    "return the controller. For non MVC views, return nil"
48194c26a46c Initial revision
claus
parents:
diff changeset
   573
48194c26a46c Initial revision
claus
parents:
diff changeset
   574
    ^ controller
48194c26a46c Initial revision
claus
parents:
diff changeset
   575
!
48194c26a46c Initial revision
claus
parents:
diff changeset
   576
48194c26a46c Initial revision
claus
parents:
diff changeset
   577
controller:aController
48194c26a46c Initial revision
claus
parents:
diff changeset
   578
    "set the controller"
48194c26a46c Initial revision
claus
parents:
diff changeset
   579
48194c26a46c Initial revision
claus
parents:
diff changeset
   580
    controller := aController.
48194c26a46c Initial revision
claus
parents:
diff changeset
   581
    controller view:self.
48194c26a46c Initial revision
claus
parents:
diff changeset
   582
    controller model:model
48194c26a46c Initial revision
claus
parents:
diff changeset
   583
!
48194c26a46c Initial revision
claus
parents:
diff changeset
   584
48194c26a46c Initial revision
claus
parents:
diff changeset
   585
model
48194c26a46c Initial revision
claus
parents:
diff changeset
   586
    "return the model, for non-MVC views,
48194c26a46c Initial revision
claus
parents:
diff changeset
   587
     this is usually the receiver"
48194c26a46c Initial revision
claus
parents:
diff changeset
   588
48194c26a46c Initial revision
claus
parents:
diff changeset
   589
    ^ model
48194c26a46c Initial revision
claus
parents:
diff changeset
   590
!
48194c26a46c Initial revision
claus
parents:
diff changeset
   591
48194c26a46c Initial revision
claus
parents:
diff changeset
   592
model:aModel
48194c26a46c Initial revision
claus
parents:
diff changeset
   593
    "set the model"
48194c26a46c Initial revision
claus
parents:
diff changeset
   594
48194c26a46c Initial revision
claus
parents:
diff changeset
   595
    model notNil ifTrue:[
48194c26a46c Initial revision
claus
parents:
diff changeset
   596
        model removeDependent:self
48194c26a46c Initial revision
claus
parents:
diff changeset
   597
    ].
48194c26a46c Initial revision
claus
parents:
diff changeset
   598
    model := aModel.
48194c26a46c Initial revision
claus
parents:
diff changeset
   599
    model notNil ifTrue:[
48194c26a46c Initial revision
claus
parents:
diff changeset
   600
        aModel addDependent:self
48194c26a46c Initial revision
claus
parents:
diff changeset
   601
    ].
48194c26a46c Initial revision
claus
parents:
diff changeset
   602
    controller notNil ifTrue:[
48194c26a46c Initial revision
claus
parents:
diff changeset
   603
        controller model:aModel
48194c26a46c Initial revision
claus
parents:
diff changeset
   604
    ]
48194c26a46c Initial revision
claus
parents:
diff changeset
   605
!
48194c26a46c Initial revision
claus
parents:
diff changeset
   606
48194c26a46c Initial revision
claus
parents:
diff changeset
   607
on: anObject aspect: aspectMsg change: changeMsg menu: menuMsg
12
9f0995fac1fa *** empty log message ***
claus
parents: 6
diff changeset
   608
    "ST-80 compatibility: set model, aspect, change and menu
9f0995fac1fa *** empty log message ***
claus
parents: 6
diff changeset
   609
     messages - needs a view which uses these"
9f0995fac1fa *** empty log message ***
claus
parents: 6
diff changeset
   610
0
48194c26a46c Initial revision
claus
parents:
diff changeset
   611
    self model:anObject.
48194c26a46c Initial revision
claus
parents:
diff changeset
   612
    self aspect:aspectMsg.
48194c26a46c Initial revision
claus
parents:
diff changeset
   613
    self change:changeMsg.
48194c26a46c Initial revision
claus
parents:
diff changeset
   614
    self menu:menuMsg
48194c26a46c Initial revision
claus
parents:
diff changeset
   615
!
48194c26a46c Initial revision
claus
parents:
diff changeset
   616
48194c26a46c Initial revision
claus
parents:
diff changeset
   617
aspect:aspectMsg
12
9f0995fac1fa *** empty log message ***
claus
parents: 6
diff changeset
   618
    aspectSymbol := aspectMsg
0
48194c26a46c Initial revision
claus
parents:
diff changeset
   619
!
48194c26a46c Initial revision
claus
parents:
diff changeset
   620
48194c26a46c Initial revision
claus
parents:
diff changeset
   621
change:changeMsg
12
9f0995fac1fa *** empty log message ***
claus
parents: 6
diff changeset
   622
    changeSymbol := changeMsg
0
48194c26a46c Initial revision
claus
parents:
diff changeset
   623
!
48194c26a46c Initial revision
claus
parents:
diff changeset
   624
48194c26a46c Initial revision
claus
parents:
diff changeset
   625
menu:menuMsg
12
9f0995fac1fa *** empty log message ***
claus
parents: 6
diff changeset
   626
    menuSymbol := menuMsg
0
48194c26a46c Initial revision
claus
parents:
diff changeset
   627
!
48194c26a46c Initial revision
claus
parents:
diff changeset
   628
48194c26a46c Initial revision
claus
parents:
diff changeset
   629
heightOfContents
48194c26a46c Initial revision
claus
parents:
diff changeset
   630
    "return the height of the contents in pixels 
48194c26a46c Initial revision
claus
parents:
diff changeset
   631
     - defaults to views visible area here"
48194c26a46c Initial revision
claus
parents:
diff changeset
   632
48194c26a46c Initial revision
claus
parents:
diff changeset
   633
    ^ self innerHeight
48194c26a46c Initial revision
claus
parents:
diff changeset
   634
!
48194c26a46c Initial revision
claus
parents:
diff changeset
   635
48194c26a46c Initial revision
claus
parents:
diff changeset
   636
widthOfContents
48194c26a46c Initial revision
claus
parents:
diff changeset
   637
    "return the width of the contents in pixels
48194c26a46c Initial revision
claus
parents:
diff changeset
   638
     - defaults to views visible area here"
48194c26a46c Initial revision
claus
parents:
diff changeset
   639
48194c26a46c Initial revision
claus
parents:
diff changeset
   640
    ^ self innerWidth
48194c26a46c Initial revision
claus
parents:
diff changeset
   641
! !
48194c26a46c Initial revision
claus
parents:
diff changeset
   642
48194c26a46c Initial revision
claus
parents:
diff changeset
   643
!View methodsFor:'accessing-dimensions'!
48194c26a46c Initial revision
claus
parents:
diff changeset
   644
48194c26a46c Initial revision
claus
parents:
diff changeset
   645
left:aNumber
48194c26a46c Initial revision
claus
parents:
diff changeset
   646
    "set the x position"
48194c26a46c Initial revision
claus
parents:
diff changeset
   647
48194c26a46c Initial revision
claus
parents:
diff changeset
   648
    self origin:(aNumber @ top)
48194c26a46c Initial revision
claus
parents:
diff changeset
   649
!
48194c26a46c Initial revision
claus
parents:
diff changeset
   650
48194c26a46c Initial revision
claus
parents:
diff changeset
   651
top:aNumber
48194c26a46c Initial revision
claus
parents:
diff changeset
   652
    "set the y position"
48194c26a46c Initial revision
claus
parents:
diff changeset
   653
48194c26a46c Initial revision
claus
parents:
diff changeset
   654
    self origin:(left @ aNumber)
48194c26a46c Initial revision
claus
parents:
diff changeset
   655
!
48194c26a46c Initial revision
claus
parents:
diff changeset
   656
48194c26a46c Initial revision
claus
parents:
diff changeset
   657
width:aNumber
48194c26a46c Initial revision
claus
parents:
diff changeset
   658
    "set the views width in pixels"
48194c26a46c Initial revision
claus
parents:
diff changeset
   659
48194c26a46c Initial revision
claus
parents:
diff changeset
   660
    self extent:(aNumber @ height)
48194c26a46c Initial revision
claus
parents:
diff changeset
   661
!
48194c26a46c Initial revision
claus
parents:
diff changeset
   662
48194c26a46c Initial revision
claus
parents:
diff changeset
   663
height:aNumber
48194c26a46c Initial revision
claus
parents:
diff changeset
   664
    "set the views height in pixels"
48194c26a46c Initial revision
claus
parents:
diff changeset
   665
48194c26a46c Initial revision
claus
parents:
diff changeset
   666
    self extent:(width @ aNumber)
48194c26a46c Initial revision
claus
parents:
diff changeset
   667
!
48194c26a46c Initial revision
claus
parents:
diff changeset
   668
48194c26a46c Initial revision
claus
parents:
diff changeset
   669
innerWidth
48194c26a46c Initial revision
claus
parents:
diff changeset
   670
    "return the width of the view minus any shadow-borders"
48194c26a46c Initial revision
claus
parents:
diff changeset
   671
48194c26a46c Initial revision
claus
parents:
diff changeset
   672
    (level == 0) ifTrue:[^ width].
48194c26a46c Initial revision
claus
parents:
diff changeset
   673
    ^ width - (2 * margin)
48194c26a46c Initial revision
claus
parents:
diff changeset
   674
!
48194c26a46c Initial revision
claus
parents:
diff changeset
   675
48194c26a46c Initial revision
claus
parents:
diff changeset
   676
innerHeight
48194c26a46c Initial revision
claus
parents:
diff changeset
   677
    "return the height of the view minus any shadow-borders"
48194c26a46c Initial revision
claus
parents:
diff changeset
   678
48194c26a46c Initial revision
claus
parents:
diff changeset
   679
    (margin == 0) ifTrue:[^ height].
48194c26a46c Initial revision
claus
parents:
diff changeset
   680
    ^ height - (2 * margin)
48194c26a46c Initial revision
claus
parents:
diff changeset
   681
!
48194c26a46c Initial revision
claus
parents:
diff changeset
   682
48194c26a46c Initial revision
claus
parents:
diff changeset
   683
extent:extent
48194c26a46c Initial revision
claus
parents:
diff changeset
   684
    "set the views extent; extent may be:
48194c26a46c Initial revision
claus
parents:
diff changeset
   685
     a point where integer fields mean pixel-values
48194c26a46c Initial revision
claus
parents:
diff changeset
   686
     and float values mean relative-to-superview;
48194c26a46c Initial revision
claus
parents:
diff changeset
   687
     or a block returning a point"
48194c26a46c Initial revision
claus
parents:
diff changeset
   688
48194c26a46c Initial revision
claus
parents:
diff changeset
   689
    |w h e|
48194c26a46c Initial revision
claus
parents:
diff changeset
   690
48194c26a46c Initial revision
claus
parents:
diff changeset
   691
    extent isBlock ifTrue:[
48194c26a46c Initial revision
claus
parents:
diff changeset
   692
        extentRule := extent.
12
9f0995fac1fa *** empty log message ***
claus
parents: 6
diff changeset
   693
        "shown " drawableId notNil " " ifTrue:[    "23-feb-93"
0
48194c26a46c Initial revision
claus
parents:
diff changeset
   694
            self pixelExtent:(extent value)
48194c26a46c Initial revision
claus
parents:
diff changeset
   695
        ] ifFalse:[
48194c26a46c Initial revision
claus
parents:
diff changeset
   696
            extentChanged := true
48194c26a46c Initial revision
claus
parents:
diff changeset
   697
        ]
48194c26a46c Initial revision
claus
parents:
diff changeset
   698
    ] ifFalse:[
48194c26a46c Initial revision
claus
parents:
diff changeset
   699
        w := extent x.
48194c26a46c Initial revision
claus
parents:
diff changeset
   700
        h := extent y.
48194c26a46c Initial revision
claus
parents:
diff changeset
   701
        ((w isMemberOf:Float) or:[h isMemberOf:Float]) ifTrue:[
48194c26a46c Initial revision
claus
parents:
diff changeset
   702
            relativeExtent := extent.
48194c26a46c Initial revision
claus
parents:
diff changeset
   703
            e := self extentFromRelativeExtent.
48194c26a46c Initial revision
claus
parents:
diff changeset
   704
            e isNil ifTrue:[
48194c26a46c Initial revision
claus
parents:
diff changeset
   705
                extentChanged := true
48194c26a46c Initial revision
claus
parents:
diff changeset
   706
            ] ifFalse:[
48194c26a46c Initial revision
claus
parents:
diff changeset
   707
                self pixelExtent:e
48194c26a46c Initial revision
claus
parents:
diff changeset
   708
            ]
48194c26a46c Initial revision
claus
parents:
diff changeset
   709
        ] ifFalse:[
48194c26a46c Initial revision
claus
parents:
diff changeset
   710
            self pixelExtent:extent
48194c26a46c Initial revision
claus
parents:
diff changeset
   711
        ]
48194c26a46c Initial revision
claus
parents:
diff changeset
   712
    ]
48194c26a46c Initial revision
claus
parents:
diff changeset
   713
!
48194c26a46c Initial revision
claus
parents:
diff changeset
   714
48194c26a46c Initial revision
claus
parents:
diff changeset
   715
origin:origin
48194c26a46c Initial revision
claus
parents:
diff changeset
   716
    "set the views origin; origin may be:
48194c26a46c Initial revision
claus
parents:
diff changeset
   717
     a point where integer fields mean pixel-values
48194c26a46c Initial revision
claus
parents:
diff changeset
   718
     and float values mean relative-to-superview;
48194c26a46c Initial revision
claus
parents:
diff changeset
   719
     or a block returning a point"
48194c26a46c Initial revision
claus
parents:
diff changeset
   720
48194c26a46c Initial revision
claus
parents:
diff changeset
   721
    |newLeft newTop o|
48194c26a46c Initial revision
claus
parents:
diff changeset
   722
48194c26a46c Initial revision
claus
parents:
diff changeset
   723
    origin isBlock ifTrue:[
48194c26a46c Initial revision
claus
parents:
diff changeset
   724
        originRule := origin.
48194c26a46c Initial revision
claus
parents:
diff changeset
   725
        drawableId notNil ifTrue:[
48194c26a46c Initial revision
claus
parents:
diff changeset
   726
            self pixelOrigin:(origin value)
48194c26a46c Initial revision
claus
parents:
diff changeset
   727
        ] ifFalse:[
48194c26a46c Initial revision
claus
parents:
diff changeset
   728
            originChanged := true
48194c26a46c Initial revision
claus
parents:
diff changeset
   729
        ]
48194c26a46c Initial revision
claus
parents:
diff changeset
   730
    ] ifFalse:[
48194c26a46c Initial revision
claus
parents:
diff changeset
   731
        newLeft := origin x.
48194c26a46c Initial revision
claus
parents:
diff changeset
   732
        newTop := origin y.
48194c26a46c Initial revision
claus
parents:
diff changeset
   733
        ((newLeft isMemberOf:Float) or:[newTop isMemberOf:Float]) ifTrue:[
48194c26a46c Initial revision
claus
parents:
diff changeset
   734
            relativeOrigin := origin.
48194c26a46c Initial revision
claus
parents:
diff changeset
   735
            o := self originFromRelativeOrigin.
48194c26a46c Initial revision
claus
parents:
diff changeset
   736
            o isNil ifTrue:[
48194c26a46c Initial revision
claus
parents:
diff changeset
   737
                originChanged := true
48194c26a46c Initial revision
claus
parents:
diff changeset
   738
            ] ifFalse:[
48194c26a46c Initial revision
claus
parents:
diff changeset
   739
                self pixelOrigin:o
48194c26a46c Initial revision
claus
parents:
diff changeset
   740
            ]
48194c26a46c Initial revision
claus
parents:
diff changeset
   741
        ] ifFalse:[
48194c26a46c Initial revision
claus
parents:
diff changeset
   742
            self pixelOrigin:origin
48194c26a46c Initial revision
claus
parents:
diff changeset
   743
        ]
48194c26a46c Initial revision
claus
parents:
diff changeset
   744
    ]
48194c26a46c Initial revision
claus
parents:
diff changeset
   745
!
48194c26a46c Initial revision
claus
parents:
diff changeset
   746
48194c26a46c Initial revision
claus
parents:
diff changeset
   747
origin:origin corner:corner 
48194c26a46c Initial revision
claus
parents:
diff changeset
   748
    "set both origin and extent"
48194c26a46c Initial revision
claus
parents:
diff changeset
   749
48194c26a46c Initial revision
claus
parents:
diff changeset
   750
    |newLeft newTop newRight newBot|
48194c26a46c Initial revision
claus
parents:
diff changeset
   751
48194c26a46c Initial revision
claus
parents:
diff changeset
   752
    "do it as one operation if possible"
48194c26a46c Initial revision
claus
parents:
diff changeset
   753
48194c26a46c Initial revision
claus
parents:
diff changeset
   754
    origin isBlock ifFalse:[
48194c26a46c Initial revision
claus
parents:
diff changeset
   755
        corner isBlock ifFalse:[
48194c26a46c Initial revision
claus
parents:
diff changeset
   756
            newLeft := origin x.
48194c26a46c Initial revision
claus
parents:
diff changeset
   757
            (newLeft isMemberOf:Float) ifFalse:[
48194c26a46c Initial revision
claus
parents:
diff changeset
   758
                newTop := origin y.
48194c26a46c Initial revision
claus
parents:
diff changeset
   759
                (newTop isMemberOf:Float) ifFalse:[
48194c26a46c Initial revision
claus
parents:
diff changeset
   760
                    newRight := corner x.
48194c26a46c Initial revision
claus
parents:
diff changeset
   761
                    (newRight isMemberOf:Float) ifFalse:[
48194c26a46c Initial revision
claus
parents:
diff changeset
   762
                        newBot := corner y.
48194c26a46c Initial revision
claus
parents:
diff changeset
   763
                        (newBot isMemberOf:Float) ifFalse:[
48194c26a46c Initial revision
claus
parents:
diff changeset
   764
                            self pixelOrigin:origin corner:corner 
48194c26a46c Initial revision
claus
parents:
diff changeset
   765
                        ]
48194c26a46c Initial revision
claus
parents:
diff changeset
   766
                    ]
48194c26a46c Initial revision
claus
parents:
diff changeset
   767
                ]
48194c26a46c Initial revision
claus
parents:
diff changeset
   768
            ]
48194c26a46c Initial revision
claus
parents:
diff changeset
   769
        ]
48194c26a46c Initial revision
claus
parents:
diff changeset
   770
    ].
48194c26a46c Initial revision
claus
parents:
diff changeset
   771
    self origin:origin.
48194c26a46c Initial revision
claus
parents:
diff changeset
   772
    self corner:corner 
48194c26a46c Initial revision
claus
parents:
diff changeset
   773
!
48194c26a46c Initial revision
claus
parents:
diff changeset
   774
48194c26a46c Initial revision
claus
parents:
diff changeset
   775
origin:origin extent:extent
48194c26a46c Initial revision
claus
parents:
diff changeset
   776
    "set both origin and extent"
48194c26a46c Initial revision
claus
parents:
diff changeset
   777
48194c26a46c Initial revision
claus
parents:
diff changeset
   778
    |newLeft newTop newWidth newHeight|
48194c26a46c Initial revision
claus
parents:
diff changeset
   779
48194c26a46c Initial revision
claus
parents:
diff changeset
   780
    "do it as one operation if possible"
48194c26a46c Initial revision
claus
parents:
diff changeset
   781
48194c26a46c Initial revision
claus
parents:
diff changeset
   782
    origin isBlock ifFalse:[
48194c26a46c Initial revision
claus
parents:
diff changeset
   783
        extent isBlock ifFalse:[
48194c26a46c Initial revision
claus
parents:
diff changeset
   784
            newLeft := origin x.
48194c26a46c Initial revision
claus
parents:
diff changeset
   785
            (newLeft isMemberOf:Float) ifFalse:[
48194c26a46c Initial revision
claus
parents:
diff changeset
   786
                newTop := origin y.
48194c26a46c Initial revision
claus
parents:
diff changeset
   787
                (newTop isMemberOf:Float) ifFalse:[
48194c26a46c Initial revision
claus
parents:
diff changeset
   788
                    newWidth := extent x.
48194c26a46c Initial revision
claus
parents:
diff changeset
   789
                    (newWidth isMemberOf:Float) ifFalse:[
48194c26a46c Initial revision
claus
parents:
diff changeset
   790
                        newHeight := extent y.
48194c26a46c Initial revision
claus
parents:
diff changeset
   791
                        (newHeight isMemberOf:Float) ifFalse:[
48194c26a46c Initial revision
claus
parents:
diff changeset
   792
                            self pixelOrigin:origin extent:extent
48194c26a46c Initial revision
claus
parents:
diff changeset
   793
                        ]
48194c26a46c Initial revision
claus
parents:
diff changeset
   794
                    ]
48194c26a46c Initial revision
claus
parents:
diff changeset
   795
                ]
48194c26a46c Initial revision
claus
parents:
diff changeset
   796
            ]
48194c26a46c Initial revision
claus
parents:
diff changeset
   797
        ]
48194c26a46c Initial revision
claus
parents:
diff changeset
   798
    ].
48194c26a46c Initial revision
claus
parents:
diff changeset
   799
    self extent:extent.
48194c26a46c Initial revision
claus
parents:
diff changeset
   800
    self origin:origin
48194c26a46c Initial revision
claus
parents:
diff changeset
   801
!
48194c26a46c Initial revision
claus
parents:
diff changeset
   802
48194c26a46c Initial revision
claus
parents:
diff changeset
   803
left:newLeft top:newTop width:newWidth height:newHeight
48194c26a46c Initial revision
claus
parents:
diff changeset
   804
    "another way of specifying origin and extent"
48194c26a46c Initial revision
claus
parents:
diff changeset
   805
48194c26a46c Initial revision
claus
parents:
diff changeset
   806
    self origin:(newLeft @ newTop) extent:(newWidth @ newHeight)
48194c26a46c Initial revision
claus
parents:
diff changeset
   807
!
48194c26a46c Initial revision
claus
parents:
diff changeset
   808
48194c26a46c Initial revision
claus
parents:
diff changeset
   809
relativeOrigin
48194c26a46c Initial revision
claus
parents:
diff changeset
   810
    "return the relative origin or nil"
48194c26a46c Initial revision
claus
parents:
diff changeset
   811
48194c26a46c Initial revision
claus
parents:
diff changeset
   812
    ^ relativeOrigin
48194c26a46c Initial revision
claus
parents:
diff changeset
   813
!
48194c26a46c Initial revision
claus
parents:
diff changeset
   814
48194c26a46c Initial revision
claus
parents:
diff changeset
   815
relativeCorner
48194c26a46c Initial revision
claus
parents:
diff changeset
   816
    "return the relative corner or nil"
48194c26a46c Initial revision
claus
parents:
diff changeset
   817
48194c26a46c Initial revision
claus
parents:
diff changeset
   818
    ^ relativeCorner
48194c26a46c Initial revision
claus
parents:
diff changeset
   819
!
48194c26a46c Initial revision
claus
parents:
diff changeset
   820
48194c26a46c Initial revision
claus
parents:
diff changeset
   821
relativeExtent
48194c26a46c Initial revision
claus
parents:
diff changeset
   822
    "return the relative extent or nil"
48194c26a46c Initial revision
claus
parents:
diff changeset
   823
48194c26a46c Initial revision
claus
parents:
diff changeset
   824
    ^ relativeExtent
48194c26a46c Initial revision
claus
parents:
diff changeset
   825
!
48194c26a46c Initial revision
claus
parents:
diff changeset
   826
48194c26a46c Initial revision
claus
parents:
diff changeset
   827
relativeOrigin:aPoint
48194c26a46c Initial revision
claus
parents:
diff changeset
   828
    "set the relative origin"
48194c26a46c Initial revision
claus
parents:
diff changeset
   829
48194c26a46c Initial revision
claus
parents:
diff changeset
   830
    relativeOrigin := aPoint
48194c26a46c Initial revision
claus
parents:
diff changeset
   831
!
48194c26a46c Initial revision
claus
parents:
diff changeset
   832
48194c26a46c Initial revision
claus
parents:
diff changeset
   833
relativeCorner:aPoint
48194c26a46c Initial revision
claus
parents:
diff changeset
   834
    "set the relative corner"
48194c26a46c Initial revision
claus
parents:
diff changeset
   835
48194c26a46c Initial revision
claus
parents:
diff changeset
   836
    relativeCorner := aPoint
48194c26a46c Initial revision
claus
parents:
diff changeset
   837
!
48194c26a46c Initial revision
claus
parents:
diff changeset
   838
48194c26a46c Initial revision
claus
parents:
diff changeset
   839
relativeExtent:aPoint
48194c26a46c Initial revision
claus
parents:
diff changeset
   840
    "set the relative extent"
48194c26a46c Initial revision
claus
parents:
diff changeset
   841
48194c26a46c Initial revision
claus
parents:
diff changeset
   842
    relativeExtent := aPoint
48194c26a46c Initial revision
claus
parents:
diff changeset
   843
!
48194c26a46c Initial revision
claus
parents:
diff changeset
   844
48194c26a46c Initial revision
claus
parents:
diff changeset
   845
center:newCenter
48194c26a46c Initial revision
claus
parents:
diff changeset
   846
    "move the receiver so that newCenter, aPoint becomes the center point"
48194c26a46c Initial revision
claus
parents:
diff changeset
   847
48194c26a46c Initial revision
claus
parents:
diff changeset
   848
    self origin:(newCenter - ((width // 2) @ (height // 2)))
48194c26a46c Initial revision
claus
parents:
diff changeset
   849
!
48194c26a46c Initial revision
claus
parents:
diff changeset
   850
48194c26a46c Initial revision
claus
parents:
diff changeset
   851
center
48194c26a46c Initial revision
claus
parents:
diff changeset
   852
    "return the point at the center of the receiver"
48194c26a46c Initial revision
claus
parents:
diff changeset
   853
48194c26a46c Initial revision
claus
parents:
diff changeset
   854
    ^ (left + (width // 2)) @ (top + (height // 2))
48194c26a46c Initial revision
claus
parents:
diff changeset
   855
!
48194c26a46c Initial revision
claus
parents:
diff changeset
   856
48194c26a46c Initial revision
claus
parents:
diff changeset
   857
origin
48194c26a46c Initial revision
claus
parents:
diff changeset
   858
    "return the origin (in pixels)"
48194c26a46c Initial revision
claus
parents:
diff changeset
   859
48194c26a46c Initial revision
claus
parents:
diff changeset
   860
    ^ left@top
48194c26a46c Initial revision
claus
parents:
diff changeset
   861
!
48194c26a46c Initial revision
claus
parents:
diff changeset
   862
48194c26a46c Initial revision
claus
parents:
diff changeset
   863
originRelativeTo:aView
48194c26a46c Initial revision
claus
parents:
diff changeset
   864
    "return the origin (in pixels) relative to a superView"
48194c26a46c Initial revision
claus
parents:
diff changeset
   865
48194c26a46c Initial revision
claus
parents:
diff changeset
   866
    |currentView
48194c26a46c Initial revision
claus
parents:
diff changeset
   867
     org  "{ Class: Point }"
48194c26a46c Initial revision
claus
parents:
diff changeset
   868
     sumX "{ Class: SmallInteger }"
48194c26a46c Initial revision
claus
parents:
diff changeset
   869
     sumY "{ Class: SmallInteger }" |
48194c26a46c Initial revision
claus
parents:
diff changeset
   870
48194c26a46c Initial revision
claus
parents:
diff changeset
   871
    currentView := self.
48194c26a46c Initial revision
claus
parents:
diff changeset
   872
    sumX := 0.
48194c26a46c Initial revision
claus
parents:
diff changeset
   873
    sumY := 0.
48194c26a46c Initial revision
claus
parents:
diff changeset
   874
    [currentView notNil] whileTrue:[
48194c26a46c Initial revision
claus
parents:
diff changeset
   875
        (currentView == aView) ifTrue:[
48194c26a46c Initial revision
claus
parents:
diff changeset
   876
            ^ (sumX @ sumY)
48194c26a46c Initial revision
claus
parents:
diff changeset
   877
        ].
48194c26a46c Initial revision
claus
parents:
diff changeset
   878
        org := currentView origin.
48194c26a46c Initial revision
claus
parents:
diff changeset
   879
        sumX := sumX + org x.
48194c26a46c Initial revision
claus
parents:
diff changeset
   880
        sumY := sumY + org y.
48194c26a46c Initial revision
claus
parents:
diff changeset
   881
        currentView := currentView superView
48194c26a46c Initial revision
claus
parents:
diff changeset
   882
    ].
48194c26a46c Initial revision
claus
parents:
diff changeset
   883
    ^ nil
48194c26a46c Initial revision
claus
parents:
diff changeset
   884
!
48194c26a46c Initial revision
claus
parents:
diff changeset
   885
48194c26a46c Initial revision
claus
parents:
diff changeset
   886
left
48194c26a46c Initial revision
claus
parents:
diff changeset
   887
    "return the x position of the left border"
48194c26a46c Initial revision
claus
parents:
diff changeset
   888
48194c26a46c Initial revision
claus
parents:
diff changeset
   889
    ^ left
48194c26a46c Initial revision
claus
parents:
diff changeset
   890
!
48194c26a46c Initial revision
claus
parents:
diff changeset
   891
48194c26a46c Initial revision
claus
parents:
diff changeset
   892
right
48194c26a46c Initial revision
claus
parents:
diff changeset
   893
    "return the x position of the right border"
48194c26a46c Initial revision
claus
parents:
diff changeset
   894
48194c26a46c Initial revision
claus
parents:
diff changeset
   895
    ^ left + width - 1
48194c26a46c Initial revision
claus
parents:
diff changeset
   896
!
48194c26a46c Initial revision
claus
parents:
diff changeset
   897
48194c26a46c Initial revision
claus
parents:
diff changeset
   898
top
48194c26a46c Initial revision
claus
parents:
diff changeset
   899
    "return the y position of the top border"
48194c26a46c Initial revision
claus
parents:
diff changeset
   900
48194c26a46c Initial revision
claus
parents:
diff changeset
   901
    ^ top
48194c26a46c Initial revision
claus
parents:
diff changeset
   902
!
48194c26a46c Initial revision
claus
parents:
diff changeset
   903
48194c26a46c Initial revision
claus
parents:
diff changeset
   904
bottom
48194c26a46c Initial revision
claus
parents:
diff changeset
   905
    "return the y position of the bottom border"
48194c26a46c Initial revision
claus
parents:
diff changeset
   906
48194c26a46c Initial revision
claus
parents:
diff changeset
   907
    ^ top + height - 1
48194c26a46c Initial revision
claus
parents:
diff changeset
   908
!
48194c26a46c Initial revision
claus
parents:
diff changeset
   909
48194c26a46c Initial revision
claus
parents:
diff changeset
   910
corner
48194c26a46c Initial revision
claus
parents:
diff changeset
   911
    "return the lower right corner-point"
48194c26a46c Initial revision
claus
parents:
diff changeset
   912
48194c26a46c Initial revision
claus
parents:
diff changeset
   913
    ^ (left + width - 1) @ (top + height - 1)
48194c26a46c Initial revision
claus
parents:
diff changeset
   914
!
48194c26a46c Initial revision
claus
parents:
diff changeset
   915
48194c26a46c Initial revision
claus
parents:
diff changeset
   916
corner:corner 
48194c26a46c Initial revision
claus
parents:
diff changeset
   917
    "set the views  corner;  corner may be:
48194c26a46c Initial revision
claus
parents:
diff changeset
   918
     a point where integer fields mean pixel-values
48194c26a46c Initial revision
claus
parents:
diff changeset
   919
     and float values mean relative-to-superview;
48194c26a46c Initial revision
claus
parents:
diff changeset
   920
     or a block returning a point"
48194c26a46c Initial revision
claus
parents:
diff changeset
   921
48194c26a46c Initial revision
claus
parents:
diff changeset
   922
    |x y c|
48194c26a46c Initial revision
claus
parents:
diff changeset
   923
48194c26a46c Initial revision
claus
parents:
diff changeset
   924
    corner isBlock ifTrue:[
48194c26a46c Initial revision
claus
parents:
diff changeset
   925
        cornerRule := corner.
48194c26a46c Initial revision
claus
parents:
diff changeset
   926
        drawableId notNil ifTrue:[    
48194c26a46c Initial revision
claus
parents:
diff changeset
   927
            self pixelCorner:(corner value)
48194c26a46c Initial revision
claus
parents:
diff changeset
   928
        ] ifFalse:[
48194c26a46c Initial revision
claus
parents:
diff changeset
   929
            extentChanged := true
48194c26a46c Initial revision
claus
parents:
diff changeset
   930
        ]
48194c26a46c Initial revision
claus
parents:
diff changeset
   931
    ] ifFalse:[
48194c26a46c Initial revision
claus
parents:
diff changeset
   932
        x := corner x.
48194c26a46c Initial revision
claus
parents:
diff changeset
   933
        y := corner y.
48194c26a46c Initial revision
claus
parents:
diff changeset
   934
        ((x isMemberOf:Float) or:[y isMemberOf:Float]) ifTrue:[
48194c26a46c Initial revision
claus
parents:
diff changeset
   935
            relativeCorner := corner.
48194c26a46c Initial revision
claus
parents:
diff changeset
   936
            c := self cornerFromRelativeCorner.
48194c26a46c Initial revision
claus
parents:
diff changeset
   937
            c isNil ifTrue:[
48194c26a46c Initial revision
claus
parents:
diff changeset
   938
                extentChanged := true
48194c26a46c Initial revision
claus
parents:
diff changeset
   939
            ] ifFalse:[
48194c26a46c Initial revision
claus
parents:
diff changeset
   940
                self pixelCorner:c
48194c26a46c Initial revision
claus
parents:
diff changeset
   941
            ]
48194c26a46c Initial revision
claus
parents:
diff changeset
   942
        ] ifFalse:[
48194c26a46c Initial revision
claus
parents:
diff changeset
   943
            self pixelCorner:corner
48194c26a46c Initial revision
claus
parents:
diff changeset
   944
        ]
48194c26a46c Initial revision
claus
parents:
diff changeset
   945
    ]
48194c26a46c Initial revision
claus
parents:
diff changeset
   946
! !
48194c26a46c Initial revision
claus
parents:
diff changeset
   947
48194c26a46c Initial revision
claus
parents:
diff changeset
   948
!View methodsFor:'accessing-transformation'!
48194c26a46c Initial revision
claus
parents:
diff changeset
   949
48194c26a46c Initial revision
claus
parents:
diff changeset
   950
window
48194c26a46c Initial revision
claus
parents:
diff changeset
   951
    ^ window
48194c26a46c Initial revision
claus
parents:
diff changeset
   952
!
48194c26a46c Initial revision
claus
parents:
diff changeset
   953
48194c26a46c Initial revision
claus
parents:
diff changeset
   954
window:aRectangle
48194c26a46c Initial revision
claus
parents:
diff changeset
   955
    window := aRectangle.
48194c26a46c Initial revision
claus
parents:
diff changeset
   956
    subViews notNil ifTrue:[
48194c26a46c Initial revision
claus
parents:
diff changeset
   957
        subViews do:[:s |
48194c26a46c Initial revision
claus
parents:
diff changeset
   958
            s superViewChangedSize
48194c26a46c Initial revision
claus
parents:
diff changeset
   959
        ]
48194c26a46c Initial revision
claus
parents:
diff changeset
   960
    ]
48194c26a46c Initial revision
claus
parents:
diff changeset
   961
48194c26a46c Initial revision
claus
parents:
diff changeset
   962
"
48194c26a46c Initial revision
claus
parents:
diff changeset
   963
    viewport isNil ifTrue:[
48194c26a46c Initial revision
claus
parents:
diff changeset
   964
        viewport := aRectangle.
48194c26a46c Initial revision
claus
parents:
diff changeset
   965
    ].
48194c26a46c Initial revision
claus
parents:
diff changeset
   966
"
48194c26a46c Initial revision
claus
parents:
diff changeset
   967
"
48194c26a46c Initial revision
claus
parents:
diff changeset
   968
    superView notNil ifTrue:[
48194c26a46c Initial revision
claus
parents:
diff changeset
   969
        self superViewChangedSize
48194c26a46c Initial revision
claus
parents:
diff changeset
   970
    ] ifFalse:[
48194c26a46c Initial revision
claus
parents:
diff changeset
   971
        originChanged := true.
48194c26a46c Initial revision
claus
parents:
diff changeset
   972
        extentChanged := true
48194c26a46c Initial revision
claus
parents:
diff changeset
   973
    ]
48194c26a46c Initial revision
claus
parents:
diff changeset
   974
"
48194c26a46c Initial revision
claus
parents:
diff changeset
   975
!
48194c26a46c Initial revision
claus
parents:
diff changeset
   976
48194c26a46c Initial revision
claus
parents:
diff changeset
   977
window:aRectangle viewport:vRect
48194c26a46c Initial revision
claus
parents:
diff changeset
   978
    window := aRectangle.
48194c26a46c Initial revision
claus
parents:
diff changeset
   979
    self viewport:vRect.
48194c26a46c Initial revision
claus
parents:
diff changeset
   980
    subViews notNil ifTrue:[
48194c26a46c Initial revision
claus
parents:
diff changeset
   981
        subViews do:[:s |
48194c26a46c Initial revision
claus
parents:
diff changeset
   982
            s superViewChangedSize
48194c26a46c Initial revision
claus
parents:
diff changeset
   983
        ]
48194c26a46c Initial revision
claus
parents:
diff changeset
   984
    ]
48194c26a46c Initial revision
claus
parents:
diff changeset
   985
!
48194c26a46c Initial revision
claus
parents:
diff changeset
   986
48194c26a46c Initial revision
claus
parents:
diff changeset
   987
transformation 
48194c26a46c Initial revision
claus
parents:
diff changeset
   988
    transformation isNil ifTrue:[
48194c26a46c Initial revision
claus
parents:
diff changeset
   989
        superView isNil ifTrue:[
48194c26a46c Initial revision
claus
parents:
diff changeset
   990
            transformation := WindowingTransformation window:window
48194c26a46c Initial revision
claus
parents:
diff changeset
   991
                                                    viewport:(0@0 extent:self extent)
48194c26a46c Initial revision
claus
parents:
diff changeset
   992
        ] ifFalse:[
48194c26a46c Initial revision
claus
parents:
diff changeset
   993
            window isNil ifTrue:[
48194c26a46c Initial revision
claus
parents:
diff changeset
   994
                window := (0 @ 0) corner:(1 @ 1)
48194c26a46c Initial revision
claus
parents:
diff changeset
   995
            ].
48194c26a46c Initial revision
claus
parents:
diff changeset
   996
            transformation := WindowingTransformation window:window
48194c26a46c Initial revision
claus
parents:
diff changeset
   997
                                                    viewport:(self origin extent:self extent)
48194c26a46c Initial revision
claus
parents:
diff changeset
   998
        ]
48194c26a46c Initial revision
claus
parents:
diff changeset
   999
    ].
48194c26a46c Initial revision
claus
parents:
diff changeset
  1000
    ^ transformation
48194c26a46c Initial revision
claus
parents:
diff changeset
  1001
!
48194c26a46c Initial revision
claus
parents:
diff changeset
  1002
48194c26a46c Initial revision
claus
parents:
diff changeset
  1003
displayTransformation
48194c26a46c Initial revision
claus
parents:
diff changeset
  1004
    "ST-80 compatibility - ST/X does not draw onto the display"
48194c26a46c Initial revision
claus
parents:
diff changeset
  1005
48194c26a46c Initial revision
claus
parents:
diff changeset
  1006
    ^ self transformation
48194c26a46c Initial revision
claus
parents:
diff changeset
  1007
!
48194c26a46c Initial revision
claus
parents:
diff changeset
  1008
48194c26a46c Initial revision
claus
parents:
diff changeset
  1009
displayTransform:aPoint
48194c26a46c Initial revision
claus
parents:
diff changeset
  1010
    "given a point in window coordinate, make pixel coordinate"
48194c26a46c Initial revision
claus
parents:
diff changeset
  1011
48194c26a46c Initial revision
claus
parents:
diff changeset
  1012
    |nx ny|
48194c26a46c Initial revision
claus
parents:
diff changeset
  1013
48194c26a46c Initial revision
claus
parents:
diff changeset
  1014
    nx := aPoint x - window left * width / window width.
48194c26a46c Initial revision
claus
parents:
diff changeset
  1015
    ny := aPoint y - window top * height / window height.
48194c26a46c Initial revision
claus
parents:
diff changeset
  1016
    ^ nx @ ny
48194c26a46c Initial revision
claus
parents:
diff changeset
  1017
!
48194c26a46c Initial revision
claus
parents:
diff changeset
  1018
48194c26a46c Initial revision
claus
parents:
diff changeset
  1019
inverseDisplayTransform:aPoint
48194c26a46c Initial revision
claus
parents:
diff changeset
  1020
    "given a pixel coordinate, make window coordinate"
48194c26a46c Initial revision
claus
parents:
diff changeset
  1021
48194c26a46c Initial revision
claus
parents:
diff changeset
  1022
    |nx ny|
48194c26a46c Initial revision
claus
parents:
diff changeset
  1023
48194c26a46c Initial revision
claus
parents:
diff changeset
  1024
    window isNil ifTrue:[^ aPoint].
48194c26a46c Initial revision
claus
parents:
diff changeset
  1025
    nx := aPoint x * window width / width + window left.
48194c26a46c Initial revision
claus
parents:
diff changeset
  1026
    ny := aPoint y * window height / height + window top.
48194c26a46c Initial revision
claus
parents:
diff changeset
  1027
    ^ nx @ ny
48194c26a46c Initial revision
claus
parents:
diff changeset
  1028
!
48194c26a46c Initial revision
claus
parents:
diff changeset
  1029
48194c26a46c Initial revision
claus
parents:
diff changeset
  1030
viewport:aRectangle
48194c26a46c Initial revision
claus
parents:
diff changeset
  1031
    "define my extend in my superviews coordinate-system."
48194c26a46c Initial revision
claus
parents:
diff changeset
  1032
48194c26a46c Initial revision
claus
parents:
diff changeset
  1033
    |relW relH relX relY winW winH|
48194c26a46c Initial revision
claus
parents:
diff changeset
  1034
48194c26a46c Initial revision
claus
parents:
diff changeset
  1035
    viewport := aRectangle.
48194c26a46c Initial revision
claus
parents:
diff changeset
  1036
    self dimensionFromViewport
48194c26a46c Initial revision
claus
parents:
diff changeset
  1037
"
48194c26a46c Initial revision
claus
parents:
diff changeset
  1038
    superView notNil ifTrue:[
48194c26a46c Initial revision
claus
parents:
diff changeset
  1039
        superView window isNil ifTrue:[
48194c26a46c Initial revision
claus
parents:
diff changeset
  1040
            winW := 1.
48194c26a46c Initial revision
claus
parents:
diff changeset
  1041
            winH := 1
48194c26a46c Initial revision
claus
parents:
diff changeset
  1042
        ] ifFalse:[
48194c26a46c Initial revision
claus
parents:
diff changeset
  1043
            winW := superView window width.
48194c26a46c Initial revision
claus
parents:
diff changeset
  1044
            winH := superView window height
48194c26a46c Initial revision
claus
parents:
diff changeset
  1045
        ].
48194c26a46c Initial revision
claus
parents:
diff changeset
  1046
        relW := (aRectangle width / winW) asFloat.
48194c26a46c Initial revision
claus
parents:
diff changeset
  1047
        relH := (aRectangle height / winH) asFloat.
48194c26a46c Initial revision
claus
parents:
diff changeset
  1048
        relX := (aRectangle left / winW) asFloat.
48194c26a46c Initial revision
claus
parents:
diff changeset
  1049
        relY := (aRectangle top / winH) asFloat.
48194c26a46c Initial revision
claus
parents:
diff changeset
  1050
        self origin:(relX @ relY) extent:(relW @ relH)
48194c26a46c Initial revision
claus
parents:
diff changeset
  1051
    ]
48194c26a46c Initial revision
claus
parents:
diff changeset
  1052
"
48194c26a46c Initial revision
claus
parents:
diff changeset
  1053
!
48194c26a46c Initial revision
claus
parents:
diff changeset
  1054
48194c26a46c Initial revision
claus
parents:
diff changeset
  1055
viewRectangle
48194c26a46c Initial revision
claus
parents:
diff changeset
  1056
    "return the inside area"
48194c26a46c Initial revision
claus
parents:
diff changeset
  1057
48194c26a46c Initial revision
claus
parents:
diff changeset
  1058
    |m2|
48194c26a46c Initial revision
claus
parents:
diff changeset
  1059
48194c26a46c Initial revision
claus
parents:
diff changeset
  1060
    innerClipRect notNil ifTrue:[
48194c26a46c Initial revision
claus
parents:
diff changeset
  1061
        ^ innerClipRect
48194c26a46c Initial revision
claus
parents:
diff changeset
  1062
    ].
48194c26a46c Initial revision
claus
parents:
diff changeset
  1063
    m2 := margin + margin.
48194c26a46c Initial revision
claus
parents:
diff changeset
  1064
48194c26a46c Initial revision
claus
parents:
diff changeset
  1065
    ^ (margin @ margin) extent:((width - m2) @ (height - m2))
48194c26a46c Initial revision
claus
parents:
diff changeset
  1066
!
48194c26a46c Initial revision
claus
parents:
diff changeset
  1067
48194c26a46c Initial revision
claus
parents:
diff changeset
  1068
viewOrigin
48194c26a46c Initial revision
claus
parents:
diff changeset
  1069
    "return the viewOrigin; thats the coordinate of the contents 
48194c26a46c Initial revision
claus
parents:
diff changeset
  1070
     which is shown topLeft in the view 
48194c26a46c Initial revision
claus
parents:
diff changeset
  1071
     (i.e. the origin of the visible part of the contents)."
48194c26a46c Initial revision
claus
parents:
diff changeset
  1072
48194c26a46c Initial revision
claus
parents:
diff changeset
  1073
    ^ viewOrigin
48194c26a46c Initial revision
claus
parents:
diff changeset
  1074
!
48194c26a46c Initial revision
claus
parents:
diff changeset
  1075
48194c26a46c Initial revision
claus
parents:
diff changeset
  1076
viewOrigin:aPoint
48194c26a46c Initial revision
claus
parents:
diff changeset
  1077
    "set the viewOrigin - i.e. virtually scroll without redrawing"
48194c26a46c Initial revision
claus
parents:
diff changeset
  1078
48194c26a46c Initial revision
claus
parents:
diff changeset
  1079
    viewOrigin := aPoint
48194c26a46c Initial revision
claus
parents:
diff changeset
  1080
!
48194c26a46c Initial revision
claus
parents:
diff changeset
  1081
48194c26a46c Initial revision
claus
parents:
diff changeset
  1082
xOriginOfContents
48194c26a46c Initial revision
claus
parents:
diff changeset
  1083
    "return the x coordinate of the viewOrigin; used by scrollBars to compute
48194c26a46c Initial revision
claus
parents:
diff changeset
  1084
     thumb position"
48194c26a46c Initial revision
claus
parents:
diff changeset
  1085
48194c26a46c Initial revision
claus
parents:
diff changeset
  1086
    ^ viewOrigin x
48194c26a46c Initial revision
claus
parents:
diff changeset
  1087
!
48194c26a46c Initial revision
claus
parents:
diff changeset
  1088
48194c26a46c Initial revision
claus
parents:
diff changeset
  1089
yOriginOfContents
48194c26a46c Initial revision
claus
parents:
diff changeset
  1090
    "return the y coordinate of the viewOrigin; used by scrollBars to compute
48194c26a46c Initial revision
claus
parents:
diff changeset
  1091
     thumb position"
48194c26a46c Initial revision
claus
parents:
diff changeset
  1092
48194c26a46c Initial revision
claus
parents:
diff changeset
  1093
    ^ viewOrigin y
48194c26a46c Initial revision
claus
parents:
diff changeset
  1094
! !
48194c26a46c Initial revision
claus
parents:
diff changeset
  1095
48194c26a46c Initial revision
claus
parents:
diff changeset
  1096
!View methodsFor:'accessing-hierarchy'!
48194c26a46c Initial revision
claus
parents:
diff changeset
  1097
48194c26a46c Initial revision
claus
parents:
diff changeset
  1098
superView
48194c26a46c Initial revision
claus
parents:
diff changeset
  1099
    "return my superView"
48194c26a46c Initial revision
claus
parents:
diff changeset
  1100
48194c26a46c Initial revision
claus
parents:
diff changeset
  1101
    ^ superView
48194c26a46c Initial revision
claus
parents:
diff changeset
  1102
!
48194c26a46c Initial revision
claus
parents:
diff changeset
  1103
48194c26a46c Initial revision
claus
parents:
diff changeset
  1104
superView:aView
48194c26a46c Initial revision
claus
parents:
diff changeset
  1105
    "set my superView to be aView"
48194c26a46c Initial revision
claus
parents:
diff changeset
  1106
48194c26a46c Initial revision
claus
parents:
diff changeset
  1107
    superView := aView
48194c26a46c Initial revision
claus
parents:
diff changeset
  1108
!
48194c26a46c Initial revision
claus
parents:
diff changeset
  1109
48194c26a46c Initial revision
claus
parents:
diff changeset
  1110
topView
48194c26a46c Initial revision
claus
parents:
diff changeset
  1111
    "return the topView - thats the one with no superview"
48194c26a46c Initial revision
claus
parents:
diff changeset
  1112
48194c26a46c Initial revision
claus
parents:
diff changeset
  1113
    |v|
48194c26a46c Initial revision
claus
parents:
diff changeset
  1114
48194c26a46c Initial revision
claus
parents:
diff changeset
  1115
    v := self.
48194c26a46c Initial revision
claus
parents:
diff changeset
  1116
    [v notNil] whileTrue:[
48194c26a46c Initial revision
claus
parents:
diff changeset
  1117
        v superView isNil ifTrue:[^ v].
48194c26a46c Initial revision
claus
parents:
diff changeset
  1118
        v := v superView
48194c26a46c Initial revision
claus
parents:
diff changeset
  1119
    ].
48194c26a46c Initial revision
claus
parents:
diff changeset
  1120
48194c26a46c Initial revision
claus
parents:
diff changeset
  1121
    ^ nil
48194c26a46c Initial revision
claus
parents:
diff changeset
  1122
!
48194c26a46c Initial revision
claus
parents:
diff changeset
  1123
48194c26a46c Initial revision
claus
parents:
diff changeset
  1124
subViews
48194c26a46c Initial revision
claus
parents:
diff changeset
  1125
    "return the collection of subviews"
48194c26a46c Initial revision
claus
parents:
diff changeset
  1126
48194c26a46c Initial revision
claus
parents:
diff changeset
  1127
    ^ subViews
48194c26a46c Initial revision
claus
parents:
diff changeset
  1128
!
48194c26a46c Initial revision
claus
parents:
diff changeset
  1129
48194c26a46c Initial revision
claus
parents:
diff changeset
  1130
subViews:aListOfViews
48194c26a46c Initial revision
claus
parents:
diff changeset
  1131
    "set the collection of subviews"
48194c26a46c Initial revision
claus
parents:
diff changeset
  1132
48194c26a46c Initial revision
claus
parents:
diff changeset
  1133
    subViews := aListOfViews.
48194c26a46c Initial revision
claus
parents:
diff changeset
  1134
    subViews notNil ifTrue:[
48194c26a46c Initial revision
claus
parents:
diff changeset
  1135
        subViews do:[:view |
48194c26a46c Initial revision
claus
parents:
diff changeset
  1136
            view superView:self
48194c26a46c Initial revision
claus
parents:
diff changeset
  1137
        ]
48194c26a46c Initial revision
claus
parents:
diff changeset
  1138
    ]
48194c26a46c Initial revision
claus
parents:
diff changeset
  1139
! !
48194c26a46c Initial revision
claus
parents:
diff changeset
  1140
48194c26a46c Initial revision
claus
parents:
diff changeset
  1141
!View methodsFor:'accessing-misc'!
48194c26a46c Initial revision
claus
parents:
diff changeset
  1142
48194c26a46c Initial revision
claus
parents:
diff changeset
  1143
viewGravity
48194c26a46c Initial revision
claus
parents:
diff changeset
  1144
    "return the viewGravity - thats the direction where the view will move
48194c26a46c Initial revision
claus
parents:
diff changeset
  1145
     when the superView is resized."
48194c26a46c Initial revision
claus
parents:
diff changeset
  1146
48194c26a46c Initial revision
claus
parents:
diff changeset
  1147
    ^ viewGravity
48194c26a46c Initial revision
claus
parents:
diff changeset
  1148
!
48194c26a46c Initial revision
claus
parents:
diff changeset
  1149
48194c26a46c Initial revision
claus
parents:
diff changeset
  1150
viewGravity:gravity
48194c26a46c Initial revision
claus
parents:
diff changeset
  1151
    "set the viewGravity - thats the direction where the view will move
48194c26a46c Initial revision
claus
parents:
diff changeset
  1152
     when the superView is resized."
48194c26a46c Initial revision
claus
parents:
diff changeset
  1153
48194c26a46c Initial revision
claus
parents:
diff changeset
  1154
    viewGravity := gravity
48194c26a46c Initial revision
claus
parents:
diff changeset
  1155
!
48194c26a46c Initial revision
claus
parents:
diff changeset
  1156
48194c26a46c Initial revision
claus
parents:
diff changeset
  1157
bitGravity
48194c26a46c Initial revision
claus
parents:
diff changeset
  1158
    "return the bitGravity - thats the direction where the contents will move
48194c26a46c Initial revision
claus
parents:
diff changeset
  1159
     when the the view is resized."
48194c26a46c Initial revision
claus
parents:
diff changeset
  1160
48194c26a46c Initial revision
claus
parents:
diff changeset
  1161
    ^ bitGravity
48194c26a46c Initial revision
claus
parents:
diff changeset
  1162
!
48194c26a46c Initial revision
claus
parents:
diff changeset
  1163
48194c26a46c Initial revision
claus
parents:
diff changeset
  1164
inputOnly
48194c26a46c Initial revision
claus
parents:
diff changeset
  1165
    "return true, if this view is an input-only view;
48194c26a46c Initial revision
claus
parents:
diff changeset
  1166
     input only views are transparent and can be layed on top of a view to
48194c26a46c Initial revision
claus
parents:
diff changeset
  1167
     catch its input"
48194c26a46c Initial revision
claus
parents:
diff changeset
  1168
48194c26a46c Initial revision
claus
parents:
diff changeset
  1169
    ^ false
48194c26a46c Initial revision
claus
parents:
diff changeset
  1170
!
48194c26a46c Initial revision
claus
parents:
diff changeset
  1171
48194c26a46c Initial revision
claus
parents:
diff changeset
  1172
createOnTop
48194c26a46c Initial revision
claus
parents:
diff changeset
  1173
    "return true, if this view should be put on top (raised) automatically.
48194c26a46c Initial revision
claus
parents:
diff changeset
  1174
     usually this is true for alertBoxes etc."
48194c26a46c Initial revision
claus
parents:
diff changeset
  1175
48194c26a46c Initial revision
claus
parents:
diff changeset
  1176
    ^ false
48194c26a46c Initial revision
claus
parents:
diff changeset
  1177
!
48194c26a46c Initial revision
claus
parents:
diff changeset
  1178
48194c26a46c Initial revision
claus
parents:
diff changeset
  1179
canDrop:anObjectOrCollection
48194c26a46c Initial revision
claus
parents:
diff changeset
  1180
    "return true, if anObjectOrCollection can be
48194c26a46c Initial revision
claus
parents:
diff changeset
  1181
     dropped in the receiver. This method should be
48194c26a46c Initial revision
claus
parents:
diff changeset
  1182
     redefined in views which can take objects"
48194c26a46c Initial revision
claus
parents:
diff changeset
  1183
48194c26a46c Initial revision
claus
parents:
diff changeset
  1184
    ^ false
48194c26a46c Initial revision
claus
parents:
diff changeset
  1185
!
48194c26a46c Initial revision
claus
parents:
diff changeset
  1186
48194c26a46c Initial revision
claus
parents:
diff changeset
  1187
is3D
12
9f0995fac1fa *** empty log message ***
claus
parents: 6
diff changeset
  1188
    "return true, if my style is some kind of 3D style - will change"
9f0995fac1fa *** empty log message ***
claus
parents: 6
diff changeset
  1189
0
48194c26a46c Initial revision
claus
parents:
diff changeset
  1190
    ^ #(next iris openwin view3D motif) includes:style
48194c26a46c Initial revision
claus
parents:
diff changeset
  1191
!
48194c26a46c Initial revision
claus
parents:
diff changeset
  1192
48194c26a46c Initial revision
claus
parents:
diff changeset
  1193
shown
48194c26a46c Initial revision
claus
parents:
diff changeset
  1194
    "return true if the view is shown; false if hidden"
48194c26a46c Initial revision
claus
parents:
diff changeset
  1195
48194c26a46c Initial revision
claus
parents:
diff changeset
  1196
    ^ shown
48194c26a46c Initial revision
claus
parents:
diff changeset
  1197
!
48194c26a46c Initial revision
claus
parents:
diff changeset
  1198
48194c26a46c Initial revision
claus
parents:
diff changeset
  1199
isCollapsed
12
9f0995fac1fa *** empty log message ***
claus
parents: 6
diff changeset
  1200
    "ST80 compatibility: return true if the view is not shown (i.e. iconified)"
9f0995fac1fa *** empty log message ***
claus
parents: 6
diff changeset
  1201
0
48194c26a46c Initial revision
claus
parents:
diff changeset
  1202
    ^ shown not
48194c26a46c Initial revision
claus
parents:
diff changeset
  1203
!
48194c26a46c Initial revision
claus
parents:
diff changeset
  1204
48194c26a46c Initial revision
claus
parents:
diff changeset
  1205
hidden:aBoolean
48194c26a46c Initial revision
claus
parents:
diff changeset
  1206
    "if the argument is true, the receiver view will not
48194c26a46c Initial revision
claus
parents:
diff changeset
  1207
     be realized automatically when superview is realized"
48194c26a46c Initial revision
claus
parents:
diff changeset
  1208
48194c26a46c Initial revision
claus
parents:
diff changeset
  1209
    hidden := aBoolean
48194c26a46c Initial revision
claus
parents:
diff changeset
  1210
!
48194c26a46c Initial revision
claus
parents:
diff changeset
  1211
48194c26a46c Initial revision
claus
parents:
diff changeset
  1212
hidden
48194c26a46c Initial revision
claus
parents:
diff changeset
  1213
    "return true, if the view does not want to be realized
48194c26a46c Initial revision
claus
parents:
diff changeset
  1214
     automatically when superview is realized"
48194c26a46c Initial revision
claus
parents:
diff changeset
  1215
48194c26a46c Initial revision
claus
parents:
diff changeset
  1216
    ^ hidden
48194c26a46c Initial revision
claus
parents:
diff changeset
  1217
!
48194c26a46c Initial revision
claus
parents:
diff changeset
  1218
48194c26a46c Initial revision
claus
parents:
diff changeset
  1219
lower
48194c26a46c Initial revision
claus
parents:
diff changeset
  1220
    "bring to back"
48194c26a46c Initial revision
claus
parents:
diff changeset
  1221
48194c26a46c Initial revision
claus
parents:
diff changeset
  1222
    drawableId isNil ifTrue:[self create].
48194c26a46c Initial revision
claus
parents:
diff changeset
  1223
    device lowerWindow:drawableId
48194c26a46c Initial revision
claus
parents:
diff changeset
  1224
!
48194c26a46c Initial revision
claus
parents:
diff changeset
  1225
48194c26a46c Initial revision
claus
parents:
diff changeset
  1226
raise
48194c26a46c Initial revision
claus
parents:
diff changeset
  1227
    "bring to front"
48194c26a46c Initial revision
claus
parents:
diff changeset
  1228
48194c26a46c Initial revision
claus
parents:
diff changeset
  1229
    drawableId isNil ifTrue:[self create].
48194c26a46c Initial revision
claus
parents:
diff changeset
  1230
    device raiseWindow:drawableId
48194c26a46c Initial revision
claus
parents:
diff changeset
  1231
! !
48194c26a46c Initial revision
claus
parents:
diff changeset
  1232
48194c26a46c Initial revision
claus
parents:
diff changeset
  1233
!View methodsFor:'accessing-bg & border'!
48194c26a46c Initial revision
claus
parents:
diff changeset
  1234
48194c26a46c Initial revision
claus
parents:
diff changeset
  1235
viewBackground:something
48194c26a46c Initial revision
claus
parents:
diff changeset
  1236
    "set the viewBackground to something, a color, pixel or form.
48194c26a46c Initial revision
claus
parents:
diff changeset
  1237
     if its a color and we run on a color display, also set shadow and light
48194c26a46c Initial revision
claus
parents:
diff changeset
  1238
     colors."
48194c26a46c Initial revision
claus
parents:
diff changeset
  1239
48194c26a46c Initial revision
claus
parents:
diff changeset
  1240
    (something isKindOf:Color) ifTrue:[
48194c26a46c Initial revision
claus
parents:
diff changeset
  1241
        (device hasColors or:[device hasGreyscales]) ifTrue:[
48194c26a46c Initial revision
claus
parents:
diff changeset
  1242
            shadowColor := something darkened.
48194c26a46c Initial revision
claus
parents:
diff changeset
  1243
            lightColor := something lightened
48194c26a46c Initial revision
claus
parents:
diff changeset
  1244
        ]
48194c26a46c Initial revision
claus
parents:
diff changeset
  1245
    ].
48194c26a46c Initial revision
claus
parents:
diff changeset
  1246
    super viewBackground:something
48194c26a46c Initial revision
claus
parents:
diff changeset
  1247
!
48194c26a46c Initial revision
claus
parents:
diff changeset
  1248
48194c26a46c Initial revision
claus
parents:
diff changeset
  1249
borderColor
48194c26a46c Initial revision
claus
parents:
diff changeset
  1250
    "return my borderColor"
48194c26a46c Initial revision
claus
parents:
diff changeset
  1251
48194c26a46c Initial revision
claus
parents:
diff changeset
  1252
    ^ borderColor
48194c26a46c Initial revision
claus
parents:
diff changeset
  1253
!
48194c26a46c Initial revision
claus
parents:
diff changeset
  1254
48194c26a46c Initial revision
claus
parents:
diff changeset
  1255
borderColor:aColor
48194c26a46c Initial revision
claus
parents:
diff changeset
  1256
    "set my borderColor"
48194c26a46c Initial revision
claus
parents:
diff changeset
  1257
48194c26a46c Initial revision
claus
parents:
diff changeset
  1258
    |id dither|
48194c26a46c Initial revision
claus
parents:
diff changeset
  1259
48194c26a46c Initial revision
claus
parents:
diff changeset
  1260
    (aColor ~~ borderColor) ifTrue:[
48194c26a46c Initial revision
claus
parents:
diff changeset
  1261
        borderColor := aColor.
48194c26a46c Initial revision
claus
parents:
diff changeset
  1262
        drawableId notNil ifTrue:[
48194c26a46c Initial revision
claus
parents:
diff changeset
  1263
            borderColor := borderColor on:device.
48194c26a46c Initial revision
claus
parents:
diff changeset
  1264
            id := borderColor colorId.
48194c26a46c Initial revision
claus
parents:
diff changeset
  1265
            id notNil ifTrue:[
48194c26a46c Initial revision
claus
parents:
diff changeset
  1266
                device setWindowBorderColor:id in:drawableId
48194c26a46c Initial revision
claus
parents:
diff changeset
  1267
            ] ifFalse:[
48194c26a46c Initial revision
claus
parents:
diff changeset
  1268
                dither := borderColor ditherForm.
48194c26a46c Initial revision
claus
parents:
diff changeset
  1269
                dither notNil ifTrue:[
48194c26a46c Initial revision
claus
parents:
diff changeset
  1270
                    device setWindowBorderPixmap:(dither id) in:drawableId
48194c26a46c Initial revision
claus
parents:
diff changeset
  1271
                ] ifFalse:[
48194c26a46c Initial revision
claus
parents:
diff changeset
  1272
                    'bad borderColor' printNewline
48194c26a46c Initial revision
claus
parents:
diff changeset
  1273
                ]
48194c26a46c Initial revision
claus
parents:
diff changeset
  1274
            ]
48194c26a46c Initial revision
claus
parents:
diff changeset
  1275
        ]
48194c26a46c Initial revision
claus
parents:
diff changeset
  1276
    ]
48194c26a46c Initial revision
claus
parents:
diff changeset
  1277
!
48194c26a46c Initial revision
claus
parents:
diff changeset
  1278
48194c26a46c Initial revision
claus
parents:
diff changeset
  1279
borderWidth
48194c26a46c Initial revision
claus
parents:
diff changeset
  1280
    "return my borderWidth"
48194c26a46c Initial revision
claus
parents:
diff changeset
  1281
48194c26a46c Initial revision
claus
parents:
diff changeset
  1282
    ^ borderWidth
48194c26a46c Initial revision
claus
parents:
diff changeset
  1283
!
48194c26a46c Initial revision
claus
parents:
diff changeset
  1284
48194c26a46c Initial revision
claus
parents:
diff changeset
  1285
borderWidth:aNumber
48194c26a46c Initial revision
claus
parents:
diff changeset
  1286
    "set my borderWidth"
48194c26a46c Initial revision
claus
parents:
diff changeset
  1287
48194c26a46c Initial revision
claus
parents:
diff changeset
  1288
    (aNumber ~~ borderWidth) ifTrue:[
48194c26a46c Initial revision
claus
parents:
diff changeset
  1289
        borderWidth := aNumber.
48194c26a46c Initial revision
claus
parents:
diff changeset
  1290
        drawableId notNil ifTrue:[
48194c26a46c Initial revision
claus
parents:
diff changeset
  1291
            device setWindowBorderWidth:aNumber in:drawableId
48194c26a46c Initial revision
claus
parents:
diff changeset
  1292
        ]
48194c26a46c Initial revision
claus
parents:
diff changeset
  1293
    ]
48194c26a46c Initial revision
claus
parents:
diff changeset
  1294
!
48194c26a46c Initial revision
claus
parents:
diff changeset
  1295
48194c26a46c Initial revision
claus
parents:
diff changeset
  1296
borderShape:aForm
48194c26a46c Initial revision
claus
parents:
diff changeset
  1297
    "set the borderShape to aForm"
48194c26a46c Initial revision
claus
parents:
diff changeset
  1298
48194c26a46c Initial revision
claus
parents:
diff changeset
  1299
    borderShape := aForm.
48194c26a46c Initial revision
claus
parents:
diff changeset
  1300
    drawableId notNil ifTrue:[
48194c26a46c Initial revision
claus
parents:
diff changeset
  1301
        device setWindowBorderShape:(aForm id) in:drawableId
48194c26a46c Initial revision
claus
parents:
diff changeset
  1302
    ]
48194c26a46c Initial revision
claus
parents:
diff changeset
  1303
!
48194c26a46c Initial revision
claus
parents:
diff changeset
  1304
48194c26a46c Initial revision
claus
parents:
diff changeset
  1305
viewShape:aForm
48194c26a46c Initial revision
claus
parents:
diff changeset
  1306
    "set the viewShape to aForm"
48194c26a46c Initial revision
claus
parents:
diff changeset
  1307
48194c26a46c Initial revision
claus
parents:
diff changeset
  1308
    viewShape := aForm.
48194c26a46c Initial revision
claus
parents:
diff changeset
  1309
    drawableId notNil ifTrue:[
48194c26a46c Initial revision
claus
parents:
diff changeset
  1310
        device setWindowShape:(aForm id) in:drawableId
48194c26a46c Initial revision
claus
parents:
diff changeset
  1311
    ]
48194c26a46c Initial revision
claus
parents:
diff changeset
  1312
!
48194c26a46c Initial revision
claus
parents:
diff changeset
  1313
48194c26a46c Initial revision
claus
parents:
diff changeset
  1314
name
48194c26a46c Initial revision
claus
parents:
diff changeset
  1315
    "return my name component to be used for resource-access"
48194c26a46c Initial revision
claus
parents:
diff changeset
  1316
48194c26a46c Initial revision
claus
parents:
diff changeset
  1317
    ^ name
48194c26a46c Initial revision
claus
parents:
diff changeset
  1318
!
48194c26a46c Initial revision
claus
parents:
diff changeset
  1319
48194c26a46c Initial revision
claus
parents:
diff changeset
  1320
fullName
48194c26a46c Initial revision
claus
parents:
diff changeset
  1321
    "return my full name to be used for resource-access"
48194c26a46c Initial revision
claus
parents:
diff changeset
  1322
48194c26a46c Initial revision
claus
parents:
diff changeset
  1323
    superView notNil ifTrue:[
48194c26a46c Initial revision
claus
parents:
diff changeset
  1324
        ^ superView fullName , '.' , name
48194c26a46c Initial revision
claus
parents:
diff changeset
  1325
    ].
48194c26a46c Initial revision
claus
parents:
diff changeset
  1326
    ^ name
48194c26a46c Initial revision
claus
parents:
diff changeset
  1327
!
48194c26a46c Initial revision
claus
parents:
diff changeset
  1328
48194c26a46c Initial revision
claus
parents:
diff changeset
  1329
name:aString
48194c26a46c Initial revision
claus
parents:
diff changeset
  1330
    "set my name component to be used for resource-access"
48194c26a46c Initial revision
claus
parents:
diff changeset
  1331
48194c26a46c Initial revision
claus
parents:
diff changeset
  1332
    name := aString
48194c26a46c Initial revision
claus
parents:
diff changeset
  1333
!
48194c26a46c Initial revision
claus
parents:
diff changeset
  1334
48194c26a46c Initial revision
claus
parents:
diff changeset
  1335
keyboardHandler:someOne
48194c26a46c Initial revision
claus
parents:
diff changeset
  1336
    "set my keyboardHandler"
48194c26a46c Initial revision
claus
parents:
diff changeset
  1337
48194c26a46c Initial revision
claus
parents:
diff changeset
  1338
    keyboardHandler := someOne
48194c26a46c Initial revision
claus
parents:
diff changeset
  1339
!
48194c26a46c Initial revision
claus
parents:
diff changeset
  1340
48194c26a46c Initial revision
claus
parents:
diff changeset
  1341
level
48194c26a46c Initial revision
claus
parents:
diff changeset
  1342
    "return my level relative to superView (3D)"
48194c26a46c Initial revision
claus
parents:
diff changeset
  1343
48194c26a46c Initial revision
claus
parents:
diff changeset
  1344
    ^ level
48194c26a46c Initial revision
claus
parents:
diff changeset
  1345
!
48194c26a46c Initial revision
claus
parents:
diff changeset
  1346
48194c26a46c Initial revision
claus
parents:
diff changeset
  1347
level:aNumber
48194c26a46c Initial revision
claus
parents:
diff changeset
  1348
    "set my level relative to superView (3D)"
48194c26a46c Initial revision
claus
parents:
diff changeset
  1349
48194c26a46c Initial revision
claus
parents:
diff changeset
  1350
    |oldMargin how|
48194c26a46c Initial revision
claus
parents:
diff changeset
  1351
48194c26a46c Initial revision
claus
parents:
diff changeset
  1352
    self is3D ifTrue:[
48194c26a46c Initial revision
claus
parents:
diff changeset
  1353
        (aNumber ~~ level) ifTrue:[
48194c26a46c Initial revision
claus
parents:
diff changeset
  1354
            level := aNumber.
48194c26a46c Initial revision
claus
parents:
diff changeset
  1355
            oldMargin := margin.
48194c26a46c Initial revision
claus
parents:
diff changeset
  1356
            margin := level abs.
48194c26a46c Initial revision
claus
parents:
diff changeset
  1357
48194c26a46c Initial revision
claus
parents:
diff changeset
  1358
            realized ifTrue:[
48194c26a46c Initial revision
claus
parents:
diff changeset
  1359
                (margin > oldMargin) ifTrue:[
48194c26a46c Initial revision
claus
parents:
diff changeset
  1360
                    how := #smaller
48194c26a46c Initial revision
claus
parents:
diff changeset
  1361
                ] ifFalse:[
48194c26a46c Initial revision
claus
parents:
diff changeset
  1362
                    how := #larger
48194c26a46c Initial revision
claus
parents:
diff changeset
  1363
                ].
12
9f0995fac1fa *** empty log message ***
claus
parents: 6
diff changeset
  1364
                self sizeChanged:how.
0
48194c26a46c Initial revision
claus
parents:
diff changeset
  1365
                self computeInnerClip.
48194c26a46c Initial revision
claus
parents:
diff changeset
  1366
                self redrawEdges
48194c26a46c Initial revision
claus
parents:
diff changeset
  1367
            ]
48194c26a46c Initial revision
claus
parents:
diff changeset
  1368
        ]
48194c26a46c Initial revision
claus
parents:
diff changeset
  1369
    ]
48194c26a46c Initial revision
claus
parents:
diff changeset
  1370
!
48194c26a46c Initial revision
claus
parents:
diff changeset
  1371
48194c26a46c Initial revision
claus
parents:
diff changeset
  1372
margin
48194c26a46c Initial revision
claus
parents:
diff changeset
  1373
    "return my margin - this is usually the level,
48194c26a46c Initial revision
claus
parents:
diff changeset
  1374
     but can be more for some views"
48194c26a46c Initial revision
claus
parents:
diff changeset
  1375
48194c26a46c Initial revision
claus
parents:
diff changeset
  1376
    ^ margin
48194c26a46c Initial revision
claus
parents:
diff changeset
  1377
!
48194c26a46c Initial revision
claus
parents:
diff changeset
  1378
48194c26a46c Initial revision
claus
parents:
diff changeset
  1379
widthIncludingBorder
48194c26a46c Initial revision
claus
parents:
diff changeset
  1380
    "return my width including border"
48194c26a46c Initial revision
claus
parents:
diff changeset
  1381
48194c26a46c Initial revision
claus
parents:
diff changeset
  1382
    ^ width + (2*borderWidth)
48194c26a46c Initial revision
claus
parents:
diff changeset
  1383
!
48194c26a46c Initial revision
claus
parents:
diff changeset
  1384
48194c26a46c Initial revision
claus
parents:
diff changeset
  1385
heightIncludingBorder
48194c26a46c Initial revision
claus
parents:
diff changeset
  1386
    "return my height including border"
48194c26a46c Initial revision
claus
parents:
diff changeset
  1387
48194c26a46c Initial revision
claus
parents:
diff changeset
  1388
    ^ height + (2*borderWidth)
48194c26a46c Initial revision
claus
parents:
diff changeset
  1389
! !
48194c26a46c Initial revision
claus
parents:
diff changeset
  1390
48194c26a46c Initial revision
claus
parents:
diff changeset
  1391
!View methodsFor:'adding & removing components'!
48194c26a46c Initial revision
claus
parents:
diff changeset
  1392
48194c26a46c Initial revision
claus
parents:
diff changeset
  1393
addComponent:aComponent
48194c26a46c Initial revision
claus
parents:
diff changeset
  1394
    components isNil ifTrue:[
48194c26a46c Initial revision
claus
parents:
diff changeset
  1395
        components := IdentitySet new
48194c26a46c Initial revision
claus
parents:
diff changeset
  1396
    ].
48194c26a46c Initial revision
claus
parents:
diff changeset
  1397
    components add:aComponent
48194c26a46c Initial revision
claus
parents:
diff changeset
  1398
!
48194c26a46c Initial revision
claus
parents:
diff changeset
  1399
48194c26a46c Initial revision
claus
parents:
diff changeset
  1400
removeComponent:aComponent
48194c26a46c Initial revision
claus
parents:
diff changeset
  1401
    components isNil ifTrue:[^self].
48194c26a46c Initial revision
claus
parents:
diff changeset
  1402
    components remove:aComponent ifAbsent:[]
48194c26a46c Initial revision
claus
parents:
diff changeset
  1403
!
48194c26a46c Initial revision
claus
parents:
diff changeset
  1404
48194c26a46c Initial revision
claus
parents:
diff changeset
  1405
addSubView:aView
48194c26a46c Initial revision
claus
parents:
diff changeset
  1406
    "add a view to the collection of subviews"
48194c26a46c Initial revision
claus
parents:
diff changeset
  1407
48194c26a46c Initial revision
claus
parents:
diff changeset
  1408
    subViews isNil ifTrue:[
48194c26a46c Initial revision
claus
parents:
diff changeset
  1409
        subViews := OrderedCollection new
48194c26a46c Initial revision
claus
parents:
diff changeset
  1410
    ].
48194c26a46c Initial revision
claus
parents:
diff changeset
  1411
    subViews add:aView.
48194c26a46c Initial revision
claus
parents:
diff changeset
  1412
    aView superView:self.
48194c26a46c Initial revision
claus
parents:
diff changeset
  1413
    (aView device ~~ device) ifTrue:[
48194c26a46c Initial revision
claus
parents:
diff changeset
  1414
        'warning subview (' print. aView class name print.
48194c26a46c Initial revision
claus
parents:
diff changeset
  1415
        ') has different device than me (' print.
48194c26a46c Initial revision
claus
parents:
diff changeset
  1416
        self class name print. ').' printNewline.
48194c26a46c Initial revision
claus
parents:
diff changeset
  1417
        aView device:device
48194c26a46c Initial revision
claus
parents:
diff changeset
  1418
    ]
48194c26a46c Initial revision
claus
parents:
diff changeset
  1419
!
48194c26a46c Initial revision
claus
parents:
diff changeset
  1420
48194c26a46c Initial revision
claus
parents:
diff changeset
  1421
addSubView:aView in:bounds borderWidth:bw
48194c26a46c Initial revision
claus
parents:
diff changeset
  1422
    aView borderWidth:bw.
48194c26a46c Initial revision
claus
parents:
diff changeset
  1423
    aView origin:(bounds origin x asFloat) @ (bounds origin y asFloat)
48194c26a46c Initial revision
claus
parents:
diff changeset
  1424
          extent:(bounds extent x asFloat) @ (bounds extent y asFloat).
48194c26a46c Initial revision
claus
parents:
diff changeset
  1425
    self addSubView:aView
48194c26a46c Initial revision
claus
parents:
diff changeset
  1426
!
48194c26a46c Initial revision
claus
parents:
diff changeset
  1427
48194c26a46c Initial revision
claus
parents:
diff changeset
  1428
add:aView in:bounds
48194c26a46c Initial revision
claus
parents:
diff changeset
  1429
    aView origin:(bounds origin x asFloat) @ (bounds origin y asFloat)
48194c26a46c Initial revision
claus
parents:
diff changeset
  1430
          extent:(bounds extent x asFloat) @ (bounds extent y asFloat).
48194c26a46c Initial revision
claus
parents:
diff changeset
  1431
    self addSubView:aView
48194c26a46c Initial revision
claus
parents:
diff changeset
  1432
!
48194c26a46c Initial revision
claus
parents:
diff changeset
  1433
48194c26a46c Initial revision
claus
parents:
diff changeset
  1434
addSubView:aView viewport:aRectangle
48194c26a46c Initial revision
claus
parents:
diff changeset
  1435
    "Adds aView to the views list of subviews and uses the
48194c26a46c Initial revision
claus
parents:
diff changeset
  1436
     existing subviews window and the new viewport to position it"
48194c26a46c Initial revision
claus
parents:
diff changeset
  1437
48194c26a46c Initial revision
claus
parents:
diff changeset
  1438
    self addSubView:aView.
48194c26a46c Initial revision
claus
parents:
diff changeset
  1439
    aView viewport:aRectangle
48194c26a46c Initial revision
claus
parents:
diff changeset
  1440
!
48194c26a46c Initial revision
claus
parents:
diff changeset
  1441
48194c26a46c Initial revision
claus
parents:
diff changeset
  1442
addSubView:aView window:aWindowRectangle viewport:aViewportRectangle
48194c26a46c Initial revision
claus
parents:
diff changeset
  1443
    "Adds aView to the views list of subviews and uses 
48194c26a46c Initial revision
claus
parents:
diff changeset
  1444
     aWindowRectangle and aViewportRectangle to position it"
48194c26a46c Initial revision
claus
parents:
diff changeset
  1445
48194c26a46c Initial revision
claus
parents:
diff changeset
  1446
    self addSubView:aView.
48194c26a46c Initial revision
claus
parents:
diff changeset
  1447
    aView window:aWindowRectangle.
48194c26a46c Initial revision
claus
parents:
diff changeset
  1448
    aView viewport:aViewportRectangle
48194c26a46c Initial revision
claus
parents:
diff changeset
  1449
!
48194c26a46c Initial revision
claus
parents:
diff changeset
  1450
48194c26a46c Initial revision
claus
parents:
diff changeset
  1451
removeSubView:aView
48194c26a46c Initial revision
claus
parents:
diff changeset
  1452
    "remove a view from the collection of subviews"
48194c26a46c Initial revision
claus
parents:
diff changeset
  1453
48194c26a46c Initial revision
claus
parents:
diff changeset
  1454
    subViews remove:aView ifAbsent:[nil].
48194c26a46c Initial revision
claus
parents:
diff changeset
  1455
    (subViews size == 0) ifTrue:[
48194c26a46c Initial revision
claus
parents:
diff changeset
  1456
        subViews := nil
48194c26a46c Initial revision
claus
parents:
diff changeset
  1457
    ]
48194c26a46c Initial revision
claus
parents:
diff changeset
  1458
! !
48194c26a46c Initial revision
claus
parents:
diff changeset
  1459
48194c26a46c Initial revision
claus
parents:
diff changeset
  1460
!View methodsFor:'ST-80 compatibility'!
48194c26a46c Initial revision
claus
parents:
diff changeset
  1461
48194c26a46c Initial revision
claus
parents:
diff changeset
  1462
on:aModel aspect:aspect change:change list:list menu:menu
48194c26a46c Initial revision
claus
parents:
diff changeset
  1463
    "ST-80 compatibility"
48194c26a46c Initial revision
claus
parents:
diff changeset
  1464
48194c26a46c Initial revision
claus
parents:
diff changeset
  1465
    aspectSymbol := aspect.
48194c26a46c Initial revision
claus
parents:
diff changeset
  1466
    changeSymbol := change.
48194c26a46c Initial revision
claus
parents:
diff changeset
  1467
    menuSymbol := menu.
48194c26a46c Initial revision
claus
parents:
diff changeset
  1468
    self model:aModel
48194c26a46c Initial revision
claus
parents:
diff changeset
  1469
!
48194c26a46c Initial revision
claus
parents:
diff changeset
  1470
48194c26a46c Initial revision
claus
parents:
diff changeset
  1471
sensor
20
ab35d92b9a4b *** empty log message ***
claus
parents: 15
diff changeset
  1472
    "return the views sensor"
ab35d92b9a4b *** empty log message ***
claus
parents: 15
diff changeset
  1473
12
9f0995fac1fa *** empty log message ***
claus
parents: 6
diff changeset
  1474
    windowGroup notNil ifTrue:[
9f0995fac1fa *** empty log message ***
claus
parents: 6
diff changeset
  1475
        ^ windowGroup sensor.
9f0995fac1fa *** empty log message ***
claus
parents: 6
diff changeset
  1476
    ].
9f0995fac1fa *** empty log message ***
claus
parents: 6
diff changeset
  1477
    ^ nil
0
48194c26a46c Initial revision
claus
parents:
diff changeset
  1478
!
48194c26a46c Initial revision
claus
parents:
diff changeset
  1479
48194c26a46c Initial revision
claus
parents:
diff changeset
  1480
update
48194c26a46c Initial revision
claus
parents:
diff changeset
  1481
    ^ self redraw
48194c26a46c Initial revision
claus
parents:
diff changeset
  1482
!
48194c26a46c Initial revision
claus
parents:
diff changeset
  1483
48194c26a46c Initial revision
claus
parents:
diff changeset
  1484
update:aspect
48194c26a46c Initial revision
claus
parents:
diff changeset
  1485
    "an update request - should be redefined in subclasses"
48194c26a46c Initial revision
claus
parents:
diff changeset
  1486
48194c26a46c Initial revision
claus
parents:
diff changeset
  1487
    ^ self update
48194c26a46c Initial revision
claus
parents:
diff changeset
  1488
!
48194c26a46c Initial revision
claus
parents:
diff changeset
  1489
48194c26a46c Initial revision
claus
parents:
diff changeset
  1490
update:aspect with:anObject
48194c26a46c Initial revision
claus
parents:
diff changeset
  1491
    "an update request - should be redefined in subclasses"
48194c26a46c Initial revision
claus
parents:
diff changeset
  1492
48194c26a46c Initial revision
claus
parents:
diff changeset
  1493
    aspect == #rectangle ifTrue:[
48194c26a46c Initial revision
claus
parents:
diff changeset
  1494
        ^ self update:#all
48194c26a46c Initial revision
claus
parents:
diff changeset
  1495
    ].
48194c26a46c Initial revision
claus
parents:
diff changeset
  1496
    ^ self update:aspect
48194c26a46c Initial revision
claus
parents:
diff changeset
  1497
! !
48194c26a46c Initial revision
claus
parents:
diff changeset
  1498
48194c26a46c Initial revision
claus
parents:
diff changeset
  1499
!View methodsFor:'informing others of changes'!
48194c26a46c Initial revision
claus
parents:
diff changeset
  1500
48194c26a46c Initial revision
claus
parents:
diff changeset
  1501
originWillChange
48194c26a46c Initial revision
claus
parents:
diff changeset
  1502
    "this one is sent, just before viewOrigin changes -
48194c26a46c Initial revision
claus
parents:
diff changeset
  1503
     gives subclasses a chance to catch scrolls easily
48194c26a46c Initial revision
claus
parents:
diff changeset
  1504
     (for example to hide cursor before scroll)"
48194c26a46c Initial revision
claus
parents:
diff changeset
  1505
48194c26a46c Initial revision
claus
parents:
diff changeset
  1506
    ^ self
48194c26a46c Initial revision
claus
parents:
diff changeset
  1507
!
48194c26a46c Initial revision
claus
parents:
diff changeset
  1508
48194c26a46c Initial revision
claus
parents:
diff changeset
  1509
originChangeAction:aBlock
48194c26a46c Initial revision
claus
parents:
diff changeset
  1510
    "set the action, aBlock to be evaluated whenever my orgin changes
48194c26a46c Initial revision
claus
parents:
diff changeset
  1511
     - to allow for scrollBars to track contents"
48194c26a46c Initial revision
claus
parents:
diff changeset
  1512
48194c26a46c Initial revision
claus
parents:
diff changeset
  1513
    originChangeAction := aBlock
48194c26a46c Initial revision
claus
parents:
diff changeset
  1514
!
48194c26a46c Initial revision
claus
parents:
diff changeset
  1515
48194c26a46c Initial revision
claus
parents:
diff changeset
  1516
originChanged:delta
48194c26a46c Initial revision
claus
parents:
diff changeset
  1517
    "this one is sent, after my origin changed -
48194c26a46c Initial revision
claus
parents:
diff changeset
  1518
     (for example to redraw cursor)"
48194c26a46c Initial revision
claus
parents:
diff changeset
  1519
48194c26a46c Initial revision
claus
parents:
diff changeset
  1520
    originChangeAction notNil ifTrue:[originChangeAction value:self]
48194c26a46c Initial revision
claus
parents:
diff changeset
  1521
!
48194c26a46c Initial revision
claus
parents:
diff changeset
  1522
48194c26a46c Initial revision
claus
parents:
diff changeset
  1523
contentsChangeAction:aBlock
48194c26a46c Initial revision
claus
parents:
diff changeset
  1524
    "set the action, aBlock to be evaluated whenever my contents changes
48194c26a46c Initial revision
claus
parents:
diff changeset
  1525
     - to allow for scrollBars to track contents"
48194c26a46c Initial revision
claus
parents:
diff changeset
  1526
48194c26a46c Initial revision
claus
parents:
diff changeset
  1527
    contentsChangeAction := aBlock
48194c26a46c Initial revision
claus
parents:
diff changeset
  1528
!
48194c26a46c Initial revision
claus
parents:
diff changeset
  1529
48194c26a46c Initial revision
claus
parents:
diff changeset
  1530
contentsChanged
48194c26a46c Initial revision
claus
parents:
diff changeset
  1531
    "this one is sent, whenever contents changes size -
48194c26a46c Initial revision
claus
parents:
diff changeset
  1532
     gives subclasses a chance to catch it (i.e. scrollbars etc)"
48194c26a46c Initial revision
claus
parents:
diff changeset
  1533
48194c26a46c Initial revision
claus
parents:
diff changeset
  1534
    contentsChangeAction notNil ifTrue:[contentsChangeAction value:self]
48194c26a46c Initial revision
claus
parents:
diff changeset
  1535
! !
48194c26a46c Initial revision
claus
parents:
diff changeset
  1536
48194c26a46c Initial revision
claus
parents:
diff changeset
  1537
!View methodsFor:'scrolling'!
48194c26a46c Initial revision
claus
parents:
diff changeset
  1538
48194c26a46c Initial revision
claus
parents:
diff changeset
  1539
widthForScrollBetween:firstLine and:lastLine
20
ab35d92b9a4b *** empty log message ***
claus
parents: 15
diff changeset
  1540
    "return the width in pixels for a scroll between firstLine and lastLine
0
48194c26a46c Initial revision
claus
parents:
diff changeset
  1541
     - return full width here since we do not know how wide contents is"
48194c26a46c Initial revision
claus
parents:
diff changeset
  1542
48194c26a46c Initial revision
claus
parents:
diff changeset
  1543
    ^ (width - margin - margin)
48194c26a46c Initial revision
claus
parents:
diff changeset
  1544
!
48194c26a46c Initial revision
claus
parents:
diff changeset
  1545
48194c26a46c Initial revision
claus
parents:
diff changeset
  1546
scrollVerticalToPercent:percent
48194c26a46c Initial revision
claus
parents:
diff changeset
  1547
    "scroll to a position given in percent of total"
48194c26a46c Initial revision
claus
parents:
diff changeset
  1548
48194c26a46c Initial revision
claus
parents:
diff changeset
  1549
    self scrollVerticalTo:
48194c26a46c Initial revision
claus
parents:
diff changeset
  1550
            ((((self heightOfContents * percent) / 100.0) + 0.5) asInteger)
48194c26a46c Initial revision
claus
parents:
diff changeset
  1551
!
48194c26a46c Initial revision
claus
parents:
diff changeset
  1552
48194c26a46c Initial revision
claus
parents:
diff changeset
  1553
scrollVerticalTo:aPixelOffset
48194c26a46c Initial revision
claus
parents:
diff changeset
  1554
    "change origin to make aPixelOffset be the top line"
48194c26a46c Initial revision
claus
parents:
diff changeset
  1555
48194c26a46c Initial revision
claus
parents:
diff changeset
  1556
    |orgY|
48194c26a46c Initial revision
claus
parents:
diff changeset
  1557
48194c26a46c Initial revision
claus
parents:
diff changeset
  1558
    orgY := viewOrigin y.
48194c26a46c Initial revision
claus
parents:
diff changeset
  1559
48194c26a46c Initial revision
claus
parents:
diff changeset
  1560
    (aPixelOffset < orgY) ifTrue:[
48194c26a46c Initial revision
claus
parents:
diff changeset
  1561
        self scrollUp:(orgY - aPixelOffset)
48194c26a46c Initial revision
claus
parents:
diff changeset
  1562
    ] ifFalse:[
48194c26a46c Initial revision
claus
parents:
diff changeset
  1563
        (aPixelOffset > orgY) ifTrue:[
48194c26a46c Initial revision
claus
parents:
diff changeset
  1564
            self scrollDown:(aPixelOffset - orgY)
48194c26a46c Initial revision
claus
parents:
diff changeset
  1565
        ]
48194c26a46c Initial revision
claus
parents:
diff changeset
  1566
    ]
48194c26a46c Initial revision
claus
parents:
diff changeset
  1567
!
48194c26a46c Initial revision
claus
parents:
diff changeset
  1568
48194c26a46c Initial revision
claus
parents:
diff changeset
  1569
scrollHorizontalToPercent:percent
48194c26a46c Initial revision
claus
parents:
diff changeset
  1570
    "scroll to a position given in percent of total"
48194c26a46c Initial revision
claus
parents:
diff changeset
  1571
48194c26a46c Initial revision
claus
parents:
diff changeset
  1572
    self scrollHorizontalTo:
48194c26a46c Initial revision
claus
parents:
diff changeset
  1573
            ((((self widthOfContents * percent) / 100.0) + 0.5) asInteger)
48194c26a46c Initial revision
claus
parents:
diff changeset
  1574
!
48194c26a46c Initial revision
claus
parents:
diff changeset
  1575
48194c26a46c Initial revision
claus
parents:
diff changeset
  1576
scrollHorizontalTo:aPixelOffset
48194c26a46c Initial revision
claus
parents:
diff changeset
  1577
    "change origin to make aPixelOffset be the left col"
48194c26a46c Initial revision
claus
parents:
diff changeset
  1578
48194c26a46c Initial revision
claus
parents:
diff changeset
  1579
    |orgX|
48194c26a46c Initial revision
claus
parents:
diff changeset
  1580
48194c26a46c Initial revision
claus
parents:
diff changeset
  1581
    orgX := viewOrigin x.
48194c26a46c Initial revision
claus
parents:
diff changeset
  1582
48194c26a46c Initial revision
claus
parents:
diff changeset
  1583
    (aPixelOffset < orgX) ifTrue:[
48194c26a46c Initial revision
claus
parents:
diff changeset
  1584
        self scrollLeft:(orgX - aPixelOffset)
48194c26a46c Initial revision
claus
parents:
diff changeset
  1585
    ] ifFalse:[
48194c26a46c Initial revision
claus
parents:
diff changeset
  1586
        (aPixelOffset > orgX) ifTrue:[
48194c26a46c Initial revision
claus
parents:
diff changeset
  1587
            self scrollRight:(aPixelOffset - orgX)
48194c26a46c Initial revision
claus
parents:
diff changeset
  1588
        ]
48194c26a46c Initial revision
claus
parents:
diff changeset
  1589
    ]
48194c26a46c Initial revision
claus
parents:
diff changeset
  1590
!
48194c26a46c Initial revision
claus
parents:
diff changeset
  1591
48194c26a46c Initial revision
claus
parents:
diff changeset
  1592
scrollTo:aPixelOffset
48194c26a46c Initial revision
claus
parents:
diff changeset
  1593
    "only here for historic reasons - will vanish soon"
48194c26a46c Initial revision
claus
parents:
diff changeset
  1594
48194c26a46c Initial revision
claus
parents:
diff changeset
  1595
    ^ self scrollVerticalTo:aPixelOffset
48194c26a46c Initial revision
claus
parents:
diff changeset
  1596
!
48194c26a46c Initial revision
claus
parents:
diff changeset
  1597
48194c26a46c Initial revision
claus
parents:
diff changeset
  1598
scrollToTop
48194c26a46c Initial revision
claus
parents:
diff changeset
  1599
    "move viewOrigin to top"
48194c26a46c Initial revision
claus
parents:
diff changeset
  1600
48194c26a46c Initial revision
claus
parents:
diff changeset
  1601
    self scrollVerticalTo:0
48194c26a46c Initial revision
claus
parents:
diff changeset
  1602
!
48194c26a46c Initial revision
claus
parents:
diff changeset
  1603
2
b35336ab0de3 *** empty log message ***
claus
parents: 0
diff changeset
  1604
scrollToTopLeft
b35336ab0de3 *** empty log message ***
claus
parents: 0
diff changeset
  1605
    "move viewOrigin to top/left"
b35336ab0de3 *** empty log message ***
claus
parents: 0
diff changeset
  1606
b35336ab0de3 *** empty log message ***
claus
parents: 0
diff changeset
  1607
    self scrollVerticalTo:0.
b35336ab0de3 *** empty log message ***
claus
parents: 0
diff changeset
  1608
    self scrollHorizontalTo:0
b35336ab0de3 *** empty log message ***
claus
parents: 0
diff changeset
  1609
!
b35336ab0de3 *** empty log message ***
claus
parents: 0
diff changeset
  1610
0
48194c26a46c Initial revision
claus
parents:
diff changeset
  1611
scrollUp:nPixels
48194c26a46c Initial revision
claus
parents:
diff changeset
  1612
    "change origin to scroll up some pixels"
48194c26a46c Initial revision
claus
parents:
diff changeset
  1613
48194c26a46c Initial revision
claus
parents:
diff changeset
  1614
    |count "{ Class:SmallInteger }"
48194c26a46c Initial revision
claus
parents:
diff changeset
  1615
     m2    "{ Class:SmallInteger }"
48194c26a46c Initial revision
claus
parents:
diff changeset
  1616
     w     "{ Class:SmallInteger }"|
48194c26a46c Initial revision
claus
parents:
diff changeset
  1617
48194c26a46c Initial revision
claus
parents:
diff changeset
  1618
    count := nPixels.
48194c26a46c Initial revision
claus
parents:
diff changeset
  1619
    (count > viewOrigin y) ifTrue:[
48194c26a46c Initial revision
claus
parents:
diff changeset
  1620
        count := viewOrigin y
48194c26a46c Initial revision
claus
parents:
diff changeset
  1621
    ].
48194c26a46c Initial revision
claus
parents:
diff changeset
  1622
    (count <= 0) ifTrue:[^ self].
48194c26a46c Initial revision
claus
parents:
diff changeset
  1623
48194c26a46c Initial revision
claus
parents:
diff changeset
  1624
    self originWillChange.
48194c26a46c Initial revision
claus
parents:
diff changeset
  1625
    viewOrigin := viewOrigin x @ (viewOrigin y - count).
48194c26a46c Initial revision
claus
parents:
diff changeset
  1626
48194c26a46c Initial revision
claus
parents:
diff changeset
  1627
    (count >= self innerHeight) ifTrue:[
48194c26a46c Initial revision
claus
parents:
diff changeset
  1628
        self redraw.
48194c26a46c Initial revision
claus
parents:
diff changeset
  1629
        self originChanged:(0 @ count negated)
48194c26a46c Initial revision
claus
parents:
diff changeset
  1630
    ] ifFalse:[
48194c26a46c Initial revision
claus
parents:
diff changeset
  1631
        w := self widthForScrollBetween:(viewOrigin y)
48194c26a46c Initial revision
claus
parents:
diff changeset
  1632
                                    and:(viewOrigin y + count).
48194c26a46c Initial revision
claus
parents:
diff changeset
  1633
        m2 := margin * 2.
48194c26a46c Initial revision
claus
parents:
diff changeset
  1634
        w := w min:(width - m2).
48194c26a46c Initial revision
claus
parents:
diff changeset
  1635
48194c26a46c Initial revision
claus
parents:
diff changeset
  1636
"
48194c26a46c Initial revision
claus
parents:
diff changeset
  1637
        super function:#copy.
48194c26a46c Initial revision
claus
parents:
diff changeset
  1638
        super foreground:White.
48194c26a46c Initial revision
claus
parents:
diff changeset
  1639
"
48194c26a46c Initial revision
claus
parents:
diff changeset
  1640
        self copyFrom:self x:margin y:margin
48194c26a46c Initial revision
claus
parents:
diff changeset
  1641
                         toX:margin y:(count + margin)
48194c26a46c Initial revision
claus
parents:
diff changeset
  1642
                       width:w 
48194c26a46c Initial revision
claus
parents:
diff changeset
  1643
                      height:(height - m2 - count).
48194c26a46c Initial revision
claus
parents:
diff changeset
  1644
        self redrawX:margin y:margin
48194c26a46c Initial revision
claus
parents:
diff changeset
  1645
               width:(width - m2)
48194c26a46c Initial revision
claus
parents:
diff changeset
  1646
              height:count.
48194c26a46c Initial revision
claus
parents:
diff changeset
  1647
48194c26a46c Initial revision
claus
parents:
diff changeset
  1648
        self originChanged:(0 @ count negated).
48194c26a46c Initial revision
claus
parents:
diff changeset
  1649
        self waitForExpose
48194c26a46c Initial revision
claus
parents:
diff changeset
  1650
    ]
48194c26a46c Initial revision
claus
parents:
diff changeset
  1651
!
48194c26a46c Initial revision
claus
parents:
diff changeset
  1652
48194c26a46c Initial revision
claus
parents:
diff changeset
  1653
scrollUp
48194c26a46c Initial revision
claus
parents:
diff changeset
  1654
    "scroll up by some amount
48194c26a46c Initial revision
claus
parents:
diff changeset
  1655
      - question is how much is a good default here"
48194c26a46c Initial revision
claus
parents:
diff changeset
  1656
48194c26a46c Initial revision
claus
parents:
diff changeset
  1657
    self scrollUp:(device verticalPixelPerMillimeter * 20) asInteger
48194c26a46c Initial revision
claus
parents:
diff changeset
  1658
!
48194c26a46c Initial revision
claus
parents:
diff changeset
  1659
48194c26a46c Initial revision
claus
parents:
diff changeset
  1660
scrollDown:nPixels
48194c26a46c Initial revision
claus
parents:
diff changeset
  1661
    "change origin to scroll down some pixels"
48194c26a46c Initial revision
claus
parents:
diff changeset
  1662
48194c26a46c Initial revision
claus
parents:
diff changeset
  1663
    |count "{ Class:SmallInteger }"
48194c26a46c Initial revision
claus
parents:
diff changeset
  1664
     m2    "{ Class:SmallInteger }"
48194c26a46c Initial revision
claus
parents:
diff changeset
  1665
     w     "{ Class:SmallInteger }"
48194c26a46c Initial revision
claus
parents:
diff changeset
  1666
     hCont "{ Class:SmallInteger }"
48194c26a46c Initial revision
claus
parents:
diff changeset
  1667
     ih    "{ Class:SmallInteger }"|
48194c26a46c Initial revision
claus
parents:
diff changeset
  1668
48194c26a46c Initial revision
claus
parents:
diff changeset
  1669
    count := nPixels.
48194c26a46c Initial revision
claus
parents:
diff changeset
  1670
    hCont := self heightOfContents.
48194c26a46c Initial revision
claus
parents:
diff changeset
  1671
    ih := self innerHeight.
48194c26a46c Initial revision
claus
parents:
diff changeset
  1672
48194c26a46c Initial revision
claus
parents:
diff changeset
  1673
    ((viewOrigin y + nPixels + ih) > hCont) ifTrue:[
48194c26a46c Initial revision
claus
parents:
diff changeset
  1674
        count := hCont - viewOrigin y - ih
48194c26a46c Initial revision
claus
parents:
diff changeset
  1675
    ].
48194c26a46c Initial revision
claus
parents:
diff changeset
  1676
    (count <= 0) ifTrue:[^ self].
48194c26a46c Initial revision
claus
parents:
diff changeset
  1677
48194c26a46c Initial revision
claus
parents:
diff changeset
  1678
    self originWillChange.
48194c26a46c Initial revision
claus
parents:
diff changeset
  1679
    viewOrigin := viewOrigin x @ (viewOrigin y + count).
48194c26a46c Initial revision
claus
parents:
diff changeset
  1680
48194c26a46c Initial revision
claus
parents:
diff changeset
  1681
    (count >= ih) ifTrue:[
48194c26a46c Initial revision
claus
parents:
diff changeset
  1682
        self redraw.
48194c26a46c Initial revision
claus
parents:
diff changeset
  1683
        self originChanged:(0 @ count)
48194c26a46c Initial revision
claus
parents:
diff changeset
  1684
    ] ifFalse:[
48194c26a46c Initial revision
claus
parents:
diff changeset
  1685
        m2 := margin * 2.
48194c26a46c Initial revision
claus
parents:
diff changeset
  1686
        w := self widthForScrollBetween:(viewOrigin y)
48194c26a46c Initial revision
claus
parents:
diff changeset
  1687
                                    and:(viewOrigin y + count).
48194c26a46c Initial revision
claus
parents:
diff changeset
  1688
        w := w min:(width - m2).
48194c26a46c Initial revision
claus
parents:
diff changeset
  1689
48194c26a46c Initial revision
claus
parents:
diff changeset
  1690
"
48194c26a46c Initial revision
claus
parents:
diff changeset
  1691
        super function:#copy.
48194c26a46c Initial revision
claus
parents:
diff changeset
  1692
        super foreground:White.
48194c26a46c Initial revision
claus
parents:
diff changeset
  1693
"
48194c26a46c Initial revision
claus
parents:
diff changeset
  1694
        self copyFrom:self x:margin y:(count + margin)
48194c26a46c Initial revision
claus
parents:
diff changeset
  1695
                         toX:margin y:margin
48194c26a46c Initial revision
claus
parents:
diff changeset
  1696
                       width:w 
48194c26a46c Initial revision
claus
parents:
diff changeset
  1697
                      height:(height - m2 - count).
48194c26a46c Initial revision
claus
parents:
diff changeset
  1698
48194c26a46c Initial revision
claus
parents:
diff changeset
  1699
        self redrawX:margin y:(height - margin - count) 
48194c26a46c Initial revision
claus
parents:
diff changeset
  1700
               width:(width - m2) height:count.
48194c26a46c Initial revision
claus
parents:
diff changeset
  1701
48194c26a46c Initial revision
claus
parents:
diff changeset
  1702
        self originChanged:(0 @ count).
48194c26a46c Initial revision
claus
parents:
diff changeset
  1703
        self waitForExpose
48194c26a46c Initial revision
claus
parents:
diff changeset
  1704
    ]
48194c26a46c Initial revision
claus
parents:
diff changeset
  1705
!
48194c26a46c Initial revision
claus
parents:
diff changeset
  1706
48194c26a46c Initial revision
claus
parents:
diff changeset
  1707
scrollDown
48194c26a46c Initial revision
claus
parents:
diff changeset
  1708
    "scroll down by some amount
48194c26a46c Initial revision
claus
parents:
diff changeset
  1709
      - question is how much is a good default here"
48194c26a46c Initial revision
claus
parents:
diff changeset
  1710
48194c26a46c Initial revision
claus
parents:
diff changeset
  1711
    self scrollDown:(device verticalPixelPerMillimeter * 20) asInteger
48194c26a46c Initial revision
claus
parents:
diff changeset
  1712
!
48194c26a46c Initial revision
claus
parents:
diff changeset
  1713
48194c26a46c Initial revision
claus
parents:
diff changeset
  1714
scrollLeft:nPixels
48194c26a46c Initial revision
claus
parents:
diff changeset
  1715
    "change origin to scroll left some pixels"
48194c26a46c Initial revision
claus
parents:
diff changeset
  1716
48194c26a46c Initial revision
claus
parents:
diff changeset
  1717
    |count "{ Class:SmallInteger }"
48194c26a46c Initial revision
claus
parents:
diff changeset
  1718
     m2    "{ Class:SmallInteger }"
48194c26a46c Initial revision
claus
parents:
diff changeset
  1719
     h     "{ Class:SmallInteger }"|
48194c26a46c Initial revision
claus
parents:
diff changeset
  1720
48194c26a46c Initial revision
claus
parents:
diff changeset
  1721
    count := nPixels.
48194c26a46c Initial revision
claus
parents:
diff changeset
  1722
    (count > viewOrigin x) ifTrue:[
48194c26a46c Initial revision
claus
parents:
diff changeset
  1723
        count := viewOrigin x
48194c26a46c Initial revision
claus
parents:
diff changeset
  1724
    ].
48194c26a46c Initial revision
claus
parents:
diff changeset
  1725
    (count <= 0) ifTrue:[^ self].
48194c26a46c Initial revision
claus
parents:
diff changeset
  1726
48194c26a46c Initial revision
claus
parents:
diff changeset
  1727
    self originWillChange.
48194c26a46c Initial revision
claus
parents:
diff changeset
  1728
    viewOrigin := (viewOrigin x - count) @ viewOrigin y.
48194c26a46c Initial revision
claus
parents:
diff changeset
  1729
48194c26a46c Initial revision
claus
parents:
diff changeset
  1730
    (count >= self innerWidth) ifTrue:[
48194c26a46c Initial revision
claus
parents:
diff changeset
  1731
        self redraw.
48194c26a46c Initial revision
claus
parents:
diff changeset
  1732
        self originChanged:(count negated @ 0)
48194c26a46c Initial revision
claus
parents:
diff changeset
  1733
    ] ifFalse:[
48194c26a46c Initial revision
claus
parents:
diff changeset
  1734
        m2 := margin * 2.
48194c26a46c Initial revision
claus
parents:
diff changeset
  1735
        h := (height - m2).
48194c26a46c Initial revision
claus
parents:
diff changeset
  1736
48194c26a46c Initial revision
claus
parents:
diff changeset
  1737
"
48194c26a46c Initial revision
claus
parents:
diff changeset
  1738
        super function:#copy.
48194c26a46c Initial revision
claus
parents:
diff changeset
  1739
        super foreground:White.
48194c26a46c Initial revision
claus
parents:
diff changeset
  1740
"
48194c26a46c Initial revision
claus
parents:
diff changeset
  1741
        self copyFrom:self x:margin y:margin
48194c26a46c Initial revision
claus
parents:
diff changeset
  1742
                         toX:(count + margin) y:margin
48194c26a46c Initial revision
claus
parents:
diff changeset
  1743
                       width:(width - m2 - count) 
48194c26a46c Initial revision
claus
parents:
diff changeset
  1744
                      height:h.
48194c26a46c Initial revision
claus
parents:
diff changeset
  1745
48194c26a46c Initial revision
claus
parents:
diff changeset
  1746
        self redrawX:margin y:margin
48194c26a46c Initial revision
claus
parents:
diff changeset
  1747
               width:count
48194c26a46c Initial revision
claus
parents:
diff changeset
  1748
              height:(height - m2).
48194c26a46c Initial revision
claus
parents:
diff changeset
  1749
48194c26a46c Initial revision
claus
parents:
diff changeset
  1750
        self originChanged:(count negated @ 0).
48194c26a46c Initial revision
claus
parents:
diff changeset
  1751
        self waitForExpose
48194c26a46c Initial revision
claus
parents:
diff changeset
  1752
    ]
48194c26a46c Initial revision
claus
parents:
diff changeset
  1753
!
48194c26a46c Initial revision
claus
parents:
diff changeset
  1754
48194c26a46c Initial revision
claus
parents:
diff changeset
  1755
scrollLeft
48194c26a46c Initial revision
claus
parents:
diff changeset
  1756
    "scroll left by some amount
48194c26a46c Initial revision
claus
parents:
diff changeset
  1757
      - question is how much is a good default here"
48194c26a46c Initial revision
claus
parents:
diff changeset
  1758
48194c26a46c Initial revision
claus
parents:
diff changeset
  1759
    self scrollLeft:(device horizontalPixelPerMillimeter * 20) asInteger
48194c26a46c Initial revision
claus
parents:
diff changeset
  1760
!
48194c26a46c Initial revision
claus
parents:
diff changeset
  1761
48194c26a46c Initial revision
claus
parents:
diff changeset
  1762
scrollRight:nPixels
48194c26a46c Initial revision
claus
parents:
diff changeset
  1763
    "change origin to scroll right some pixels"
48194c26a46c Initial revision
claus
parents:
diff changeset
  1764
48194c26a46c Initial revision
claus
parents:
diff changeset
  1765
    |count "{ Class:SmallInteger }"
48194c26a46c Initial revision
claus
parents:
diff changeset
  1766
     m2    "{ Class:SmallInteger }"
48194c26a46c Initial revision
claus
parents:
diff changeset
  1767
     h     "{ Class:SmallInteger }" 
48194c26a46c Initial revision
claus
parents:
diff changeset
  1768
     wCont "{ Class:SmallInteger }"
48194c26a46c Initial revision
claus
parents:
diff changeset
  1769
     iw    "{ Class:SmallInteger }"|
48194c26a46c Initial revision
claus
parents:
diff changeset
  1770
48194c26a46c Initial revision
claus
parents:
diff changeset
  1771
    count := nPixels.
48194c26a46c Initial revision
claus
parents:
diff changeset
  1772
    wCont := self widthOfContents.
48194c26a46c Initial revision
claus
parents:
diff changeset
  1773
    iw := self innerWidth.
48194c26a46c Initial revision
claus
parents:
diff changeset
  1774
48194c26a46c Initial revision
claus
parents:
diff changeset
  1775
    ((viewOrigin x + nPixels + iw) > wCont) ifTrue:[
48194c26a46c Initial revision
claus
parents:
diff changeset
  1776
        count := wCont - viewOrigin x - iw
48194c26a46c Initial revision
claus
parents:
diff changeset
  1777
    ].
48194c26a46c Initial revision
claus
parents:
diff changeset
  1778
    (count <= 0) ifTrue:[^ self].
48194c26a46c Initial revision
claus
parents:
diff changeset
  1779
48194c26a46c Initial revision
claus
parents:
diff changeset
  1780
    self originWillChange.
48194c26a46c Initial revision
claus
parents:
diff changeset
  1781
    viewOrigin := (viewOrigin x + count) @ viewOrigin y.
48194c26a46c Initial revision
claus
parents:
diff changeset
  1782
48194c26a46c Initial revision
claus
parents:
diff changeset
  1783
    (count >= iw) ifTrue:[
48194c26a46c Initial revision
claus
parents:
diff changeset
  1784
        self redraw.
48194c26a46c Initial revision
claus
parents:
diff changeset
  1785
        self originChanged:(count @ 0)
48194c26a46c Initial revision
claus
parents:
diff changeset
  1786
    ] ifFalse:[
48194c26a46c Initial revision
claus
parents:
diff changeset
  1787
        m2 := margin * 2.
48194c26a46c Initial revision
claus
parents:
diff changeset
  1788
        h := (height - m2).
48194c26a46c Initial revision
claus
parents:
diff changeset
  1789
48194c26a46c Initial revision
claus
parents:
diff changeset
  1790
"
48194c26a46c Initial revision
claus
parents:
diff changeset
  1791
        super function:#copy.
48194c26a46c Initial revision
claus
parents:
diff changeset
  1792
        super foreground:White.
48194c26a46c Initial revision
claus
parents:
diff changeset
  1793
"
48194c26a46c Initial revision
claus
parents:
diff changeset
  1794
        self copyFrom:self x:(count + margin) y:margin
48194c26a46c Initial revision
claus
parents:
diff changeset
  1795
                         toX:margin y:margin
48194c26a46c Initial revision
claus
parents:
diff changeset
  1796
                       width:(width - m2 - count) 
48194c26a46c Initial revision
claus
parents:
diff changeset
  1797
                      height:h.
48194c26a46c Initial revision
claus
parents:
diff changeset
  1798
48194c26a46c Initial revision
claus
parents:
diff changeset
  1799
        self redrawX:(width - margin - count) y:margin 
48194c26a46c Initial revision
claus
parents:
diff changeset
  1800
               width:count height:(height - m2).
48194c26a46c Initial revision
claus
parents:
diff changeset
  1801
48194c26a46c Initial revision
claus
parents:
diff changeset
  1802
        self originChanged:(count @ 0).
48194c26a46c Initial revision
claus
parents:
diff changeset
  1803
        self waitForExpose
48194c26a46c Initial revision
claus
parents:
diff changeset
  1804
    ]
48194c26a46c Initial revision
claus
parents:
diff changeset
  1805
!
48194c26a46c Initial revision
claus
parents:
diff changeset
  1806
48194c26a46c Initial revision
claus
parents:
diff changeset
  1807
scrollRight
48194c26a46c Initial revision
claus
parents:
diff changeset
  1808
    "scroll right by some amount
48194c26a46c Initial revision
claus
parents:
diff changeset
  1809
      - question is how much is a good default here"
48194c26a46c Initial revision
claus
parents:
diff changeset
  1810
48194c26a46c Initial revision
claus
parents:
diff changeset
  1811
    self scrollRight:(device horizontalPixelPerMillimeter * 20) asInteger
48194c26a46c Initial revision
claus
parents:
diff changeset
  1812
! !
48194c26a46c Initial revision
claus
parents:
diff changeset
  1813
48194c26a46c Initial revision
claus
parents:
diff changeset
  1814
!View methodsFor:'private'!
48194c26a46c Initial revision
claus
parents:
diff changeset
  1815
48194c26a46c Initial revision
claus
parents:
diff changeset
  1816
pixelExtent:extent
48194c26a46c Initial revision
claus
parents:
diff changeset
  1817
    "set the views extent in pixels"
48194c26a46c Initial revision
claus
parents:
diff changeset
  1818
15
ba1100f2ca03 fixed resize (smaller) border repaint bug
claus
parents: 12
diff changeset
  1819
    self pixelOrigin:(left @ top) extent:extent
ba1100f2ca03 fixed resize (smaller) border repaint bug
claus
parents: 12
diff changeset
  1820
!
ba1100f2ca03 fixed resize (smaller) border repaint bug
claus
parents: 12
diff changeset
  1821
ba1100f2ca03 fixed resize (smaller) border repaint bug
claus
parents: 12
diff changeset
  1822
XXpixelExtent:extent
ba1100f2ca03 fixed resize (smaller) border repaint bug
claus
parents: 12
diff changeset
  1823
    "set the views extent in pixels"
ba1100f2ca03 fixed resize (smaller) border repaint bug
claus
parents: 12
diff changeset
  1824
0
48194c26a46c Initial revision
claus
parents:
diff changeset
  1825
    |newWidth newHeight how mustRedrawBottomEdge mustRedrawRightEdge|
48194c26a46c Initial revision
claus
parents:
diff changeset
  1826
48194c26a46c Initial revision
claus
parents:
diff changeset
  1827
    newWidth := extent x.
48194c26a46c Initial revision
claus
parents:
diff changeset
  1828
    newHeight := extent y.
48194c26a46c Initial revision
claus
parents:
diff changeset
  1829
    ((newWidth ~~ width) or:[newHeight ~~ height]) ifTrue:[
48194c26a46c Initial revision
claus
parents:
diff changeset
  1830
        "shown "drawableId notNil"" ifTrue:[    "23-feb-93"
48194c26a46c Initial revision
claus
parents:
diff changeset
  1831
            ((newHeight <= height) and:[newWidth <= width]) ifTrue:[
48194c26a46c Initial revision
claus
parents:
diff changeset
  1832
                how := #smaller
48194c26a46c Initial revision
claus
parents:
diff changeset
  1833
            ].
48194c26a46c Initial revision
claus
parents:
diff changeset
  1834
48194c26a46c Initial revision
claus
parents:
diff changeset
  1835
            mustRedrawBottomEdge := (level ~~ 0) and:[newHeight < height].
48194c26a46c Initial revision
claus
parents:
diff changeset
  1836
            mustRedrawRightEdge := (level ~~ 0) and:[newWidth < width].
48194c26a46c Initial revision
claus
parents:
diff changeset
  1837
48194c26a46c Initial revision
claus
parents:
diff changeset
  1838
            (level ~~ 0) ifTrue:[
48194c26a46c Initial revision
claus
parents:
diff changeset
  1839
                "clear the old edges"
48194c26a46c Initial revision
claus
parents:
diff changeset
  1840
48194c26a46c Initial revision
claus
parents:
diff changeset
  1841
                newWidth > width ifTrue:[
48194c26a46c Initial revision
claus
parents:
diff changeset
  1842
                    self clipRect:nil.
48194c26a46c Initial revision
claus
parents:
diff changeset
  1843
                    self paint:viewBackground.
48194c26a46c Initial revision
claus
parents:
diff changeset
  1844
                    self fillRectangleX:(width - margin)
48194c26a46c Initial revision
claus
parents:
diff changeset
  1845
                                      y:0
48194c26a46c Initial revision
claus
parents:
diff changeset
  1846
                                  width:margin
48194c26a46c Initial revision
claus
parents:
diff changeset
  1847
                                 height:height
48194c26a46c Initial revision
claus
parents:
diff changeset
  1848
                ].
48194c26a46c Initial revision
claus
parents:
diff changeset
  1849
                newHeight > height ifTrue:[
48194c26a46c Initial revision
claus
parents:
diff changeset
  1850
                    self clipRect:nil.
48194c26a46c Initial revision
claus
parents:
diff changeset
  1851
                    self paint:viewBackground.
48194c26a46c Initial revision
claus
parents:
diff changeset
  1852
                    self fillRectangleX:0
48194c26a46c Initial revision
claus
parents:
diff changeset
  1853
                                      y:(height - margin)
48194c26a46c Initial revision
claus
parents:
diff changeset
  1854
                                  width:width
48194c26a46c Initial revision
claus
parents:
diff changeset
  1855
                                 height:margin
48194c26a46c Initial revision
claus
parents:
diff changeset
  1856
                ]
48194c26a46c Initial revision
claus
parents:
diff changeset
  1857
            ]
48194c26a46c Initial revision
claus
parents:
diff changeset
  1858
        ].
48194c26a46c Initial revision
claus
parents:
diff changeset
  1859
48194c26a46c Initial revision
claus
parents:
diff changeset
  1860
        width := newWidth.
48194c26a46c Initial revision
claus
parents:
diff changeset
  1861
        height := newHeight.
48194c26a46c Initial revision
claus
parents:
diff changeset
  1862
48194c26a46c Initial revision
claus
parents:
diff changeset
  1863
        "shown "drawableId notNil"" ifTrue:[       "23-feb-93"
48194c26a46c Initial revision
claus
parents:
diff changeset
  1864
            self setInnerClip.
48194c26a46c Initial revision
claus
parents:
diff changeset
  1865
48194c26a46c Initial revision
claus
parents:
diff changeset
  1866
            (how == #smaller) ifTrue:[
48194c26a46c Initial revision
claus
parents:
diff changeset
  1867
                "if view becomes smaller, send sizeChanged first"
12
9f0995fac1fa *** empty log message ***
claus
parents: 6
diff changeset
  1868
                self sizeChanged:how
0
48194c26a46c Initial revision
claus
parents:
diff changeset
  1869
            ].
48194c26a46c Initial revision
claus
parents:
diff changeset
  1870
48194c26a46c Initial revision
claus
parents:
diff changeset
  1871
            "have to tell X, when extent of view is changed"
48194c26a46c Initial revision
claus
parents:
diff changeset
  1872
            device resizeWindow:drawableId width:width height:height.
48194c26a46c Initial revision
claus
parents:
diff changeset
  1873
48194c26a46c Initial revision
claus
parents:
diff changeset
  1874
            "if view becomes bigger, send sizeChanged after"
48194c26a46c Initial revision
claus
parents:
diff changeset
  1875
            (how ~~ #smaller) ifTrue:[
12
9f0995fac1fa *** empty log message ***
claus
parents: 6
diff changeset
  1876
                self sizeChanged:how
0
48194c26a46c Initial revision
claus
parents:
diff changeset
  1877
            ].
48194c26a46c Initial revision
claus
parents:
diff changeset
  1878
48194c26a46c Initial revision
claus
parents:
diff changeset
  1879
            (mustRedrawBottomEdge or:[mustRedrawRightEdge]) ifTrue:[
48194c26a46c Initial revision
claus
parents:
diff changeset
  1880
                self clipRect:nil.
48194c26a46c Initial revision
claus
parents:
diff changeset
  1881
                mustRedrawBottomEdge ifTrue:[
48194c26a46c Initial revision
claus
parents:
diff changeset
  1882
                    self drawBottomEdge
48194c26a46c Initial revision
claus
parents:
diff changeset
  1883
                ].
48194c26a46c Initial revision
claus
parents:
diff changeset
  1884
                mustRedrawRightEdge ifTrue:[
48194c26a46c Initial revision
claus
parents:
diff changeset
  1885
                    self drawRightEdge
48194c26a46c Initial revision
claus
parents:
diff changeset
  1886
                ].
48194c26a46c Initial revision
claus
parents:
diff changeset
  1887
                self clipRect:innerClipRect
48194c26a46c Initial revision
claus
parents:
diff changeset
  1888
            ]
48194c26a46c Initial revision
claus
parents:
diff changeset
  1889
        ] ifFalse:[
48194c26a46c Initial revision
claus
parents:
diff changeset
  1890
            "otherwise memorize the need for a sizeChanged message"
48194c26a46c Initial revision
claus
parents:
diff changeset
  1891
            extentChanged := true
48194c26a46c Initial revision
claus
parents:
diff changeset
  1892
        ]
48194c26a46c Initial revision
claus
parents:
diff changeset
  1893
    ]
48194c26a46c Initial revision
claus
parents:
diff changeset
  1894
!
48194c26a46c Initial revision
claus
parents:
diff changeset
  1895
48194c26a46c Initial revision
claus
parents:
diff changeset
  1896
pixelOrigin:origin
48194c26a46c Initial revision
claus
parents:
diff changeset
  1897
    "set the views origin in pixels"
48194c26a46c Initial revision
claus
parents:
diff changeset
  1898
48194c26a46c Initial revision
claus
parents:
diff changeset
  1899
    |newLeft newTop|
48194c26a46c Initial revision
claus
parents:
diff changeset
  1900
48194c26a46c Initial revision
claus
parents:
diff changeset
  1901
    newLeft := origin x.
48194c26a46c Initial revision
claus
parents:
diff changeset
  1902
    newTop := origin y.
48194c26a46c Initial revision
claus
parents:
diff changeset
  1903
    ((newTop ~~ top) or:[newLeft ~~ left]) ifTrue:[
48194c26a46c Initial revision
claus
parents:
diff changeset
  1904
        top := newTop.
48194c26a46c Initial revision
claus
parents:
diff changeset
  1905
        left := newLeft.
48194c26a46c Initial revision
claus
parents:
diff changeset
  1906
        drawableId notNil ifTrue:[
48194c26a46c Initial revision
claus
parents:
diff changeset
  1907
            "have to tell X, when origin of view is changed"
48194c26a46c Initial revision
claus
parents:
diff changeset
  1908
            device moveWindow:drawableId x:left y:top
48194c26a46c Initial revision
claus
parents:
diff changeset
  1909
        ].
48194c26a46c Initial revision
claus
parents:
diff changeset
  1910
        realized ifFalse:[
48194c26a46c Initial revision
claus
parents:
diff changeset
  1911
            originChanged := true
48194c26a46c Initial revision
claus
parents:
diff changeset
  1912
        ]
48194c26a46c Initial revision
claus
parents:
diff changeset
  1913
    ]
48194c26a46c Initial revision
claus
parents:
diff changeset
  1914
!
48194c26a46c Initial revision
claus
parents:
diff changeset
  1915
48194c26a46c Initial revision
claus
parents:
diff changeset
  1916
pixelCorner:corner
48194c26a46c Initial revision
claus
parents:
diff changeset
  1917
    "set the views corner in pixels"
48194c26a46c Initial revision
claus
parents:
diff changeset
  1918
48194c26a46c Initial revision
claus
parents:
diff changeset
  1919
    |newWidth newHeight|
48194c26a46c Initial revision
claus
parents:
diff changeset
  1920
48194c26a46c Initial revision
claus
parents:
diff changeset
  1921
    newWidth := corner x - left.
48194c26a46c Initial revision
claus
parents:
diff changeset
  1922
    newHeight := corner y - top.
15
ba1100f2ca03 fixed resize (smaller) border repaint bug
claus
parents: 12
diff changeset
  1923
" old:
0
48194c26a46c Initial revision
claus
parents:
diff changeset
  1924
    self pixelExtent:(newWidth @ newHeight)
15
ba1100f2ca03 fixed resize (smaller) border repaint bug
claus
parents: 12
diff changeset
  1925
"
ba1100f2ca03 fixed resize (smaller) border repaint bug
claus
parents: 12
diff changeset
  1926
    self pixelOrigin:(left @ top) extent:(newWidth @ newHeight)
0
48194c26a46c Initial revision
claus
parents:
diff changeset
  1927
!
48194c26a46c Initial revision
claus
parents:
diff changeset
  1928
48194c26a46c Initial revision
claus
parents:
diff changeset
  1929
pixelOrigin:origin corner:corner
48194c26a46c Initial revision
claus
parents:
diff changeset
  1930
    "set the views origin and extent in pixels"
48194c26a46c Initial revision
claus
parents:
diff changeset
  1931
48194c26a46c Initial revision
claus
parents:
diff changeset
  1932
    |newWidth newHeight|
48194c26a46c Initial revision
claus
parents:
diff changeset
  1933
48194c26a46c Initial revision
claus
parents:
diff changeset
  1934
    newWidth := corner x - origin x.
48194c26a46c Initial revision
claus
parents:
diff changeset
  1935
    newHeight := corner y - origin y.
48194c26a46c Initial revision
claus
parents:
diff changeset
  1936
    self pixelOrigin:origin extent:(newWidth @ newHeight)
48194c26a46c Initial revision
claus
parents:
diff changeset
  1937
!
48194c26a46c Initial revision
claus
parents:
diff changeset
  1938
48194c26a46c Initial revision
claus
parents:
diff changeset
  1939
pixelOrigin:origin extent:extent
48194c26a46c Initial revision
claus
parents:
diff changeset
  1940
    "set the views origin and extent in pixels"
48194c26a46c Initial revision
claus
parents:
diff changeset
  1941
15
ba1100f2ca03 fixed resize (smaller) border repaint bug
claus
parents: 12
diff changeset
  1942
    |newLeft newTop newWidth newHeight how 
ba1100f2ca03 fixed resize (smaller) border repaint bug
claus
parents: 12
diff changeset
  1943
     mustRedrawBottomEdge mustRedrawRightEdge mustRepaintBottom
ba1100f2ca03 fixed resize (smaller) border repaint bug
claus
parents: 12
diff changeset
  1944
     mustRepaintRight sameOrigin oldWidth oldHeight|
0
48194c26a46c Initial revision
claus
parents:
diff changeset
  1945
48194c26a46c Initial revision
claus
parents:
diff changeset
  1946
    newLeft := origin x.
48194c26a46c Initial revision
claus
parents:
diff changeset
  1947
    newTop := origin y.
15
ba1100f2ca03 fixed resize (smaller) border repaint bug
claus
parents: 12
diff changeset
  1948
    sameOrigin := ((newTop == top) and:[newLeft == left]).
ba1100f2ca03 fixed resize (smaller) border repaint bug
claus
parents: 12
diff changeset
  1949
0
48194c26a46c Initial revision
claus
parents:
diff changeset
  1950
    newWidth := extent x.
48194c26a46c Initial revision
claus
parents:
diff changeset
  1951
    newHeight := extent y.
48194c26a46c Initial revision
claus
parents:
diff changeset
  1952
    ((newWidth == width) and:[newHeight == height]) ifTrue:[
15
ba1100f2ca03 fixed resize (smaller) border repaint bug
claus
parents: 12
diff changeset
  1953
        sameOrigin ifTrue:[^ self].
0
48194c26a46c Initial revision
claus
parents:
diff changeset
  1954
        ^ self pixelOrigin:origin
48194c26a46c Initial revision
claus
parents:
diff changeset
  1955
    ].
48194c26a46c Initial revision
claus
parents:
diff changeset
  1956
    top := newTop.
48194c26a46c Initial revision
claus
parents:
diff changeset
  1957
    left := newLeft.
48194c26a46c Initial revision
claus
parents:
diff changeset
  1958
48194c26a46c Initial revision
claus
parents:
diff changeset
  1959
    mustRedrawBottomEdge := (level ~~ 0) and:[newHeight < height].
48194c26a46c Initial revision
claus
parents:
diff changeset
  1960
    mustRedrawRightEdge := (level ~~ 0) and:[newWidth < width].
48194c26a46c Initial revision
claus
parents:
diff changeset
  1961
48194c26a46c Initial revision
claus
parents:
diff changeset
  1962
    ((newHeight <= height) and:[newWidth <= width]) ifTrue:[
48194c26a46c Initial revision
claus
parents:
diff changeset
  1963
        how := #smaller
48194c26a46c Initial revision
claus
parents:
diff changeset
  1964
    ].
48194c26a46c Initial revision
claus
parents:
diff changeset
  1965
48194c26a46c Initial revision
claus
parents:
diff changeset
  1966
    "shown "drawableId notNil"" ifTrue:[        "23-feb-93"
15
ba1100f2ca03 fixed resize (smaller) border repaint bug
claus
parents: 12
diff changeset
  1967
        mustRepaintRight := false.
ba1100f2ca03 fixed resize (smaller) border repaint bug
claus
parents: 12
diff changeset
  1968
        mustRepaintBottom := false.
0
48194c26a46c Initial revision
claus
parents:
diff changeset
  1969
        (level ~~ 0) ifTrue:[
48194c26a46c Initial revision
claus
parents:
diff changeset
  1970
            "clear the old edges"
48194c26a46c Initial revision
claus
parents:
diff changeset
  1971
48194c26a46c Initial revision
claus
parents:
diff changeset
  1972
            newWidth > width ifTrue:[
48194c26a46c Initial revision
claus
parents:
diff changeset
  1973
                self clipRect:nil.
48194c26a46c Initial revision
claus
parents:
diff changeset
  1974
                self paint:viewBackground.
48194c26a46c Initial revision
claus
parents:
diff changeset
  1975
                self fillRectangleX:(width - margin)
48194c26a46c Initial revision
claus
parents:
diff changeset
  1976
                                  y:0
48194c26a46c Initial revision
claus
parents:
diff changeset
  1977
                              width:margin
15
ba1100f2ca03 fixed resize (smaller) border repaint bug
claus
parents: 12
diff changeset
  1978
                             height:height.
ba1100f2ca03 fixed resize (smaller) border repaint bug
claus
parents: 12
diff changeset
  1979
                mustRepaintRight := true.
ba1100f2ca03 fixed resize (smaller) border repaint bug
claus
parents: 12
diff changeset
  1980
                oldWidth := width
0
48194c26a46c Initial revision
claus
parents:
diff changeset
  1981
            ].
48194c26a46c Initial revision
claus
parents:
diff changeset
  1982
            newHeight > height ifTrue:[
48194c26a46c Initial revision
claus
parents:
diff changeset
  1983
                self clipRect:nil.
48194c26a46c Initial revision
claus
parents:
diff changeset
  1984
                self paint:viewBackground.
48194c26a46c Initial revision
claus
parents:
diff changeset
  1985
                self fillRectangleX:0
48194c26a46c Initial revision
claus
parents:
diff changeset
  1986
                                  y:(height - margin)
48194c26a46c Initial revision
claus
parents:
diff changeset
  1987
                              width:width
15
ba1100f2ca03 fixed resize (smaller) border repaint bug
claus
parents: 12
diff changeset
  1988
                             height:margin.
ba1100f2ca03 fixed resize (smaller) border repaint bug
claus
parents: 12
diff changeset
  1989
                mustRepaintBottom := true.
ba1100f2ca03 fixed resize (smaller) border repaint bug
claus
parents: 12
diff changeset
  1990
                oldHeight := height
0
48194c26a46c Initial revision
claus
parents:
diff changeset
  1991
            ]
48194c26a46c Initial revision
claus
parents:
diff changeset
  1992
        ].
48194c26a46c Initial revision
claus
parents:
diff changeset
  1993
15
ba1100f2ca03 fixed resize (smaller) border repaint bug
claus
parents: 12
diff changeset
  1994
        width := newWidth.
ba1100f2ca03 fixed resize (smaller) border repaint bug
claus
parents: 12
diff changeset
  1995
        height := newHeight.
ba1100f2ca03 fixed resize (smaller) border repaint bug
claus
parents: 12
diff changeset
  1996
0
48194c26a46c Initial revision
claus
parents:
diff changeset
  1997
        self setInnerClip.
48194c26a46c Initial revision
claus
parents:
diff changeset
  1998
48194c26a46c Initial revision
claus
parents:
diff changeset
  1999
        "if view becomes smaller, send sizeChanged first"
48194c26a46c Initial revision
claus
parents:
diff changeset
  2000
        (how == #smaller) ifTrue:[
12
9f0995fac1fa *** empty log message ***
claus
parents: 6
diff changeset
  2001
            self sizeChanged:how
0
48194c26a46c Initial revision
claus
parents:
diff changeset
  2002
        ].
48194c26a46c Initial revision
claus
parents:
diff changeset
  2003
48194c26a46c Initial revision
claus
parents:
diff changeset
  2004
        "have to tell X, when extent of view is changed"
15
ba1100f2ca03 fixed resize (smaller) border repaint bug
claus
parents: 12
diff changeset
  2005
        sameOrigin ifTrue:[
0
48194c26a46c Initial revision
claus
parents:
diff changeset
  2006
            device resizeWindow:drawableId width:width height:height.
48194c26a46c Initial revision
claus
parents:
diff changeset
  2007
        ] ifFalse:[
15
ba1100f2ca03 fixed resize (smaller) border repaint bug
claus
parents: 12
diff changeset
  2008
            "claus: some xservers seem to do better when resizing
ba1100f2ca03 fixed resize (smaller) border repaint bug
claus
parents: 12
diff changeset
  2009
             first ...."
ba1100f2ca03 fixed resize (smaller) border repaint bug
claus
parents: 12
diff changeset
  2010
" 
ba1100f2ca03 fixed resize (smaller) border repaint bug
claus
parents: 12
diff changeset
  2011
            (how == #smaller) ifTrue:[
ba1100f2ca03 fixed resize (smaller) border repaint bug
claus
parents: 12
diff changeset
  2012
                device resizeWindow:drawableId width:width height:height.
ba1100f2ca03 fixed resize (smaller) border repaint bug
claus
parents: 12
diff changeset
  2013
                device moveWindow:drawableId x:left y:top
ba1100f2ca03 fixed resize (smaller) border repaint bug
claus
parents: 12
diff changeset
  2014
            ] ifFalse:[
ba1100f2ca03 fixed resize (smaller) border repaint bug
claus
parents: 12
diff changeset
  2015
                device moveResizeWindow:drawableId x:left y:top width:width height:height
ba1100f2ca03 fixed resize (smaller) border repaint bug
claus
parents: 12
diff changeset
  2016
            ].
ba1100f2ca03 fixed resize (smaller) border repaint bug
claus
parents: 12
diff changeset
  2017
" 
ba1100f2ca03 fixed resize (smaller) border repaint bug
claus
parents: 12
diff changeset
  2018
            device moveResizeWindow:drawableId x:left y:top
ba1100f2ca03 fixed resize (smaller) border repaint bug
claus
parents: 12
diff changeset
  2019
                                           width:width height:height.
ba1100f2ca03 fixed resize (smaller) border repaint bug
claus
parents: 12
diff changeset
  2020
" "
0
48194c26a46c Initial revision
claus
parents:
diff changeset
  2021
        ].
48194c26a46c Initial revision
claus
parents:
diff changeset
  2022
48194c26a46c Initial revision
claus
parents:
diff changeset
  2023
        "if view becomes bigger, send sizeChanged after"
48194c26a46c Initial revision
claus
parents:
diff changeset
  2024
        (how ~~ #smaller) ifTrue:[
12
9f0995fac1fa *** empty log message ***
claus
parents: 6
diff changeset
  2025
            self sizeChanged:how
0
48194c26a46c Initial revision
claus
parents:
diff changeset
  2026
        ].
15
ba1100f2ca03 fixed resize (smaller) border repaint bug
claus
parents: 12
diff changeset
  2027
0
48194c26a46c Initial revision
claus
parents:
diff changeset
  2028
        (mustRedrawBottomEdge or:[mustRedrawRightEdge]) ifTrue:[
48194c26a46c Initial revision
claus
parents:
diff changeset
  2029
            self clipRect:nil.
48194c26a46c Initial revision
claus
parents:
diff changeset
  2030
            mustRedrawBottomEdge ifTrue:[
48194c26a46c Initial revision
claus
parents:
diff changeset
  2031
                self drawBottomEdge
48194c26a46c Initial revision
claus
parents:
diff changeset
  2032
            ].
48194c26a46c Initial revision
claus
parents:
diff changeset
  2033
            mustRedrawRightEdge ifTrue:[
48194c26a46c Initial revision
claus
parents:
diff changeset
  2034
                self drawRightEdge
48194c26a46c Initial revision
claus
parents:
diff changeset
  2035
            ].
48194c26a46c Initial revision
claus
parents:
diff changeset
  2036
            self clipRect:innerClipRect
15
ba1100f2ca03 fixed resize (smaller) border repaint bug
claus
parents: 12
diff changeset
  2037
        ].
ba1100f2ca03 fixed resize (smaller) border repaint bug
claus
parents: 12
diff changeset
  2038
        mustRepaintRight ifTrue:[
ba1100f2ca03 fixed resize (smaller) border repaint bug
claus
parents: 12
diff changeset
  2039
            self redrawX:(oldWidth - margin)
ba1100f2ca03 fixed resize (smaller) border repaint bug
claus
parents: 12
diff changeset
  2040
                       y:0
ba1100f2ca03 fixed resize (smaller) border repaint bug
claus
parents: 12
diff changeset
  2041
                   width:margin
ba1100f2ca03 fixed resize (smaller) border repaint bug
claus
parents: 12
diff changeset
  2042
                  height:height.
ba1100f2ca03 fixed resize (smaller) border repaint bug
claus
parents: 12
diff changeset
  2043
        ].
ba1100f2ca03 fixed resize (smaller) border repaint bug
claus
parents: 12
diff changeset
  2044
        mustRepaintBottom ifTrue:[
ba1100f2ca03 fixed resize (smaller) border repaint bug
claus
parents: 12
diff changeset
  2045
            self redrawX:0
ba1100f2ca03 fixed resize (smaller) border repaint bug
claus
parents: 12
diff changeset
  2046
                       y:(oldHeight - margin)
ba1100f2ca03 fixed resize (smaller) border repaint bug
claus
parents: 12
diff changeset
  2047
                   width:width
ba1100f2ca03 fixed resize (smaller) border repaint bug
claus
parents: 12
diff changeset
  2048
                  height:margin.
ba1100f2ca03 fixed resize (smaller) border repaint bug
claus
parents: 12
diff changeset
  2049
        ].
0
48194c26a46c Initial revision
claus
parents:
diff changeset
  2050
    ] ifFalse:[
48194c26a46c Initial revision
claus
parents:
diff changeset
  2051
        "otherwise memorize the need for a sizeChanged message"
15
ba1100f2ca03 fixed resize (smaller) border repaint bug
claus
parents: 12
diff changeset
  2052
ba1100f2ca03 fixed resize (smaller) border repaint bug
claus
parents: 12
diff changeset
  2053
        width := newWidth.
ba1100f2ca03 fixed resize (smaller) border repaint bug
claus
parents: 12
diff changeset
  2054
        height := newHeight.
ba1100f2ca03 fixed resize (smaller) border repaint bug
claus
parents: 12
diff changeset
  2055
        sameOrigin ifFalse:[
ba1100f2ca03 fixed resize (smaller) border repaint bug
claus
parents: 12
diff changeset
  2056
            originChanged := true.
ba1100f2ca03 fixed resize (smaller) border repaint bug
claus
parents: 12
diff changeset
  2057
        ].
0
48194c26a46c Initial revision
claus
parents:
diff changeset
  2058
        extentChanged := true
48194c26a46c Initial revision
claus
parents:
diff changeset
  2059
    ]
48194c26a46c Initial revision
claus
parents:
diff changeset
  2060
!
48194c26a46c Initial revision
claus
parents:
diff changeset
  2061
48194c26a46c Initial revision
claus
parents:
diff changeset
  2062
pointFromRelativePoint:relativePoint
48194c26a46c Initial revision
claus
parents:
diff changeset
  2063
    "given relative point, compute absolute point (in pixels)"
48194c26a46c Initial revision
claus
parents:
diff changeset
  2064
48194c26a46c Initial revision
claus
parents:
diff changeset
  2065
    |newX newY rel inRect|
48194c26a46c Initial revision
claus
parents:
diff changeset
  2066
48194c26a46c Initial revision
claus
parents:
diff changeset
  2067
    superView isNil ifTrue:[^ nil].
48194c26a46c Initial revision
claus
parents:
diff changeset
  2068
    inRect := superView viewRectangle.
48194c26a46c Initial revision
claus
parents:
diff changeset
  2069
48194c26a46c Initial revision
claus
parents:
diff changeset
  2070
    rel := relativePoint x.
48194c26a46c Initial revision
claus
parents:
diff changeset
  2071
    (rel isMemberOf:Float) ifTrue:[
48194c26a46c Initial revision
claus
parents:
diff changeset
  2072
        newX := (rel * (inRect width + (2 * borderWidth))) asInteger + inRect left
48194c26a46c Initial revision
claus
parents:
diff changeset
  2073
    ] ifFalse:[
48194c26a46c Initial revision
claus
parents:
diff changeset
  2074
        newX := rel
48194c26a46c Initial revision
claus
parents:
diff changeset
  2075
    ].
48194c26a46c Initial revision
claus
parents:
diff changeset
  2076
    rel := relativePoint y.
48194c26a46c Initial revision
claus
parents:
diff changeset
  2077
    (rel isMemberOf:Float) ifTrue:[
48194c26a46c Initial revision
claus
parents:
diff changeset
  2078
        newY := (rel * (inRect height + (2 * borderWidth))) asInteger + inRect top
48194c26a46c Initial revision
claus
parents:
diff changeset
  2079
    ] ifFalse:[
48194c26a46c Initial revision
claus
parents:
diff changeset
  2080
        newY := rel
48194c26a46c Initial revision
claus
parents:
diff changeset
  2081
    ].
48194c26a46c Initial revision
claus
parents:
diff changeset
  2082
    ^ (newX @ newY)
48194c26a46c Initial revision
claus
parents:
diff changeset
  2083
!
48194c26a46c Initial revision
claus
parents:
diff changeset
  2084
48194c26a46c Initial revision
claus
parents:
diff changeset
  2085
originFromRelativeOrigin
48194c26a46c Initial revision
claus
parents:
diff changeset
  2086
    "compute pixel origin from relativeOrigin"
48194c26a46c Initial revision
claus
parents:
diff changeset
  2087
48194c26a46c Initial revision
claus
parents:
diff changeset
  2088
    |newOrigin newX newY rel inRect bw2|
48194c26a46c Initial revision
claus
parents:
diff changeset
  2089
48194c26a46c Initial revision
claus
parents:
diff changeset
  2090
    superView isNil ifTrue:[^ nil].
48194c26a46c Initial revision
claus
parents:
diff changeset
  2091
48194c26a46c Initial revision
claus
parents:
diff changeset
  2092
    inRect := superView viewRectangle.
48194c26a46c Initial revision
claus
parents:
diff changeset
  2093
    bw2 := borderWidth * 2.
48194c26a46c Initial revision
claus
parents:
diff changeset
  2094
    rel := relativeOrigin x.
48194c26a46c Initial revision
claus
parents:
diff changeset
  2095
    (rel isMemberOf:Float) ifTrue:[
2
b35336ab0de3 *** empty log message ***
claus
parents: 0
diff changeset
  2096
        newX := (rel * (inRect width + borderWidth "bw2")) asInteger + inRect left
0
48194c26a46c Initial revision
claus
parents:
diff changeset
  2097
    ] ifFalse:[
48194c26a46c Initial revision
claus
parents:
diff changeset
  2098
        newX := rel
48194c26a46c Initial revision
claus
parents:
diff changeset
  2099
    ].
48194c26a46c Initial revision
claus
parents:
diff changeset
  2100
    rel := relativeOrigin y.
48194c26a46c Initial revision
claus
parents:
diff changeset
  2101
    (rel isMemberOf:Float) ifTrue:[
2
b35336ab0de3 *** empty log message ***
claus
parents: 0
diff changeset
  2102
        newY := (rel * (inRect height + borderWidth "bw2")) asInteger + inRect top
0
48194c26a46c Initial revision
claus
parents:
diff changeset
  2103
    ] ifFalse:[
48194c26a46c Initial revision
claus
parents:
diff changeset
  2104
        newY := rel
48194c26a46c Initial revision
claus
parents:
diff changeset
  2105
    ].
48194c26a46c Initial revision
claus
parents:
diff changeset
  2106
    newOrigin :=  (newX @ newY).
48194c26a46c Initial revision
claus
parents:
diff changeset
  2107
48194c26a46c Initial revision
claus
parents:
diff changeset
  2108
    (borderWidth ~~ 0) ifTrue:[
48194c26a46c Initial revision
claus
parents:
diff changeset
  2109
        (relativeOrigin x isMemberOf:Float) ifTrue:[
48194c26a46c Initial revision
claus
parents:
diff changeset
  2110
            newOrigin x:(newOrigin x - borderWidth)
48194c26a46c Initial revision
claus
parents:
diff changeset
  2111
        ].
48194c26a46c Initial revision
claus
parents:
diff changeset
  2112
        (relativeOrigin y isMemberOf:Float) ifTrue:[
48194c26a46c Initial revision
claus
parents:
diff changeset
  2113
            newOrigin y:(newOrigin y - borderWidth)
48194c26a46c Initial revision
claus
parents:
diff changeset
  2114
        ]
48194c26a46c Initial revision
claus
parents:
diff changeset
  2115
    ].
48194c26a46c Initial revision
claus
parents:
diff changeset
  2116
    ^ newOrigin
48194c26a46c Initial revision
claus
parents:
diff changeset
  2117
!
48194c26a46c Initial revision
claus
parents:
diff changeset
  2118
48194c26a46c Initial revision
claus
parents:
diff changeset
  2119
cornerFromRelativeCorner
48194c26a46c Initial revision
claus
parents:
diff changeset
  2120
    "compute pixel corner from relativeCorner"
48194c26a46c Initial revision
claus
parents:
diff changeset
  2121
48194c26a46c Initial revision
claus
parents:
diff changeset
  2122
    |newCorner newX newY rel inRect bw2|
48194c26a46c Initial revision
claus
parents:
diff changeset
  2123
48194c26a46c Initial revision
claus
parents:
diff changeset
  2124
    superView isNil ifTrue:[^ nil].
48194c26a46c Initial revision
claus
parents:
diff changeset
  2125
48194c26a46c Initial revision
claus
parents:
diff changeset
  2126
    inRect := superView viewRectangle.
48194c26a46c Initial revision
claus
parents:
diff changeset
  2127
    bw2 := borderWidth * 2.
48194c26a46c Initial revision
claus
parents:
diff changeset
  2128
    rel := relativeCorner x.
48194c26a46c Initial revision
claus
parents:
diff changeset
  2129
    (rel isMemberOf:Float) ifTrue:[
48194c26a46c Initial revision
claus
parents:
diff changeset
  2130
        newX := (rel * (inRect width" + bw2")) asInteger "+ inRect left"
48194c26a46c Initial revision
claus
parents:
diff changeset
  2131
    ] ifFalse:[
48194c26a46c Initial revision
claus
parents:
diff changeset
  2132
        newX := rel
48194c26a46c Initial revision
claus
parents:
diff changeset
  2133
    ].
48194c26a46c Initial revision
claus
parents:
diff changeset
  2134
    rel := relativeCorner y.
48194c26a46c Initial revision
claus
parents:
diff changeset
  2135
    (rel isMemberOf:Float) ifTrue:[
48194c26a46c Initial revision
claus
parents:
diff changeset
  2136
        newY := (rel * (inRect height" + bw2")) asInteger "+ inRect top"
48194c26a46c Initial revision
claus
parents:
diff changeset
  2137
    ] ifFalse:[
48194c26a46c Initial revision
claus
parents:
diff changeset
  2138
        newY := rel
48194c26a46c Initial revision
claus
parents:
diff changeset
  2139
    ].
48194c26a46c Initial revision
claus
parents:
diff changeset
  2140
    newCorner :=  (newX @ newY).
48194c26a46c Initial revision
claus
parents:
diff changeset
  2141
48194c26a46c Initial revision
claus
parents:
diff changeset
  2142
    (borderWidth ~~ 0) ifTrue:[
48194c26a46c Initial revision
claus
parents:
diff changeset
  2143
        (relativeCorner x isMemberOf:Float) ifTrue:[
48194c26a46c Initial revision
claus
parents:
diff changeset
  2144
            newCorner x:(newCorner x - borderWidth)
48194c26a46c Initial revision
claus
parents:
diff changeset
  2145
        ].
48194c26a46c Initial revision
claus
parents:
diff changeset
  2146
        (relativeCorner y isMemberOf:Float) ifTrue:[
48194c26a46c Initial revision
claus
parents:
diff changeset
  2147
            newCorner y:(newCorner y - borderWidth)
48194c26a46c Initial revision
claus
parents:
diff changeset
  2148
        ]
48194c26a46c Initial revision
claus
parents:
diff changeset
  2149
    ].
48194c26a46c Initial revision
claus
parents:
diff changeset
  2150
    ^ newCorner
48194c26a46c Initial revision
claus
parents:
diff changeset
  2151
!
48194c26a46c Initial revision
claus
parents:
diff changeset
  2152
48194c26a46c Initial revision
claus
parents:
diff changeset
  2153
extentFromRelativeExtent
48194c26a46c Initial revision
claus
parents:
diff changeset
  2154
    "compute pixel extent from relativeExtent"
48194c26a46c Initial revision
claus
parents:
diff changeset
  2155
48194c26a46c Initial revision
claus
parents:
diff changeset
  2156
    |newExtent newX newY rel inRect bw2|
48194c26a46c Initial revision
claus
parents:
diff changeset
  2157
48194c26a46c Initial revision
claus
parents:
diff changeset
  2158
    superView isNil ifTrue:[^ nil].
48194c26a46c Initial revision
claus
parents:
diff changeset
  2159
48194c26a46c Initial revision
claus
parents:
diff changeset
  2160
    inRect := superView viewRectangle.
48194c26a46c Initial revision
claus
parents:
diff changeset
  2161
    bw2 := borderWidth * 2.
48194c26a46c Initial revision
claus
parents:
diff changeset
  2162
    rel := relativeExtent x.
48194c26a46c Initial revision
claus
parents:
diff changeset
  2163
    (rel isMemberOf:Float) ifTrue:[
48194c26a46c Initial revision
claus
parents:
diff changeset
  2164
        newX := (rel * (inRect width + bw2)) asInteger + inRect left
48194c26a46c Initial revision
claus
parents:
diff changeset
  2165
    ] ifFalse:[
48194c26a46c Initial revision
claus
parents:
diff changeset
  2166
        newX := rel
48194c26a46c Initial revision
claus
parents:
diff changeset
  2167
    ].
48194c26a46c Initial revision
claus
parents:
diff changeset
  2168
    rel := relativeExtent y.
48194c26a46c Initial revision
claus
parents:
diff changeset
  2169
    (rel isMemberOf:Float) ifTrue:[
48194c26a46c Initial revision
claus
parents:
diff changeset
  2170
        newY := (rel * (inRect height + bw2)) asInteger + inRect top
48194c26a46c Initial revision
claus
parents:
diff changeset
  2171
    ] ifFalse:[
48194c26a46c Initial revision
claus
parents:
diff changeset
  2172
        newY := rel
48194c26a46c Initial revision
claus
parents:
diff changeset
  2173
    ].
48194c26a46c Initial revision
claus
parents:
diff changeset
  2174
    newExtent :=  (newX @ newY).
48194c26a46c Initial revision
claus
parents:
diff changeset
  2175
48194c26a46c Initial revision
claus
parents:
diff changeset
  2176
    (borderWidth ~~ 0) ifTrue:[
48194c26a46c Initial revision
claus
parents:
diff changeset
  2177
        (relativeExtent x isMemberOf:Float) ifTrue:[
48194c26a46c Initial revision
claus
parents:
diff changeset
  2178
            newExtent x:(newExtent x - (1 * borderWidth))
48194c26a46c Initial revision
claus
parents:
diff changeset
  2179
        ].
48194c26a46c Initial revision
claus
parents:
diff changeset
  2180
        (relativeExtent y isMemberOf:Float) ifTrue:[
48194c26a46c Initial revision
claus
parents:
diff changeset
  2181
            newExtent y:(newExtent y - (1 * borderWidth))
48194c26a46c Initial revision
claus
parents:
diff changeset
  2182
        ]
48194c26a46c Initial revision
claus
parents:
diff changeset
  2183
    ].
48194c26a46c Initial revision
claus
parents:
diff changeset
  2184
    ^ newExtent
48194c26a46c Initial revision
claus
parents:
diff changeset
  2185
!
48194c26a46c Initial revision
claus
parents:
diff changeset
  2186
48194c26a46c Initial revision
claus
parents:
diff changeset
  2187
dimensionFromViewport
48194c26a46c Initial revision
claus
parents:
diff changeset
  2188
    "define my origin/extend from viewport"
48194c26a46c Initial revision
claus
parents:
diff changeset
  2189
48194c26a46c Initial revision
claus
parents:
diff changeset
  2190
    |relW relH relX relY winW winH org ext|
48194c26a46c Initial revision
claus
parents:
diff changeset
  2191
48194c26a46c Initial revision
claus
parents:
diff changeset
  2192
    superView notNil ifTrue:[
48194c26a46c Initial revision
claus
parents:
diff changeset
  2193
        superView window isNil ifTrue:[
48194c26a46c Initial revision
claus
parents:
diff changeset
  2194
"
48194c26a46c Initial revision
claus
parents:
diff changeset
  2195
            v := superView.
48194c26a46c Initial revision
claus
parents:
diff changeset
  2196
            (v notNil and:[v window isNil]) whileTrue:[
48194c26a46c Initial revision
claus
parents:
diff changeset
  2197
                v := v superview
48194c26a46c Initial revision
claus
parents:
diff changeset
  2198
            ].
48194c26a46c Initial revision
claus
parents:
diff changeset
  2199
            v notNil ifTrue:[
48194c26a46c Initial revision
claus
parents:
diff changeset
  2200
                w := v window
48194c26a46c Initial revision
claus
parents:
diff changeset
  2201
            ].
48194c26a46c Initial revision
claus
parents:
diff changeset
  2202
"
48194c26a46c Initial revision
claus
parents:
diff changeset
  2203
"
48194c26a46c Initial revision
claus
parents:
diff changeset
  2204
            winW := 1.
48194c26a46c Initial revision
claus
parents:
diff changeset
  2205
            winH := 1
48194c26a46c Initial revision
claus
parents:
diff changeset
  2206
"
48194c26a46c Initial revision
claus
parents:
diff changeset
  2207
            winW := superView width.
48194c26a46c Initial revision
claus
parents:
diff changeset
  2208
            winH := superView height.
48194c26a46c Initial revision
claus
parents:
diff changeset
  2209
48194c26a46c Initial revision
claus
parents:
diff changeset
  2210
        ] ifFalse:[
48194c26a46c Initial revision
claus
parents:
diff changeset
  2211
            winW := superView window width.
48194c26a46c Initial revision
claus
parents:
diff changeset
  2212
            winH := superView window height
48194c26a46c Initial revision
claus
parents:
diff changeset
  2213
        ].
48194c26a46c Initial revision
claus
parents:
diff changeset
  2214
        relW := (viewport width / winW) asFloat.
48194c26a46c Initial revision
claus
parents:
diff changeset
  2215
        relH := (viewport height / winH) asFloat.
48194c26a46c Initial revision
claus
parents:
diff changeset
  2216
        relX := (viewport left / winW) asFloat.
48194c26a46c Initial revision
claus
parents:
diff changeset
  2217
        relY := (viewport top / winH) asFloat.
48194c26a46c Initial revision
claus
parents:
diff changeset
  2218
        relativeOrigin := (relX @ relY).
48194c26a46c Initial revision
claus
parents:
diff changeset
  2219
        org := self originFromRelativeOrigin.
48194c26a46c Initial revision
claus
parents:
diff changeset
  2220
        relativeOrigin := nil.
48194c26a46c Initial revision
claus
parents:
diff changeset
  2221
48194c26a46c Initial revision
claus
parents:
diff changeset
  2222
        relativeExtent := (relW @ relH).
48194c26a46c Initial revision
claus
parents:
diff changeset
  2223
        ext := self extentFromRelativeExtent.
48194c26a46c Initial revision
claus
parents:
diff changeset
  2224
        relativeExtent := nil.
48194c26a46c Initial revision
claus
parents:
diff changeset
  2225
48194c26a46c Initial revision
claus
parents:
diff changeset
  2226
        self pixelOrigin:org extent:ext.
48194c26a46c Initial revision
claus
parents:
diff changeset
  2227
    ]
48194c26a46c Initial revision
claus
parents:
diff changeset
  2228
!
48194c26a46c Initial revision
claus
parents:
diff changeset
  2229
48194c26a46c Initial revision
claus
parents:
diff changeset
  2230
computeInnerClip
48194c26a46c Initial revision
claus
parents:
diff changeset
  2231
    |m2|
48194c26a46c Initial revision
claus
parents:
diff changeset
  2232
48194c26a46c Initial revision
claus
parents:
diff changeset
  2233
    (margin ~~ 0) ifTrue:[
48194c26a46c Initial revision
claus
parents:
diff changeset
  2234
        m2 := margin + margin.
48194c26a46c Initial revision
claus
parents:
diff changeset
  2235
        innerClipRect := Rectangle left:margin top:margin
48194c26a46c Initial revision
claus
parents:
diff changeset
  2236
                                 width:(width - m2) height:(height - m2)
48194c26a46c Initial revision
claus
parents:
diff changeset
  2237
    ] ifFalse:[
48194c26a46c Initial revision
claus
parents:
diff changeset
  2238
        innerClipRect := nil
48194c26a46c Initial revision
claus
parents:
diff changeset
  2239
    ]
48194c26a46c Initial revision
claus
parents:
diff changeset
  2240
!
48194c26a46c Initial revision
claus
parents:
diff changeset
  2241
48194c26a46c Initial revision
claus
parents:
diff changeset
  2242
setInnerClip
48194c26a46c Initial revision
claus
parents:
diff changeset
  2243
    |m2|
48194c26a46c Initial revision
claus
parents:
diff changeset
  2244
48194c26a46c Initial revision
claus
parents:
diff changeset
  2245
    (margin ~~ 0) ifTrue:[
48194c26a46c Initial revision
claus
parents:
diff changeset
  2246
        m2 := margin + margin.
48194c26a46c Initial revision
claus
parents:
diff changeset
  2247
        innerClipRect := Rectangle left:margin top:margin
48194c26a46c Initial revision
claus
parents:
diff changeset
  2248
                                  width:(width - m2)
48194c26a46c Initial revision
claus
parents:
diff changeset
  2249
                                 height:(height - m2)
48194c26a46c Initial revision
claus
parents:
diff changeset
  2250
    ] ifFalse:[
48194c26a46c Initial revision
claus
parents:
diff changeset
  2251
        innerClipRect := nil
48194c26a46c Initial revision
claus
parents:
diff changeset
  2252
    ].
48194c26a46c Initial revision
claus
parents:
diff changeset
  2253
    self clipRect:innerClipRect
48194c26a46c Initial revision
claus
parents:
diff changeset
  2254
! !
48194c26a46c Initial revision
claus
parents:
diff changeset
  2255
48194c26a46c Initial revision
claus
parents:
diff changeset
  2256
!View methodsFor:'realization'!
48194c26a46c Initial revision
claus
parents:
diff changeset
  2257
48194c26a46c Initial revision
claus
parents:
diff changeset
  2258
create
48194c26a46c Initial revision
claus
parents:
diff changeset
  2259
    "create (i.e. tell X about me)
48194c26a46c Initial revision
claus
parents:
diff changeset
  2260
     this is kind of stupid - creation means XCreateWindow;
48194c26a46c Initial revision
claus
parents:
diff changeset
  2261
     realizing means XMapWindow"
48194c26a46c Initial revision
claus
parents:
diff changeset
  2262
48194c26a46c Initial revision
claus
parents:
diff changeset
  2263
    drawableId isNil ifTrue:[
48194c26a46c Initial revision
claus
parents:
diff changeset
  2264
        "make certain, superview is created also"
48194c26a46c Initial revision
claus
parents:
diff changeset
  2265
48194c26a46c Initial revision
claus
parents:
diff changeset
  2266
        superView notNil ifTrue:[
48194c26a46c Initial revision
claus
parents:
diff changeset
  2267
            superView id isNil ifTrue:[
48194c26a46c Initial revision
claus
parents:
diff changeset
  2268
                superView create
12
9f0995fac1fa *** empty log message ***
claus
parents: 6
diff changeset
  2269
            ].
9f0995fac1fa *** empty log message ***
claus
parents: 6
diff changeset
  2270
9f0995fac1fa *** empty log message ***
claus
parents: 6
diff changeset
  2271
            "and put my controller into the superviews controller list"
9f0995fac1fa *** empty log message ***
claus
parents: 6
diff changeset
  2272
            controller notNil ifTrue:[
9f0995fac1fa *** empty log message ***
claus
parents: 6
diff changeset
  2273
                superView controller notNil ifTrue:[
9f0995fac1fa *** empty log message ***
claus
parents: 6
diff changeset
  2274
                    controller manager:(superView controller manager)
9f0995fac1fa *** empty log message ***
claus
parents: 6
diff changeset
  2275
                ]
0
48194c26a46c Initial revision
claus
parents:
diff changeset
  2276
            ]
48194c26a46c Initial revision
claus
parents:
diff changeset
  2277
        ].
48194c26a46c Initial revision
claus
parents:
diff changeset
  2278
48194c26a46c Initial revision
claus
parents:
diff changeset
  2279
        "associate cursor/colors to device"
48194c26a46c Initial revision
claus
parents:
diff changeset
  2280
48194c26a46c Initial revision
claus
parents:
diff changeset
  2281
        viewBackground := viewBackground on:device.
48194c26a46c Initial revision
claus
parents:
diff changeset
  2282
        borderColor := borderColor on:device.
48194c26a46c Initial revision
claus
parents:
diff changeset
  2283
        shadowColor := shadowColor on:device.
48194c26a46c Initial revision
claus
parents:
diff changeset
  2284
        lightColor := lightColor on:device.
48194c26a46c Initial revision
claus
parents:
diff changeset
  2285
        cursor := cursor on:device.
48194c26a46c Initial revision
claus
parents:
diff changeset
  2286
48194c26a46c Initial revision
claus
parents:
diff changeset
  2287
        drawableId := device createWindowFor:self 
48194c26a46c Initial revision
claus
parents:
diff changeset
  2288
                                        left:left top:top 
48194c26a46c Initial revision
claus
parents:
diff changeset
  2289
                                       width:width height:height.
48194c26a46c Initial revision
claus
parents:
diff changeset
  2290
48194c26a46c Initial revision
claus
parents:
diff changeset
  2291
        extentChanged := false.
48194c26a46c Initial revision
claus
parents:
diff changeset
  2292
        originChanged := false.
48194c26a46c Initial revision
claus
parents:
diff changeset
  2293
48194c26a46c Initial revision
claus
parents:
diff changeset
  2294
        borderShape notNil ifTrue:[
48194c26a46c Initial revision
claus
parents:
diff changeset
  2295
            device setWindowBorderShape:(borderShape id) in:drawableId
48194c26a46c Initial revision
claus
parents:
diff changeset
  2296
        ].
48194c26a46c Initial revision
claus
parents:
diff changeset
  2297
        viewShape notNil ifTrue:[
48194c26a46c Initial revision
claus
parents:
diff changeset
  2298
            device setWindowShape:(viewShape id) in:drawableId
48194c26a46c Initial revision
claus
parents:
diff changeset
  2299
        ].
2
b35336ab0de3 *** empty log message ***
claus
parents: 0
diff changeset
  2300
        (backed notNil and:[backed ~~ false]) ifTrue:[
0
48194c26a46c Initial revision
claus
parents:
diff changeset
  2301
            device setBackingStore:backed in:drawableId
48194c26a46c Initial revision
claus
parents:
diff changeset
  2302
        ].
48194c26a46c Initial revision
claus
parents:
diff changeset
  2303
        saveUnder ifTrue:[
48194c26a46c Initial revision
claus
parents:
diff changeset
  2304
            device setSaveUnder:true in:drawableId
48194c26a46c Initial revision
claus
parents:
diff changeset
  2305
        ].
48194c26a46c Initial revision
claus
parents:
diff changeset
  2306
48194c26a46c Initial revision
claus
parents:
diff changeset
  2307
        font := font on:device.
12
9f0995fac1fa *** empty log message ***
claus
parents: 6
diff changeset
  2308
0
48194c26a46c Initial revision
claus
parents:
diff changeset
  2309
        self initializeMiddleButtonMenu.
48194c26a46c Initial revision
claus
parents:
diff changeset
  2310
        self initEvents.
48194c26a46c Initial revision
claus
parents:
diff changeset
  2311
    ]
48194c26a46c Initial revision
claus
parents:
diff changeset
  2312
!
48194c26a46c Initial revision
claus
parents:
diff changeset
  2313
48194c26a46c Initial revision
claus
parents:
diff changeset
  2314
createWithAllSubViews
48194c26a46c Initial revision
claus
parents:
diff changeset
  2315
    "create, then create all subviews"
48194c26a46c Initial revision
claus
parents:
diff changeset
  2316
48194c26a46c Initial revision
claus
parents:
diff changeset
  2317
    drawableId isNil ifTrue:[self create].
48194c26a46c Initial revision
claus
parents:
diff changeset
  2318
    subViews notNil ifTrue:[
48194c26a46c Initial revision
claus
parents:
diff changeset
  2319
        subViews do:[:subView | subView createWithAllSubViews]
48194c26a46c Initial revision
claus
parents:
diff changeset
  2320
    ]
48194c26a46c Initial revision
claus
parents:
diff changeset
  2321
!
48194c26a46c Initial revision
claus
parents:
diff changeset
  2322
48194c26a46c Initial revision
claus
parents:
diff changeset
  2323
initializeMiddleButtonMenu
48194c26a46c Initial revision
claus
parents:
diff changeset
  2324
    "a place to initialize menu - this one is sent once when the view is
48194c26a46c Initial revision
claus
parents:
diff changeset
  2325
     first created; usually redefined in subclasses; default here is no menu"
48194c26a46c Initial revision
claus
parents:
diff changeset
  2326
48194c26a46c Initial revision
claus
parents:
diff changeset
  2327
    ^ self
48194c26a46c Initial revision
claus
parents:
diff changeset
  2328
!
48194c26a46c Initial revision
claus
parents:
diff changeset
  2329
48194c26a46c Initial revision
claus
parents:
diff changeset
  2330
fixSize
48194c26a46c Initial revision
claus
parents:
diff changeset
  2331
    "adjust size of window according to either relative/abs or
48194c26a46c Initial revision
claus
parents:
diff changeset
  2332
     block extent; also set origin"
48194c26a46c Initial revision
claus
parents:
diff changeset
  2333
48194c26a46c Initial revision
claus
parents:
diff changeset
  2334
    window notNil ifTrue:[
48194c26a46c Initial revision
claus
parents:
diff changeset
  2335
        ^ self superViewChangedSize
48194c26a46c Initial revision
claus
parents:
diff changeset
  2336
    ].
48194c26a46c Initial revision
claus
parents:
diff changeset
  2337
48194c26a46c Initial revision
claus
parents:
diff changeset
  2338
    "if the extent is not the one we created the window with ..."
48194c26a46c Initial revision
claus
parents:
diff changeset
  2339
    extentChanged ifTrue:[
12
9f0995fac1fa *** empty log message ***
claus
parents: 6
diff changeset
  2340
        self sizeChanged:nil.
0
48194c26a46c Initial revision
claus
parents:
diff changeset
  2341
        extentChanged := false
48194c26a46c Initial revision
claus
parents:
diff changeset
  2342
    ].
48194c26a46c Initial revision
claus
parents:
diff changeset
  2343
48194c26a46c Initial revision
claus
parents:
diff changeset
  2344
    originChanged ifTrue:[
48194c26a46c Initial revision
claus
parents:
diff changeset
  2345
        originRule notNil ifTrue:[
48194c26a46c Initial revision
claus
parents:
diff changeset
  2346
            self pixelOrigin:(originRule value)
48194c26a46c Initial revision
claus
parents:
diff changeset
  2347
        ] ifFalse:[
48194c26a46c Initial revision
claus
parents:
diff changeset
  2348
            relativeOrigin notNil ifTrue:[
48194c26a46c Initial revision
claus
parents:
diff changeset
  2349
                self originFromRelativeOrigin
48194c26a46c Initial revision
claus
parents:
diff changeset
  2350
            ]
48194c26a46c Initial revision
claus
parents:
diff changeset
  2351
        ].
48194c26a46c Initial revision
claus
parents:
diff changeset
  2352
        originChanged := false
48194c26a46c Initial revision
claus
parents:
diff changeset
  2353
    ]
48194c26a46c Initial revision
claus
parents:
diff changeset
  2354
!
48194c26a46c Initial revision
claus
parents:
diff changeset
  2355
48194c26a46c Initial revision
claus
parents:
diff changeset
  2356
realize
48194c26a46c Initial revision
claus
parents:
diff changeset
  2357
    "realize - make visible;
48194c26a46c Initial revision
claus
parents:
diff changeset
  2358
     realizing is done very late (after layout is fixed) to avoid
48194c26a46c Initial revision
claus
parents:
diff changeset
  2359
     visible rearranging of windows on the screen"
48194c26a46c Initial revision
claus
parents:
diff changeset
  2360
48194c26a46c Initial revision
claus
parents:
diff changeset
  2361
    drawableId isNil ifTrue:[
48194c26a46c Initial revision
claus
parents:
diff changeset
  2362
        self create.
12
9f0995fac1fa *** empty log message ***
claus
parents: 6
diff changeset
  2363
0
48194c26a46c Initial revision
claus
parents:
diff changeset
  2364
        "if it is the first realize (which means a create),
48194c26a46c Initial revision
claus
parents:
diff changeset
  2365
         force sizechange messages"
48194c26a46c Initial revision
claus
parents:
diff changeset
  2366
        extentChanged := true.
48194c26a46c Initial revision
claus
parents:
diff changeset
  2367
        originChanged := true
48194c26a46c Initial revision
claus
parents:
diff changeset
  2368
    ].
48194c26a46c Initial revision
claus
parents:
diff changeset
  2369
12
9f0995fac1fa *** empty log message ***
claus
parents: 6
diff changeset
  2370
    "put myself into superviews windowgroup"
9f0995fac1fa *** empty log message ***
claus
parents: 6
diff changeset
  2371
    superView notNil ifTrue:[
9f0995fac1fa *** empty log message ***
claus
parents: 6
diff changeset
  2372
        windowGroup notNil ifTrue:[
9f0995fac1fa *** empty log message ***
claus
parents: 6
diff changeset
  2373
            'oops - wgroup change on realize' printNewline.
9f0995fac1fa *** empty log message ***
claus
parents: 6
diff changeset
  2374
            windowGroup removeView:self
9f0995fac1fa *** empty log message ***
claus
parents: 6
diff changeset
  2375
        ].
9f0995fac1fa *** empty log message ***
claus
parents: 6
diff changeset
  2376
        windowGroup := superView windowGroup.
9f0995fac1fa *** empty log message ***
claus
parents: 6
diff changeset
  2377
        windowGroup notNil ifTrue:[
9f0995fac1fa *** empty log message ***
claus
parents: 6
diff changeset
  2378
            windowGroup addView:self.
9f0995fac1fa *** empty log message ***
claus
parents: 6
diff changeset
  2379
        ]
9f0995fac1fa *** empty log message ***
claus
parents: 6
diff changeset
  2380
    ].
9f0995fac1fa *** empty log message ***
claus
parents: 6
diff changeset
  2381
0
48194c26a46c Initial revision
claus
parents:
diff changeset
  2382
    hidden ifTrue:[
48194c26a46c Initial revision
claus
parents:
diff changeset
  2383
        ^ self
48194c26a46c Initial revision
claus
parents:
diff changeset
  2384
    ].
48194c26a46c Initial revision
claus
parents:
diff changeset
  2385
48194c26a46c Initial revision
claus
parents:
diff changeset
  2386
    realized ifFalse:[
48194c26a46c Initial revision
claus
parents:
diff changeset
  2387
        (originChanged or:[extentChanged]) ifTrue:[self fixSize].
48194c26a46c Initial revision
claus
parents:
diff changeset
  2388
        subViews notNil ifTrue:[
48194c26a46c Initial revision
claus
parents:
diff changeset
  2389
            subViews do:[:subView |
48194c26a46c Initial revision
claus
parents:
diff changeset
  2390
                subView realize
48194c26a46c Initial revision
claus
parents:
diff changeset
  2391
            ]
48194c26a46c Initial revision
claus
parents:
diff changeset
  2392
        ].
48194c26a46c Initial revision
claus
parents:
diff changeset
  2393
        self setInnerClip.
48194c26a46c Initial revision
claus
parents:
diff changeset
  2394
48194c26a46c Initial revision
claus
parents:
diff changeset
  2395
        "and make it visible"
48194c26a46c Initial revision
claus
parents:
diff changeset
  2396
        device mapWindow:drawableId.
48194c26a46c Initial revision
claus
parents:
diff changeset
  2397
        realized := true
48194c26a46c Initial revision
claus
parents:
diff changeset
  2398
    ]
48194c26a46c Initial revision
claus
parents:
diff changeset
  2399
!
48194c26a46c Initial revision
claus
parents:
diff changeset
  2400
48194c26a46c Initial revision
claus
parents:
diff changeset
  2401
rerealize
48194c26a46c Initial revision
claus
parents:
diff changeset
  2402
    "rerealize at old position"
48194c26a46c Initial revision
claus
parents:
diff changeset
  2403
48194c26a46c Initial revision
claus
parents:
diff changeset
  2404
    device mapWindow:drawableId iconified:false
48194c26a46c Initial revision
claus
parents:
diff changeset
  2405
                                      atX:left y:top
48194c26a46c Initial revision
claus
parents:
diff changeset
  2406
                                    width:width height:height
48194c26a46c Initial revision
claus
parents:
diff changeset
  2407
!
48194c26a46c Initial revision
claus
parents:
diff changeset
  2408
48194c26a46c Initial revision
claus
parents:
diff changeset
  2409
destroy
48194c26a46c Initial revision
claus
parents:
diff changeset
  2410
    "unrealize & destroy - make me invisible, destroy subviews then
48194c26a46c Initial revision
claus
parents:
diff changeset
  2411
     make me unknown to the device"
48194c26a46c Initial revision
claus
parents:
diff changeset
  2412
48194c26a46c Initial revision
claus
parents:
diff changeset
  2413
    realized ifTrue:[
48194c26a46c Initial revision
claus
parents:
diff changeset
  2414
        self unrealize.            
12
9f0995fac1fa *** empty log message ***
claus
parents: 6
diff changeset
  2415
        "make it go away immediately
9f0995fac1fa *** empty log message ***
claus
parents: 6
diff changeset
  2416
         - also, this hides the subview killing"
9f0995fac1fa *** empty log message ***
claus
parents: 6
diff changeset
  2417
"
9f0995fac1fa *** empty log message ***
claus
parents: 6
diff changeset
  2418
        device synchronizeOutput. 
9f0995fac1fa *** empty log message ***
claus
parents: 6
diff changeset
  2419
"
0
48194c26a46c Initial revision
claus
parents:
diff changeset
  2420
    ].
48194c26a46c Initial revision
claus
parents:
diff changeset
  2421
48194c26a46c Initial revision
claus
parents:
diff changeset
  2422
    model notNil ifTrue:[
48194c26a46c Initial revision
claus
parents:
diff changeset
  2423
        model removeDependent:self
48194c26a46c Initial revision
claus
parents:
diff changeset
  2424
    ].
48194c26a46c Initial revision
claus
parents:
diff changeset
  2425
    controller := nil.
48194c26a46c Initial revision
claus
parents:
diff changeset
  2426
12
9f0995fac1fa *** empty log message ***
claus
parents: 6
diff changeset
  2427
    subViews notNil ifTrue:[
9f0995fac1fa *** empty log message ***
claus
parents: 6
diff changeset
  2428
        "stupid: destroy removes itself from the subveiws list
9f0995fac1fa *** empty log message ***
claus
parents: 6
diff changeset
  2429
         - therefore we have to loop over a copy here"
9f0995fac1fa *** empty log message ***
claus
parents: 6
diff changeset
  2430
9f0995fac1fa *** empty log message ***
claus
parents: 6
diff changeset
  2431
        subViews copy do:[:aView |
9f0995fac1fa *** empty log message ***
claus
parents: 6
diff changeset
  2432
            aView notNil ifTrue:[aView destroy]             
9f0995fac1fa *** empty log message ***
claus
parents: 6
diff changeset
  2433
        ]
0
48194c26a46c Initial revision
claus
parents:
diff changeset
  2434
    ].
48194c26a46c Initial revision
claus
parents:
diff changeset
  2435
    superView notNil ifTrue:[
48194c26a46c Initial revision
claus
parents:
diff changeset
  2436
        superView removeSubView:self.
48194c26a46c Initial revision
claus
parents:
diff changeset
  2437
        superView := nil
48194c26a46c Initial revision
claus
parents:
diff changeset
  2438
    ].
12
9f0995fac1fa *** empty log message ***
claus
parents: 6
diff changeset
  2439
    super destroy.
9f0995fac1fa *** empty log message ***
claus
parents: 6
diff changeset
  2440
9f0995fac1fa *** empty log message ***
claus
parents: 6
diff changeset
  2441
    windowGroup notNil ifTrue:[
9f0995fac1fa *** empty log message ***
claus
parents: 6
diff changeset
  2442
        windowGroup removeView:self
9f0995fac1fa *** empty log message ***
claus
parents: 6
diff changeset
  2443
    ].
0
48194c26a46c Initial revision
claus
parents:
diff changeset
  2444
!
48194c26a46c Initial revision
claus
parents:
diff changeset
  2445
48194c26a46c Initial revision
claus
parents:
diff changeset
  2446
unrealize
48194c26a46c Initial revision
claus
parents:
diff changeset
  2447
    "hide me"
48194c26a46c Initial revision
claus
parents:
diff changeset
  2448
48194c26a46c Initial revision
claus
parents:
diff changeset
  2449
    realized ifTrue:[
48194c26a46c Initial revision
claus
parents:
diff changeset
  2450
        drawableId notNil ifTrue:[
48194c26a46c Initial revision
claus
parents:
diff changeset
  2451
            device unmapWindow:drawableId
48194c26a46c Initial revision
claus
parents:
diff changeset
  2452
        ].
48194c26a46c Initial revision
claus
parents:
diff changeset
  2453
        realized := false.
12
9f0995fac1fa *** empty log message ***
claus
parents: 6
diff changeset
  2454
        shown := false
0
48194c26a46c Initial revision
claus
parents:
diff changeset
  2455
    ]
20
ab35d92b9a4b *** empty log message ***
claus
parents: 15
diff changeset
  2456
!
ab35d92b9a4b *** empty log message ***
claus
parents: 15
diff changeset
  2457
ab35d92b9a4b *** empty log message ***
claus
parents: 15
diff changeset
  2458
open
ab35d92b9a4b *** empty log message ***
claus
parents: 15
diff changeset
  2459
    "create and schedule a new windowgroup for me and open the view"
ab35d92b9a4b *** empty log message ***
claus
parents: 15
diff changeset
  2460
ab35d92b9a4b *** empty log message ***
claus
parents: 15
diff changeset
  2461
    ProcessorScheduler isPureEventDriven ifFalse:[
ab35d92b9a4b *** empty log message ***
claus
parents: 15
diff changeset
  2462
        windowGroup isNil ifTrue:[
ab35d92b9a4b *** empty log message ***
claus
parents: 15
diff changeset
  2463
            windowGroup := WindowGroup new.
ab35d92b9a4b *** empty log message ***
claus
parents: 15
diff changeset
  2464
            windowGroup addTopView:self.
ab35d92b9a4b *** empty log message ***
claus
parents: 15
diff changeset
  2465
        ].
ab35d92b9a4b *** empty log message ***
claus
parents: 15
diff changeset
  2466
        windowGroup startup.
ab35d92b9a4b *** empty log message ***
claus
parents: 15
diff changeset
  2467
    ].
ab35d92b9a4b *** empty log message ***
claus
parents: 15
diff changeset
  2468
    ^ self realize
ab35d92b9a4b *** empty log message ***
claus
parents: 15
diff changeset
  2469
!
ab35d92b9a4b *** empty log message ***
claus
parents: 15
diff changeset
  2470
ab35d92b9a4b *** empty log message ***
claus
parents: 15
diff changeset
  2471
openModal
ab35d92b9a4b *** empty log message ***
claus
parents: 15
diff changeset
  2472
    "create a new windowgroup, but start processing in the current process
ab35d92b9a4b *** empty log message ***
claus
parents: 15
diff changeset
  2473
     actually suspending event processing for the currently active group"
ab35d92b9a4b *** empty log message ***
claus
parents: 15
diff changeset
  2474
ab35d92b9a4b *** empty log message ***
claus
parents: 15
diff changeset
  2475
    ProcessorScheduler isPureEventDriven ifFalse:[
ab35d92b9a4b *** empty log message ***
claus
parents: 15
diff changeset
  2476
        windowGroup isNil ifTrue:[
ab35d92b9a4b *** empty log message ***
claus
parents: 15
diff changeset
  2477
            windowGroup := WindowGroup new.
ab35d92b9a4b *** empty log message ***
claus
parents: 15
diff changeset
  2478
            windowGroup addTopView:self.
ab35d92b9a4b *** empty log message ***
claus
parents: 15
diff changeset
  2479
        ].
ab35d92b9a4b *** empty log message ***
claus
parents: 15
diff changeset
  2480
	self realize.
ab35d92b9a4b *** empty log message ***
claus
parents: 15
diff changeset
  2481
	self windowGroup eventLoop
ab35d92b9a4b *** empty log message ***
claus
parents: 15
diff changeset
  2482
    ] ifFalse:[
ab35d92b9a4b *** empty log message ***
claus
parents: 15
diff changeset
  2483
	self realize
ab35d92b9a4b *** empty log message ***
claus
parents: 15
diff changeset
  2484
    ]
0
48194c26a46c Initial revision
claus
parents:
diff changeset
  2485
! !
48194c26a46c Initial revision
claus
parents:
diff changeset
  2486
48194c26a46c Initial revision
claus
parents:
diff changeset
  2487
!View methodsFor:'drawing'!
48194c26a46c Initial revision
claus
parents:
diff changeset
  2488
48194c26a46c Initial revision
claus
parents:
diff changeset
  2489
drawEdgesForX:x y:y width:w height:h level:l 
48194c26a46c Initial revision
claus
parents:
diff changeset
  2490
                shadow:shadowColor light:lightColor
48194c26a46c Initial revision
claus
parents:
diff changeset
  2491
                halfShadow:halfShadowColor halfLight:halfLightColor
48194c26a46c Initial revision
claus
parents:
diff changeset
  2492
    "draw 3D edges into a rectangle"
48194c26a46c Initial revision
claus
parents:
diff changeset
  2493
48194c26a46c Initial revision
claus
parents:
diff changeset
  2494
    |topLeftFg botRightFg topLeftHalfFg botRightHalfFg
48194c26a46c Initial revision
claus
parents:
diff changeset
  2495
     count "{ Class: SmallInteger }"
48194c26a46c Initial revision
claus
parents:
diff changeset
  2496
     r     "{ Class: SmallInteger }"
48194c26a46c Initial revision
claus
parents:
diff changeset
  2497
     b     "{ Class: SmallInteger }"
48194c26a46c Initial revision
claus
parents:
diff changeset
  2498
     xi    "{ Class: SmallInteger }"
48194c26a46c Initial revision
claus
parents:
diff changeset
  2499
     yi    "{ Class: SmallInteger }"
48194c26a46c Initial revision
claus
parents:
diff changeset
  2500
     run |
48194c26a46c Initial revision
claus
parents:
diff changeset
  2501
48194c26a46c Initial revision
claus
parents:
diff changeset
  2502
    (l < 0) ifTrue:[
48194c26a46c Initial revision
claus
parents:
diff changeset
  2503
        topLeftFg := shadowColor.
48194c26a46c Initial revision
claus
parents:
diff changeset
  2504
        botRightFg := lightColor.
48194c26a46c Initial revision
claus
parents:
diff changeset
  2505
        topLeftHalfFg := halfShadowColor.
48194c26a46c Initial revision
claus
parents:
diff changeset
  2506
        botRightHalfFg := halfLightColor.
48194c26a46c Initial revision
claus
parents:
diff changeset
  2507
        count := l negated
48194c26a46c Initial revision
claus
parents:
diff changeset
  2508
    ] ifFalse:[
48194c26a46c Initial revision
claus
parents:
diff changeset
  2509
        topLeftFg := lightColor.
48194c26a46c Initial revision
claus
parents:
diff changeset
  2510
        botRightFg := shadowColor.
48194c26a46c Initial revision
claus
parents:
diff changeset
  2511
        topLeftHalfFg := halfLightColor.
48194c26a46c Initial revision
claus
parents:
diff changeset
  2512
        botRightHalfFg := halfShadowColor.
48194c26a46c Initial revision
claus
parents:
diff changeset
  2513
        count := l
48194c26a46c Initial revision
claus
parents:
diff changeset
  2514
    ].
48194c26a46c Initial revision
claus
parents:
diff changeset
  2515
    r := x + w - 1. "right"
48194c26a46c Initial revision
claus
parents:
diff changeset
  2516
    b := y + h - 1. "bottom"
48194c26a46c Initial revision
claus
parents:
diff changeset
  2517
48194c26a46c Initial revision
claus
parents:
diff changeset
  2518
    super lineWidth:0.
48194c26a46c Initial revision
claus
parents:
diff changeset
  2519
48194c26a46c Initial revision
claus
parents:
diff changeset
  2520
    "top and left edges"
48194c26a46c Initial revision
claus
parents:
diff changeset
  2521
    (softEdge and:[l > 0]) ifTrue:[
48194c26a46c Initial revision
claus
parents:
diff changeset
  2522
        super paint:topLeftHalfFg
48194c26a46c Initial revision
claus
parents:
diff changeset
  2523
    ] ifFalse:[
48194c26a46c Initial revision
claus
parents:
diff changeset
  2524
        super paint:topLeftFg
48194c26a46c Initial revision
claus
parents:
diff changeset
  2525
    ].
48194c26a46c Initial revision
claus
parents:
diff changeset
  2526
    0 to:(count - 1) do:[:i |
48194c26a46c Initial revision
claus
parents:
diff changeset
  2527
        run := y + i.
48194c26a46c Initial revision
claus
parents:
diff changeset
  2528
        super displayLineFromX:x y:run toX:r y:run. "top"
48194c26a46c Initial revision
claus
parents:
diff changeset
  2529
        run := x + i.
48194c26a46c Initial revision
claus
parents:
diff changeset
  2530
        super displayLineFromX:run y:y toX:run y:b  "left"
48194c26a46c Initial revision
claus
parents:
diff changeset
  2531
    ].
48194c26a46c Initial revision
claus
parents:
diff changeset
  2532
    softEdge ifTrue:[
48194c26a46c Initial revision
claus
parents:
diff changeset
  2533
"
48194c26a46c Initial revision
claus
parents:
diff changeset
  2534
        super paint:topLeftFg.
48194c26a46c Initial revision
claus
parents:
diff changeset
  2535
        super displayLineFromX:x y:y toX:r y:y. 
48194c26a46c Initial revision
claus
parents:
diff changeset
  2536
        super displayLineFromX:x y:y toX:x y:b        
48194c26a46c Initial revision
claus
parents:
diff changeset
  2537
"
48194c26a46c Initial revision
claus
parents:
diff changeset
  2538
        (l > 2) ifTrue:[
48194c26a46c Initial revision
claus
parents:
diff changeset
  2539
            super paint:Black.
48194c26a46c Initial revision
claus
parents:
diff changeset
  2540
            super displayLineFromX:x y:y toX:r y:y. 
48194c26a46c Initial revision
claus
parents:
diff changeset
  2541
            super displayLineFromX:x y:y toX:x y:b. 
48194c26a46c Initial revision
claus
parents:
diff changeset
  2542
        ]
48194c26a46c Initial revision
claus
parents:
diff changeset
  2543
    ].
48194c26a46c Initial revision
claus
parents:
diff changeset
  2544
48194c26a46c Initial revision
claus
parents:
diff changeset
  2545
    xi := x + 1.
48194c26a46c Initial revision
claus
parents:
diff changeset
  2546
    yi := y + 1.
48194c26a46c Initial revision
claus
parents:
diff changeset
  2547
48194c26a46c Initial revision
claus
parents:
diff changeset
  2548
    "bottom and right edges"
48194c26a46c Initial revision
claus
parents:
diff changeset
  2549
    (softEdge) ifTrue:[
48194c26a46c Initial revision
claus
parents:
diff changeset
  2550
        super paint:botRightHalfFg
48194c26a46c Initial revision
claus
parents:
diff changeset
  2551
    ] ifFalse:[
48194c26a46c Initial revision
claus
parents:
diff changeset
  2552
        super paint:botRightFg
48194c26a46c Initial revision
claus
parents:
diff changeset
  2553
    ].
48194c26a46c Initial revision
claus
parents:
diff changeset
  2554
    0 to:(count - 1) do:[:i |
48194c26a46c Initial revision
claus
parents:
diff changeset
  2555
        run := b - i.
48194c26a46c Initial revision
claus
parents:
diff changeset
  2556
        super displayLineFromX:xi-1 y:run toX:r y:run. "bottom"
48194c26a46c Initial revision
claus
parents:
diff changeset
  2557
        run := r - i.
48194c26a46c Initial revision
claus
parents:
diff changeset
  2558
        super displayLineFromX:run y:yi-1 toX:run y:b.  "right"
48194c26a46c Initial revision
claus
parents:
diff changeset
  2559
        xi := xi + 1.
48194c26a46c Initial revision
claus
parents:
diff changeset
  2560
        yi := yi + 1
48194c26a46c Initial revision
claus
parents:
diff changeset
  2561
    ].
48194c26a46c Initial revision
claus
parents:
diff changeset
  2562
    (softEdge and:[l > 1]) ifTrue:[
48194c26a46c Initial revision
claus
parents:
diff changeset
  2563
        super paint:shadowColor.
48194c26a46c Initial revision
claus
parents:
diff changeset
  2564
        super displayLineFromX:(x + 1-1) y:b toX:r y:b. 
48194c26a46c Initial revision
claus
parents:
diff changeset
  2565
        super displayLineFromX:r y:(y + 1 - 1) toX:r y:b        
48194c26a46c Initial revision
claus
parents:
diff changeset
  2566
    ]
48194c26a46c Initial revision
claus
parents:
diff changeset
  2567
!
48194c26a46c Initial revision
claus
parents:
diff changeset
  2568
48194c26a46c Initial revision
claus
parents:
diff changeset
  2569
drawEdgesForX:x y:y width:w height:h level:l
48194c26a46c Initial revision
claus
parents:
diff changeset
  2570
    "draw 3D edges into a rectangle"
48194c26a46c Initial revision
claus
parents:
diff changeset
  2571
48194c26a46c Initial revision
claus
parents:
diff changeset
  2572
    self drawEdgesForX:x y:y width:w height:h level:l 
48194c26a46c Initial revision
claus
parents:
diff changeset
  2573
                shadow:shadowColor light:lightColor
48194c26a46c Initial revision
claus
parents:
diff changeset
  2574
                halfShadow:halfShadowColor halfLight:halfLightColor
48194c26a46c Initial revision
claus
parents:
diff changeset
  2575
!
48194c26a46c Initial revision
claus
parents:
diff changeset
  2576
48194c26a46c Initial revision
claus
parents:
diff changeset
  2577
drawLeftEdge
48194c26a46c Initial revision
claus
parents:
diff changeset
  2578
    "draw left 3D edge into window frame"
48194c26a46c Initial revision
claus
parents:
diff changeset
  2579
48194c26a46c Initial revision
claus
parents:
diff changeset
  2580
    |leftFg leftHalfFg
48194c26a46c Initial revision
claus
parents:
diff changeset
  2581
     count "{ Class: SmallInteger }" |
48194c26a46c Initial revision
claus
parents:
diff changeset
  2582
48194c26a46c Initial revision
claus
parents:
diff changeset
  2583
    (level < 0) ifTrue:[
48194c26a46c Initial revision
claus
parents:
diff changeset
  2584
        leftFg := shadowColor.
48194c26a46c Initial revision
claus
parents:
diff changeset
  2585
        leftHalfFg := halfShadowColor.
48194c26a46c Initial revision
claus
parents:
diff changeset
  2586
        count := level negated
48194c26a46c Initial revision
claus
parents:
diff changeset
  2587
    ] ifFalse:[
48194c26a46c Initial revision
claus
parents:
diff changeset
  2588
        leftFg := lightColor.
48194c26a46c Initial revision
claus
parents:
diff changeset
  2589
        leftHalfFg := halfLightColor.
48194c26a46c Initial revision
claus
parents:
diff changeset
  2590
        count := level
48194c26a46c Initial revision
claus
parents:
diff changeset
  2591
    ].
48194c26a46c Initial revision
claus
parents:
diff changeset
  2592
48194c26a46c Initial revision
claus
parents:
diff changeset
  2593
    super lineWidth:0.
48194c26a46c Initial revision
claus
parents:
diff changeset
  2594
    (softEdge and:[level > 0]) ifTrue:[
48194c26a46c Initial revision
claus
parents:
diff changeset
  2595
        super paint:leftHalfFg
48194c26a46c Initial revision
claus
parents:
diff changeset
  2596
    ] ifFalse:[
48194c26a46c Initial revision
claus
parents:
diff changeset
  2597
        super paint:leftFg
48194c26a46c Initial revision
claus
parents:
diff changeset
  2598
    ].
48194c26a46c Initial revision
claus
parents:
diff changeset
  2599
    0 to:(count - 1) do:[:i |
48194c26a46c Initial revision
claus
parents:
diff changeset
  2600
        super displayLineFromX:i y:i toX:i y:(height - 1 - i)
48194c26a46c Initial revision
claus
parents:
diff changeset
  2601
    ].
48194c26a46c Initial revision
claus
parents:
diff changeset
  2602
    (softEdge and:[level > 2]) ifTrue:[
48194c26a46c Initial revision
claus
parents:
diff changeset
  2603
        super paint:Black.
48194c26a46c Initial revision
claus
parents:
diff changeset
  2604
        super displayLineFromX:0 y:0 toX:0 y:height-1. 
48194c26a46c Initial revision
claus
parents:
diff changeset
  2605
    ]
48194c26a46c Initial revision
claus
parents:
diff changeset
  2606
!
48194c26a46c Initial revision
claus
parents:
diff changeset
  2607
48194c26a46c Initial revision
claus
parents:
diff changeset
  2608
drawRightEdge
48194c26a46c Initial revision
claus
parents:
diff changeset
  2609
    "draw right 3D edge into window frame"
48194c26a46c Initial revision
claus
parents:
diff changeset
  2610
48194c26a46c Initial revision
claus
parents:
diff changeset
  2611
    |rightFg
48194c26a46c Initial revision
claus
parents:
diff changeset
  2612
     count "{ Class: SmallInteger }" 
48194c26a46c Initial revision
claus
parents:
diff changeset
  2613
     r|
48194c26a46c Initial revision
claus
parents:
diff changeset
  2614
48194c26a46c Initial revision
claus
parents:
diff changeset
  2615
    (level < 0) ifTrue:[
48194c26a46c Initial revision
claus
parents:
diff changeset
  2616
        rightFg := lightColor.
48194c26a46c Initial revision
claus
parents:
diff changeset
  2617
        count := level negated
48194c26a46c Initial revision
claus
parents:
diff changeset
  2618
    ] ifFalse:[
48194c26a46c Initial revision
claus
parents:
diff changeset
  2619
        (softEdge and:[level > 1]) ifTrue:[
48194c26a46c Initial revision
claus
parents:
diff changeset
  2620
            rightFg := halfShadowColor
48194c26a46c Initial revision
claus
parents:
diff changeset
  2621
        ] ifFalse:[
48194c26a46c Initial revision
claus
parents:
diff changeset
  2622
            rightFg := shadowColor
48194c26a46c Initial revision
claus
parents:
diff changeset
  2623
        ].
48194c26a46c Initial revision
claus
parents:
diff changeset
  2624
        count := level
48194c26a46c Initial revision
claus
parents:
diff changeset
  2625
    ].
48194c26a46c Initial revision
claus
parents:
diff changeset
  2626
48194c26a46c Initial revision
claus
parents:
diff changeset
  2627
    super lineWidth:0.
48194c26a46c Initial revision
claus
parents:
diff changeset
  2628
    super paint:rightFg.
48194c26a46c Initial revision
claus
parents:
diff changeset
  2629
    0 to:(count - 1) do:[:i |
48194c26a46c Initial revision
claus
parents:
diff changeset
  2630
        r := width - 1 - i.
48194c26a46c Initial revision
claus
parents:
diff changeset
  2631
        super displayLineFromX:r y:i toX:r y:(height - 1 - i)
48194c26a46c Initial revision
claus
parents:
diff changeset
  2632
    ].
48194c26a46c Initial revision
claus
parents:
diff changeset
  2633
    (softEdge and:[level > 1]) ifTrue:[
48194c26a46c Initial revision
claus
parents:
diff changeset
  2634
        super paint:shadowColor.
48194c26a46c Initial revision
claus
parents:
diff changeset
  2635
        super displayLineFromX:width-1 y:1 toX:width-1 y:height-1. 
48194c26a46c Initial revision
claus
parents:
diff changeset
  2636
    ]
48194c26a46c Initial revision
claus
parents:
diff changeset
  2637
!
48194c26a46c Initial revision
claus
parents:
diff changeset
  2638
48194c26a46c Initial revision
claus
parents:
diff changeset
  2639
drawTopEdge
48194c26a46c Initial revision
claus
parents:
diff changeset
  2640
    "draw top 3D edge into window frame"
48194c26a46c Initial revision
claus
parents:
diff changeset
  2641
48194c26a46c Initial revision
claus
parents:
diff changeset
  2642
    |topFg topHalfFg
48194c26a46c Initial revision
claus
parents:
diff changeset
  2643
     count "{ Class: SmallInteger }" |
48194c26a46c Initial revision
claus
parents:
diff changeset
  2644
48194c26a46c Initial revision
claus
parents:
diff changeset
  2645
    (level < 0) ifTrue:[
48194c26a46c Initial revision
claus
parents:
diff changeset
  2646
        topFg := shadowColor.
48194c26a46c Initial revision
claus
parents:
diff changeset
  2647
        topHalfFg := halfShadowColor.
48194c26a46c Initial revision
claus
parents:
diff changeset
  2648
        count := level negated
48194c26a46c Initial revision
claus
parents:
diff changeset
  2649
    ] ifFalse:[
48194c26a46c Initial revision
claus
parents:
diff changeset
  2650
        topFg := lightColor.
48194c26a46c Initial revision
claus
parents:
diff changeset
  2651
        topHalfFg := halfLightColor.
48194c26a46c Initial revision
claus
parents:
diff changeset
  2652
        count := level
48194c26a46c Initial revision
claus
parents:
diff changeset
  2653
    ].
48194c26a46c Initial revision
claus
parents:
diff changeset
  2654
48194c26a46c Initial revision
claus
parents:
diff changeset
  2655
    super lineWidth:0.
48194c26a46c Initial revision
claus
parents:
diff changeset
  2656
    (softEdge and:[level > 0]) ifTrue:[
48194c26a46c Initial revision
claus
parents:
diff changeset
  2657
        super paint:topHalfFg
48194c26a46c Initial revision
claus
parents:
diff changeset
  2658
    ] ifFalse:[
48194c26a46c Initial revision
claus
parents:
diff changeset
  2659
        super paint:topFg
48194c26a46c Initial revision
claus
parents:
diff changeset
  2660
    ].
48194c26a46c Initial revision
claus
parents:
diff changeset
  2661
    0 to:(count - 1) do:[:i |
48194c26a46c Initial revision
claus
parents:
diff changeset
  2662
        super displayLineFromX:i y:i toX:(width - 1 - i) y:i
48194c26a46c Initial revision
claus
parents:
diff changeset
  2663
    ].
48194c26a46c Initial revision
claus
parents:
diff changeset
  2664
    (softEdge and:[level > 2]) ifTrue:[
48194c26a46c Initial revision
claus
parents:
diff changeset
  2665
        super paint:Black.
48194c26a46c Initial revision
claus
parents:
diff changeset
  2666
        super displayLineFromX:0 y:0 toX:width-1 y:0. 
48194c26a46c Initial revision
claus
parents:
diff changeset
  2667
    ]
48194c26a46c Initial revision
claus
parents:
diff changeset
  2668
!
48194c26a46c Initial revision
claus
parents:
diff changeset
  2669
48194c26a46c Initial revision
claus
parents:
diff changeset
  2670
drawBottomEdge
48194c26a46c Initial revision
claus
parents:
diff changeset
  2671
    "draw bottom 3D edge into window frame"
48194c26a46c Initial revision
claus
parents:
diff changeset
  2672
48194c26a46c Initial revision
claus
parents:
diff changeset
  2673
    |botFg
48194c26a46c Initial revision
claus
parents:
diff changeset
  2674
     count "{ Class: SmallInteger }" 
48194c26a46c Initial revision
claus
parents:
diff changeset
  2675
     b|
48194c26a46c Initial revision
claus
parents:
diff changeset
  2676
48194c26a46c Initial revision
claus
parents:
diff changeset
  2677
    (level < 0) ifTrue:[
48194c26a46c Initial revision
claus
parents:
diff changeset
  2678
        botFg := lightColor.
48194c26a46c Initial revision
claus
parents:
diff changeset
  2679
        count := level negated
48194c26a46c Initial revision
claus
parents:
diff changeset
  2680
    ] ifFalse:[
48194c26a46c Initial revision
claus
parents:
diff changeset
  2681
        (softEdge and:[level > 1]) ifTrue:[
48194c26a46c Initial revision
claus
parents:
diff changeset
  2682
            botFg := halfShadowColor
48194c26a46c Initial revision
claus
parents:
diff changeset
  2683
        ] ifFalse:[
48194c26a46c Initial revision
claus
parents:
diff changeset
  2684
            botFg := shadowColor
48194c26a46c Initial revision
claus
parents:
diff changeset
  2685
        ].
48194c26a46c Initial revision
claus
parents:
diff changeset
  2686
        count := level
48194c26a46c Initial revision
claus
parents:
diff changeset
  2687
    ].
48194c26a46c Initial revision
claus
parents:
diff changeset
  2688
48194c26a46c Initial revision
claus
parents:
diff changeset
  2689
    super lineWidth:0.
48194c26a46c Initial revision
claus
parents:
diff changeset
  2690
    super paint:botFg.
48194c26a46c Initial revision
claus
parents:
diff changeset
  2691
    0 to:(count - 1) do:[:i |
48194c26a46c Initial revision
claus
parents:
diff changeset
  2692
        b := height - 1 - i.
48194c26a46c Initial revision
claus
parents:
diff changeset
  2693
        super displayLineFromX:i y:b toX:(width "- 1" - i) y:b
48194c26a46c Initial revision
claus
parents:
diff changeset
  2694
    ].
48194c26a46c Initial revision
claus
parents:
diff changeset
  2695
    (softEdge and:[level > 1]) ifTrue:[
48194c26a46c Initial revision
claus
parents:
diff changeset
  2696
        super paint:shadowColor.
48194c26a46c Initial revision
claus
parents:
diff changeset
  2697
        super displayLineFromX:1 y:height-1 toX:width-1 y:height-1. 
48194c26a46c Initial revision
claus
parents:
diff changeset
  2698
    ]
48194c26a46c Initial revision
claus
parents:
diff changeset
  2699
!
48194c26a46c Initial revision
claus
parents:
diff changeset
  2700
48194c26a46c Initial revision
claus
parents:
diff changeset
  2701
redrawEdges
48194c26a46c Initial revision
claus
parents:
diff changeset
  2702
    "redraw my edges if 3D"
48194c26a46c Initial revision
claus
parents:
diff changeset
  2703
48194c26a46c Initial revision
claus
parents:
diff changeset
  2704
    self is3D ifTrue:[
48194c26a46c Initial revision
claus
parents:
diff changeset
  2705
        (level ~~ 0) ifTrue:[
48194c26a46c Initial revision
claus
parents:
diff changeset
  2706
            self clipRect:nil.
48194c26a46c Initial revision
claus
parents:
diff changeset
  2707
            self drawEdgesForX:0 y:0
48194c26a46c Initial revision
claus
parents:
diff changeset
  2708
                         width:width height:height
48194c26a46c Initial revision
claus
parents:
diff changeset
  2709
                         level:level.
48194c26a46c Initial revision
claus
parents:
diff changeset
  2710
            self clipRect:innerClipRect
48194c26a46c Initial revision
claus
parents:
diff changeset
  2711
        ]
48194c26a46c Initial revision
claus
parents:
diff changeset
  2712
    ]
48194c26a46c Initial revision
claus
parents:
diff changeset
  2713
!
48194c26a46c Initial revision
claus
parents:
diff changeset
  2714
48194c26a46c Initial revision
claus
parents:
diff changeset
  2715
redraw
48194c26a46c Initial revision
claus
parents:
diff changeset
  2716
    "redraw myself
48194c26a46c Initial revision
claus
parents:
diff changeset
  2717
     if there is a model, this one shall redraw itself,
48194c26a46c Initial revision
claus
parents:
diff changeset
  2718
     otherwise we cannot do much here - has to be redefined in subclasses"
48194c26a46c Initial revision
claus
parents:
diff changeset
  2719
48194c26a46c Initial revision
claus
parents:
diff changeset
  2720
    model notNil ifTrue:[
48194c26a46c Initial revision
claus
parents:
diff changeset
  2721
        model update:self
48194c26a46c Initial revision
claus
parents:
diff changeset
  2722
    ]
48194c26a46c Initial revision
claus
parents:
diff changeset
  2723
!
48194c26a46c Initial revision
claus
parents:
diff changeset
  2724
48194c26a46c Initial revision
claus
parents:
diff changeset
  2725
redrawX:x y:y width:w height:h
48194c26a46c Initial revision
claus
parents:
diff changeset
  2726
    "have to redraw part -
48194c26a46c Initial revision
claus
parents:
diff changeset
  2727
     default is to redraw everything - subclasses should add intelligence"
48194c26a46c Initial revision
claus
parents:
diff changeset
  2728
48194c26a46c Initial revision
claus
parents:
diff changeset
  2729
    |area|
48194c26a46c Initial revision
claus
parents:
diff changeset
  2730
48194c26a46c Initial revision
claus
parents:
diff changeset
  2731
    area := Rectangle left:x top:y width:w height:h.      
48194c26a46c Initial revision
claus
parents:
diff changeset
  2732
    self clippedTo:area do:[
48194c26a46c Initial revision
claus
parents:
diff changeset
  2733
        controller notNil ifTrue:[
48194c26a46c Initial revision
claus
parents:
diff changeset
  2734
            "ST-80 updating"
48194c26a46c Initial revision
claus
parents:
diff changeset
  2735
            self update:#rectangle with:area
48194c26a46c Initial revision
claus
parents:
diff changeset
  2736
        ] ifFalse:[
48194c26a46c Initial revision
claus
parents:
diff changeset
  2737
            components notNil ifTrue:[
48194c26a46c Initial revision
claus
parents:
diff changeset
  2738
                components do:[:aComponent |
48194c26a46c Initial revision
claus
parents:
diff changeset
  2739
                    (aComponent frame intersects:area) ifTrue:[
48194c26a46c Initial revision
claus
parents:
diff changeset
  2740
                        aComponent drawIn:self offset:0@0
48194c26a46c Initial revision
claus
parents:
diff changeset
  2741
                    ]
48194c26a46c Initial revision
claus
parents:
diff changeset
  2742
                ]
48194c26a46c Initial revision
claus
parents:
diff changeset
  2743
            ] ifFalse:[
48194c26a46c Initial revision
claus
parents:
diff changeset
  2744
                self redraw
48194c26a46c Initial revision
claus
parents:
diff changeset
  2745
            ]
48194c26a46c Initial revision
claus
parents:
diff changeset
  2746
        ]
48194c26a46c Initial revision
claus
parents:
diff changeset
  2747
    ]                                                              
48194c26a46c Initial revision
claus
parents:
diff changeset
  2748
! !
48194c26a46c Initial revision
claus
parents:
diff changeset
  2749
48194c26a46c Initial revision
claus
parents:
diff changeset
  2750
!View methodsFor:'events'!
48194c26a46c Initial revision
claus
parents:
diff changeset
  2751
12
9f0995fac1fa *** empty log message ***
claus
parents: 6
diff changeset
  2752
destroyed
9f0995fac1fa *** empty log message ***
claus
parents: 6
diff changeset
  2753
    "view has been destroyed by someone else"
9f0995fac1fa *** empty log message ***
claus
parents: 6
diff changeset
  2754
9f0995fac1fa *** empty log message ***
claus
parents: 6
diff changeset
  2755
    shown := false.
9f0995fac1fa *** empty log message ***
claus
parents: 6
diff changeset
  2756
    super destroyed
9f0995fac1fa *** empty log message ***
claus
parents: 6
diff changeset
  2757
!
9f0995fac1fa *** empty log message ***
claus
parents: 6
diff changeset
  2758
0
48194c26a46c Initial revision
claus
parents:
diff changeset
  2759
sizeChanged:how
48194c26a46c Initial revision
claus
parents:
diff changeset
  2760
    "tell subviews if I change size"
48194c26a46c Initial revision
claus
parents:
diff changeset
  2761
48194c26a46c Initial revision
claus
parents:
diff changeset
  2762
    transformation := nil.  "transformation becomes void"
48194c26a46c Initial revision
claus
parents:
diff changeset
  2763
    subViews notNil ifTrue:[
48194c26a46c Initial revision
claus
parents:
diff changeset
  2764
        (how == #smaller) ifTrue:[
48194c26a46c Initial revision
claus
parents:
diff changeset
  2765
            subViews do:[:view |
48194c26a46c Initial revision
claus
parents:
diff changeset
  2766
                view superViewChangedSize
48194c26a46c Initial revision
claus
parents:
diff changeset
  2767
            ]
48194c26a46c Initial revision
claus
parents:
diff changeset
  2768
        ] ifFalse:[
48194c26a46c Initial revision
claus
parents:
diff changeset
  2769
            "doing it reverse speeds up resizing - usually subviews
48194c26a46c Initial revision
claus
parents:
diff changeset
  2770
             are created from top-left to bottom-right; therefore
48194c26a46c Initial revision
claus
parents:
diff changeset
  2771
             bottom-right views will be moved/resized first, then top-left ones;
48194c26a46c Initial revision
claus
parents:
diff changeset
  2772
             this avoids multiple redraws of subviews"
48194c26a46c Initial revision
claus
parents:
diff changeset
  2773
48194c26a46c Initial revision
claus
parents:
diff changeset
  2774
            subViews reverseDo:[:view |
48194c26a46c Initial revision
claus
parents:
diff changeset
  2775
                view superViewChangedSize
48194c26a46c Initial revision
claus
parents:
diff changeset
  2776
            ]
48194c26a46c Initial revision
claus
parents:
diff changeset
  2777
        ]
48194c26a46c Initial revision
claus
parents:
diff changeset
  2778
    ]
48194c26a46c Initial revision
claus
parents:
diff changeset
  2779
!
48194c26a46c Initial revision
claus
parents:
diff changeset
  2780
48194c26a46c Initial revision
claus
parents:
diff changeset
  2781
superViewChangedSize
48194c26a46c Initial revision
claus
parents:
diff changeset
  2782
    "my superView has changed size; if I have relative
48194c26a46c Initial revision
claus
parents:
diff changeset
  2783
     origin/extent or blocks to evaluate, do it now .."
48194c26a46c Initial revision
claus
parents:
diff changeset
  2784
48194c26a46c Initial revision
claus
parents:
diff changeset
  2785
    |oldWidth oldHeight oldTop oldLeft newExt newOrg
48194c26a46c Initial revision
claus
parents:
diff changeset
  2786
     winSuper newWidth newHeight newLeft newTop newCorner
48194c26a46c Initial revision
claus
parents:
diff changeset
  2787
     superWidth superHeight superWinWidth superWinHeight|
48194c26a46c Initial revision
claus
parents:
diff changeset
  2788
48194c26a46c Initial revision
claus
parents:
diff changeset
  2789
    oldWidth := width.
48194c26a46c Initial revision
claus
parents:
diff changeset
  2790
    oldHeight := height.
48194c26a46c Initial revision
claus
parents:
diff changeset
  2791
    oldTop := top.
48194c26a46c Initial revision
claus
parents:
diff changeset
  2792
    oldLeft := left.
48194c26a46c Initial revision
claus
parents:
diff changeset
  2793
48194c26a46c Initial revision
claus
parents:
diff changeset
  2794
    viewport notNil ifTrue:[
48194c26a46c Initial revision
claus
parents:
diff changeset
  2795
        "if this view has a viewPort, resize a la st-80"
48194c26a46c Initial revision
claus
parents:
diff changeset
  2796
        superView isNil ifTrue:[^ self].
48194c26a46c Initial revision
claus
parents:
diff changeset
  2797
        winSuper := superView window.
48194c26a46c Initial revision
claus
parents:
diff changeset
  2798
        winSuper isNil ifTrue:[
48194c26a46c Initial revision
claus
parents:
diff changeset
  2799
            "take pixel size as window"
48194c26a46c Initial revision
claus
parents:
diff changeset
  2800
            winSuper := 0@0 extent:(superView width@superView height)
48194c26a46c Initial revision
claus
parents:
diff changeset
  2801
        ].
48194c26a46c Initial revision
claus
parents:
diff changeset
  2802
48194c26a46c Initial revision
claus
parents:
diff changeset
  2803
48194c26a46c Initial revision
claus
parents:
diff changeset
  2804
        superWidth := superView width.
48194c26a46c Initial revision
claus
parents:
diff changeset
  2805
        superHeight := superView height.
48194c26a46c Initial revision
claus
parents:
diff changeset
  2806
        superWinWidth := winSuper width.
48194c26a46c Initial revision
claus
parents:
diff changeset
  2807
        superWinHeight := winSuper height.
48194c26a46c Initial revision
claus
parents:
diff changeset
  2808
        newLeft := (viewport left - winSuper left) * superWidth // superWinWidth.
48194c26a46c Initial revision
claus
parents:
diff changeset
  2809
        newTop := (viewport top - winSuper top) * superHeight // superWinHeight.
48194c26a46c Initial revision
claus
parents:
diff changeset
  2810
        newWidth := superWidth * viewport width // superWinWidth.
48194c26a46c Initial revision
claus
parents:
diff changeset
  2811
        newHeight := superHeight * viewport height // superWinHeight.
48194c26a46c Initial revision
claus
parents:
diff changeset
  2812
        self pixelOrigin:(newLeft @ newTop).
48194c26a46c Initial revision
claus
parents:
diff changeset
  2813
        self pixelExtent:(newWidth @ newHeight).
48194c26a46c Initial revision
claus
parents:
diff changeset
  2814
        ^ self
48194c26a46c Initial revision
claus
parents:
diff changeset
  2815
    ].
48194c26a46c Initial revision
claus
parents:
diff changeset
  2816
48194c26a46c Initial revision
claus
parents:
diff changeset
  2817
    (originRule notNil) ifTrue:[
48194c26a46c Initial revision
claus
parents:
diff changeset
  2818
        newOrg := originRule value
48194c26a46c Initial revision
claus
parents:
diff changeset
  2819
    ] ifFalse:[
48194c26a46c Initial revision
claus
parents:
diff changeset
  2820
        (relativeOrigin notNil) ifTrue:[
48194c26a46c Initial revision
claus
parents:
diff changeset
  2821
            "self originFromRelativeOrigin      "
48194c26a46c Initial revision
claus
parents:
diff changeset
  2822
            newOrg := self originFromRelativeOrigin.
48194c26a46c Initial revision
claus
parents:
diff changeset
  2823
"
48194c26a46c Initial revision
claus
parents:
diff changeset
  2824
            borderWidth ~~ 0 ifTrue:[
48194c26a46c Initial revision
claus
parents:
diff changeset
  2825
                newOrg := newOrg - (borderWidth @ borderWidth)
48194c26a46c Initial revision
claus
parents:
diff changeset
  2826
            ]
48194c26a46c Initial revision
claus
parents:
diff changeset
  2827
"
48194c26a46c Initial revision
claus
parents:
diff changeset
  2828
        ]
48194c26a46c Initial revision
claus
parents:
diff changeset
  2829
    ].
48194c26a46c Initial revision
claus
parents:
diff changeset
  2830
48194c26a46c Initial revision
claus
parents:
diff changeset
  2831
    (cornerRule notNil) ifTrue:[
48194c26a46c Initial revision
claus
parents:
diff changeset
  2832
        newCorner := cornerRule value
48194c26a46c Initial revision
claus
parents:
diff changeset
  2833
    ] ifFalse:[
48194c26a46c Initial revision
claus
parents:
diff changeset
  2834
        (relativeCorner notNil) ifTrue:[
48194c26a46c Initial revision
claus
parents:
diff changeset
  2835
            newCorner := self cornerFromRelativeCorner
48194c26a46c Initial revision
claus
parents:
diff changeset
  2836
        ] ifFalse:[
48194c26a46c Initial revision
claus
parents:
diff changeset
  2837
            (extentRule notNil) ifTrue:[
48194c26a46c Initial revision
claus
parents:
diff changeset
  2838
                newExt := extentRule value
48194c26a46c Initial revision
claus
parents:
diff changeset
  2839
            ] ifFalse:[
48194c26a46c Initial revision
claus
parents:
diff changeset
  2840
                (relativeExtent notNil) ifTrue:[
48194c26a46c Initial revision
claus
parents:
diff changeset
  2841
                    newExt := self extentFromRelativeExtent
48194c26a46c Initial revision
claus
parents:
diff changeset
  2842
                ]
48194c26a46c Initial revision
claus
parents:
diff changeset
  2843
            ].
48194c26a46c Initial revision
claus
parents:
diff changeset
  2844
        ]
48194c26a46c Initial revision
claus
parents:
diff changeset
  2845
    ].
48194c26a46c Initial revision
claus
parents:
diff changeset
  2846
48194c26a46c Initial revision
claus
parents:
diff changeset
  2847
    newOrg notNil ifTrue:[
48194c26a46c Initial revision
claus
parents:
diff changeset
  2848
        ((newOrg x == oldLeft) and:[newOrg y == oldTop]) ifTrue:[
48194c26a46c Initial revision
claus
parents:
diff changeset
  2849
            newOrg := nil
48194c26a46c Initial revision
claus
parents:
diff changeset
  2850
        ]
48194c26a46c Initial revision
claus
parents:
diff changeset
  2851
    ].
48194c26a46c Initial revision
claus
parents:
diff changeset
  2852
    newCorner notNil ifTrue:[
48194c26a46c Initial revision
claus
parents:
diff changeset
  2853
        (newCorner = self corner) ifTrue:[
48194c26a46c Initial revision
claus
parents:
diff changeset
  2854
            newCorner := nil
48194c26a46c Initial revision
claus
parents:
diff changeset
  2855
        ] ifFalse:[
48194c26a46c Initial revision
claus
parents:
diff changeset
  2856
            self corner isNil ifTrue:[
48194c26a46c Initial revision
claus
parents:
diff changeset
  2857
                newExt notNil ifTrue:[
48194c26a46c Initial revision
claus
parents:
diff changeset
  2858
                    ((newExt x == oldWidth) and:[newExt y == oldHeight]) ifTrue:[
48194c26a46c Initial revision
claus
parents:
diff changeset
  2859
                        newExt := nil
48194c26a46c Initial revision
claus
parents:
diff changeset
  2860
                    ]
48194c26a46c Initial revision
claus
parents:
diff changeset
  2861
                ].
48194c26a46c Initial revision
claus
parents:
diff changeset
  2862
            ]
48194c26a46c Initial revision
claus
parents:
diff changeset
  2863
        ]
48194c26a46c Initial revision
claus
parents:
diff changeset
  2864
    ].
48194c26a46c Initial revision
claus
parents:
diff changeset
  2865
48194c26a46c Initial revision
claus
parents:
diff changeset
  2866
    newCorner isNil ifTrue:[
48194c26a46c Initial revision
claus
parents:
diff changeset
  2867
        newExt isNil ifTrue:[
48194c26a46c Initial revision
claus
parents:
diff changeset
  2868
            newOrg notNil ifTrue:[
48194c26a46c Initial revision
claus
parents:
diff changeset
  2869
                self pixelOrigin:newOrg
48194c26a46c Initial revision
claus
parents:
diff changeset
  2870
            ]
48194c26a46c Initial revision
claus
parents:
diff changeset
  2871
        ] ifFalse:[
48194c26a46c Initial revision
claus
parents:
diff changeset
  2872
            newOrg isNil ifTrue:[
48194c26a46c Initial revision
claus
parents:
diff changeset
  2873
                self pixelExtent:newExt
48194c26a46c Initial revision
claus
parents:
diff changeset
  2874
            ] ifFalse:[
48194c26a46c Initial revision
claus
parents:
diff changeset
  2875
                self pixelOrigin:newOrg extent:newExt
48194c26a46c Initial revision
claus
parents:
diff changeset
  2876
            ]
48194c26a46c Initial revision
claus
parents:
diff changeset
  2877
        ]
48194c26a46c Initial revision
claus
parents:
diff changeset
  2878
    ] ifFalse:[
48194c26a46c Initial revision
claus
parents:
diff changeset
  2879
        newOrg isNil ifTrue:[
48194c26a46c Initial revision
claus
parents:
diff changeset
  2880
            self pixelCorner:newCorner
48194c26a46c Initial revision
claus
parents:
diff changeset
  2881
        ] ifFalse:[
48194c26a46c Initial revision
claus
parents:
diff changeset
  2882
            self pixelOrigin:newOrg corner:newCorner
48194c26a46c Initial revision
claus
parents:
diff changeset
  2883
        ]
48194c26a46c Initial revision
claus
parents:
diff changeset
  2884
    ]
48194c26a46c Initial revision
claus
parents:
diff changeset
  2885
!
48194c26a46c Initial revision
claus
parents:
diff changeset
  2886
48194c26a46c Initial revision
claus
parents:
diff changeset
  2887
configureX:x y:y width:newWidth height:newHeight
48194c26a46c Initial revision
claus
parents:
diff changeset
  2888
    "my size has changed by window manager action"
48194c26a46c Initial revision
claus
parents:
diff changeset
  2889
48194c26a46c Initial revision
claus
parents:
diff changeset
  2890
    |how anyEdge mustRedrawBottomEdge mustRedrawRightEdge|
48194c26a46c Initial revision
claus
parents:
diff changeset
  2891
48194c26a46c Initial revision
claus
parents:
diff changeset
  2892
    left := x.
48194c26a46c Initial revision
claus
parents:
diff changeset
  2893
    top := y.
48194c26a46c Initial revision
claus
parents:
diff changeset
  2894
    ((width ~~ newWidth) or:[height ~~ newHeight]) ifTrue:[
48194c26a46c Initial revision
claus
parents:
diff changeset
  2895
        realized ifFalse:[
48194c26a46c Initial revision
claus
parents:
diff changeset
  2896
            width := newWidth.
48194c26a46c Initial revision
claus
parents:
diff changeset
  2897
            height := newHeight.
48194c26a46c Initial revision
claus
parents:
diff changeset
  2898
            extentChanged := true.
48194c26a46c Initial revision
claus
parents:
diff changeset
  2899
            ^ self
48194c26a46c Initial revision
claus
parents:
diff changeset
  2900
        ].
48194c26a46c Initial revision
claus
parents:
diff changeset
  2901
48194c26a46c Initial revision
claus
parents:
diff changeset
  2902
        ((newWidth <= width) and:[newHeight <= height]) ifTrue:[
48194c26a46c Initial revision
claus
parents:
diff changeset
  2903
            how := #smaller
48194c26a46c Initial revision
claus
parents:
diff changeset
  2904
        ].
48194c26a46c Initial revision
claus
parents:
diff changeset
  2905
48194c26a46c Initial revision
claus
parents:
diff changeset
  2906
        self is3D ifTrue:[
48194c26a46c Initial revision
claus
parents:
diff changeset
  2907
            mustRedrawBottomEdge := newHeight < height.
48194c26a46c Initial revision
claus
parents:
diff changeset
  2908
            mustRedrawRightEdge := newWidth < width.
48194c26a46c Initial revision
claus
parents:
diff changeset
  2909
            anyEdge := mustRedrawBottomEdge or:[mustRedrawRightEdge]
48194c26a46c Initial revision
claus
parents:
diff changeset
  2910
        ] ifFalse:[
48194c26a46c Initial revision
claus
parents:
diff changeset
  2911
            anyEdge := false
48194c26a46c Initial revision
claus
parents:
diff changeset
  2912
        ].
48194c26a46c Initial revision
claus
parents:
diff changeset
  2913
48194c26a46c Initial revision
claus
parents:
diff changeset
  2914
        width := newWidth.
48194c26a46c Initial revision
claus
parents:
diff changeset
  2915
        height := newHeight.
48194c26a46c Initial revision
claus
parents:
diff changeset
  2916
48194c26a46c Initial revision
claus
parents:
diff changeset
  2917
        "recompute inner-clip if needed"
48194c26a46c Initial revision
claus
parents:
diff changeset
  2918
        self setInnerClip.
48194c26a46c Initial revision
claus
parents:
diff changeset
  2919
12
9f0995fac1fa *** empty log message ***
claus
parents: 6
diff changeset
  2920
        self sizeChanged:how.
0
48194c26a46c Initial revision
claus
parents:
diff changeset
  2921
48194c26a46c Initial revision
claus
parents:
diff changeset
  2922
        anyEdge ifTrue:[
48194c26a46c Initial revision
claus
parents:
diff changeset
  2923
            self clipRect:nil.
48194c26a46c Initial revision
claus
parents:
diff changeset
  2924
            mustRedrawBottomEdge ifTrue:[
48194c26a46c Initial revision
claus
parents:
diff changeset
  2925
                self drawBottomEdge
48194c26a46c Initial revision
claus
parents:
diff changeset
  2926
            ].
48194c26a46c Initial revision
claus
parents:
diff changeset
  2927
            mustRedrawRightEdge ifTrue:[
48194c26a46c Initial revision
claus
parents:
diff changeset
  2928
                self drawRightEdge
48194c26a46c Initial revision
claus
parents:
diff changeset
  2929
            ].
48194c26a46c Initial revision
claus
parents:
diff changeset
  2930
            self clipRect:innerClipRect
48194c26a46c Initial revision
claus
parents:
diff changeset
  2931
        ]
48194c26a46c Initial revision
claus
parents:
diff changeset
  2932
    ]
48194c26a46c Initial revision
claus
parents:
diff changeset
  2933
!
48194c26a46c Initial revision
claus
parents:
diff changeset
  2934
48194c26a46c Initial revision
claus
parents:
diff changeset
  2935
mapped
48194c26a46c Initial revision
claus
parents:
diff changeset
  2936
    "the view has been mapped (by some outside
48194c26a46c Initial revision
claus
parents:
diff changeset
  2937
     action - i.e. window manager de-iconified me)"
48194c26a46c Initial revision
claus
parents:
diff changeset
  2938
48194c26a46c Initial revision
claus
parents:
diff changeset
  2939
    realized := true.
48194c26a46c Initial revision
claus
parents:
diff changeset
  2940
    shown := true
48194c26a46c Initial revision
claus
parents:
diff changeset
  2941
!
48194c26a46c Initial revision
claus
parents:
diff changeset
  2942
48194c26a46c Initial revision
claus
parents:
diff changeset
  2943
unmapped
48194c26a46c Initial revision
claus
parents:
diff changeset
  2944
    "the view has been unmapped (by some outside
48194c26a46c Initial revision
claus
parents:
diff changeset
  2945
     action - i.e. window manager iconified me)"
48194c26a46c Initial revision
claus
parents:
diff changeset
  2946
48194c26a46c Initial revision
claus
parents:
diff changeset
  2947
    shown := false
48194c26a46c Initial revision
claus
parents:
diff changeset
  2948
!
48194c26a46c Initial revision
claus
parents:
diff changeset
  2949
12
9f0995fac1fa *** empty log message ***
claus
parents: 6
diff changeset
  2950
reparented
9f0995fac1fa *** empty log message ***
claus
parents: 6
diff changeset
  2951
    "the view has changed its parent by some outside
9f0995fac1fa *** empty log message ***
claus
parents: 6
diff changeset
  2952
     action - i.e. window manager has added a frame.
9f0995fac1fa *** empty log message ***
claus
parents: 6
diff changeset
  2953
     nothing done here"
9f0995fac1fa *** empty log message ***
claus
parents: 6
diff changeset
  2954
9f0995fac1fa *** empty log message ***
claus
parents: 6
diff changeset
  2955
    ^ self
9f0995fac1fa *** empty log message ***
claus
parents: 6
diff changeset
  2956
!
9f0995fac1fa *** empty log message ***
claus
parents: 6
diff changeset
  2957
0
48194c26a46c Initial revision
claus
parents:
diff changeset
  2958
exposeX:x y:y width:w height:h
48194c26a46c Initial revision
claus
parents:
diff changeset
  2959
    "a low level redraw event from device
48194c26a46c Initial revision
claus
parents:
diff changeset
  2960
      - let subclass handle the redraw and take care of edges here"
48194c26a46c Initial revision
claus
parents:
diff changeset
  2961
48194c26a46c Initial revision
claus
parents:
diff changeset
  2962
    |leftEdge topEdge rightEdge botEdge anyEdge nx ny nw nh|
48194c26a46c Initial revision
claus
parents:
diff changeset
  2963
48194c26a46c Initial revision
claus
parents:
diff changeset
  2964
    nw := w.
48194c26a46c Initial revision
claus
parents:
diff changeset
  2965
    nh := h.
48194c26a46c Initial revision
claus
parents:
diff changeset
  2966
    nx := x.
48194c26a46c Initial revision
claus
parents:
diff changeset
  2967
    ny := y.
48194c26a46c Initial revision
claus
parents:
diff changeset
  2968
48194c26a46c Initial revision
claus
parents:
diff changeset
  2969
    anyEdge := false.
48194c26a46c Initial revision
claus
parents:
diff changeset
  2970
48194c26a46c Initial revision
claus
parents:
diff changeset
  2971
    "check if there is a need to draw an edge"
48194c26a46c Initial revision
claus
parents:
diff changeset
  2972
48194c26a46c Initial revision
claus
parents:
diff changeset
  2973
    (margin ~~ 0) ifTrue:[
48194c26a46c Initial revision
claus
parents:
diff changeset
  2974
        leftEdge := false.
48194c26a46c Initial revision
claus
parents:
diff changeset
  2975
        topEdge := false.
48194c26a46c Initial revision
claus
parents:
diff changeset
  2976
        rightEdge := false.
48194c26a46c Initial revision
claus
parents:
diff changeset
  2977
        botEdge := false.
48194c26a46c Initial revision
claus
parents:
diff changeset
  2978
        (x < margin) ifTrue:[
48194c26a46c Initial revision
claus
parents:
diff changeset
  2979
            nx := margin.
48194c26a46c Initial revision
claus
parents:
diff changeset
  2980
            nw := nw - (nx - x).
48194c26a46c Initial revision
claus
parents:
diff changeset
  2981
            leftEdge := true.
48194c26a46c Initial revision
claus
parents:
diff changeset
  2982
            anyEdge := true
48194c26a46c Initial revision
claus
parents:
diff changeset
  2983
        ].
48194c26a46c Initial revision
claus
parents:
diff changeset
  2984
        ((x + w - 1) >= (width - margin)) ifTrue:[
48194c26a46c Initial revision
claus
parents:
diff changeset
  2985
            nw := (width - margin - nx).
48194c26a46c Initial revision
claus
parents:
diff changeset
  2986
            rightEdge := true.
48194c26a46c Initial revision
claus
parents:
diff changeset
  2987
            anyEdge := true
48194c26a46c Initial revision
claus
parents:
diff changeset
  2988
        ].
48194c26a46c Initial revision
claus
parents:
diff changeset
  2989
        (y < margin) ifTrue:[
48194c26a46c Initial revision
claus
parents:
diff changeset
  2990
            ny := margin.
48194c26a46c Initial revision
claus
parents:
diff changeset
  2991
            nh := nh - (ny - y).
48194c26a46c Initial revision
claus
parents:
diff changeset
  2992
            topEdge := true.
48194c26a46c Initial revision
claus
parents:
diff changeset
  2993
            anyEdge := true
48194c26a46c Initial revision
claus
parents:
diff changeset
  2994
        ].
48194c26a46c Initial revision
claus
parents:
diff changeset
  2995
        ((y + h - 1) >= (height - margin)) ifTrue:[
48194c26a46c Initial revision
claus
parents:
diff changeset
  2996
            nh := (height - margin - ny).
48194c26a46c Initial revision
claus
parents:
diff changeset
  2997
            botEdge := true.
48194c26a46c Initial revision
claus
parents:
diff changeset
  2998
            anyEdge := true
48194c26a46c Initial revision
claus
parents:
diff changeset
  2999
        ]
48194c26a46c Initial revision
claus
parents:
diff changeset
  3000
    ].
48194c26a46c Initial revision
claus
parents:
diff changeset
  3001
48194c26a46c Initial revision
claus
parents:
diff changeset
  3002
    "redraw inside area"
48194c26a46c Initial revision
claus
parents:
diff changeset
  3003
48194c26a46c Initial revision
claus
parents:
diff changeset
  3004
    self redrawX:nx y:ny width:nw height:nh.
48194c26a46c Initial revision
claus
parents:
diff changeset
  3005
48194c26a46c Initial revision
claus
parents:
diff changeset
  3006
    "redraw edge(s)"
48194c26a46c Initial revision
claus
parents:
diff changeset
  3007
48194c26a46c Initial revision
claus
parents:
diff changeset
  3008
    anyEdge ifTrue:[
48194c26a46c Initial revision
claus
parents:
diff changeset
  3009
        self clipRect:nil.
48194c26a46c Initial revision
claus
parents:
diff changeset
  3010
        (topEdge and:[leftEdge and:[botEdge and:[rightEdge]]]) ifTrue:[
48194c26a46c Initial revision
claus
parents:
diff changeset
  3011
            self drawEdgesForX:0 y:0
48194c26a46c Initial revision
claus
parents:
diff changeset
  3012
                         width:width height:height
48194c26a46c Initial revision
claus
parents:
diff changeset
  3013
                         level:level
48194c26a46c Initial revision
claus
parents:
diff changeset
  3014
        ] ifFalse:[
48194c26a46c Initial revision
claus
parents:
diff changeset
  3015
            topEdge ifTrue:[
48194c26a46c Initial revision
claus
parents:
diff changeset
  3016
                self drawTopEdge
48194c26a46c Initial revision
claus
parents:
diff changeset
  3017
            ].
48194c26a46c Initial revision
claus
parents:
diff changeset
  3018
            leftEdge ifTrue:[
48194c26a46c Initial revision
claus
parents:
diff changeset
  3019
                self drawLeftEdge
48194c26a46c Initial revision
claus
parents:
diff changeset
  3020
            ].
48194c26a46c Initial revision
claus
parents:
diff changeset
  3021
            botEdge ifTrue:[
48194c26a46c Initial revision
claus
parents:
diff changeset
  3022
                self drawBottomEdge
48194c26a46c Initial revision
claus
parents:
diff changeset
  3023
            ].
48194c26a46c Initial revision
claus
parents:
diff changeset
  3024
            rightEdge ifTrue:[
48194c26a46c Initial revision
claus
parents:
diff changeset
  3025
                self drawRightEdge
48194c26a46c Initial revision
claus
parents:
diff changeset
  3026
            ]
48194c26a46c Initial revision
claus
parents:
diff changeset
  3027
        ].
48194c26a46c Initial revision
claus
parents:
diff changeset
  3028
        self clipRect:innerClipRect
48194c26a46c Initial revision
claus
parents:
diff changeset
  3029
    ]
48194c26a46c Initial revision
claus
parents:
diff changeset
  3030
!
48194c26a46c Initial revision
claus
parents:
diff changeset
  3031
48194c26a46c Initial revision
claus
parents:
diff changeset
  3032
keyPress:key x:x y:y
48194c26a46c Initial revision
claus
parents:
diff changeset
  3033
    "a key has been pressed.
48194c26a46c Initial revision
claus
parents:
diff changeset
  3034
     if there is a keyboardHandler, pass input to him"
48194c26a46c Initial revision
claus
parents:
diff changeset
  3035
48194c26a46c Initial revision
claus
parents:
diff changeset
  3036
    "allow forwarding events to the keyboardhandler"
48194c26a46c Initial revision
claus
parents:
diff changeset
  3037
    keyboardHandler notNil ifTrue:[
48194c26a46c Initial revision
claus
parents:
diff changeset
  3038
        keyboardHandler keyPress:key x:x y:y
48194c26a46c Initial revision
claus
parents:
diff changeset
  3039
    ] ifFalse:[
48194c26a46c Initial revision
claus
parents:
diff changeset
  3040
        super keyPress:key x:x y:y
48194c26a46c Initial revision
claus
parents:
diff changeset
  3041
    ]
48194c26a46c Initial revision
claus
parents:
diff changeset
  3042
!
48194c26a46c Initial revision
claus
parents:
diff changeset
  3043
48194c26a46c Initial revision
claus
parents:
diff changeset
  3044
buttonPress:button x:x y:y
48194c26a46c Initial revision
claus
parents:
diff changeset
  3045
    "button was pressed - if its middle button and there is a menu, show it."
48194c26a46c Initial revision
claus
parents:
diff changeset
  3046
48194c26a46c Initial revision
claus
parents:
diff changeset
  3047
    |menu menuSelector|
48194c26a46c Initial revision
claus
parents:
diff changeset
  3048
48194c26a46c Initial revision
claus
parents:
diff changeset
  3049
    (button == 2) ifTrue:[
48194c26a46c Initial revision
claus
parents:
diff changeset
  3050
        "try ST-80 style menus first"
48194c26a46c Initial revision
claus
parents:
diff changeset
  3051
        model notNil ifTrue:[
48194c26a46c Initial revision
claus
parents:
diff changeset
  3052
            menuSymbol notNil ifTrue:[
48194c26a46c Initial revision
claus
parents:
diff changeset
  3053
                menu := model perform:menuSymbol.
48194c26a46c Initial revision
claus
parents:
diff changeset
  3054
                menu notNil ifTrue:[
48194c26a46c Initial revision
claus
parents:
diff changeset
  3055
                    menuSelector := menu startUp.
48194c26a46c Initial revision
claus
parents:
diff changeset
  3056
                    menuSelector ~~ 0 ifTrue:[
48194c26a46c Initial revision
claus
parents:
diff changeset
  3057
                        model perform:menuSelector
48194c26a46c Initial revision
claus
parents:
diff changeset
  3058
                    ]
48194c26a46c Initial revision
claus
parents:
diff changeset
  3059
                ].
48194c26a46c Initial revision
claus
parents:
diff changeset
  3060
                ^ self
48194c26a46c Initial revision
claus
parents:
diff changeset
  3061
            ]
48194c26a46c Initial revision
claus
parents:
diff changeset
  3062
        ]
48194c26a46c Initial revision
claus
parents:
diff changeset
  3063
    ].
48194c26a46c Initial revision
claus
parents:
diff changeset
  3064
    super buttonPress:button x:x y:y
48194c26a46c Initial revision
claus
parents:
diff changeset
  3065
!
48194c26a46c Initial revision
claus
parents:
diff changeset
  3066
12
9f0995fac1fa *** empty log message ***
claus
parents: 6
diff changeset
  3067
XXXwaitForExpose
0
48194c26a46c Initial revision
claus
parents:
diff changeset
  3068
    "after a scroll, we have to wait for expose/noexpose"
48194c26a46c Initial revision
claus
parents:
diff changeset
  3069
48194c26a46c Initial revision
claus
parents:
diff changeset
  3070
    device dispatchExposeEventsFor:drawableId
48194c26a46c Initial revision
claus
parents:
diff changeset
  3071
!
48194c26a46c Initial revision
claus
parents:
diff changeset
  3072
48194c26a46c Initial revision
claus
parents:
diff changeset
  3073
terminate
48194c26a46c Initial revision
claus
parents:
diff changeset
  3074
    "window manager wants me to go away"
48194c26a46c Initial revision
claus
parents:
diff changeset
  3075
48194c26a46c Initial revision
claus
parents:
diff changeset
  3076
    ^ self destroy
48194c26a46c Initial revision
claus
parents:
diff changeset
  3077
!
48194c26a46c Initial revision
claus
parents:
diff changeset
  3078
48194c26a46c Initial revision
claus
parents:
diff changeset
  3079
saveAndTerminate
48194c26a46c Initial revision
claus
parents:
diff changeset
  3080
    "window manager wants me to save and go away"
48194c26a46c Initial revision
claus
parents:
diff changeset
  3081
48194c26a46c Initial revision
claus
parents:
diff changeset
  3082
    ^ self destroy
48194c26a46c Initial revision
claus
parents:
diff changeset
  3083
! !