Drawing rectangles and triangles
To draw other kinds of shapes, add more drawing methods to your part and widget classes. Add two instance methods to MyShape, in your runtime application:
rectangle
"Ask the widget to draw a filled rectangle."
self widget drawFilledRectangle
triangle
"Ask the widget to draw a filled triangle."
self widget drawFilledTriangle
Then add two instance methods to MyCwShape, in your runtime application. The first method draws a filled rectangle:
drawFilledRectangle
"Draw a filled rectangle with an outline around it."
| gc border |
gc := self createGC.
border := self borderWidth.
self window fillRectangle: gc
x: 0
y: 0
width: (self width)
height: (self height).
border > 0 ifTrue: [
self backgroundColor isNil ifFalse: [
gc setForeground:
(self window getPalette nearestPixelValue:
(self backgroundColor))].
self window drawRectangle: gc
x: border // 2
y: border // 2
width: (self width - border)
height: (self height - border).
].
gc freeGC.
The second method draws a filled triangle:
drawFilledTriangle
"Draw a filled triangle with an outline around it."
| gc points w h border |
points := OrderedCollection new.
w := self width.
h := self height.
points add: 0 @ h;
add: (self width // 2) @ 0;
add: (self width) @ h;
add: 0 @ h.
gc := self createGC.
border := self borderWidth.
self clear: gc.
self window fillPolygon: gc
points: points
shape: Convex
mode: CoordModeOrigin.
border > 0 ifTrue: [
self backgroundColor isNil ifFalse:
gc setForeground:
(self window getPalette nearestPixelValue:
(self backgroundColor))].
points := OrderedCollection new.
border := border // 2.
points add: border @ (h - border);
add: ((w // 2)) @ border;
add: (self width - border) @ (h - border);
add: border @ (h - border).
self window drawLines: gc
points: points
mode: CoordModeOrigin.
].
gc freeGC.
Last modified date: 01/29/2015