ref: c0fd082da98081cfc33495a4cf191de9931cfe8d
author: sirjofri <sirjofri@hardbook>
date: Wed Dec 10 18:42:37 EST 2025
adds files
--- /dev/null
+++ b/awhund.c
@@ -1,0 +1,132 @@
+#include <u.h>
+#include <libc.h>
+#include <draw.h>
+#include <event.h>
+#include <geometry.h>
+
+#define NUM 50
+#define STEPS 1
+
+Image *buf = nil;
+Image *red = nil;
+
+double θ = 0;
+double z = 1.;
+int smooth = 1;
+int frame = 0;
+
+char *done = "done";
+
+void
+redraw(void)
+{+ float snd;
+ float fn;
+ Point v;
+ Point center;
+
+ if (frame < 0)
+ return;
+
+ center.x = screen->r.min.x + Dx(screen->r)/2.;
+ center.y = screen->r.min.y + Dy(screen->r)/2.;
+
+ if (frame > NUM*STEPS) {+ v = subpt(screen->r.max, stringsize(font, done));
+ string(screen, v, red, ZP, font, done);
+ frame = -1;
+ return;
+ }
+ if (frame == 0) {+ draw(screen, screen->r, display->black, nil, ZP);
+ string(screen, center, display->white, ZP, font, ".hund");
+ frame++;
+ return;
+ }
+
+ fn = frame/NUM.;
+ snd = frame%2 ? -1 : 1;
+ θ = snd * 2. * (fn * 0.7 + 0.1);
+ θ += fn * fn * 0.5;
+ z = fn * fn * 5. + .5;
+
+ v.x = fn*fn*fn * 0.2;
+ v.y = fn * 0.2;
+
+ Matrix R = {+ cos(θ), -sin(θ), 0,
+ sin(θ), cos(θ), 0,
+ 0, 0, 1
+ }, S = {+ z, 0, 0,
+ 0, z, 0,
+ 0, 0, 1
+ }, T = {+ 1, 0, v.x,
+ 0, 1, v.y,
+ 0, 0, 1
+ };
+
+ mulm(S, R);
+ mulm(T, S);
+
+ Warp w;
+ mkwarp(w, T);
+
+ affinewarp(buf, buf->r, screen, buf->r.min, w, smooth);
+ drawop(screen, screen->r, buf, buf, screen->r.min, SoverD);
+ frame++;
+}
+
+void
+eresized(int new)
+{+ if (new && getwindow(display, Refnone) < 0)
+ sysfatal("err: %r");+ frame = 0;
+ if (buf)
+ freeimage(buf);
+ buf = allocimage(display, screen->r, screen->chan, 0, 0);
+ redraw();
+}
+
+void
+main(int argc, char** argv)
+{+ Event ev;
+ int e;
+ int timerev;
+
+ ARGBEGIN{+ case 's':
+ smooth = 0;
+ break;
+ }ARGEND;
+
+ if (initdraw(nil, nil, "frac test") < 0)
+ sysfatal("%r");+
+ einit(Ekeyboard|Emouse);
+ timerev = etimer(0, 16);
+
+ red = allocimage(display, Rect(0, 0, 1, 1), screen->chan, 1, 0x22FF22FF);
+
+ eresized(0);
+
+ for (;;) {+ e = event(&ev);
+
+ if (e == Ekeyboard) {+ if (ev.kbdc == 'q')
+ exits(nil);
+ if (ev.kbdc == 's')
+ smooth = smooth ? 0 : 1;
+ continue;
+ }
+
+ if (e == timerev) {+ redraw();
+ continue;
+ }
+ }
+}
--- /dev/null
+++ b/mkfile
@@ -1,0 +1,6 @@
+</$objtype/mkfile
+
+TARG=awhund
+OFILES=awhund.$O
+
+</sys/src/cmd/mkone
--
⑨