Scroller.st
author claus
Sat, 08 Jan 1994 18:27:56 +0100
changeset 21 9ef599238fea
parent 7 15a9291b9bd0
child 22 ac872628ef2d
permissions -rw-r--r--
*** empty log message ***
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
     1
"
5
claus
parents: 3
diff changeset
     2
 COPYRIGHT (c) 1989 by Claus Gittinger
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
     3
              All Rights Reserved
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
     4
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
     5
 This software is furnished under a license and may be used
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
     6
 only in accordance with the terms of that license and with the
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
     7
 inclusion of the above copyright notice.   This software may not
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
     8
 be provided or otherwise made available to, or used by, any
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
     9
 other person.  No title to or ownership of the software is
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    10
 hereby transferred.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    11
"
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    12
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    13
View subclass:#Scroller
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    14
       instanceVariableNames:'thumbOrigin thumbHeight thumbColor thumbFrameColor
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    15
                              scrollAction moveDirection
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    16
                              thumbFrame thumbLevel
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    17
                              scrolling pressOffset
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    18
                              synchronousOperation
7
15a9291b9bd0 *** empty log message ***
claus
parents: 5
diff changeset
    19
                              shadowForm lightForm inset
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    20
                              thumbShadowColor thumbLightColor
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    21
                              thumbSoftEdge
7
15a9291b9bd0 *** empty log message ***
claus
parents: 5
diff changeset
    22
                              thumbHalfShadowColor thumbHalfLightColor
15a9291b9bd0 *** empty log message ***
claus
parents: 5
diff changeset
    23
                              thumbFrameSizeDifference'
15a9291b9bd0 *** empty log message ***
claus
parents: 5
diff changeset
    24
       classVariableNames:   'handleShadowForm handleLightForm'
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    25
       poolDictionaries:''
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    26
       category:'Views-Interactors'
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    27
!
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    28
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    29
Scroller comment:'
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    30
5
claus
parents: 3
diff changeset
    31
COPYRIGHT (c) 1989 by Claus Gittinger
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    32
              All Rights Reserved
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    33
7
15a9291b9bd0 *** empty log message ***
claus
parents: 5
diff changeset
    34
$Header: /cvs/stx/stx/libwidg/Scroller.st,v 1.4 1993-12-11 01:49:19 claus Exp $
3
claus
parents: 0
diff changeset
    35
claus
parents: 0
diff changeset
    36
written spring/summer 89 by claus
claus
parents: 0
diff changeset
    37
'!
claus
parents: 0
diff changeset
    38
claus
parents: 0
diff changeset
    39
!Scroller class methodsFor:'documentation'!
claus
parents: 0
diff changeset
    40
claus
parents: 0
diff changeset
    41
documentation
claus
parents: 0
diff changeset
    42
"
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    43
this class implements the scroller for scrollbars.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    44
it can also be used by itself for scrollbars without step-buttons.
7
15a9291b9bd0 *** empty log message ***
claus
parents: 5
diff changeset
    45
When moved, a predefined action is performed.
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    46
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    47
Instance variables:
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    48
7
15a9291b9bd0 *** empty log message ***
claus
parents: 5
diff changeset
    49
thumbOrigin                 <Number>        origin of thumb (in percent)
15a9291b9bd0 *** empty log message ***
claus
parents: 5
diff changeset
    50
thumbHeight                 <Number>        height of thumb (in percent)
15a9291b9bd0 *** empty log message ***
claus
parents: 5
diff changeset
    51
thumbColor                  <Color>         color of thumb
15a9291b9bd0 *** empty log message ***
claus
parents: 5
diff changeset
    52
thumbFrameColor             <Color>         color of the frame around the thumb
15a9291b9bd0 *** empty log message ***
claus
parents: 5
diff changeset
    53
scrollAction                <Block>         1 arg block to be evaluated when scrolled
15a9291b9bd0 *** empty log message ***
claus
parents: 5
diff changeset
    54
                                            (arg is position in percent)
15a9291b9bd0 *** empty log message ***
claus
parents: 5
diff changeset
    55
moveDirection               <Symbol>        #x or #y
15a9291b9bd0 *** empty log message ***
claus
parents: 5
diff changeset
    56
thumbFrame                  <Rectangle>     frame of thumb in pixels (cached)
15a9291b9bd0 *** empty log message ***
claus
parents: 5
diff changeset
    57
thumbLevel                  <Number>        level of thumb if 3d
15a9291b9bd0 *** empty log message ***
claus
parents: 5
diff changeset
    58
scrolling                   <Boolean>       true during scroll
15a9291b9bd0 *** empty log message ***
claus
parents: 5
diff changeset
    59
pressOffset                 <Number>        temporary (offset into frame when move started)
15a9291b9bd0 *** empty log message ***
claus
parents: 5
diff changeset
    60
synchronousOperation        <Boolean>       true if synchronous (i.e. dont wait till release
15a9291b9bd0 *** empty log message ***
claus
parents: 5
diff changeset
    61
                                            to perform action)
15a9291b9bd0 *** empty log message ***
claus
parents: 5
diff changeset
    62
shadowForm                  <Form>          bitmap of knob (shadow part)
15a9291b9bd0 *** empty log message ***
claus
parents: 5
diff changeset
    63
lightForm                   <Form>          bitmap of knob (light part)
15a9291b9bd0 *** empty log message ***
claus
parents: 5
diff changeset
    64
inset                       <Integer>       number of pixels to inset thumb from view borders
15a9291b9bd0 *** empty log message ***
claus
parents: 5
diff changeset
    65
thumbShadowColor            <Color>         color do draw dark parts of thumb
15a9291b9bd0 *** empty log message ***
claus
parents: 5
diff changeset
    66
thumblightColor             <Color>         color to draw light parts of thumb
15a9291b9bd0 *** empty log message ***
claus
parents: 5
diff changeset
    67
thumbSoftEdge               <Boolean>       true if edges of thumb are to appear smooth
15a9291b9bd0 *** empty log message ***
claus
parents: 5
diff changeset
    68
thumbHalfShadowColor        <Color>         used to draw smooth edges
15a9291b9bd0 *** empty log message ***
claus
parents: 5
diff changeset
    69
thumbHalfLightColor         <Color>         used to draw smooth edges
15a9291b9bd0 *** empty log message ***
claus
parents: 5
diff changeset
    70
thumbFrameSizeDifference    <Integer>       number of pixels the thumb is larger than 
15a9291b9bd0 *** empty log message ***
claus
parents: 5
diff changeset
    71
                                            it should be
3
claus
parents: 0
diff changeset
    72
"
claus
parents: 0
diff changeset
    73
! !
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    74
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    75
!Scroller class methodsFor:'defaults'!
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    76
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    77
handleShadowFormOn:aDisplay
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    78
    "answer the form used for the handles shadow area;
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    79
     cache the one for Display for the next round"
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    80
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    81
    |f|
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    82
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    83
    ((aDisplay == Display) and:[handleShadowForm notNil]) ifTrue:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    84
        ^ handleShadowForm
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    85
    ].
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    86
    f := Form fromFile:'HandleShadow.xbm' resolution:100 on:aDisplay.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    87
    f isNil ifTrue:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    88
        f := Form width:8 height:8 fromArray:#(2r00111100
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    89
                                               2r01100000
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    90
                                               2r11000000
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    91
                                               2r11000000
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    92
                                               2r11000000
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    93
                                               2r11000000
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    94
                                               2r01000000
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    95
                                               2r00000000)
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    96
                                           on:aDisplay
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    97
    ].
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    98
    (aDisplay == Display) ifTrue:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
    99
        handleShadowForm := f
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   100
    ].
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   101
    ^ f
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   102
!
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   103
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   104
handleLightFormOn:aDisplay
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   105
    "answer the form used for the handles light area;
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   106
     cache the one for Display for the next round"
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   107
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   108
    |f|
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   109
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   110
    ((aDisplay == Display) and:[handleLightForm notNil]) ifTrue:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   111
        ^ handleLightForm
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   112
    ].
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   113
    f := Form fromFile:'HandleLight.xbm' resolution:100 on:aDisplay.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   114
    f isNil ifTrue:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   115
        f := Form width:8 height:8 fromArray:#(2r00000000
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   116
                                               2r00000010
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   117
                                               2r00000011
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   118
                                               2r00000011
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   119
                                               2r00000011
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   120
                                               2r00000011
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   121
                                               2r00000110
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   122
                                               2r00111100)
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   123
                                              on:aDisplay
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   124
    ].
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   125
    (aDisplay == Display) ifTrue:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   126
        handleLightForm := f
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   127
    ].
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   128
    ^ f
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   129
! !
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   130
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   131
!Scroller methodsFor:'initialization'!
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   132
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   133
initialize
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   134
    "initialize - setup instvars from defaults"
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   135
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   136
    super initialize.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   137
    moveDirection := #y.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   138
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   139
    scrolling := false.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   140
    synchronousOperation := true.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   141
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   142
    thumbOrigin := 0.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   143
    thumbHeight := 100.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   144
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   145
    inset := 1.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   146
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   147
    self initStyle.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   148
    self computeThumbFrame
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   149
!
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   150
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   151
initStyle
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   152
    "initialize style dep. stuff"
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   153
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   154
    super initStyle.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   155
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   156
    viewBackground := Color grey.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   157
    thumbLevel := 0.
7
15a9291b9bd0 *** empty log message ***
claus
parents: 5
diff changeset
   158
    thumbSoftEdge := false.
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   159
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   160
    self is3D ifTrue:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   161
        thumbSoftEdge := false.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   162
        inset := 0.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   163
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   164
        style == #next ifTrue:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   165
            self level:0.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   166
            self borderWidth:1.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   167
            inset := 1.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   168
            thumbSoftEdge := true.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   169
            thumbLevel := 2.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   170
            thumbColor := Color lightGrey
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   171
        ] ifFalse:[
3
claus
parents: 0
diff changeset
   172
            style == #motif ifTrue:[
claus
parents: 0
diff changeset
   173
                self level:0.
claus
parents: 0
diff changeset
   174
                inset := 1.
claus
parents: 0
diff changeset
   175
                thumbLevel := 2.
claus
parents: 0
diff changeset
   176
                viewBackground := Color lightGrey.
claus
parents: 0
diff changeset
   177
                thumbColor := viewBackground.
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   178
            ] ifFalse:[
3
claus
parents: 0
diff changeset
   179
                style == #iris ifTrue:[
claus
parents: 0
diff changeset
   180
                    self level:-1.
claus
parents: 0
diff changeset
   181
                    thumbLevel := 3.
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   182
                    thumbSoftEdge := true.
3
claus
parents: 0
diff changeset
   183
                    thumbColor := viewBackground
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   184
                ] ifFalse:[
3
claus
parents: 0
diff changeset
   185
                    style == #mswindows ifTrue:[
claus
parents: 0
diff changeset
   186
                        self level:0.
claus
parents: 0
diff changeset
   187
                        self borderWidth:1.
claus
parents: 0
diff changeset
   188
                        thumbLevel := 2.
claus
parents: 0
diff changeset
   189
                        thumbColor := Color lightGrey.
claus
parents: 0
diff changeset
   190
                        thumbSoftEdge := true.
claus
parents: 0
diff changeset
   191
                        viewBackground := Color grey:80.
claus
parents: 0
diff changeset
   192
                    ] ifFalse:[
claus
parents: 0
diff changeset
   193
                        self level:-1.
claus
parents: 0
diff changeset
   194
                        thumbLevel := 2.
claus
parents: 0
diff changeset
   195
                        thumbColor := Color lightGrey
claus
parents: 0
diff changeset
   196
                    ]
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   197
                ]
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   198
            ]
7
15a9291b9bd0 *** empty log message ***
claus
parents: 5
diff changeset
   199
        ].
15a9291b9bd0 *** empty log message ***
claus
parents: 5
diff changeset
   200
        device hasGreyscales ifFalse:[
15a9291b9bd0 *** empty log message ***
claus
parents: 5
diff changeset
   201
            thumbColor := Color grey
15a9291b9bd0 *** empty log message ***
claus
parents: 5
diff changeset
   202
        ].
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   203
    ] ifFalse:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   204
        thumbColor := White.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   205
        inset := 1
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   206
    ].
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   207
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   208
    thumbShadowColor := shadowColor.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   209
    thumbLightColor := lightColor.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   210
    thumbSoftEdge ifTrue:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   211
        device hasGreyscales ifTrue:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   212
            thumbHalfShadowColor := halfShadowColor.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   213
            thumbHalfLightColor := halfLightColor
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   214
        ] ifFalse:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   215
            thumbHalfShadowColor := Color darkGrey "halfShadowColor".
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   216
            thumbHalfLightColor := White
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   217
        ]
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   218
    ].
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   219
    device hasGreyscales ifFalse:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   220
        thumbShadowColor := Black.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   221
        thumbLightColor := White.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   222
        viewBackground := Color veryLightGrey "White"
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   223
    ].
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   224
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   225
    thumbFrameColor := Black.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   226
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   227
    style == #next ifTrue:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   228
        shadowForm := self class handleShadowFormOn:device.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   229
        lightForm := self class handleLightFormOn:device
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   230
    ].
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   231
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   232
    drawableId notNil ifTrue:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   233
        self computeThumbFrame
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   234
    ]
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   235
!
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   236
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   237
initCursor
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   238
    "set the cursor - a hand"
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   239
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   240
    cursor := Cursor hand
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   241
!
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   242
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   243
initEvents
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   244
    self enableButtonEvents.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   245
    self enableButtonMotionEvents
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   246
! !
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   247
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   248
!Scroller methodsFor:'accessing'!
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   249
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   250
is3D
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   251
    style == #mswindows ifTrue:[^ true].
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   252
    ^ super is3D
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   253
!
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   254
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   255
asynchronousOperation
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   256
    "set scroll-mode to be asynchronous - scroll action is performed after
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   257
     scrolling, when mouse-button is finally released"
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   258
     
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   259
    synchronousOperation := false
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   260
!
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   261
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   262
synchronousOperation
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   263
    "set scroll-mode to be synchronous - scroll action is performed for 
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   264
     every movement of thumb"
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   265
     
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   266
    synchronousOperation := true
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   267
!
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   268
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   269
scrollAction:aBlock
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   270
    "set the scroll action, aBlock which is evaluated when scrolled"
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   271
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   272
    scrollAction := aBlock
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   273
!
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   274
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   275
scrollAction
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   276
    "answer the scroll action block"
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   277
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   278
    ^ scrollAction
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   279
!
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   280
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   281
thumbOrigin
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   282
    "answer the thumbs origin (in percent)"
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   283
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   284
    ^ thumbOrigin
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   285
!
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   286
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   287
thumbOrigin:newOrigin
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   288
    "set the thumbs origin (in percent)"
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   289
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   290
    |realNewOrigin oldFrame oldTop oldBot thumbTop thumbBot
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   291
     tH "{ Class: SmallInteger }"
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   292
     tW delta left|
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   293
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   294
    ((newOrigin + thumbHeight) > 100) ifTrue:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   295
        realNewOrigin := 100 - thumbHeight
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   296
    ] ifFalse: [
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   297
        realNewOrigin := newOrigin
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   298
    ].
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   299
    (realNewOrigin > 100) ifTrue:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   300
        realNewOrigin := 100
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   301
    ] ifFalse: [
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   302
        (realNewOrigin < 0) ifTrue:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   303
            realNewOrigin := 0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   304
        ]
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   305
    ].
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   306
    (realNewOrigin = thumbOrigin) ifFalse:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   307
        oldFrame := thumbFrame.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   308
        thumbOrigin := realNewOrigin.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   309
        self computeThumbFrame.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   310
        (thumbHeight = 100) ifTrue:[^ self].
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   311
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   312
        shown ifTrue:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   313
            (thumbFrame ~~ oldFrame) ifTrue:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   314
                tH := thumbFrame height.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   315
                tW := thumbFrame width.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   316
                oldTop := oldFrame top.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   317
                oldBot := oldTop + tH.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   318
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   319
                thumbTop := thumbFrame top.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   320
                thumbBot := thumbTop + tH.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   321
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   322
                left := thumbFrame left.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   323
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   324
                (oldBot >= height) ifTrue:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   325
                    "cannot copy - thumb was below end"
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   326
                    self drawThumbBackgroundInX:left y:oldTop
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   327
                                          width:tW height:(height - oldTop).
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   328
                    self drawThumb.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   329
                    ^ self
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   330
                ].
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   331
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   332
                self copyFrom:self x:left y:oldTop
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   333
                                 toX:left y:thumbTop
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   334
                               width:tW height:tH.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   335
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   336
                oldTop > thumbTop ifTrue:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   337
                    delta := oldTop - thumbTop.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   338
                    oldTop > thumbBot ifTrue:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   339
                        self drawThumbBackgroundInX:left y:oldTop
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   340
                                              width:tW height:(tH + 1)
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   341
                    ] ifFalse:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   342
                        self drawThumbBackgroundInX:left y:thumbBot 
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   343
                                              width:tW height:delta
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   344
                    ]
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   345
                ] ifFalse:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   346
                    delta := thumbTop - oldTop.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   347
                    oldBot < thumbTop ifTrue:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   348
                        self drawThumbBackgroundInX:left y:oldTop
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   349
                                              width:tW height:(tH + 1)
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   350
                    ] ifFalse:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   351
                        self drawThumbBackgroundInX:left y:oldTop 
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   352
                                              width:tW height:delta
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   353
                    ]
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   354
                ].
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   355
                "self is3D ifTrue:[ "
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   356
                    self waitForExpose
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   357
                "] "
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   358
            ]
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   359
        ]
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   360
    ]
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   361
!
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   362
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   363
thumbHeight
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   364
    "answer the thumbs height (in percent)"
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   365
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   366
    ^ thumbHeight
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   367
!
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   368
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   369
thumbHeight:newHeight
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   370
    "set the thumbs height (in percent)"
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   371
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   372
    |realNewHeight oldFrame|
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   373
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   374
    (newHeight > 100) ifTrue:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   375
        realNewHeight := 100
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   376
    ] ifFalse:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   377
        realNewHeight := newHeight
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   378
    ].
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   379
    (realNewHeight = thumbHeight) ifFalse:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   380
        oldFrame := thumbFrame.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   381
        thumbHeight := realNewHeight.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   382
        self computeThumbFrame.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   383
        shown ifTrue:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   384
            (oldFrame ~~ thumbFrame) ifTrue:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   385
                self drawThumbBackgroundInX:(oldFrame left)
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   386
                                          y:(oldFrame top) 
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   387
                                      width:(oldFrame width) 
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   388
                                     height:(oldFrame height).
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   389
                self drawThumb
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   390
            ]
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   391
        ]
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   392
    ]
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   393
!
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   394
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   395
thumbOrigin:newOrigin thumbHeight:newHeight
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   396
    "set both thumbs height and origin (in percent)"
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   397
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   398
    |realNewOrigin realNewHeight old new same|
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   399
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   400
    (newHeight > 100) ifTrue:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   401
        realNewHeight := 100
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   402
    ] ifFalse:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   403
        realNewHeight := newHeight
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   404
    ].
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   405
    ((newOrigin + realNewHeight) > 100) ifTrue:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   406
        realNewOrigin := 100 - realNewHeight
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   407
    ] ifFalse: [
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   408
        realNewOrigin := newOrigin
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   409
    ].
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   410
    (realNewOrigin < 0) ifTrue: [
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   411
        realNewOrigin := 0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   412
    ].
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   413
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   414
    same := (realNewHeight = thumbHeight).
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   415
    same ifTrue:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   416
        same := (realNewOrigin = thumbOrigin)
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   417
    ].
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   418
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   419
    same ifFalse:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   420
        old := self absFromPercent:thumbOrigin.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   421
        new := self absFromPercent:realNewOrigin.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   422
        (old == new) ifTrue:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   423
            old := self absFromPercent:thumbHeight.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   424
            new := self absFromPercent:realNewHeight.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   425
            (old == new) ifTrue:[^ self]
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   426
        ].
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   427
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   428
        shown ifTrue:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   429
            self drawThumbBackgroundInX:(thumbFrame left)
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   430
                                      y:(thumbFrame top) 
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   431
                                  width:(thumbFrame width) 
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   432
                                 height:(thumbFrame height).
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   433
        ].
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   434
        thumbOrigin := realNewOrigin.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   435
        thumbHeight := realNewHeight.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   436
        self computeThumbFrame.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   437
        shown ifTrue:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   438
            self drawThumb
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   439
        ]
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   440
    ]
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   441
!
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   442
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   443
setThumbFor:aView
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   444
    "get contents and size info from aView and adjust thumb"
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   445
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   446
    |percentSize percentOrigin totalHeight|
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   447
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   448
    aView isNil ifTrue:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   449
        totalHeight := 0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   450
    ] ifFalse:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   451
        totalHeight := aView heightOfContents
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   452
    ].
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   453
    (totalHeight = 0) ifTrue:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   454
        percentSize := 100.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   455
        percentOrigin := 100
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   456
    ] ifFalse:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   457
        percentSize := (aView innerHeight) * 100.0 / totalHeight.
7
15a9291b9bd0 *** empty log message ***
claus
parents: 5
diff changeset
   458
        percentOrigin := (aView yOriginOfContents) * 100.0 / totalHeight.
15a9291b9bd0 *** empty log message ***
claus
parents: 5
diff changeset
   459
        percentOrigin + percentSize > 100.0 ifTrue:[
15a9291b9bd0 *** empty log message ***
claus
parents: 5
diff changeset
   460
            "actually showing stuff below contents of view"
15a9291b9bd0 *** empty log message ***
claus
parents: 5
diff changeset
   461
"
15a9291b9bd0 *** empty log message ***
claus
parents: 5
diff changeset
   462
            totalHeight := aView yOriginOfContents + aView innerHeight.
15a9291b9bd0 *** empty log message ***
claus
parents: 5
diff changeset
   463
            percentSize := (aView innerHeight) * 100.0 / totalHeight.
15a9291b9bd0 *** empty log message ***
claus
parents: 5
diff changeset
   464
            percentOrigin := (aView yOriginOfContents) * 100.0 / totalHeight
15a9291b9bd0 *** empty log message ***
claus
parents: 5
diff changeset
   465
"
15a9291b9bd0 *** empty log message ***
claus
parents: 5
diff changeset
   466
        ]
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   467
    ].
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   468
    (percentSize = thumbHeight) ifTrue:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   469
        self thumbOrigin:percentOrigin
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   470
    ] ifFalse:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   471
        (percentOrigin = thumbOrigin) ifTrue:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   472
            self thumbHeight:percentSize
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   473
        ] ifFalse:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   474
            self thumbOrigin:percentOrigin thumbHeight:percentSize
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   475
        ]
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   476
    ]
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   477
!
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   478
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   479
setThumbHeightFor:aView
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   480
    "get contents and size info from aView and adjust thumb height"
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   481
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   482
    |percent totalHeight|
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   483
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   484
    totalHeight := aView heightOfContents.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   485
    (totalHeight = 0) ifTrue:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   486
        percent := 100
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   487
    ] ifFalse:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   488
        percent := (aView innerHeight) * 100.0 / totalHeight
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   489
    ].
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   490
    self thumbHeight:percent
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   491
!
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   492
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   493
setThumbOriginFor:aView
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   494
    "get contents and size info from aView and adjust thumb origin"
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   495
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   496
    |percent totalHeight|
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   497
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   498
    totalHeight := aView heightOfContents.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   499
    (totalHeight = 0) ifTrue:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   500
        percent := 100
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   501
    ] ifFalse:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   502
        percent := (aView yOriginOfContents) * 100.0 / totalHeight
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   503
    ].
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   504
    self thumbOrigin:percent
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   505
!
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   506
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   507
thumbColor:aColor
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   508
    "change the color of the thumb"
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   509
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   510
    thumbColor := aColor on:device.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   511
    self is3D ifTrue:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   512
        thumbShadowColor := aColor darkened on:device.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   513
        thumbLightColor := aColor lightened on:device
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   514
    ].
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   515
    shown ifTrue:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   516
        self redraw
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   517
    ]
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   518
!
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   519
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   520
thumbFrame
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   521
    "return the area used by the thumbFrame (in device coordinates).
7
15a9291b9bd0 *** empty log message ***
claus
parents: 5
diff changeset
   522
     Allows access to the thumbs physical screen position, for
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   523
     example to position a label below (see Slider-Examples)"
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   524
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   525
    ^ thumbFrame
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   526
! !
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   527
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   528
!Scroller methodsFor:'private'!
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   529
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   530
absFromPercent:percent
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   531
    "given a percentage, compute number of pixels"
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   532
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   533
    |fullSize|
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   534
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   535
    (moveDirection == #y) ifTrue:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   536
        fullSize := height
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   537
    ] ifFalse:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   538
        fullSize := width
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   539
    ].
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   540
    ^ ((percent * (fullSize - (margin * 2))) / 100) rounded
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   541
!
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   542
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   543
percentFromAbs:absValue
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   544
    "given a number of pixels, compute percentage"
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   545
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   546
    |fullSize val|
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   547
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   548
    (moveDirection == #y) ifTrue:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   549
        fullSize := height
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   550
    ] ifFalse:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   551
        fullSize := width
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   552
    ].
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   553
7
15a9291b9bd0 *** empty log message ***
claus
parents: 5
diff changeset
   554
    val := absValue / (fullSize - thumbFrameSizeDifference - (margin * 2)) * 100.
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   555
    val < 0 ifTrue:[^ 0].
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   556
    val > 100 ifTrue:[^ 100].
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   557
    ^ val
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   558
!
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   559
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   560
computeThumbFrame
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   561
    "compute the thumbs frame (a rectangle) whenever thumb is moved, changed
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   562
     height or the scrollers size has changed"
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   563
7
15a9291b9bd0 *** empty log message ***
claus
parents: 5
diff changeset
   564
    |np1 np2 ns1 ns2 nh nw ny nx t sz1 sz2|
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   565
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   566
    np1 := (self absFromPercent:thumbOrigin) + margin.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   567
    ns1 := self absFromPercent:thumbHeight.
7
15a9291b9bd0 *** empty log message ***
claus
parents: 5
diff changeset
   568
    thumbFrameSizeDifference := 0.
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   569
    (moveDirection == #y) ifTrue:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   570
        sz1 := height.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   571
        sz2 := width
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   572
    ] ifFalse:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   573
        sz1 := width.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   574
        sz2 := height
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   575
    ].
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   576
    self is3D ifTrue:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   577
        np2 := margin + inset.     
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   578
        ns2 := sz2 - (margin * 2) - (inset * 2).
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   579
        "
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   580
         do not make thumb too small (for handle)
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   581
        "
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   582
        (ns1 < (10 + (2 * thumbLevel))) ifTrue:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   583
            t := ns1.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   584
            ns1 := 10 + (2 * thumbLevel).
7
15a9291b9bd0 *** empty log message ***
claus
parents: 5
diff changeset
   585
            thumbFrameSizeDifference := ns1 - t
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   586
        ]
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   587
    ] ifFalse:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   588
        np2 := inset.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   589
        ns2 := sz2 - (inset * 2).
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   590
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   591
        "
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   592
         do not make thumb too small (uncatchable)
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   593
        "
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   594
        (ns1 < 4) ifTrue:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   595
            t := ns1.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   596
            ns1 := 4.
7
15a9291b9bd0 *** empty log message ***
claus
parents: 5
diff changeset
   597
            thumbFrameSizeDifference := ns1 - t
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   598
        ]
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   599
    ].
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   600
    "
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   601
     oops - if height has been increased, we have to adjust
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   602
     the origin
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   603
    "
7
15a9291b9bd0 *** empty log message ***
claus
parents: 5
diff changeset
   604
    (thumbFrameSizeDifference == 0) ifFalse:[
15a9291b9bd0 *** empty log message ***
claus
parents: 5
diff changeset
   605
        np1 := ((thumbOrigin * (sz1 - thumbFrameSizeDifference - (margin * 2))) / 100) rounded + margin
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   606
    ].
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   607
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   608
    (moveDirection == #y) ifTrue:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   609
        ny := np1.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   610
        nx := np2.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   611
        nh := ns1.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   612
        nw := ns2.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   613
        ny + nh + margin > height ifTrue:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   614
            ny := height - margin - nh
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   615
        ]
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   616
    ] ifFalse:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   617
        nx := np1.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   618
        ny := np2.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   619
        nw := ns1.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   620
        nh := ns2.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   621
        nx + nw + margin > width ifTrue:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   622
            nx := width - margin - nw
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   623
        ]
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   624
    ].
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   625
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   626
    "
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   627
     do not create new Rectangle if its the same anyway
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   628
    "
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   629
    thumbFrame notNil ifTrue:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   630
        (ny == thumbFrame top) ifTrue:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   631
          (nx == thumbFrame left) ifTrue:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   632
            (nh == thumbFrame height) ifTrue:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   633
              (nw == thumbFrame width) ifTrue:[ ^ self]
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   634
            ]
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   635
          ]
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   636
        ]
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   637
    ].
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   638
    thumbFrame := Rectangle left:nx top:ny width:nw height:nh
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   639
! !
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   640
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   641
!Scroller methodsFor:'drawing'!
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   642
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   643
drawHandleFormAtX:x y:y
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   644
    |oldFg oldBg oldFun|
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   645
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   646
    oldFg := foreground.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   647
    oldBg := background.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   648
    oldFun := function.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   649
3
claus
parents: 0
diff changeset
   650
    thumbShadowColor := thumbShadowColor on:device.
claus
parents: 0
diff changeset
   651
    thumbLightColor := thumbLightColor on:device.
claus
parents: 0
diff changeset
   652
    thumbColor := thumbColor on:device.
claus
parents: 0
diff changeset
   653
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   654
    "kludge for now"
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   655
    ((thumbShadowColor colorId notNil)
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   656
     and:[(thumbLightColor colorId notNil)
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   657
         and:[thumbColor colorId notNil]])
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   658
     ifTrue:[
7
15a9291b9bd0 *** empty log message ***
claus
parents: 5
diff changeset
   659
        self foreground:thumbColor background:(Color noColor) function:#xor.
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   660
        self drawOpaqueForm:shadowForm x:x y:y.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   661
        self foreground:thumbShadowColor function:#or.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   662
        self drawOpaqueForm:shadowForm x:x y:y.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   663
        self foreground:thumbColor function:#xor.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   664
        self drawOpaqueForm:lightForm x:x y:y.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   665
        self foreground:thumbLightColor function:#or.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   666
        self drawOpaqueForm:lightForm x:x y:y.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   667
        self foreground:oldFg background:oldBg function:#copy
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   668
    ] ifFalse:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   669
false ifTrue:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   670
        "turn off shadow bits"
7
15a9291b9bd0 *** empty log message ***
claus
parents: 5
diff changeset
   671
        self foreground:(Color noColor) background:(Color allColor) function:#and.
0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   672
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   673
        self drawOpaqueForm:shadowForm x:x y:y.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   674
        "turn off light bits"
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   675
        self drawOpaqueForm:lightForm x:x y:y.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   676
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   677
        "draw shadow bits"
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   678
        self paint:shadowColor.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   679
        self function:#or.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   680
        self drawOpaqueForm:shadowForm x:x y:y.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   681
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   682
        "draw light bits"
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   683
        self paint:lightColor.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   684
        self drawOpaqueForm:lightForm x:x y:y.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   685
        self foreground:oldFg background:oldBg function:oldFun
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   686
]
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   687
    ]
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   688
!
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   689
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   690
drawThumbBackgroundInX:x y:y width:w height:h
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   691
    "draw part of the thumbs background; defined as a separate
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   692
     method, to allow drawing of arbitrary patterns under thumb."
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   693
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   694
    self clearRectangleX:x y:y width:w height:h.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   695
!
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   696
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   697
drawThumb
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   698
    "draw the thumb"
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   699
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   700
    |handleX handleY l t 
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   701
     w "{ Class: SmallInteger }"
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   702
     h "{ Class: SmallInteger }"
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   703
     x "{ Class: SmallInteger }"
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   704
     y "{ Class: SmallInteger }"
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   705
     mm xL xR yT yB|
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   706
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   707
    ((thumbHeight >= 100) or:[thumbFrame height >= height]) ifTrue:[^ self].
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   708
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   709
    l := thumbFrame left.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   710
    t := thumbFrame top.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   711
    w := thumbFrame width.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   712
    h := thumbFrame height.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   713
    self paint:thumbColor.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   714
    self fillRectangleX:l y:t width:w height:h.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   715
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   716
    self is3D ifFalse:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   717
        self paint:thumbFrameColor.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   718
        self drawRectangle:thumbFrame.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   719
        ^ self
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   720
    ].
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   721
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   722
    thumbSoftEdge ifTrue:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   723
        softEdge := true
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   724
    ].
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   725
    self drawEdgesForX:l y:t width:w height:h level:thumbLevel
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   726
                shadow:thumbShadowColor light:thumbLightColor
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   727
                halfShadow:thumbHalfShadowColor halfLight:thumbHalfLightColor.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   728
    softEdge := false.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   729
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   730
    style == #iris ifFalse:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   731
        shadowForm notNil ifTrue:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   732
            handleX := l + ((w - 8) // 2).
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   733
            handleY := t + ((h - 8) // 2).
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   734
            self drawHandleFormAtX:handleX y:handleY
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   735
        ].
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   736
        ^ self
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   737
    ].
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   738
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   739
    (moveDirection == #y) ifTrue:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   740
        self paint:shadowColor.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   741
        y := t + (h // 2) - 1.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   742
        xL := l + thumbLevel - 1.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   743
        xR := l + w - thumbLevel + 1.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   744
        self displayLineFromX:xL y:y toX:xR y:y.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   745
        y := y + 1.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   746
        self paint:lightColor.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   747
        self displayLineFromX:xL y:y toX:xR y:y.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   748
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   749
        mm := device verticalPixelPerMillimeter rounded.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   750
        h > (mm * 6) ifTrue:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   751
            y := y - 1 - mm.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   752
            self paint:shadowColor.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   753
            self displayLineFromX:xL y:y toX:xR y:y.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   754
            y := y + 1.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   755
            self paint:lightColor.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   756
            self displayLineFromX:xL y:y toX:xR y:y.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   757
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   758
            y := y - 1 + mm + mm.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   759
            self paint:shadowColor.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   760
            self displayLineFromX:xL y:y toX:xR y:y.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   761
            y := y + 1.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   762
            self paint:lightColor.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   763
            self displayLineFromX:xL y:y toX:xR y:y
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   764
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   765
        ]
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   766
    ] ifFalse:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   767
        x := l + (w // 2) - 1.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   768
        yT := t + thumbLevel - 1.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   769
        yB := t + h - thumbLevel + 1.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   770
        self paint:shadowColor.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   771
        self displayLineFromX:x y:yT toX:x y:yB.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   772
        self paint:lightColor.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   773
        x := x + 1.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   774
        self displayLineFromX:x y:yT toX:x y:yB.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   775
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   776
        mm := device horizontalPixelPerMillimeter rounded.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   777
        w > (mm * 6) ifTrue:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   778
            x := x - 1 - mm.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   779
            self paint:shadowColor.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   780
            self displayLineFromX:x y:yT toX:x y:yB.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   781
            x := x + 1.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   782
            self paint:lightColor.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   783
            self displayLineFromX:x y:yT toX:x y:yB.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   784
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   785
            x := x - 1 + mm + mm.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   786
            self paint:shadowColor.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   787
            self displayLineFromX:x y:yT toX:x y:yB.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   788
            x := x + 1.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   789
            self paint:lightColor.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   790
            self displayLineFromX:x y:yT toX:x y:yB
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   791
        ]
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   792
    ]
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   793
! !
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   794
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   795
!Scroller methodsFor:'events'!
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   796
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   797
redrawX:x y:y width:w height:h
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   798
    (y > thumbFrame bottom) ifTrue:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   799
        self drawThumbBackgroundInX:x y:y width:w height:h.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   800
        ^ self
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   801
    ].
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   802
    ((y + h) < thumbFrame top) ifTrue:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   803
        self drawThumbBackgroundInX:x y:y width:w height:h.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   804
        ^ self
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   805
    ].
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   806
    self drawThumbBackgroundInX:0 y:0 width:width height:height.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   807
    self drawThumb
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   808
!
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   809
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   810
redraw
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   811
    "redraw"
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   812
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   813
    shown ifTrue:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   814
        self drawThumbBackgroundInX:0 y:0 width:width height:height.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   815
        self drawThumb
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   816
    ]
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   817
!
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   818
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   819
sizeChanged:how
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   820
    "size of scroller changed - recompute thumbs frame and redraw it"
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   821
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   822
    self computeThumbFrame.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   823
    self redraw
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   824
!
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   825
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   826
buttonPress:button x:x y:y
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   827
    "button was pressed - if above thumb, page up; if below thumb, page down;
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   828
     otherwise start scrolling"
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   829
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   830
    |curr limit1 limit2|
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   831
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   832
    (moveDirection == #y) ifTrue:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   833
        curr := y.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   834
        limit1 := thumbFrame top.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   835
        limit2 := thumbFrame bottom
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   836
    ] ifFalse:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   837
        curr := x.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   838
        limit1 := thumbFrame left.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   839
        limit2 := thumbFrame right
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   840
    ].
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   841
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   842
    (curr < limit1) ifTrue:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   843
        "page up/left"
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   844
        self thumbOrigin:(thumbOrigin - thumbHeight).
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   845
        scrollAction notNil ifTrue:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   846
            scrollAction value:thumbOrigin
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   847
        ]
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   848
    ] ifFalse:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   849
        (curr > limit2) ifTrue:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   850
            "page down/right"
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   851
            self thumbOrigin:(thumbOrigin + thumbHeight).
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   852
            scrollAction notNil ifTrue:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   853
                scrollAction value:thumbOrigin
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   854
            ]
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   855
        ] ifFalse:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   856
            pressOffset := curr - limit1.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   857
            scrolling := true
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   858
        ]
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   859
    ]
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   860
!
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   861
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   862
buttonMultiPress:button x:x y:y
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   863
    ^ self buttonPress:button x:x y:y
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   864
!
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   865
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   866
buttonShiftPress:button x:x y:y
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   867
    "mouse-click with shift - jump to position"
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   868
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   869
    |pos newThumbOrigin curr limit org|
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   870
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   871
    (moveDirection == #y) ifTrue:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   872
        curr := y.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   873
        limit := height.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   874
        org := thumbFrame top
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   875
    ] ifFalse:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   876
        curr := x.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   877
        limit := width.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   878
        org := thumbFrame left
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   879
    ].
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   880
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   881
    (curr < 0) ifTrue:[                        "check against limits"
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   882
        pos := 0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   883
    ] ifFalse:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   884
        (curr > limit) ifTrue:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   885
            pos := limit
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   886
        ] ifFalse:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   887
            pos := curr
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   888
        ]
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   889
    ].
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   890
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   891
    newThumbOrigin := self percentFromAbs:pos.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   892
    self thumbOrigin:newThumbOrigin.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   893
    scrollAction notNil ifTrue:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   894
        scrollAction value:thumbOrigin
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   895
    ].
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   896
    pressOffset := curr - org.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   897
    scrolling := true
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   898
!
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   899
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   900
buttonMotion:button x:x y:y
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   901
    "mouse-button was moved while pressed;
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   902
     redraw thumb at its new position and, if scroll-mode is asynchronous, 
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   903
     the scroll action is performed"
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   904
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   905
    |pos newThumbOrigin curr limit|
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   906
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   907
    scrolling ifFalse: [ ^ self ].          "should not happen"
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   908
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   909
    (moveDirection == #y) ifTrue:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   910
        curr := y.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   911
        limit := height
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   912
    ] ifFalse:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   913
        curr := x.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   914
        limit := width
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   915
    ].
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   916
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   917
    (curr < 0) ifTrue:[                        "check against limits"
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   918
        pos := 0
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   919
    ] ifFalse:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   920
        (curr > limit) ifTrue:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   921
            pos := limit
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   922
        ] ifFalse:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   923
            pos := curr
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   924
        ]
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   925
    ].
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   926
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   927
    newThumbOrigin := self percentFromAbs:(pos - pressOffset).
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   928
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   929
    self thumbOrigin:newThumbOrigin.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   930
    synchronousOperation ifTrue: [
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   931
        scrollAction notNil ifTrue:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   932
            scrollAction value:thumbOrigin
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   933
        ]
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   934
    ]
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   935
!
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   936
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   937
buttonRelease:button x:x y:y
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   938
    "mouse-button was released - if scroll-mode is asynchronous, the scroll
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   939
     action is now performed"
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   940
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   941
    scrolling ifTrue:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   942
        scrolling := false.
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   943
        synchronousOperation ifFalse: [
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   944
            scrollAction notNil ifTrue:[
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   945
                scrollAction value:thumbOrigin
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   946
            ]
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   947
        ]
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   948
    ]
e6a541c1c0eb Initial revision
claus
parents:
diff changeset
   949
! !