Raster bars: Difference between revisions

Content added Content deleted
m (added whitespace.)
Line 263: Line 263:
</lang>
</lang>


=={{header|Nim}}==
{{trans|Julia}}
{{libheader|gintro}}
<lang Nim>import gintro/[gobject, glib, gdk, gtk, gio, cairo]


const Palette = [[166.0, 124.0, 0.0],
[191.0, 155.0, 48.0],
[255.0, 191.0, 0.0],
[255.0, 207.0, 64.0],
[255.0, 220.0, 115.0]]

type

# Description of the simulation.
Simulation = ref object
area: DrawingArea
horizontal: bool
paletteIndex: Natural
count: int

Color = array[3, float]


#---------------------------------------------------------------------------------------------------

proc newSimulation(area: DrawingArea): Simulation {.noInit.} =
## Allocate and initialize the simulation object.
Simulation(area: area, horizontal: true, paletteIndex: 0, count: 0)

#---------------------------------------------------------------------------------------------------

proc bar(ctx: cairo.Context; x1, y1, x2, y2: int; c: Color) =
## Draw a bar.
ctx.setSource(c)
ctx.rectangle(x1.toFloat, y1.toFloat, (x2 - x1 + 1).toFloat, (y2 - y1 + 1).toFloat)
ctx.fill()

#---------------------------------------------------------------------------------------------------

proc draw(sim: Simulation; ctx: cairo.Context) =
## Draw the bars.

let width = sim.area.window.width()
let height = sim.area.window.height()

if sim.horizontal:
for i in countup(0, height - 4, 3):
ctx.bar(0, i, width - 1, i + 3, Palette[sim.paletteIndex])
sim.paletteIndex = (sim.paletteIndex + 1) mod 5

else:
for i in countup(0, width - 4, 3):
ctx.bar(i, 0, i + 3, height - 1, Palette[sim.paletteIndex])
sim.paletteIndex = (sim.paletteIndex + 1) mod 5

#---------------------------------------------------------------------------------------------------

proc update(sim: Simulation): gboolean =
## Update the simulation state.

sim.draw(sim.area.window.cairoCreate())
sim.area.showAll()
sim.paletteIndex = (sim.paletteIndex + 2) mod 5
inc sim.count
if sim.count mod 30 == 29:
sim.horizontal = not sim.horizontal
result = gboolean(1)

#---------------------------------------------------------------------------------------------------

proc activate(app: Application) =
## Activate the application.

let window = app.newApplicationWindow()
window.setSizeRequest(500, 500)
window.setTitle("Raster Bar Demo")

let area = newDrawingArea()
window.add(area)

let sim = newSimulation(area)
timeoutAdd(50, update, sim)

window.showAll()

#———————————————————————————————————————————————————————————————————————————————————————————————————

let app = newApplication(Application, "Rosetta.rasterbars")
discard app.connect("activate", activate)
discard app.run()</lang>


=={{header|Phix}}==
=={{header|Phix}}==