X11 sample rewritten; now it works again
[k8lst.git] / modules / x11 / buttons / x11button.st
blobada04dbe44247f155d7aaf7fd512d28946e5607a
1 Package [
2   X11
6 X11BaseWindow subclass: X11Button [
7   | text hovered wasPress enabled normback hoverback |
9   ^new: parent at: xy size: sz text: aText [
10     | obj |
11     obj := self new: parent at: xy size: sz bgColor: (X11Color new: 0 g: 0 b: 0.7).
12     self in: obj var: #text put: aText.
13     obj; fontColor: 1.0 g: 1.0 b: 1.0; show.
14     ^obj
15   ]
17   ^new: parent at: xy text: aText [
18     | obj gw gh font |
19     obj := self new: parent at: xy size: 1 @ 1 text: aText.
20     font := obj font.
21     gw := font textWidth: aText.
22     gh := font textHeight: aText.
23     obj resize: (gw + 12) @ (gh + 8).
24     ^obj
25   ]
27   init [
28     super init.
29     normback := X11Color new: 0.0 g: 0.0 b: 0.7.
30     hoverback := X11Color new: 0.0 g: 0.0 b: 0.9.
31   ]
33   onClick [
34     ^self action
35   ]
36   onClick: aBlock [
37     ^self action: aBlock
38   ]
39   clicked [
40     ^self doAction
41   ]
43   draw [
44     | tpt rc |
45     self fgColor: (hovered ifNotNil: [ hoverback ] ifNil: [ normback ]).
46     rc := (self clientRect) growX: 1 y: 1.
47     self fillRect: rc.
48     tpt := 6 @ 4.
49     wasPress ifNotNil: [ tpt := tpt moveX: 1 y: 1 ].
50     self drawTextAt: tpt text: text.
51   ]
53   onX11Expose: evt [
54     ^self draw.
55   ]
57   onX11EnterNotify: evt [
58     hovered := true.
59     ^self draw.
60   ]
62   onX11LeaveNotify: evt [
63     hovered := wasPress := nil.
64     ^self draw.
65   ]
67   onX11ButtonPress: evt [
68     (evt at: 8) = 1 ifTrue: [ wasPress := true. self draw. ].
69   ]
71   onX11ButtonRelease: evt [
72     ((wasPress notNil) and: [ (evt at: 8) = 1 ]) ifTrue: [
73       wasPress := nil.
74       self draw.
75       self clicked.
76     ].
77   ]