48 lines
1.5 KiB
Nim
48 lines
1.5 KiB
Nim
import gdk2, glib2, gtk2
|
|
|
|
const
|
|
Inside = "Mouse is over label"
|
|
OutSide = "Mouse is not over label"
|
|
|
|
# Context transmitted to callback.
|
|
type Context = object
|
|
label: PLabel
|
|
overButton: bool
|
|
|
|
|
|
proc changeLabel(p: PWidget; event: gdk2.PEventCrossing; context: var Context) {.cdecl.} =
|
|
context.label.set_text(if context.overButton: OutSide else: Inside)
|
|
context.overButton = not context.overButton
|
|
|
|
proc thisDestroy(widget: PWidget, data: Pgpointer) {.cdecl.} =
|
|
main_quit()
|
|
|
|
|
|
var context: Context
|
|
nim_init()
|
|
|
|
let window = window_new(gtk2.WINDOW_TOPLEVEL)
|
|
let stackbox = vbox_new(true, 10)
|
|
let button1 = button_new("Move mouse over button")
|
|
let buttonstyle = copy(button1.get_style())
|
|
buttonstyle.bg[STATE_PRELIGHT] = TColor(pixel: 0, red: 255, green: 0, blue: 0)
|
|
button1.set_style(buttonstyle)
|
|
let button2 = button_new()
|
|
context = Context(label: label_new(Outside), overButton: false)
|
|
let button3 = button_new("Quit")
|
|
|
|
button2.add(context.label)
|
|
stackbox.pack_start(button1, true, true, 0)
|
|
stackbox.pack_start(button2, true, true, 0)
|
|
stackbox.pack_start(button3, true, true, 0)
|
|
window.set_border_width(5)
|
|
window.add(stackbox)
|
|
|
|
discard window.signal_connect("destroy", SIGNAL_FUNC(thisDestroy), nil)
|
|
discard button1.signal_connect("enter_notify_event", SIGNAL_FUNC(changeLabel), addr(context))
|
|
discard button1.signal_connect("leave_notify_event", SIGNAL_FUNC(changeLabel), addr(context))
|
|
discard button3.signal_connect("clicked", SIGNAL_FUNC(thisDestroy), nil)
|
|
|
|
window.show_all()
|
|
main()
|