Rectangle.st
author claus
Fri, 05 Aug 1994 02:55:07 +0200
changeset 92 0c73b48551ac
parent 88 81dacba7a63a
child 93 e31220cb391f
permissions -rw-r--r--
*** empty log message ***
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
     1
"
5
67342904af11 *** empty log message ***
claus
parents: 3
diff changeset
     2
 COPYRIGHT (c) 1989 by Claus Gittinger
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
     3
              All Rights Reserved
a27a279701f8 Initial revision
claus
parents:
diff changeset
     4
a27a279701f8 Initial revision
claus
parents:
diff changeset
     5
 This software is furnished under a license and may be used
a27a279701f8 Initial revision
claus
parents:
diff changeset
     6
 only in accordance with the terms of that license and with the
a27a279701f8 Initial revision
claus
parents:
diff changeset
     7
 inclusion of the above copyright notice.   This software may not
a27a279701f8 Initial revision
claus
parents:
diff changeset
     8
 be provided or otherwise made available to, or used by, any
a27a279701f8 Initial revision
claus
parents:
diff changeset
     9
 other person.  No title to or ownership of the software is
a27a279701f8 Initial revision
claus
parents:
diff changeset
    10
 hereby transferred.
a27a279701f8 Initial revision
claus
parents:
diff changeset
    11
"
a27a279701f8 Initial revision
claus
parents:
diff changeset
    12
a27a279701f8 Initial revision
claus
parents:
diff changeset
    13
Object subclass:#Rectangle
a27a279701f8 Initial revision
claus
parents:
diff changeset
    14
       instanceVariableNames:'left top width height'
a27a279701f8 Initial revision
claus
parents:
diff changeset
    15
       classVariableNames:''
a27a279701f8 Initial revision
claus
parents:
diff changeset
    16
       poolDictionaries:''
a27a279701f8 Initial revision
claus
parents:
diff changeset
    17
       category:'Graphics-Primitives'
a27a279701f8 Initial revision
claus
parents:
diff changeset
    18
!
a27a279701f8 Initial revision
claus
parents:
diff changeset
    19
a27a279701f8 Initial revision
claus
parents:
diff changeset
    20
Rectangle comment:'
5
67342904af11 *** empty log message ***
claus
parents: 3
diff changeset
    21
COPYRIGHT (c) 1989 by Claus Gittinger
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
    22
              All Rights Reserved
a27a279701f8 Initial revision
claus
parents:
diff changeset
    23
'!
a27a279701f8 Initial revision
claus
parents:
diff changeset
    24
77
6c38ca59927f *** empty log message ***
claus
parents: 59
diff changeset
    25
!Rectangle class methodsFor:'documentation'!
6c38ca59927f *** empty log message ***
claus
parents: 59
diff changeset
    26
88
81dacba7a63a *** empty log message ***
claus
parents: 77
diff changeset
    27
copyright
81dacba7a63a *** empty log message ***
claus
parents: 77
diff changeset
    28
"
81dacba7a63a *** empty log message ***
claus
parents: 77
diff changeset
    29
 COPYRIGHT (c) 1989 by Claus Gittinger
81dacba7a63a *** empty log message ***
claus
parents: 77
diff changeset
    30
              All Rights Reserved
81dacba7a63a *** empty log message ***
claus
parents: 77
diff changeset
    31
81dacba7a63a *** empty log message ***
claus
parents: 77
diff changeset
    32
 This software is furnished under a license and may be used
81dacba7a63a *** empty log message ***
claus
parents: 77
diff changeset
    33
 only in accordance with the terms of that license and with the
81dacba7a63a *** empty log message ***
claus
parents: 77
diff changeset
    34
 inclusion of the above copyright notice.   This software may not
81dacba7a63a *** empty log message ***
claus
parents: 77
diff changeset
    35
 be provided or otherwise made available to, or used by, any
81dacba7a63a *** empty log message ***
claus
parents: 77
diff changeset
    36
 other person.  No title to or ownership of the software is
81dacba7a63a *** empty log message ***
claus
parents: 77
diff changeset
    37
 hereby transferred.
81dacba7a63a *** empty log message ***
claus
parents: 77
diff changeset
    38
"
81dacba7a63a *** empty log message ***
claus
parents: 77
diff changeset
    39
!
81dacba7a63a *** empty log message ***
claus
parents: 77
diff changeset
    40
81dacba7a63a *** empty log message ***
claus
parents: 77
diff changeset
    41
version
81dacba7a63a *** empty log message ***
claus
parents: 77
diff changeset
    42
"
81dacba7a63a *** empty log message ***
claus
parents: 77
diff changeset
    43
$Header: /cvs/stx/stx/libbasic/Rectangle.st,v 1.9 1994-06-02 16:21:44 claus Exp $
81dacba7a63a *** empty log message ***
claus
parents: 77
diff changeset
    44
"
81dacba7a63a *** empty log message ***
claus
parents: 77
diff changeset
    45
!
81dacba7a63a *** empty log message ***
claus
parents: 77
diff changeset
    46
77
6c38ca59927f *** empty log message ***
claus
parents: 59
diff changeset
    47
documentation
6c38ca59927f *** empty log message ***
claus
parents: 59
diff changeset
    48
"
6c38ca59927f *** empty log message ***
claus
parents: 59
diff changeset
    49
    Rectangles represent a rectangular area in 2D space.
6c38ca59927f *** empty log message ***
claus
parents: 59
diff changeset
    50
6c38ca59927f *** empty log message ***
claus
parents: 59
diff changeset
    51
    notice, my implementation does not use origin/corner as instance objects
6c38ca59927f *** empty log message ***
claus
parents: 59
diff changeset
    52
    but left/top/width/height to save space and allocations. This means, that my
6c38ca59927f *** empty log message ***
claus
parents: 59
diff changeset
    53
    Rectangles cannot be used to represent Rectangles in a higher than 2D
6c38ca59927f *** empty log message ***
claus
parents: 59
diff changeset
    54
    space. (i.e. only valid if origin/corner are 2D Points)
6c38ca59927f *** empty log message ***
claus
parents: 59
diff changeset
    55
6c38ca59927f *** empty log message ***
claus
parents: 59
diff changeset
    56
    (aside from that, you will not see any difference from the outside)
6c38ca59927f *** empty log message ***
claus
parents: 59
diff changeset
    57
6c38ca59927f *** empty log message ***
claus
parents: 59
diff changeset
    58
    Instance variables:
6c38ca59927f *** empty log message ***
claus
parents: 59
diff changeset
    59
6c38ca59927f *** empty log message ***
claus
parents: 59
diff changeset
    60
        left           <Number>        the left coordinate (i.e origin x)
6c38ca59927f *** empty log message ***
claus
parents: 59
diff changeset
    61
        top            <Number>        the top coordinate (i.e origin y)
6c38ca59927f *** empty log message ***
claus
parents: 59
diff changeset
    62
        width          <Number>        the width of the rectangle
6c38ca59927f *** empty log message ***
claus
parents: 59
diff changeset
    63
        height         <Number>        the height of the rectangle
6c38ca59927f *** empty log message ***
claus
parents: 59
diff changeset
    64
6c38ca59927f *** empty log message ***
claus
parents: 59
diff changeset
    65
    I am not certain, if implementing Rectangle different was a good idea - 
6c38ca59927f *** empty log message ***
claus
parents: 59
diff changeset
    66
    subclasses may expect things to be different ...
6c38ca59927f *** empty log message ***
claus
parents: 59
diff changeset
    67
    Therefore, this may change.
6c38ca59927f *** empty log message ***
claus
parents: 59
diff changeset
    68
"
6c38ca59927f *** empty log message ***
claus
parents: 59
diff changeset
    69
! !
6c38ca59927f *** empty log message ***
claus
parents: 59
diff changeset
    70
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
    71
!Rectangle class methodsFor:'instance creation'!
a27a279701f8 Initial revision
claus
parents:
diff changeset
    72
a27a279701f8 Initial revision
claus
parents:
diff changeset
    73
origin:origin corner:corner
a27a279701f8 Initial revision
claus
parents:
diff changeset
    74
    "create and return a new Rectangle giving top-left and bottom-right points"
a27a279701f8 Initial revision
claus
parents:
diff changeset
    75
a27a279701f8 Initial revision
claus
parents:
diff changeset
    76
    ^ (self basicNew) origin:origin corner:corner
a27a279701f8 Initial revision
claus
parents:
diff changeset
    77
!
a27a279701f8 Initial revision
claus
parents:
diff changeset
    78
a27a279701f8 Initial revision
claus
parents:
diff changeset
    79
origin:origin extent:extent
a27a279701f8 Initial revision
claus
parents:
diff changeset
    80
    "create and return a new Rectangle giving top-left point and extent point"
a27a279701f8 Initial revision
claus
parents:
diff changeset
    81
a27a279701f8 Initial revision
claus
parents:
diff changeset
    82
%{  /* NOCONTEXT */
59
4a86aad06603 *** empty log message ***
claus
parents: 32
diff changeset
    83
    REGISTER OBJ newRect;
4a86aad06603 *** empty log message ***
claus
parents: 32
diff changeset
    84
    REGISTER struct point *p;
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
    85
    extern OBJ Point;
a27a279701f8 Initial revision
claus
parents:
diff changeset
    86
a27a279701f8 Initial revision
claus
parents:
diff changeset
    87
    /* short cut - rectangles are created so often ... */
a27a279701f8 Initial revision
claus
parents:
diff changeset
    88
    if (_CanDoQuickNew(OHDR_SIZE + 4*sizeof(OBJ))) {
59
4a86aad06603 *** empty log message ***
claus
parents: 32
diff changeset
    89
        if (self == Rectangle) {
4a86aad06603 *** empty log message ***
claus
parents: 32
diff changeset
    90
            if (__isPoint(origin) && __isPoint(extent)) {
4a86aad06603 *** empty log message ***
claus
parents: 32
diff changeset
    91
                _qCheckedAlignedNew(newRect, OHDR_SIZE + 4*sizeof(OBJ));
4a86aad06603 *** empty log message ***
claus
parents: 32
diff changeset
    92
                _InstPtr(newRect)->o_class = Rectangle;
4a86aad06603 *** empty log message ***
claus
parents: 32
diff changeset
    93
4a86aad06603 *** empty log message ***
claus
parents: 32
diff changeset
    94
                p = _PointInstPtr(origin);
4a86aad06603 *** empty log message ***
claus
parents: 32
diff changeset
    95
                _InstPtr(newRect)->i_instvars[0] = p->p_x;
4a86aad06603 *** empty log message ***
claus
parents: 32
diff changeset
    96
                _InstPtr(newRect)->i_instvars[1] = p->p_y;
4a86aad06603 *** empty log message ***
claus
parents: 32
diff changeset
    97
                __STORE(newRect, p->p_x);
4a86aad06603 *** empty log message ***
claus
parents: 32
diff changeset
    98
                __STORE(newRect, p->p_y);
4a86aad06603 *** empty log message ***
claus
parents: 32
diff changeset
    99
4a86aad06603 *** empty log message ***
claus
parents: 32
diff changeset
   100
                p = _PointInstPtr(extent);
4a86aad06603 *** empty log message ***
claus
parents: 32
diff changeset
   101
                _InstPtr(newRect)->i_instvars[2] = p->p_x;
4a86aad06603 *** empty log message ***
claus
parents: 32
diff changeset
   102
                _InstPtr(newRect)->i_instvars[3] = p->p_y;
4a86aad06603 *** empty log message ***
claus
parents: 32
diff changeset
   103
                __STORE(newRect, p->p_x);
4a86aad06603 *** empty log message ***
claus
parents: 32
diff changeset
   104
                __STORE(newRect, p->p_y);
4a86aad06603 *** empty log message ***
claus
parents: 32
diff changeset
   105
                RETURN ( newRect );
4a86aad06603 *** empty log message ***
claus
parents: 32
diff changeset
   106
            }
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
   107
        }
a27a279701f8 Initial revision
claus
parents:
diff changeset
   108
    }
a27a279701f8 Initial revision
claus
parents:
diff changeset
   109
%}
a27a279701f8 Initial revision
claus
parents:
diff changeset
   110
.
a27a279701f8 Initial revision
claus
parents:
diff changeset
   111
    ^ (self basicNew) origin:origin extent:extent
a27a279701f8 Initial revision
claus
parents:
diff changeset
   112
!
a27a279701f8 Initial revision
claus
parents:
diff changeset
   113
a27a279701f8 Initial revision
claus
parents:
diff changeset
   114
left:left top:top width:w height:h
a27a279701f8 Initial revision
claus
parents:
diff changeset
   115
    "create and return a new Rectangle giving left and top coordinates
a27a279701f8 Initial revision
claus
parents:
diff changeset
   116
     and width, height"
a27a279701f8 Initial revision
claus
parents:
diff changeset
   117
a27a279701f8 Initial revision
claus
parents:
diff changeset
   118
%{  /* NOCONTEXT */
59
4a86aad06603 *** empty log message ***
claus
parents: 32
diff changeset
   119
    REGISTER OBJ newRect;
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
   120
a27a279701f8 Initial revision
claus
parents:
diff changeset
   121
    if (_CanDoQuickNew(OHDR_SIZE + 4*sizeof(OBJ))) {
a27a279701f8 Initial revision
claus
parents:
diff changeset
   122
        /* short cut - rectangles are created so often ... */
a27a279701f8 Initial revision
claus
parents:
diff changeset
   123
        if (self == Rectangle) {
13
62303f84ff5f *** empty log message ***
claus
parents: 5
diff changeset
   124
            _qCheckedAlignedNew(newRect, OHDR_SIZE + 4*sizeof(OBJ));
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
   125
            _InstPtr(newRect)->o_class = Rectangle;
a27a279701f8 Initial revision
claus
parents:
diff changeset
   126
            _InstPtr(newRect)->i_instvars[0] = left;
a27a279701f8 Initial revision
claus
parents:
diff changeset
   127
            _InstPtr(newRect)->i_instvars[1] = top;
a27a279701f8 Initial revision
claus
parents:
diff changeset
   128
            _InstPtr(newRect)->i_instvars[2] = w;
a27a279701f8 Initial revision
claus
parents:
diff changeset
   129
            _InstPtr(newRect)->i_instvars[3] = h;
59
4a86aad06603 *** empty log message ***
claus
parents: 32
diff changeset
   130
4a86aad06603 *** empty log message ***
claus
parents: 32
diff changeset
   131
            __STORE(newRect, _InstPtr(newRect)->i_instvars[0]);
4a86aad06603 *** empty log message ***
claus
parents: 32
diff changeset
   132
            __STORE(newRect, _InstPtr(newRect)->i_instvars[1]);
4a86aad06603 *** empty log message ***
claus
parents: 32
diff changeset
   133
            __STORE(newRect, _InstPtr(newRect)->i_instvars[2]);
4a86aad06603 *** empty log message ***
claus
parents: 32
diff changeset
   134
            __STORE(newRect, _InstPtr(newRect)->i_instvars[3]);
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
   135
            RETURN ( newRect );
a27a279701f8 Initial revision
claus
parents:
diff changeset
   136
        }
a27a279701f8 Initial revision
claus
parents:
diff changeset
   137
    }
a27a279701f8 Initial revision
claus
parents:
diff changeset
   138
%}
a27a279701f8 Initial revision
claus
parents:
diff changeset
   139
.
a27a279701f8 Initial revision
claus
parents:
diff changeset
   140
    ^ (self basicNew) left:left top:top width:w height:h
a27a279701f8 Initial revision
claus
parents:
diff changeset
   141
!
a27a279701f8 Initial revision
claus
parents:
diff changeset
   142
a27a279701f8 Initial revision
claus
parents:
diff changeset
   143
left:left right:right top:top bottom:bottom
a27a279701f8 Initial revision
claus
parents:
diff changeset
   144
    "create and return a new Rectangle giving left, top, right and bottom coordinates"
a27a279701f8 Initial revision
claus
parents:
diff changeset
   145
a27a279701f8 Initial revision
claus
parents:
diff changeset
   146
    ^ (self basicNew) left:left right:right top:top bottom:bottom
a27a279701f8 Initial revision
claus
parents:
diff changeset
   147
!
a27a279701f8 Initial revision
claus
parents:
diff changeset
   148
a27a279701f8 Initial revision
claus
parents:
diff changeset
   149
left:left top:top right:right bottom:bottom
a27a279701f8 Initial revision
claus
parents:
diff changeset
   150
    "create and return a new Rectangle giving left, top, right and bottom coordinates"
a27a279701f8 Initial revision
claus
parents:
diff changeset
   151
a27a279701f8 Initial revision
claus
parents:
diff changeset
   152
    ^ (self basicNew) left:left top:top right:right bottom:bottom
32
ee1a621c696c *** empty log message ***
claus
parents: 13
diff changeset
   153
!
ee1a621c696c *** empty log message ***
claus
parents: 13
diff changeset
   154
ee1a621c696c *** empty log message ***
claus
parents: 13
diff changeset
   155
fromUser
ee1a621c696c *** empty log message ***
claus
parents: 13
diff changeset
   156
    "let user specify a rectangle on the screen, return it"
ee1a621c696c *** empty log message ***
claus
parents: 13
diff changeset
   157
ee1a621c696c *** empty log message ***
claus
parents: 13
diff changeset
   158
    ^ Display rectangleFromUser
ee1a621c696c *** empty log message ***
claus
parents: 13
diff changeset
   159
ee1a621c696c *** empty log message ***
claus
parents: 13
diff changeset
   160
    "Rectangle fromUser"
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
   161
! !
a27a279701f8 Initial revision
claus
parents:
diff changeset
   162
a27a279701f8 Initial revision
claus
parents:
diff changeset
   163
!Rectangle methodsFor:'accessing'!
a27a279701f8 Initial revision
claus
parents:
diff changeset
   164
a27a279701f8 Initial revision
claus
parents:
diff changeset
   165
left:newLeft right:right top:newTop bottom:bottom
77
6c38ca59927f *** empty log message ***
claus
parents: 59
diff changeset
   166
    "set the rectangle given left, top, right and bottom coordinates."
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
   167
a27a279701f8 Initial revision
claus
parents:
diff changeset
   168
    left := newLeft.
a27a279701f8 Initial revision
claus
parents:
diff changeset
   169
    top := newTop.
a27a279701f8 Initial revision
claus
parents:
diff changeset
   170
    width := right - left.
a27a279701f8 Initial revision
claus
parents:
diff changeset
   171
    height := bottom - top
a27a279701f8 Initial revision
claus
parents:
diff changeset
   172
!
a27a279701f8 Initial revision
claus
parents:
diff changeset
   173
a27a279701f8 Initial revision
claus
parents:
diff changeset
   174
left:newLeft top:newTop right:right bottom:bottom
a27a279701f8 Initial revision
claus
parents:
diff changeset
   175
    "set the rectangle given left, top, right and bottom coordinates"
a27a279701f8 Initial revision
claus
parents:
diff changeset
   176
a27a279701f8 Initial revision
claus
parents:
diff changeset
   177
    left := newLeft.
a27a279701f8 Initial revision
claus
parents:
diff changeset
   178
    top := newTop.
a27a279701f8 Initial revision
claus
parents:
diff changeset
   179
    width := right - left.
a27a279701f8 Initial revision
claus
parents:
diff changeset
   180
    height := bottom - top
a27a279701f8 Initial revision
claus
parents:
diff changeset
   181
!
a27a279701f8 Initial revision
claus
parents:
diff changeset
   182
a27a279701f8 Initial revision
claus
parents:
diff changeset
   183
left:newLeft top:newTop width:newWidth height:newHeight
a27a279701f8 Initial revision
claus
parents:
diff changeset
   184
    "set the rectangle given left, top coordinates and width, height"
a27a279701f8 Initial revision
claus
parents:
diff changeset
   185
a27a279701f8 Initial revision
claus
parents:
diff changeset
   186
    left := newLeft.
a27a279701f8 Initial revision
claus
parents:
diff changeset
   187
    top := newTop.
a27a279701f8 Initial revision
claus
parents:
diff changeset
   188
    width := newWidth.
a27a279701f8 Initial revision
claus
parents:
diff changeset
   189
    height := newHeight
a27a279701f8 Initial revision
claus
parents:
diff changeset
   190
!
a27a279701f8 Initial revision
claus
parents:
diff changeset
   191
a27a279701f8 Initial revision
claus
parents:
diff changeset
   192
origin:aPoint
77
6c38ca59927f *** empty log message ***
claus
parents: 59
diff changeset
   193
    "set the top-left origin. The corner remains unchanged."
6c38ca59927f *** empty log message ***
claus
parents: 59
diff changeset
   194
6c38ca59927f *** empty log message ***
claus
parents: 59
diff changeset
   195
    |newTop newLeft|
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
   196
77
6c38ca59927f *** empty log message ***
claus
parents: 59
diff changeset
   197
    newTop := aPoint y.
6c38ca59927f *** empty log message ***
claus
parents: 59
diff changeset
   198
    newLeft := aPoint x.
6c38ca59927f *** empty log message ***
claus
parents: 59
diff changeset
   199
    height := height + (top - newTop).
6c38ca59927f *** empty log message ***
claus
parents: 59
diff changeset
   200
    width := width + (left - newLeft).
6c38ca59927f *** empty log message ***
claus
parents: 59
diff changeset
   201
    left := newLeft.
6c38ca59927f *** empty log message ***
claus
parents: 59
diff changeset
   202
    top := newTop
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
   203
!
a27a279701f8 Initial revision
claus
parents:
diff changeset
   204
a27a279701f8 Initial revision
claus
parents:
diff changeset
   205
corner:aPoint
a27a279701f8 Initial revision
claus
parents:
diff changeset
   206
    "set the bottom-right corner"
a27a279701f8 Initial revision
claus
parents:
diff changeset
   207
a27a279701f8 Initial revision
claus
parents:
diff changeset
   208
    width := aPoint x - left.
a27a279701f8 Initial revision
claus
parents:
diff changeset
   209
    height := aPoint y - top
a27a279701f8 Initial revision
claus
parents:
diff changeset
   210
!
a27a279701f8 Initial revision
claus
parents:
diff changeset
   211
a27a279701f8 Initial revision
claus
parents:
diff changeset
   212
top:aNumber
a27a279701f8 Initial revision
claus
parents:
diff changeset
   213
    "set the top edge"
a27a279701f8 Initial revision
claus
parents:
diff changeset
   214
a27a279701f8 Initial revision
claus
parents:
diff changeset
   215
    height := height + (top - aNumber).
a27a279701f8 Initial revision
claus
parents:
diff changeset
   216
    top := aNumber
a27a279701f8 Initial revision
claus
parents:
diff changeset
   217
!
a27a279701f8 Initial revision
claus
parents:
diff changeset
   218
a27a279701f8 Initial revision
claus
parents:
diff changeset
   219
bottom:aNumber
a27a279701f8 Initial revision
claus
parents:
diff changeset
   220
    "set the bottom edge"
a27a279701f8 Initial revision
claus
parents:
diff changeset
   221
a27a279701f8 Initial revision
claus
parents:
diff changeset
   222
    height := aNumber - top
a27a279701f8 Initial revision
claus
parents:
diff changeset
   223
!
a27a279701f8 Initial revision
claus
parents:
diff changeset
   224
77
6c38ca59927f *** empty log message ***
claus
parents: 59
diff changeset
   225
left:aNumber
6c38ca59927f *** empty log message ***
claus
parents: 59
diff changeset
   226
    "set the left edge"
6c38ca59927f *** empty log message ***
claus
parents: 59
diff changeset
   227
6c38ca59927f *** empty log message ***
claus
parents: 59
diff changeset
   228
    width := width + (left - aNumber).
6c38ca59927f *** empty log message ***
claus
parents: 59
diff changeset
   229
    left := aNumber
6c38ca59927f *** empty log message ***
claus
parents: 59
diff changeset
   230
!
6c38ca59927f *** empty log message ***
claus
parents: 59
diff changeset
   231
6c38ca59927f *** empty log message ***
claus
parents: 59
diff changeset
   232
right:aNumber
6c38ca59927f *** empty log message ***
claus
parents: 59
diff changeset
   233
    "set the right edge"
6c38ca59927f *** empty log message ***
claus
parents: 59
diff changeset
   234
6c38ca59927f *** empty log message ***
claus
parents: 59
diff changeset
   235
    width := aNumber - left
6c38ca59927f *** empty log message ***
claus
parents: 59
diff changeset
   236
!
6c38ca59927f *** empty log message ***
claus
parents: 59
diff changeset
   237
6c38ca59927f *** empty log message ***
claus
parents: 59
diff changeset
   238
topLeft:aPoint
6c38ca59927f *** empty log message ***
claus
parents: 59
diff changeset
   239
    "Set the top and left edges.
6c38ca59927f *** empty log message ***
claus
parents: 59
diff changeset
   240
     The bottom right remains unchanged."
6c38ca59927f *** empty log message ***
claus
parents: 59
diff changeset
   241
6c38ca59927f *** empty log message ***
claus
parents: 59
diff changeset
   242
    |newTop|
6c38ca59927f *** empty log message ***
claus
parents: 59
diff changeset
   243
6c38ca59927f *** empty log message ***
claus
parents: 59
diff changeset
   244
    newTop := aPoint y.
6c38ca59927f *** empty log message ***
claus
parents: 59
diff changeset
   245
    height := height + (top - newTop).
6c38ca59927f *** empty log message ***
claus
parents: 59
diff changeset
   246
    top := newTop.
6c38ca59927f *** empty log message ***
claus
parents: 59
diff changeset
   247
    width := aPoint x - left
6c38ca59927f *** empty log message ***
claus
parents: 59
diff changeset
   248
!
6c38ca59927f *** empty log message ***
claus
parents: 59
diff changeset
   249
6c38ca59927f *** empty log message ***
claus
parents: 59
diff changeset
   250
topRight:aPoint
6c38ca59927f *** empty log message ***
claus
parents: 59
diff changeset
   251
    "Set the top and right edges. 
6c38ca59927f *** empty log message ***
claus
parents: 59
diff changeset
   252
     The bottom left remains unchanged."
6c38ca59927f *** empty log message ***
claus
parents: 59
diff changeset
   253
6c38ca59927f *** empty log message ***
claus
parents: 59
diff changeset
   254
    |newTop|
6c38ca59927f *** empty log message ***
claus
parents: 59
diff changeset
   255
6c38ca59927f *** empty log message ***
claus
parents: 59
diff changeset
   256
    newTop := aPoint y.
6c38ca59927f *** empty log message ***
claus
parents: 59
diff changeset
   257
    height := height + (top - newTop).
6c38ca59927f *** empty log message ***
claus
parents: 59
diff changeset
   258
    top := newTop.
6c38ca59927f *** empty log message ***
claus
parents: 59
diff changeset
   259
    width := aPoint x - left
6c38ca59927f *** empty log message ***
claus
parents: 59
diff changeset
   260
!
6c38ca59927f *** empty log message ***
claus
parents: 59
diff changeset
   261
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
   262
origin:origin corner:corner
a27a279701f8 Initial revision
claus
parents:
diff changeset
   263
    "set both origin and corner"
a27a279701f8 Initial revision
claus
parents:
diff changeset
   264
a27a279701f8 Initial revision
claus
parents:
diff changeset
   265
    left := origin x.
a27a279701f8 Initial revision
claus
parents:
diff changeset
   266
    top := origin y.
a27a279701f8 Initial revision
claus
parents:
diff changeset
   267
    width := corner x - left.
a27a279701f8 Initial revision
claus
parents:
diff changeset
   268
    height := corner y - top
a27a279701f8 Initial revision
claus
parents:
diff changeset
   269
!
a27a279701f8 Initial revision
claus
parents:
diff changeset
   270
a27a279701f8 Initial revision
claus
parents:
diff changeset
   271
extent:aPoint
a27a279701f8 Initial revision
claus
parents:
diff changeset
   272
    "set the extent from the argument, aPoint with width taken from aPoint x
a27a279701f8 Initial revision
claus
parents:
diff changeset
   273
     and height taken from aPoint y"
a27a279701f8 Initial revision
claus
parents:
diff changeset
   274
a27a279701f8 Initial revision
claus
parents:
diff changeset
   275
    width := aPoint x.
a27a279701f8 Initial revision
claus
parents:
diff changeset
   276
    height := aPoint y
a27a279701f8 Initial revision
claus
parents:
diff changeset
   277
!
a27a279701f8 Initial revision
claus
parents:
diff changeset
   278
a27a279701f8 Initial revision
claus
parents:
diff changeset
   279
origin:origin extent:extent
a27a279701f8 Initial revision
claus
parents:
diff changeset
   280
    "set both origin and extent"
a27a279701f8 Initial revision
claus
parents:
diff changeset
   281
a27a279701f8 Initial revision
claus
parents:
diff changeset
   282
    left := origin x.
a27a279701f8 Initial revision
claus
parents:
diff changeset
   283
    top := origin y.
a27a279701f8 Initial revision
claus
parents:
diff changeset
   284
    width := extent x.
a27a279701f8 Initial revision
claus
parents:
diff changeset
   285
    height := extent y
a27a279701f8 Initial revision
claus
parents:
diff changeset
   286
!
a27a279701f8 Initial revision
claus
parents:
diff changeset
   287
a27a279701f8 Initial revision
claus
parents:
diff changeset
   288
origin
a27a279701f8 Initial revision
claus
parents:
diff changeset
   289
    "return the origin"
a27a279701f8 Initial revision
claus
parents:
diff changeset
   290
77
6c38ca59927f *** empty log message ***
claus
parents: 59
diff changeset
   291
    ^ left @ top
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
   292
!
a27a279701f8 Initial revision
claus
parents:
diff changeset
   293
a27a279701f8 Initial revision
claus
parents:
diff changeset
   294
corner
a27a279701f8 Initial revision
claus
parents:
diff changeset
   295
    "return the corner"
a27a279701f8 Initial revision
claus
parents:
diff changeset
   296
77
6c38ca59927f *** empty log message ***
claus
parents: 59
diff changeset
   297
    ^ (left + width) @ (top + height)
6c38ca59927f *** empty log message ***
claus
parents: 59
diff changeset
   298
!
6c38ca59927f *** empty log message ***
claus
parents: 59
diff changeset
   299
6c38ca59927f *** empty log message ***
claus
parents: 59
diff changeset
   300
width
6c38ca59927f *** empty log message ***
claus
parents: 59
diff changeset
   301
    "return the width of the rectangle"
6c38ca59927f *** empty log message ***
claus
parents: 59
diff changeset
   302
6c38ca59927f *** empty log message ***
claus
parents: 59
diff changeset
   303
    ^ width
6c38ca59927f *** empty log message ***
claus
parents: 59
diff changeset
   304
!
6c38ca59927f *** empty log message ***
claus
parents: 59
diff changeset
   305
6c38ca59927f *** empty log message ***
claus
parents: 59
diff changeset
   306
height
6c38ca59927f *** empty log message ***
claus
parents: 59
diff changeset
   307
    "return the height of the rectangle"
6c38ca59927f *** empty log message ***
claus
parents: 59
diff changeset
   308
6c38ca59927f *** empty log message ***
claus
parents: 59
diff changeset
   309
    ^ height
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
   310
!
a27a279701f8 Initial revision
claus
parents:
diff changeset
   311
a27a279701f8 Initial revision
claus
parents:
diff changeset
   312
extent
a27a279701f8 Initial revision
claus
parents:
diff changeset
   313
    "return the extent"
a27a279701f8 Initial revision
claus
parents:
diff changeset
   314
77
6c38ca59927f *** empty log message ***
claus
parents: 59
diff changeset
   315
    ^ width @ height
6c38ca59927f *** empty log message ***
claus
parents: 59
diff changeset
   316
!
6c38ca59927f *** empty log message ***
claus
parents: 59
diff changeset
   317
6c38ca59927f *** empty log message ***
claus
parents: 59
diff changeset
   318
left
6c38ca59927f *** empty log message ***
claus
parents: 59
diff changeset
   319
    "return the x-coordinate of the top-left origin"
6c38ca59927f *** empty log message ***
claus
parents: 59
diff changeset
   320
6c38ca59927f *** empty log message ***
claus
parents: 59
diff changeset
   321
    ^ left
6c38ca59927f *** empty log message ***
claus
parents: 59
diff changeset
   322
!
6c38ca59927f *** empty log message ***
claus
parents: 59
diff changeset
   323
6c38ca59927f *** empty log message ***
claus
parents: 59
diff changeset
   324
leftCenter
6c38ca59927f *** empty log message ***
claus
parents: 59
diff changeset
   325
    "return the left center point"
6c38ca59927f *** empty log message ***
claus
parents: 59
diff changeset
   326
6c38ca59927f *** empty log message ***
claus
parents: 59
diff changeset
   327
    ^ left @ (top + (height // 2))
6c38ca59927f *** empty log message ***
claus
parents: 59
diff changeset
   328
!
6c38ca59927f *** empty log message ***
claus
parents: 59
diff changeset
   329
6c38ca59927f *** empty log message ***
claus
parents: 59
diff changeset
   330
top
6c38ca59927f *** empty log message ***
claus
parents: 59
diff changeset
   331
    "return the y-coordinate of the top-left"
6c38ca59927f *** empty log message ***
claus
parents: 59
diff changeset
   332
6c38ca59927f *** empty log message ***
claus
parents: 59
diff changeset
   333
    ^ top
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
   334
!
a27a279701f8 Initial revision
claus
parents:
diff changeset
   335
a27a279701f8 Initial revision
claus
parents:
diff changeset
   336
topLeft
77
6c38ca59927f *** empty log message ***
claus
parents: 59
diff changeset
   337
    "return the top-left point - the same as origin"
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
   338
77
6c38ca59927f *** empty log message ***
claus
parents: 59
diff changeset
   339
    ^ left @ top
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
   340
!
a27a279701f8 Initial revision
claus
parents:
diff changeset
   341
a27a279701f8 Initial revision
claus
parents:
diff changeset
   342
topRight
a27a279701f8 Initial revision
claus
parents:
diff changeset
   343
    "return the top-right point"
a27a279701f8 Initial revision
claus
parents:
diff changeset
   344
77
6c38ca59927f *** empty log message ***
claus
parents: 59
diff changeset
   345
    ^ (left + width) @ top
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
   346
!
a27a279701f8 Initial revision
claus
parents:
diff changeset
   347
77
6c38ca59927f *** empty log message ***
claus
parents: 59
diff changeset
   348
topCenter
6c38ca59927f *** empty log message ***
claus
parents: 59
diff changeset
   349
    "return the top center point"
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
   350
77
6c38ca59927f *** empty log message ***
claus
parents: 59
diff changeset
   351
    ^ (left + (width // 2)) @ top
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
   352
!
a27a279701f8 Initial revision
claus
parents:
diff changeset
   353
a27a279701f8 Initial revision
claus
parents:
diff changeset
   354
bottom
a27a279701f8 Initial revision
claus
parents:
diff changeset
   355
    "return the y coordinate of the bottom"
a27a279701f8 Initial revision
claus
parents:
diff changeset
   356
a27a279701f8 Initial revision
claus
parents:
diff changeset
   357
    ^ (top + height)
a27a279701f8 Initial revision
claus
parents:
diff changeset
   358
!
a27a279701f8 Initial revision
claus
parents:
diff changeset
   359
77
6c38ca59927f *** empty log message ***
claus
parents: 59
diff changeset
   360
bottomLeft
6c38ca59927f *** empty log message ***
claus
parents: 59
diff changeset
   361
    "return the bottom-left point"
6c38ca59927f *** empty log message ***
claus
parents: 59
diff changeset
   362
6c38ca59927f *** empty log message ***
claus
parents: 59
diff changeset
   363
    ^ left @ (top + height)
6c38ca59927f *** empty log message ***
claus
parents: 59
diff changeset
   364
!
6c38ca59927f *** empty log message ***
claus
parents: 59
diff changeset
   365
6c38ca59927f *** empty log message ***
claus
parents: 59
diff changeset
   366
bottomRight
6c38ca59927f *** empty log message ***
claus
parents: 59
diff changeset
   367
    "return the bottom-right point"
6c38ca59927f *** empty log message ***
claus
parents: 59
diff changeset
   368
6c38ca59927f *** empty log message ***
claus
parents: 59
diff changeset
   369
    ^ (left + width) @ (top + height)
6c38ca59927f *** empty log message ***
claus
parents: 59
diff changeset
   370
!
6c38ca59927f *** empty log message ***
claus
parents: 59
diff changeset
   371
6c38ca59927f *** empty log message ***
claus
parents: 59
diff changeset
   372
bottomCenter
6c38ca59927f *** empty log message ***
claus
parents: 59
diff changeset
   373
    "return the bottom center point"
6c38ca59927f *** empty log message ***
claus
parents: 59
diff changeset
   374
6c38ca59927f *** empty log message ***
claus
parents: 59
diff changeset
   375
    ^ (left + (width // 2)) @ (top + height)
6c38ca59927f *** empty log message ***
claus
parents: 59
diff changeset
   376
!
6c38ca59927f *** empty log message ***
claus
parents: 59
diff changeset
   377
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
   378
right
a27a279701f8 Initial revision
claus
parents:
diff changeset
   379
    "return the x coordinate of the right"
a27a279701f8 Initial revision
claus
parents:
diff changeset
   380
a27a279701f8 Initial revision
claus
parents:
diff changeset
   381
    ^ (left + width)
a27a279701f8 Initial revision
claus
parents:
diff changeset
   382
!
a27a279701f8 Initial revision
claus
parents:
diff changeset
   383
77
6c38ca59927f *** empty log message ***
claus
parents: 59
diff changeset
   384
rightCenter
6c38ca59927f *** empty log message ***
claus
parents: 59
diff changeset
   385
    "return the right center point"
6c38ca59927f *** empty log message ***
claus
parents: 59
diff changeset
   386
6c38ca59927f *** empty log message ***
claus
parents: 59
diff changeset
   387
    ^ (left + width) @ (top + (height // 2))
6c38ca59927f *** empty log message ***
claus
parents: 59
diff changeset
   388
!
6c38ca59927f *** empty log message ***
claus
parents: 59
diff changeset
   389
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
   390
center
a27a279701f8 Initial revision
claus
parents:
diff changeset
   391
    "return the point in the center of the receiver"
a27a279701f8 Initial revision
claus
parents:
diff changeset
   392
77
6c38ca59927f *** empty log message ***
claus
parents: 59
diff changeset
   393
    ^ (left + (width // 2)) @ (top + (height // 2))
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
   394
!
a27a279701f8 Initial revision
claus
parents:
diff changeset
   395
a27a279701f8 Initial revision
claus
parents:
diff changeset
   396
area
77
6c38ca59927f *** empty log message ***
claus
parents: 59
diff changeset
   397
    "return the area 
6c38ca59927f *** empty log message ***
claus
parents: 59
diff changeset
   398
     - for screen Rectangles this is the number of pixels"
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
   399
a27a279701f8 Initial revision
claus
parents:
diff changeset
   400
    ^ width * height
a27a279701f8 Initial revision
claus
parents:
diff changeset
   401
! !
a27a279701f8 Initial revision
claus
parents:
diff changeset
   402
a27a279701f8 Initial revision
claus
parents:
diff changeset
   403
!Rectangle methodsFor:'comparing'!
a27a279701f8 Initial revision
claus
parents:
diff changeset
   404
a27a279701f8 Initial revision
claus
parents:
diff changeset
   405
= aRectangle
a27a279701f8 Initial revision
claus
parents:
diff changeset
   406
    "return true, if the argument aRectangle represents the same
a27a279701f8 Initial revision
claus
parents:
diff changeset
   407
     rectangle as the receiver"
a27a279701f8 Initial revision
claus
parents:
diff changeset
   408
a27a279701f8 Initial revision
claus
parents:
diff changeset
   409
%{  /* NOCONTEXT */
59
4a86aad06603 *** empty log message ***
claus
parents: 32
diff changeset
   410
    REGISTER struct instance *mySelf, *other;
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
   411
59
4a86aad06603 *** empty log message ***
claus
parents: 32
diff changeset
   412
    /*
4a86aad06603 *** empty log message ***
claus
parents: 32
diff changeset
   413
     * handle the common case quickly
4a86aad06603 *** empty log message ***
claus
parents: 32
diff changeset
   414
     */
4a86aad06603 *** empty log message ***
claus
parents: 32
diff changeset
   415
    if (_isNonNilObject(aRectangle) 
4a86aad06603 *** empty log message ***
claus
parents: 32
diff changeset
   416
     && _qClass(aRectangle) == Rectangle) {
4a86aad06603 *** empty log message ***
claus
parents: 32
diff changeset
   417
        mySelf = _InstPtr(self);
4a86aad06603 *** empty log message ***
claus
parents: 32
diff changeset
   418
        other = _InstPtr(aRectangle);
4a86aad06603 *** empty log message ***
claus
parents: 32
diff changeset
   419
        if ((mySelf->i_instvars[0] == other->i_instvars[0])
4a86aad06603 *** empty log message ***
claus
parents: 32
diff changeset
   420
         && (mySelf->i_instvars[1] == other->i_instvars[1])
4a86aad06603 *** empty log message ***
claus
parents: 32
diff changeset
   421
         && (mySelf->i_instvars[2] == other->i_instvars[2])
4a86aad06603 *** empty log message ***
claus
parents: 32
diff changeset
   422
         && (mySelf->i_instvars[3] == other->i_instvars[3])) {
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
   423
            RETURN ( true );
a27a279701f8 Initial revision
claus
parents:
diff changeset
   424
        }
a27a279701f8 Initial revision
claus
parents:
diff changeset
   425
    }
a27a279701f8 Initial revision
claus
parents:
diff changeset
   426
%}
a27a279701f8 Initial revision
claus
parents:
diff changeset
   427
.
59
4a86aad06603 *** empty log message ***
claus
parents: 32
diff changeset
   428
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
   429
    (aRectangle isKindOf:Rectangle) ifFalse:[^ false].
a27a279701f8 Initial revision
claus
parents:
diff changeset
   430
a27a279701f8 Initial revision
claus
parents:
diff changeset
   431
    left = aRectangle left ifFalse:[^ false].
a27a279701f8 Initial revision
claus
parents:
diff changeset
   432
    top = aRectangle top ifFalse:[^ false].
a27a279701f8 Initial revision
claus
parents:
diff changeset
   433
    width = aRectangle width ifFalse:[^ false].
a27a279701f8 Initial revision
claus
parents:
diff changeset
   434
    height = aRectangle height ifFalse:[^ false].
a27a279701f8 Initial revision
claus
parents:
diff changeset
   435
    ^ true
59
4a86aad06603 *** empty log message ***
claus
parents: 32
diff changeset
   436
!
4a86aad06603 *** empty log message ***
claus
parents: 32
diff changeset
   437
4a86aad06603 *** empty log message ***
claus
parents: 32
diff changeset
   438
hash
4a86aad06603 *** empty log message ***
claus
parents: 32
diff changeset
   439
    "return an integer useful for hashing -
4a86aad06603 *** empty log message ***
claus
parents: 32
diff changeset
   440
     redefined since = is redefined here"
4a86aad06603 *** empty log message ***
claus
parents: 32
diff changeset
   441
4a86aad06603 *** empty log message ***
claus
parents: 32
diff changeset
   442
    ^ ((left hash bitShift:16) bitXor:(top hash bitShift:16))
4a86aad06603 *** empty log message ***
claus
parents: 32
diff changeset
   443
      + ((width hash) bitXor:(height hash))
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
   444
! !
a27a279701f8 Initial revision
claus
parents:
diff changeset
   445
77
6c38ca59927f *** empty log message ***
claus
parents: 59
diff changeset
   446
!Rectangle methodsFor:'queries'!
6c38ca59927f *** empty log message ***
claus
parents: 59
diff changeset
   447
6c38ca59927f *** empty log message ***
claus
parents: 59
diff changeset
   448
isRectangle
6c38ca59927f *** empty log message ***
claus
parents: 59
diff changeset
   449
    "return true, if the receiver is some kind of rectangle"
6c38ca59927f *** empty log message ***
claus
parents: 59
diff changeset
   450
6c38ca59927f *** empty log message ***
claus
parents: 59
diff changeset
   451
    ^ true
6c38ca59927f *** empty log message ***
claus
parents: 59
diff changeset
   452
! !
6c38ca59927f *** empty log message ***
claus
parents: 59
diff changeset
   453
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
   454
!Rectangle methodsFor:'testing'!
a27a279701f8 Initial revision
claus
parents:
diff changeset
   455
a27a279701f8 Initial revision
claus
parents:
diff changeset
   456
containsPoint:aPoint
a27a279701f8 Initial revision
claus
parents:
diff changeset
   457
    "return true, if the argument, aPoint is contained in the receiver"
a27a279701f8 Initial revision
claus
parents:
diff changeset
   458
a27a279701f8 Initial revision
claus
parents:
diff changeset
   459
    |px py|
a27a279701f8 Initial revision
claus
parents:
diff changeset
   460
a27a279701f8 Initial revision
claus
parents:
diff changeset
   461
    px := aPoint x.
a27a279701f8 Initial revision
claus
parents:
diff changeset
   462
    (px < left)           ifTrue:[^ false].
a27a279701f8 Initial revision
claus
parents:
diff changeset
   463
    (px > (left + width)) ifTrue:[^ false].
a27a279701f8 Initial revision
claus
parents:
diff changeset
   464
    py := aPoint y.
a27a279701f8 Initial revision
claus
parents:
diff changeset
   465
    (py < top)            ifTrue:[^ false].
a27a279701f8 Initial revision
claus
parents:
diff changeset
   466
    (py > (top + height)) ifTrue:[^ false].
a27a279701f8 Initial revision
claus
parents:
diff changeset
   467
    ^ true
a27a279701f8 Initial revision
claus
parents:
diff changeset
   468
!
a27a279701f8 Initial revision
claus
parents:
diff changeset
   469
a27a279701f8 Initial revision
claus
parents:
diff changeset
   470
intersects:aRectangle
a27a279701f8 Initial revision
claus
parents:
diff changeset
   471
    "return true, if the intersection between the argument, aRectangle
a27a279701f8 Initial revision
claus
parents:
diff changeset
   472
     and the receiver is not empty"
a27a279701f8 Initial revision
claus
parents:
diff changeset
   473
a27a279701f8 Initial revision
claus
parents:
diff changeset
   474
    |b r|
a27a279701f8 Initial revision
claus
parents:
diff changeset
   475
a27a279701f8 Initial revision
claus
parents:
diff changeset
   476
    (aRectangle right)  < left ifTrue:[^ false].
a27a279701f8 Initial revision
claus
parents:
diff changeset
   477
    (aRectangle bottom) < top  ifTrue:[^ false].
a27a279701f8 Initial revision
claus
parents:
diff changeset
   478
    r := left + width.
a27a279701f8 Initial revision
claus
parents:
diff changeset
   479
    (aRectangle left)   > r    ifTrue:[^ false].
a27a279701f8 Initial revision
claus
parents:
diff changeset
   480
    b := top + height.
a27a279701f8 Initial revision
claus
parents:
diff changeset
   481
    (aRectangle top)    > b    ifTrue:[^ false].
a27a279701f8 Initial revision
claus
parents:
diff changeset
   482
    ^ true
a27a279701f8 Initial revision
claus
parents:
diff changeset
   483
!
a27a279701f8 Initial revision
claus
parents:
diff changeset
   484
a27a279701f8 Initial revision
claus
parents:
diff changeset
   485
contains:aRectangle
a27a279701f8 Initial revision
claus
parents:
diff changeset
   486
    "return true, if the argument, aRectangle is equal to or
a27a279701f8 Initial revision
claus
parents:
diff changeset
   487
     is contained fully within the receiver"
a27a279701f8 Initial revision
claus
parents:
diff changeset
   488
a27a279701f8 Initial revision
claus
parents:
diff changeset
   489
    (left <= aRectangle left) ifTrue:[
a27a279701f8 Initial revision
claus
parents:
diff changeset
   490
      ((left + width) >= aRectangle right) ifTrue:[
a27a279701f8 Initial revision
claus
parents:
diff changeset
   491
        (top <= aRectangle top) ifTrue:[
a27a279701f8 Initial revision
claus
parents:
diff changeset
   492
          ((top + height) >= aRectangle bottom) ifTrue:[
a27a279701f8 Initial revision
claus
parents:
diff changeset
   493
            ^ true
a27a279701f8 Initial revision
claus
parents:
diff changeset
   494
          ]
a27a279701f8 Initial revision
claus
parents:
diff changeset
   495
        ]
a27a279701f8 Initial revision
claus
parents:
diff changeset
   496
      ]
a27a279701f8 Initial revision
claus
parents:
diff changeset
   497
    ].
a27a279701f8 Initial revision
claus
parents:
diff changeset
   498
    ^ false
a27a279701f8 Initial revision
claus
parents:
diff changeset
   499
!
a27a279701f8 Initial revision
claus
parents:
diff changeset
   500
a27a279701f8 Initial revision
claus
parents:
diff changeset
   501
isContainedIn:aRectangle
a27a279701f8 Initial revision
claus
parents:
diff changeset
   502
    "return true, if the receiver is fully contained within 
a27a279701f8 Initial revision
claus
parents:
diff changeset
   503
     the argument, aRectangle"
a27a279701f8 Initial revision
claus
parents:
diff changeset
   504
a27a279701f8 Initial revision
claus
parents:
diff changeset
   505
    (aRectangle left <= left) ifTrue:[
a27a279701f8 Initial revision
claus
parents:
diff changeset
   506
      (aRectangle right >= (left + width)) ifTrue:[
a27a279701f8 Initial revision
claus
parents:
diff changeset
   507
        (aRectangle top <= top) ifTrue:[
a27a279701f8 Initial revision
claus
parents:
diff changeset
   508
          (aRectangle bottom >= (top + height)) ifTrue:[
a27a279701f8 Initial revision
claus
parents:
diff changeset
   509
            ^ true
a27a279701f8 Initial revision
claus
parents:
diff changeset
   510
          ]
a27a279701f8 Initial revision
claus
parents:
diff changeset
   511
        ]
a27a279701f8 Initial revision
claus
parents:
diff changeset
   512
      ]
a27a279701f8 Initial revision
claus
parents:
diff changeset
   513
    ].
a27a279701f8 Initial revision
claus
parents:
diff changeset
   514
    ^ false
a27a279701f8 Initial revision
claus
parents:
diff changeset
   515
! !
a27a279701f8 Initial revision
claus
parents:
diff changeset
   516
a27a279701f8 Initial revision
claus
parents:
diff changeset
   517
!Rectangle methodsFor:'rectangle operations'!
a27a279701f8 Initial revision
claus
parents:
diff changeset
   518
a27a279701f8 Initial revision
claus
parents:
diff changeset
   519
intersect:aRectangle
a27a279701f8 Initial revision
claus
parents:
diff changeset
   520
    "return a new rectangle covering the intersection of the receiver
a27a279701f8 Initial revision
claus
parents:
diff changeset
   521
     and the argument, aRectangle.
a27a279701f8 Initial revision
claus
parents:
diff changeset
   522
     the rectangles must intersect for a valid return"
a27a279701f8 Initial revision
claus
parents:
diff changeset
   523
a27a279701f8 Initial revision
claus
parents:
diff changeset
   524
    ^ Rectangle left:(left max:(aRectangle left))
a27a279701f8 Initial revision
claus
parents:
diff changeset
   525
               right:((left + width) min:(aRectangle right))
a27a279701f8 Initial revision
claus
parents:
diff changeset
   526
                 top:(top max:(aRectangle top))
a27a279701f8 Initial revision
claus
parents:
diff changeset
   527
              bottom:((top + height) min:(aRectangle bottom))
a27a279701f8 Initial revision
claus
parents:
diff changeset
   528
!
a27a279701f8 Initial revision
claus
parents:
diff changeset
   529
a27a279701f8 Initial revision
claus
parents:
diff changeset
   530
merge:aRectangle
a27a279701f8 Initial revision
claus
parents:
diff changeset
   531
    "return a new rectangle covering both the receiver 
a27a279701f8 Initial revision
claus
parents:
diff changeset
   532
     and the argument, aRectangle"
a27a279701f8 Initial revision
claus
parents:
diff changeset
   533
a27a279701f8 Initial revision
claus
parents:
diff changeset
   534
    ^ Rectangle left:(left min:(aRectangle left))
a27a279701f8 Initial revision
claus
parents:
diff changeset
   535
               right:((left + width) max:(aRectangle right))
a27a279701f8 Initial revision
claus
parents:
diff changeset
   536
                 top:(top min:(aRectangle top))
a27a279701f8 Initial revision
claus
parents:
diff changeset
   537
              bottom:((top + height) max:(aRectangle bottom))
a27a279701f8 Initial revision
claus
parents:
diff changeset
   538
!
a27a279701f8 Initial revision
claus
parents:
diff changeset
   539
a27a279701f8 Initial revision
claus
parents:
diff changeset
   540
+ aPoint
a27a279701f8 Initial revision
claus
parents:
diff changeset
   541
    "return a Rectangle with same extent as receiver but
a27a279701f8 Initial revision
claus
parents:
diff changeset
   542
     origin translated by the argument, aPoint"
a27a279701f8 Initial revision
claus
parents:
diff changeset
   543
a27a279701f8 Initial revision
claus
parents:
diff changeset
   544
    ^ Rectangle origin:(self origin + aPoint) extent:(self extent)
a27a279701f8 Initial revision
claus
parents:
diff changeset
   545
!
a27a279701f8 Initial revision
claus
parents:
diff changeset
   546
a27a279701f8 Initial revision
claus
parents:
diff changeset
   547
rounded
a27a279701f8 Initial revision
claus
parents:
diff changeset
   548
    ^ Rectangle left:(left rounded) top:(top rounded)
a27a279701f8 Initial revision
claus
parents:
diff changeset
   549
               width:(width rounded) height:(height rounded)
a27a279701f8 Initial revision
claus
parents:
diff changeset
   550
!
a27a279701f8 Initial revision
claus
parents:
diff changeset
   551
77
6c38ca59927f *** empty log message ***
claus
parents: 59
diff changeset
   552
expandBy:delta
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
   553
    "return a new rectangle which is expanded in all directions
77
6c38ca59927f *** empty log message ***
claus
parents: 59
diff changeset
   554
     by amount, a Point, Rectangle or Number"
6c38ca59927f *** empty log message ***
claus
parents: 59
diff changeset
   555
6c38ca59927f *** empty log message ***
claus
parents: 59
diff changeset
   556
    |amountPoint deltaLeft deltaTop deltaWidth deltaHeight|
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
   557
77
6c38ca59927f *** empty log message ***
claus
parents: 59
diff changeset
   558
    delta isNumber ifTrue:[
6c38ca59927f *** empty log message ***
claus
parents: 59
diff changeset
   559
        deltaLeft := deltaTop := delta.
6c38ca59927f *** empty log message ***
claus
parents: 59
diff changeset
   560
        deltaWidth := deltaHeight := delta * 2.
6c38ca59927f *** empty log message ***
claus
parents: 59
diff changeset
   561
    ] ifFalse:[
6c38ca59927f *** empty log message ***
claus
parents: 59
diff changeset
   562
        delta isRectangle ifTrue:[
6c38ca59927f *** empty log message ***
claus
parents: 59
diff changeset
   563
            deltaLeft := delta left.
6c38ca59927f *** empty log message ***
claus
parents: 59
diff changeset
   564
            deltaTop := delta top.
6c38ca59927f *** empty log message ***
claus
parents: 59
diff changeset
   565
            deltaWidth := deltaLeft + delta right.
6c38ca59927f *** empty log message ***
claus
parents: 59
diff changeset
   566
            deltaHeight := deltaTop + delta bottom
6c38ca59927f *** empty log message ***
claus
parents: 59
diff changeset
   567
        ] ifFalse:[
6c38ca59927f *** empty log message ***
claus
parents: 59
diff changeset
   568
            amountPoint := delta asPoint.
6c38ca59927f *** empty log message ***
claus
parents: 59
diff changeset
   569
            deltaLeft := amountPoint x.
6c38ca59927f *** empty log message ***
claus
parents: 59
diff changeset
   570
            deltaTop := amountPoint y.
6c38ca59927f *** empty log message ***
claus
parents: 59
diff changeset
   571
            deltaWidth := deltaLeft * 2.
6c38ca59927f *** empty log message ***
claus
parents: 59
diff changeset
   572
            deltaHeight := deltaTop * 2.
6c38ca59927f *** empty log message ***
claus
parents: 59
diff changeset
   573
        ]
6c38ca59927f *** empty log message ***
claus
parents: 59
diff changeset
   574
    ].
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
   575
77
6c38ca59927f *** empty log message ***
claus
parents: 59
diff changeset
   576
    ^ Rectangle left:(left - deltaLeft)
6c38ca59927f *** empty log message ***
claus
parents: 59
diff changeset
   577
                 top:(top - deltaTop)
6c38ca59927f *** empty log message ***
claus
parents: 59
diff changeset
   578
               width:(width + deltaWidth)
6c38ca59927f *** empty log message ***
claus
parents: 59
diff changeset
   579
              height:(height + deltaHeight)
6c38ca59927f *** empty log message ***
claus
parents: 59
diff changeset
   580
6c38ca59927f *** empty log message ***
claus
parents: 59
diff changeset
   581
    "
6c38ca59927f *** empty log message ***
claus
parents: 59
diff changeset
   582
     |r|
6c38ca59927f *** empty log message ***
claus
parents: 59
diff changeset
   583
     r := Rectangle origin:10@10 corner:100@100.
6c38ca59927f *** empty log message ***
claus
parents: 59
diff changeset
   584
     r expandBy:5.
6c38ca59927f *** empty log message ***
claus
parents: 59
diff changeset
   585
     r expandBy:(5 @ 0).
6c38ca59927f *** empty log message ***
claus
parents: 59
diff changeset
   586
     r expandBy:(10 @ 10).
6c38ca59927f *** empty log message ***
claus
parents: 59
diff changeset
   587
     r expandBy:( 10@10 corner:20@20 )
6c38ca59927f *** empty log message ***
claus
parents: 59
diff changeset
   588
    "
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
   589
!
a27a279701f8 Initial revision
claus
parents:
diff changeset
   590
a27a279701f8 Initial revision
claus
parents:
diff changeset
   591
insetBy: delta
a27a279701f8 Initial revision
claus
parents:
diff changeset
   592
    "return a new rectangle which is inset in all directions
77
6c38ca59927f *** empty log message ***
claus
parents: 59
diff changeset
   593
     by delta, a Point, Rectangle or Number"
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
   594
77
6c38ca59927f *** empty log message ***
claus
parents: 59
diff changeset
   595
    |amountPoint deltaLeft deltaTop deltaWidth deltaHeight|
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
   596
77
6c38ca59927f *** empty log message ***
claus
parents: 59
diff changeset
   597
    delta isNumber ifTrue:[
6c38ca59927f *** empty log message ***
claus
parents: 59
diff changeset
   598
        deltaLeft := deltaTop := delta.
6c38ca59927f *** empty log message ***
claus
parents: 59
diff changeset
   599
        deltaWidth := deltaHeight := delta * 2.
6c38ca59927f *** empty log message ***
claus
parents: 59
diff changeset
   600
    ] ifFalse:[
6c38ca59927f *** empty log message ***
claus
parents: 59
diff changeset
   601
        delta isRectangle ifTrue:[
6c38ca59927f *** empty log message ***
claus
parents: 59
diff changeset
   602
            deltaLeft := delta left.
6c38ca59927f *** empty log message ***
claus
parents: 59
diff changeset
   603
            deltaTop := delta top.
6c38ca59927f *** empty log message ***
claus
parents: 59
diff changeset
   604
            deltaWidth := deltaLeft + delta right.
6c38ca59927f *** empty log message ***
claus
parents: 59
diff changeset
   605
            deltaHeight := deltaTop + delta bottom
6c38ca59927f *** empty log message ***
claus
parents: 59
diff changeset
   606
        ] ifFalse:[
6c38ca59927f *** empty log message ***
claus
parents: 59
diff changeset
   607
            amountPoint := delta asPoint.
6c38ca59927f *** empty log message ***
claus
parents: 59
diff changeset
   608
            deltaLeft := amountPoint x.
6c38ca59927f *** empty log message ***
claus
parents: 59
diff changeset
   609
            deltaTop := amountPoint y.
6c38ca59927f *** empty log message ***
claus
parents: 59
diff changeset
   610
            deltaWidth := deltaLeft * 2.
6c38ca59927f *** empty log message ***
claus
parents: 59
diff changeset
   611
            deltaHeight := deltaTop * 2.
6c38ca59927f *** empty log message ***
claus
parents: 59
diff changeset
   612
        ]
6c38ca59927f *** empty log message ***
claus
parents: 59
diff changeset
   613
    ].
6c38ca59927f *** empty log message ***
claus
parents: 59
diff changeset
   614
6c38ca59927f *** empty log message ***
claus
parents: 59
diff changeset
   615
    ^ Rectangle left:(left + deltaLeft)
6c38ca59927f *** empty log message ***
claus
parents: 59
diff changeset
   616
                 top:(top + deltaTop)
6c38ca59927f *** empty log message ***
claus
parents: 59
diff changeset
   617
               width:(width - deltaWidth)
6c38ca59927f *** empty log message ***
claus
parents: 59
diff changeset
   618
              height:(height - deltaHeight)
6c38ca59927f *** empty log message ***
claus
parents: 59
diff changeset
   619
    "
6c38ca59927f *** empty log message ***
claus
parents: 59
diff changeset
   620
     |r|
6c38ca59927f *** empty log message ***
claus
parents: 59
diff changeset
   621
     r := Rectangle origin:10@10 corner:100@100.
6c38ca59927f *** empty log message ***
claus
parents: 59
diff changeset
   622
     r insetBy:5.
6c38ca59927f *** empty log message ***
claus
parents: 59
diff changeset
   623
     r insetBy:(5 @ 0).
6c38ca59927f *** empty log message ***
claus
parents: 59
diff changeset
   624
     r insetBy:(10 @ 10).
6c38ca59927f *** empty log message ***
claus
parents: 59
diff changeset
   625
     r insetBy:( 10@10 corner:20@20 )
6c38ca59927f *** empty log message ***
claus
parents: 59
diff changeset
   626
    "
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
   627
!
a27a279701f8 Initial revision
claus
parents:
diff changeset
   628
a27a279701f8 Initial revision
claus
parents:
diff changeset
   629
translateBy:amount
3
24d81bf47225 *** empty log message ***
claus
parents: 2
diff changeset
   630
    "destructively translate (i.e. move) the receiver rectangle 
24d81bf47225 *** empty log message ***
claus
parents: 2
diff changeset
   631
     by amount, aPoint or Number"
24d81bf47225 *** empty log message ***
claus
parents: 2
diff changeset
   632
24d81bf47225 *** empty log message ***
claus
parents: 2
diff changeset
   633
    |amountPoint|
24d81bf47225 *** empty log message ***
claus
parents: 2
diff changeset
   634
24d81bf47225 *** empty log message ***
claus
parents: 2
diff changeset
   635
    amountPoint := amount asPoint.
24d81bf47225 *** empty log message ***
claus
parents: 2
diff changeset
   636
    left := left + amountPoint x.
24d81bf47225 *** empty log message ***
claus
parents: 2
diff changeset
   637
    top := top + amountPoint y
24d81bf47225 *** empty log message ***
claus
parents: 2
diff changeset
   638
!
24d81bf47225 *** empty log message ***
claus
parents: 2
diff changeset
   639
24d81bf47225 *** empty log message ***
claus
parents: 2
diff changeset
   640
translatedBy:amount
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
   641
    "return a new rectangle which is translated (i.e. moved)
a27a279701f8 Initial revision
claus
parents:
diff changeset
   642
     by amount, aPoint or Number"
a27a279701f8 Initial revision
claus
parents:
diff changeset
   643
a27a279701f8 Initial revision
claus
parents:
diff changeset
   644
    |amountPoint|
a27a279701f8 Initial revision
claus
parents:
diff changeset
   645
a27a279701f8 Initial revision
claus
parents:
diff changeset
   646
    amountPoint := amount asPoint.
59
4a86aad06603 *** empty log message ***
claus
parents: 32
diff changeset
   647
    ^ Rectangle left:(left + amountPoint x) 
4a86aad06603 *** empty log message ***
claus
parents: 32
diff changeset
   648
                 top:(top + amountPoint y)
4a86aad06603 *** empty log message ***
claus
parents: 32
diff changeset
   649
               width:width
4a86aad06603 *** empty log message ***
claus
parents: 32
diff changeset
   650
              height:height
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
   651
!
a27a279701f8 Initial revision
claus
parents:
diff changeset
   652
a27a279701f8 Initial revision
claus
parents:
diff changeset
   653
moveTo: aPoint
a27a279701f8 Initial revision
claus
parents:
diff changeset
   654
    "destructively translate the rectangle"
a27a279701f8 Initial revision
claus
parents:
diff changeset
   655
a27a279701f8 Initial revision
claus
parents:
diff changeset
   656
    | diff |
a27a279701f8 Initial revision
claus
parents:
diff changeset
   657
a27a279701f8 Initial revision
claus
parents:
diff changeset
   658
    diff := aPoint - self origin.
a27a279701f8 Initial revision
claus
parents:
diff changeset
   659
    self origin:aPoint corner:self corner + diff
a27a279701f8 Initial revision
claus
parents:
diff changeset
   660
!
a27a279701f8 Initial revision
claus
parents:
diff changeset
   661
a27a279701f8 Initial revision
claus
parents:
diff changeset
   662
moveBy: aPoint
a27a279701f8 Initial revision
claus
parents:
diff changeset
   663
    "destructively translate the rectangle
a27a279701f8 Initial revision
claus
parents:
diff changeset
   664
     sorry for the name inconsistency - but GNU-ST named it that way"
a27a279701f8 Initial revision
claus
parents:
diff changeset
   665
a27a279701f8 Initial revision
claus
parents:
diff changeset
   666
    left := left + aPoint x.
a27a279701f8 Initial revision
claus
parents:
diff changeset
   667
    top := top + aPoint y
a27a279701f8 Initial revision
claus
parents:
diff changeset
   668
!
a27a279701f8 Initial revision
claus
parents:
diff changeset
   669
a27a279701f8 Initial revision
claus
parents:
diff changeset
   670
scaleBy:scale
a27a279701f8 Initial revision
claus
parents:
diff changeset
   671
    "destructively scale the receiver rectangle by scale"
a27a279701f8 Initial revision
claus
parents:
diff changeset
   672
a27a279701f8 Initial revision
claus
parents:
diff changeset
   673
    |scalePoint|
a27a279701f8 Initial revision
claus
parents:
diff changeset
   674
a27a279701f8 Initial revision
claus
parents:
diff changeset
   675
    scalePoint := scale asPoint.
a27a279701f8 Initial revision
claus
parents:
diff changeset
   676
    width := (width * scalePoint x).
a27a279701f8 Initial revision
claus
parents:
diff changeset
   677
    height := (height * scalePoint y)
a27a279701f8 Initial revision
claus
parents:
diff changeset
   678
!
a27a279701f8 Initial revision
claus
parents:
diff changeset
   679
a27a279701f8 Initial revision
claus
parents:
diff changeset
   680
scaledBy:scale
a27a279701f8 Initial revision
claus
parents:
diff changeset
   681
    "return a new rectangle which is the receiver
a27a279701f8 Initial revision
claus
parents:
diff changeset
   682
     scaled by scale"
a27a279701f8 Initial revision
claus
parents:
diff changeset
   683
a27a279701f8 Initial revision
claus
parents:
diff changeset
   684
    |scalePoint|
a27a279701f8 Initial revision
claus
parents:
diff changeset
   685
a27a279701f8 Initial revision
claus
parents:
diff changeset
   686
    scalePoint := scale asPoint.
a27a279701f8 Initial revision
claus
parents:
diff changeset
   687
    ^ Rectangle left:left top:top
a27a279701f8 Initial revision
claus
parents:
diff changeset
   688
               width:(width * scalePoint x)
a27a279701f8 Initial revision
claus
parents:
diff changeset
   689
              height:(height * scalePoint y)
a27a279701f8 Initial revision
claus
parents:
diff changeset
   690
!
a27a279701f8 Initial revision
claus
parents:
diff changeset
   691
a27a279701f8 Initial revision
claus
parents:
diff changeset
   692
amountToTranslateWithin: aRectangle
a27a279701f8 Initial revision
claus
parents:
diff changeset
   693
    "for GNU-ST compatibility"
a27a279701f8 Initial revision
claus
parents:
diff changeset
   694
a27a279701f8 Initial revision
claus
parents:
diff changeset
   695
    ^(aRectangle origin) - self origin
a27a279701f8 Initial revision
claus
parents:
diff changeset
   696
!
a27a279701f8 Initial revision
claus
parents:
diff changeset
   697
a27a279701f8 Initial revision
claus
parents:
diff changeset
   698
areasOutside: aRectangle
a27a279701f8 Initial revision
claus
parents:
diff changeset
   699
    "----------------------------------------------------------------
a27a279701f8 Initial revision
claus
parents:
diff changeset
   700
    | added for GNU-ST compatibility
a27a279701f8 Initial revision
claus
parents:
diff changeset
   701
    |
a27a279701f8 Initial revision
claus
parents:
diff changeset
   702
    | author: Doug McCallum <uunet!!ico.isc.com!!dougm>
a27a279701f8 Initial revision
claus
parents:
diff changeset
   703
    |
a27a279701f8 Initial revision
claus
parents:
diff changeset
   704
    |areasOutside: aRectangle
a27a279701f8 Initial revision
claus
parents:
diff changeset
   705
    | most complicated of the Rectangle primitives
a27a279701f8 Initial revision
claus
parents:
diff changeset
   706
    | The basic methodology is to first determine that there is an 
a27a279701f8 Initial revision
claus
parents:
diff changeset
   707
    | intersection by finding the overlapping rectangle.  From the
a27a279701f8 Initial revision
claus
parents:
diff changeset
   708
    | overlapping rectangle, first determine if it runs along an edge.
a27a279701f8 Initial revision
claus
parents:
diff changeset
   709
    | If it doesn't, extend the rectangle up to the top edge and add
a27a279701f8 Initial revision
claus
parents:
diff changeset
   710
    | the new rectangle to the collection and start the rest of the
a27a279701f8 Initial revision
claus
parents:
diff changeset
   711
    | process.  If the left edge does not touch the left edge of self,
a27a279701f8 Initial revision
claus
parents:
diff changeset
   712
    | extend it to the edge saving the new rectangle.  Then do the 
a27a279701f8 Initial revision
claus
parents:
diff changeset
   713
    | same to the right edge.  Then check top and bottom edges.  Most
a27a279701f8 Initial revision
claus
parents:
diff changeset
   714
    | of the time only 2 or 3 rectangles get formed, occasionally 4.
a27a279701f8 Initial revision
claus
parents:
diff changeset
   715
    | It should be possible to never get more than 3 but requires more
a27a279701f8 Initial revision
claus
parents:
diff changeset
   716
    | work.
a27a279701f8 Initial revision
claus
parents:
diff changeset
   717
     ----------------------------------------------------------------"
a27a279701f8 Initial revision
claus
parents:
diff changeset
   718
a27a279701f8 Initial revision
claus
parents:
diff changeset
   719
    | collect iRect tmp |
a27a279701f8 Initial revision
claus
parents:
diff changeset
   720
    iRect _ self intersect: aRectangle.
a27a279701f8 Initial revision
claus
parents:
diff changeset
   721
    (iRect = nil) ifTrue: [^nil]. "case of no intersection"
a27a279701f8 Initial revision
claus
parents:
diff changeset
   722
                                "the collect collection gathers Rectangles"
a27a279701f8 Initial revision
claus
parents:
diff changeset
   723
    collect _ OrderedCollection new: 4.
a27a279701f8 Initial revision
claus
parents:
diff changeset
   724
                                "is it floating or on the edge?"
a27a279701f8 Initial revision
claus
parents:
diff changeset
   725
    (((((iRect top) ~= self top) 
a27a279701f8 Initial revision
claus
parents:
diff changeset
   726
         and: [ (iRect bottom) ~= self bottom ])
a27a279701f8 Initial revision
claus
parents:
diff changeset
   727
         and: [ (iRect left) ~= self left ])
a27a279701f8 Initial revision
claus
parents:
diff changeset
   728
         and: [ (iRect right) ~= self right ] )
a27a279701f8 Initial revision
claus
parents:
diff changeset
   729
        ifTrue: "entirely in the center."
a27a279701f8 Initial revision
claus
parents:
diff changeset
   730
            [tmp _ Rectangle origin: (Point x: iRect left y: self top)
a27a279701f8 Initial revision
claus
parents:
diff changeset
   731
                             corner: iRect bottomRight.
a27a279701f8 Initial revision
claus
parents:
diff changeset
   732
             collect add: tmp.
a27a279701f8 Initial revision
claus
parents:
diff changeset
   733
             iRect _ iRect merge: tmp].
a27a279701f8 Initial revision
claus
parents:
diff changeset
   734
    ((iRect left) ~= self left)
a27a279701f8 Initial revision
claus
parents:
diff changeset
   735
        ifTrue:                 "doesn't touch left edge so make it touch"
a27a279701f8 Initial revision
claus
parents:
diff changeset
   736
            [tmp _ Rectangle origin: (Point x: self left y: iRect top)
a27a279701f8 Initial revision
claus
parents:
diff changeset
   737
                                 corner: iRect bottomLeft.
a27a279701f8 Initial revision
claus
parents:
diff changeset
   738
                 collect add: tmp.
a27a279701f8 Initial revision
claus
parents:
diff changeset
   739
                                "merge new (tmp) with overlap to keep track"
a27a279701f8 Initial revision
claus
parents:
diff changeset
   740
                 iRect _ iRect merge: tmp].
a27a279701f8 Initial revision
claus
parents:
diff changeset
   741
    ((iRect right) ~= self right)
a27a279701f8 Initial revision
claus
parents:
diff changeset
   742
        ifTrue:                 "doesn't touch right edge so extend it"
a27a279701f8 Initial revision
claus
parents:
diff changeset
   743
            [tmp _ Rectangle origin: iRect topRight
a27a279701f8 Initial revision
claus
parents:
diff changeset
   744
                                 corner: (Point x: self right y: iRect bottom).
a27a279701f8 Initial revision
claus
parents:
diff changeset
   745
                 collect add: tmp.
a27a279701f8 Initial revision
claus
parents:
diff changeset
   746
                 iRect _ iRect merge: tmp].
77
6c38ca59927f *** empty log message ***
claus
parents: 59
diff changeset
   747
    (((iRect left) ~= self left) or: [(iRect top) ~= self top])
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
   748
        ifTrue:                 "whole top part can be taken now"
a27a279701f8 Initial revision
claus
parents:
diff changeset
   749
            [tmp _ Rectangle origin: self origin corner: iRect topRight.
a27a279701f8 Initial revision
claus
parents:
diff changeset
   750
                 collect add: tmp].
77
6c38ca59927f *** empty log message ***
claus
parents: 59
diff changeset
   751
    (((iRect right) ~= self right) or: [(iRect bottom) ~= self bottom])
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
   752
        ifTrue:                 "whole bottom open and can be taken"
a27a279701f8 Initial revision
claus
parents:
diff changeset
   753
            [tmp _ Rectangle origin: iRect bottomLeft corner: self corner.
a27a279701f8 Initial revision
claus
parents:
diff changeset
   754
                 collect add: tmp].
a27a279701f8 Initial revision
claus
parents:
diff changeset
   755
    ^collect
77
6c38ca59927f *** empty log message ***
claus
parents: 59
diff changeset
   756
!
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
   757
77
6c38ca59927f *** empty log message ***
claus
parents: 59
diff changeset
   758
nonIntersections:aRectangle
6c38ca59927f *** empty log message ***
claus
parents: 59
diff changeset
   759
    "this is the same as areasOutside: - for ST/V compatibility only"
6c38ca59927f *** empty log message ***
claus
parents: 59
diff changeset
   760
6c38ca59927f *** empty log message ***
claus
parents: 59
diff changeset
   761
    ^ self areasOutside:aRectangle
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
   762
! !
a27a279701f8 Initial revision
claus
parents:
diff changeset
   763
a27a279701f8 Initial revision
claus
parents:
diff changeset
   764
!Rectangle methodsFor:'printing'!
a27a279701f8 Initial revision
claus
parents:
diff changeset
   765
a27a279701f8 Initial revision
claus
parents:
diff changeset
   766
printOn:aStream
a27a279701f8 Initial revision
claus
parents:
diff changeset
   767
    "print the receiver on aStream"
a27a279701f8 Initial revision
claus
parents:
diff changeset
   768
59
4a86aad06603 *** empty log message ***
claus
parents: 32
diff changeset
   769
    aStream nextPutAll:(self class name).
4a86aad06603 *** empty log message ***
claus
parents: 32
diff changeset
   770
    aStream nextPutAll:' origin:'.
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
   771
    (self origin) printOn:aStream.
a27a279701f8 Initial revision
claus
parents:
diff changeset
   772
    aStream nextPutAll:' corner:'.
a27a279701f8 Initial revision
claus
parents:
diff changeset
   773
    (self corner) printOn:aStream
a27a279701f8 Initial revision
claus
parents:
diff changeset
   774
!
a27a279701f8 Initial revision
claus
parents:
diff changeset
   775
a27a279701f8 Initial revision
claus
parents:
diff changeset
   776
storeOn:aStream
a27a279701f8 Initial revision
claus
parents:
diff changeset
   777
    "store the receiver on aStream; i.e. print an expression which will
a27a279701f8 Initial revision
claus
parents:
diff changeset
   778
     reconstruct the receiver"
a27a279701f8 Initial revision
claus
parents:
diff changeset
   779
59
4a86aad06603 *** empty log message ***
claus
parents: 32
diff changeset
   780
    aStream nextPut:$(.
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
   781
    aStream nextPutAll:(self class name).
59
4a86aad06603 *** empty log message ***
claus
parents: 32
diff changeset
   782
    aStream nextPutAll:' origin:'.
4a86aad06603 *** empty log message ***
claus
parents: 32
diff changeset
   783
    (self origin) storeOn:aStream.
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
   784
    aStream nextPutAll:' corner:'.
59
4a86aad06603 *** empty log message ***
claus
parents: 32
diff changeset
   785
    (self corner) storeOn:aStream.
4a86aad06603 *** empty log message ***
claus
parents: 32
diff changeset
   786
    aStream nextPut:$)
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
   787
! !