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