Animation: Difference between revisions
Content added Content deleted
m (→{{header|Processing Python mode}}: dir is a built-in, renamed variable) |
|||
Line 1,778: | Line 1,778: | ||
text.inverse = false |
text.inverse = false |
||
key.clear</lang> |
key.clear</lang> |
||
=={{header|Nim}}== |
|||
<lang Nim>import gintro/[glib, gobject, gdk, gtk, gio] |
|||
type |
|||
# Scrolling direction. |
|||
ScrollDirection = enum toLeft, toRight |
|||
# Data transmitted to update callback. |
|||
UpdateData = ref object |
|||
label: Label |
|||
scrollDir: ScrollDirection |
|||
#--------------------------------------------------------------------------------------------------- |
|||
proc update(data: UpdateData): gboolean = |
|||
## Update the text, scrolling to the right or to the left according to "data.scrollDir". |
|||
data.label.setText(if data.scrollDir == toRight: data.label.text[^1] & data.label.text[0..^2] |
|||
else: data.label.text[1..^1] & data.label.text[0]) |
|||
result = gboolean(1) |
|||
#--------------------------------------------------------------------------------------------------- |
|||
proc changeScrollingDir(evtBox: EventBox; event: EventButton; data: UpdateData): bool = |
|||
## Change scrolling direction. |
|||
data.scrollDir = ScrollDirection(1 - ord(data.scrollDir)) |
|||
#--------------------------------------------------------------------------------------------------- |
|||
proc activate(app: Application) = |
|||
## Activate the application. |
|||
let window = app.newApplicationWindow() |
|||
window.setSizeRequest(150, 50) |
|||
window.setTitle("Animation") |
|||
# Create an event box to catch the button press event. |
|||
let evtBox = newEventBox() |
|||
window.add(evtBox) |
|||
# Create the label and add it to the event box. |
|||
let label = newLabel("Hello World! ") |
|||
evtBox.add(label) |
|||
# Create the update data. |
|||
let data = UpdateData(label: label, scrollDir: toRight) |
|||
# Connect the "button-press-event" to the callback to change scrolling direction. |
|||
discard evtBox.connect("button-press-event", changeScrollingDir, data) |
|||
# Create a timer to update the label and simulate scrolling. |
|||
timeoutAdd(100, update, data) |
|||
window.showAll() |
|||
#——————————————————————————————————————————————————————————————————————————————————————————————————— |
|||
let app = newApplication(Application, "Rosetta.animation") |
|||
discard app.connect("activate", activate) |
|||
discard app.run()</lang> |
|||
=={{header|Oz}}== |
=={{header|Oz}}== |