VisualRegion.st
author tz
Sat, 07 Feb 1998 16:57:39 +0100
changeset 834 ac1655bd31bb
parent 597 daef87563758
child 954 e59f70e01541
permissions -rw-r--r--
class category changed
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
597
daef87563758 intitial checkin
ca
parents:
diff changeset
     1
SimpleView subclass:#VisualRegion
daef87563758 intitial checkin
ca
parents:
diff changeset
     2
	instanceVariableNames:'isElliptical isOpaque'
daef87563758 intitial checkin
ca
parents:
diff changeset
     3
	classVariableNames:''
daef87563758 intitial checkin
ca
parents:
diff changeset
     4
	poolDictionaries:''
daef87563758 intitial checkin
ca
parents:
diff changeset
     5
	category:'Views-Special'
daef87563758 intitial checkin
ca
parents:
diff changeset
     6
!
daef87563758 intitial checkin
ca
parents:
diff changeset
     7
daef87563758 intitial checkin
ca
parents:
diff changeset
     8
!VisualRegion class methodsFor:'documentation'!
daef87563758 intitial checkin
ca
parents:
diff changeset
     9
daef87563758 intitial checkin
ca
parents:
diff changeset
    10
documentation
daef87563758 intitial checkin
ca
parents:
diff changeset
    11
"
daef87563758 intitial checkin
ca
parents:
diff changeset
    12
    VisualRegion is a passive visual component which provides a rectangular or elliptical
daef87563758 intitial checkin
ca
parents:
diff changeset
    13
    shape. It can take an arbitrary border line thicknesses and can be defined as opaque
daef87563758 intitial checkin
ca
parents:
diff changeset
    14
    with a background color or non opaque.
daef87563758 intitial checkin
ca
parents:
diff changeset
    15
daef87563758 intitial checkin
ca
parents:
diff changeset
    16
    - it may not be complete or compatible to the corresponding ST-80 class. 
daef87563758 intitial checkin
ca
parents:
diff changeset
    17
      If you encounter any incompatibilities, please forward a note 
daef87563758 intitial checkin
ca
parents:
diff changeset
    18
      describing the incompatibility verbal (i.e. no code) to the ST/X team.
daef87563758 intitial checkin
ca
parents:
diff changeset
    19
"
daef87563758 intitial checkin
ca
parents:
diff changeset
    20
!
daef87563758 intitial checkin
ca
parents:
diff changeset
    21
daef87563758 intitial checkin
ca
parents:
diff changeset
    22
examples
daef87563758 intitial checkin
ca
parents:
diff changeset
    23
"
daef87563758 intitial checkin
ca
parents:
diff changeset
    24
        |top s1 s2 s3 s4 v1 rd|
daef87563758 intitial checkin
ca
parents:
diff changeset
    25
daef87563758 intitial checkin
ca
parents:
diff changeset
    26
        top := StandardSystemView new extent:250@250.
daef87563758 intitial checkin
ca
parents:
diff changeset
    27
daef87563758 intitial checkin
ca
parents:
diff changeset
    28
        rd := false.
daef87563758 intitial checkin
ca
parents:
diff changeset
    29
daef87563758 intitial checkin
ca
parents:
diff changeset
    30
        v1 := View origin:25@25 extent:50@50 in:top.
daef87563758 intitial checkin
ca
parents:
diff changeset
    31
        v1 viewBackground:(Color blue).
daef87563758 intitial checkin
ca
parents:
diff changeset
    32
daef87563758 intitial checkin
ca
parents:
diff changeset
    33
        s1 := VisualRegion origin:10@10 extent:30@30 in:top.
daef87563758 intitial checkin
ca
parents:
diff changeset
    34
        s1 lineWidth:0.
daef87563758 intitial checkin
ca
parents:
diff changeset
    35
        s1 viewBackground:(Color gray:90).
daef87563758 intitial checkin
ca
parents:
diff changeset
    36
        s1 isElliptical:rd.
daef87563758 intitial checkin
ca
parents:
diff changeset
    37
daef87563758 intitial checkin
ca
parents:
diff changeset
    38
        s2 := VisualRegion origin:60@10 extent:30@30 in:top.
daef87563758 intitial checkin
ca
parents:
diff changeset
    39
        s2 viewBackground:(Color gray:80).
daef87563758 intitial checkin
ca
parents:
diff changeset
    40
        s2 lineWidth:1.
daef87563758 intitial checkin
ca
parents:
diff changeset
    41
        s2 isElliptical:rd.
daef87563758 intitial checkin
ca
parents:
diff changeset
    42
daef87563758 intitial checkin
ca
parents:
diff changeset
    43
        s3 := VisualRegion origin:10@60 extent:100@30 in:top.
daef87563758 intitial checkin
ca
parents:
diff changeset
    44
        s3 viewBackground:(Color gray:70).
daef87563758 intitial checkin
ca
parents:
diff changeset
    45
        s3 lineWidth:0.
daef87563758 intitial checkin
ca
parents:
diff changeset
    46
        s3 isOpaque:false.
daef87563758 intitial checkin
ca
parents:
diff changeset
    47
        s3 isElliptical:rd.
daef87563758 intitial checkin
ca
parents:
diff changeset
    48
daef87563758 intitial checkin
ca
parents:
diff changeset
    49
        s4 := VisualRegion origin:60@60 extent:30@30 in:top.
daef87563758 intitial checkin
ca
parents:
diff changeset
    50
        s4 viewBackground:(Color gray:60).
daef87563758 intitial checkin
ca
parents:
diff changeset
    51
        s4 lineWidth:1.
daef87563758 intitial checkin
ca
parents:
diff changeset
    52
        s4 isOpaque:false.
daef87563758 intitial checkin
ca
parents:
diff changeset
    53
        s4 isElliptical:rd.
daef87563758 intitial checkin
ca
parents:
diff changeset
    54
daef87563758 intitial checkin
ca
parents:
diff changeset
    55
        top open
daef87563758 intitial checkin
ca
parents:
diff changeset
    56
"
daef87563758 intitial checkin
ca
parents:
diff changeset
    57
! !
daef87563758 intitial checkin
ca
parents:
diff changeset
    58
daef87563758 intitial checkin
ca
parents:
diff changeset
    59
!VisualRegion methodsFor:'accessing'!
daef87563758 intitial checkin
ca
parents:
diff changeset
    60
daef87563758 intitial checkin
ca
parents:
diff changeset
    61
isElliptical
daef87563758 intitial checkin
ca
parents:
diff changeset
    62
    "get the outline of the region; elliptical or rectangle
daef87563758 intitial checkin
ca
parents:
diff changeset
    63
    "
daef87563758 intitial checkin
ca
parents:
diff changeset
    64
  ^ isElliptical
daef87563758 intitial checkin
ca
parents:
diff changeset
    65
daef87563758 intitial checkin
ca
parents:
diff changeset
    66
!
daef87563758 intitial checkin
ca
parents:
diff changeset
    67
daef87563758 intitial checkin
ca
parents:
diff changeset
    68
isElliptical:aBoolean
daef87563758 intitial checkin
ca
parents:
diff changeset
    69
    "set the outline of the region; elliptical or rectangle
daef87563758 intitial checkin
ca
parents:
diff changeset
    70
    "
daef87563758 intitial checkin
ca
parents:
diff changeset
    71
    (isElliptical ~~ aBoolean) ifTrue:[
daef87563758 intitial checkin
ca
parents:
diff changeset
    72
        isElliptical := aBoolean.
daef87563758 intitial checkin
ca
parents:
diff changeset
    73
        self layoutChanged
daef87563758 intitial checkin
ca
parents:
diff changeset
    74
    ].
daef87563758 intitial checkin
ca
parents:
diff changeset
    75
!
daef87563758 intitial checkin
ca
parents:
diff changeset
    76
daef87563758 intitial checkin
ca
parents:
diff changeset
    77
isOpaque
daef87563758 intitial checkin
ca
parents:
diff changeset
    78
    "get opaque mode concerning the inner background of the region
daef87563758 intitial checkin
ca
parents:
diff changeset
    79
    "
daef87563758 intitial checkin
ca
parents:
diff changeset
    80
  ^ isOpaque
daef87563758 intitial checkin
ca
parents:
diff changeset
    81
daef87563758 intitial checkin
ca
parents:
diff changeset
    82
daef87563758 intitial checkin
ca
parents:
diff changeset
    83
!
daef87563758 intitial checkin
ca
parents:
diff changeset
    84
daef87563758 intitial checkin
ca
parents:
diff changeset
    85
isOpaque:aBoolean
daef87563758 intitial checkin
ca
parents:
diff changeset
    86
    "set opaque mode concerning the inner background of the region
daef87563758 intitial checkin
ca
parents:
diff changeset
    87
    "
daef87563758 intitial checkin
ca
parents:
diff changeset
    88
    (isOpaque ~~ aBoolean) ifTrue:[
daef87563758 intitial checkin
ca
parents:
diff changeset
    89
        isOpaque := aBoolean.
daef87563758 intitial checkin
ca
parents:
diff changeset
    90
        self layoutChanged
daef87563758 intitial checkin
ca
parents:
diff changeset
    91
    ].
daef87563758 intitial checkin
ca
parents:
diff changeset
    92
daef87563758 intitial checkin
ca
parents:
diff changeset
    93
daef87563758 intitial checkin
ca
parents:
diff changeset
    94
!
daef87563758 intitial checkin
ca
parents:
diff changeset
    95
daef87563758 intitial checkin
ca
parents:
diff changeset
    96
lineWidth:aNumber
daef87563758 intitial checkin
ca
parents:
diff changeset
    97
    "set the border drawing width in pixels
daef87563758 intitial checkin
ca
parents:
diff changeset
    98
    "
daef87563758 intitial checkin
ca
parents:
diff changeset
    99
    lineWidth ~~ aNumber ifTrue:[
daef87563758 intitial checkin
ca
parents:
diff changeset
   100
        super lineWidth:aNumber.
daef87563758 intitial checkin
ca
parents:
diff changeset
   101
        self layoutChanged
daef87563758 intitial checkin
ca
parents:
diff changeset
   102
    ]
daef87563758 intitial checkin
ca
parents:
diff changeset
   103
daef87563758 intitial checkin
ca
parents:
diff changeset
   104
!
daef87563758 intitial checkin
ca
parents:
diff changeset
   105
daef87563758 intitial checkin
ca
parents:
diff changeset
   106
setLineWidth:aNumber
daef87563758 intitial checkin
ca
parents:
diff changeset
   107
    "set the line drawing width in pixels without recomputation of the shape
daef87563758 intitial checkin
ca
parents:
diff changeset
   108
    "
daef87563758 intitial checkin
ca
parents:
diff changeset
   109
    super lineWidth:aNumber
daef87563758 intitial checkin
ca
parents:
diff changeset
   110
daef87563758 intitial checkin
ca
parents:
diff changeset
   111
! !
daef87563758 intitial checkin
ca
parents:
diff changeset
   112
daef87563758 intitial checkin
ca
parents:
diff changeset
   113
!VisualRegion methodsFor:'change & update'!
daef87563758 intitial checkin
ca
parents:
diff changeset
   114
daef87563758 intitial checkin
ca
parents:
diff changeset
   115
sizeChanged:how
daef87563758 intitial checkin
ca
parents:
diff changeset
   116
    "must compute a new shape, when size is changed
daef87563758 intitial checkin
ca
parents:
diff changeset
   117
    "
daef87563758 intitial checkin
ca
parents:
diff changeset
   118
    self computeShape.
daef87563758 intitial checkin
ca
parents:
diff changeset
   119
    super sizeChanged:how
daef87563758 intitial checkin
ca
parents:
diff changeset
   120
daef87563758 intitial checkin
ca
parents:
diff changeset
   121
daef87563758 intitial checkin
ca
parents:
diff changeset
   122
! !
daef87563758 intitial checkin
ca
parents:
diff changeset
   123
daef87563758 intitial checkin
ca
parents:
diff changeset
   124
!VisualRegion methodsFor:'initialization'!
daef87563758 intitial checkin
ca
parents:
diff changeset
   125
daef87563758 intitial checkin
ca
parents:
diff changeset
   126
initialize
daef87563758 intitial checkin
ca
parents:
diff changeset
   127
    "setup default configuration
daef87563758 intitial checkin
ca
parents:
diff changeset
   128
    "
daef87563758 intitial checkin
ca
parents:
diff changeset
   129
    super initialize.
daef87563758 intitial checkin
ca
parents:
diff changeset
   130
    isElliptical := false.
daef87563758 intitial checkin
ca
parents:
diff changeset
   131
    isOpaque     := true.
daef87563758 intitial checkin
ca
parents:
diff changeset
   132
    self computeShape
daef87563758 intitial checkin
ca
parents:
diff changeset
   133
daef87563758 intitial checkin
ca
parents:
diff changeset
   134
daef87563758 intitial checkin
ca
parents:
diff changeset
   135
! !
daef87563758 intitial checkin
ca
parents:
diff changeset
   136
daef87563758 intitial checkin
ca
parents:
diff changeset
   137
!VisualRegion methodsFor:'private'!
daef87563758 intitial checkin
ca
parents:
diff changeset
   138
daef87563758 intitial checkin
ca
parents:
diff changeset
   139
layoutChanged
daef87563758 intitial checkin
ca
parents:
diff changeset
   140
    "recompute shape and change to invalidate
daef87563758 intitial checkin
ca
parents:
diff changeset
   141
    "
daef87563758 intitial checkin
ca
parents:
diff changeset
   142
    self computeShape.
daef87563758 intitial checkin
ca
parents:
diff changeset
   143
    self invalidate
daef87563758 intitial checkin
ca
parents:
diff changeset
   144
daef87563758 intitial checkin
ca
parents:
diff changeset
   145
! !
daef87563758 intitial checkin
ca
parents:
diff changeset
   146
daef87563758 intitial checkin
ca
parents:
diff changeset
   147
!VisualRegion methodsFor:'queries'!
daef87563758 intitial checkin
ca
parents:
diff changeset
   148
daef87563758 intitial checkin
ca
parents:
diff changeset
   149
specClass
daef87563758 intitial checkin
ca
parents:
diff changeset
   150
    ^ RegionSpec
daef87563758 intitial checkin
ca
parents:
diff changeset
   151
daef87563758 intitial checkin
ca
parents:
diff changeset
   152
daef87563758 intitial checkin
ca
parents:
diff changeset
   153
! !
daef87563758 intitial checkin
ca
parents:
diff changeset
   154
daef87563758 intitial checkin
ca
parents:
diff changeset
   155
!VisualRegion methodsFor:'shape computation'!
daef87563758 intitial checkin
ca
parents:
diff changeset
   156
daef87563758 intitial checkin
ca
parents:
diff changeset
   157
computeShape
daef87563758 intitial checkin
ca
parents:
diff changeset
   158
    "computes 2 forms, one for the border, the other for the inside area. The border
daef87563758 intitial checkin
ca
parents:
diff changeset
   159
     form is borderwidth*2 pixels larger. Each form gets filled with an ellipse of
daef87563758 intitial checkin
ca
parents:
diff changeset
   160
     1-pixels, to define the shapes (take a look at the XShape spec, for more info)
daef87563758 intitial checkin
ca
parents:
diff changeset
   161
    "
daef87563758 intitial checkin
ca
parents:
diff changeset
   162
    |border shape extent form|
daef87563758 intitial checkin
ca
parents:
diff changeset
   163
daef87563758 intitial checkin
ca
parents:
diff changeset
   164
    extent := self extent.
daef87563758 intitial checkin
ca
parents:
diff changeset
   165
    border := Form extent:extent.
daef87563758 intitial checkin
ca
parents:
diff changeset
   166
    shape  := Form extent:extent.
daef87563758 intitial checkin
ca
parents:
diff changeset
   167
daef87563758 intitial checkin
ca
parents:
diff changeset
   168
    isElliptical ifTrue:[
daef87563758 intitial checkin
ca
parents:
diff changeset
   169
        border fillArcX:0 y:0 
daef87563758 intitial checkin
ca
parents:
diff changeset
   170
                  width:(border width)
daef87563758 intitial checkin
ca
parents:
diff changeset
   171
                 height:(border height)
daef87563758 intitial checkin
ca
parents:
diff changeset
   172
                   from:0
daef87563758 intitial checkin
ca
parents:
diff changeset
   173
                  angle:360.
daef87563758 intitial checkin
ca
parents:
diff changeset
   174
    ] ifFalse:[
daef87563758 intitial checkin
ca
parents:
diff changeset
   175
        border fillRectangleX:0 y:0
daef87563758 intitial checkin
ca
parents:
diff changeset
   176
                        width:(border width)
daef87563758 intitial checkin
ca
parents:
diff changeset
   177
                       height:(border height)
daef87563758 intitial checkin
ca
parents:
diff changeset
   178
    ].
daef87563758 intitial checkin
ca
parents:
diff changeset
   179
daef87563758 intitial checkin
ca
parents:
diff changeset
   180
    isOpaque ifFalse:[
daef87563758 intitial checkin
ca
parents:
diff changeset
   181
        form := border.
daef87563758 intitial checkin
ca
parents:
diff changeset
   182
        border foreground:(Color colorId:0).
daef87563758 intitial checkin
ca
parents:
diff changeset
   183
    ] ifTrue:[
daef87563758 intitial checkin
ca
parents:
diff changeset
   184
        form := shape.
daef87563758 intitial checkin
ca
parents:
diff changeset
   185
        shape foreground:(Color colorId:1).
daef87563758 intitial checkin
ca
parents:
diff changeset
   186
    ].
daef87563758 intitial checkin
ca
parents:
diff changeset
   187
daef87563758 intitial checkin
ca
parents:
diff changeset
   188
    isElliptical ifTrue:[
daef87563758 intitial checkin
ca
parents:
diff changeset
   189
        form fillArcX:lineWidth y:lineWidth 
daef87563758 intitial checkin
ca
parents:
diff changeset
   190
                width:(border  width) - (lineWidth * 2)
daef87563758 intitial checkin
ca
parents:
diff changeset
   191
               height:(border height) - (lineWidth * 2)
daef87563758 intitial checkin
ca
parents:
diff changeset
   192
                 from:0
daef87563758 intitial checkin
ca
parents:
diff changeset
   193
                angle:360.
daef87563758 intitial checkin
ca
parents:
diff changeset
   194
    ] ifFalse:[
daef87563758 intitial checkin
ca
parents:
diff changeset
   195
        form fillRectangleX:lineWidth y:lineWidth
daef87563758 intitial checkin
ca
parents:
diff changeset
   196
                      width:(border  width) - (lineWidth * 2)
daef87563758 intitial checkin
ca
parents:
diff changeset
   197
                     height:(border height) - (lineWidth * 2).
daef87563758 intitial checkin
ca
parents:
diff changeset
   198
    ].
daef87563758 intitial checkin
ca
parents:
diff changeset
   199
    self borderShape:border.
daef87563758 intitial checkin
ca
parents:
diff changeset
   200
    self viewShape:shape.
daef87563758 intitial checkin
ca
parents:
diff changeset
   201
daef87563758 intitial checkin
ca
parents:
diff changeset
   202
! !
daef87563758 intitial checkin
ca
parents:
diff changeset
   203
daef87563758 intitial checkin
ca
parents:
diff changeset
   204
!VisualRegion class methodsFor:'documentation'!
daef87563758 intitial checkin
ca
parents:
diff changeset
   205
daef87563758 intitial checkin
ca
parents:
diff changeset
   206
version
daef87563758 intitial checkin
ca
parents:
diff changeset
   207
    ^ '$Header: /cvs/stx/stx/libview2/VisualRegion.st,v 1.1 1997-06-16 09:32:57 ca Exp $'
daef87563758 intitial checkin
ca
parents:
diff changeset
   208
! !