ref: b0e0ff38a15e54a4763831d94543dffa1341f417
parent: ba9a4254b691e9cdd6b06dcb33fd2f36eb4703cb
author: henesy <henesy.dev@gmail.com>
date: Fri Mar 11 02:22:13 EST 2022
blank screen
--- a/screen.c
+++ b/screen.c
@@ -1,12 +1,3 @@
-/*
- * Ball - a first attempt at Plan 9 graphics programming
- * Author: nspool
- * Date: 2013-02-19
- * Licence: MIT
- * /
-
-/* Build with '8c -FTVw ball.c && 8l -o ball ball.8' */
-
#include <u.h>
#include <libc.h>
#include <thread.h>
@@ -20,6 +11,9 @@
Image *ball;
Point p;
+Font *ourfont;
+Image *brush;
+Rune *s = L"☺☹σπß";
/* Menus */
char *buttons[] = {"exit", 0};
@@ -39,18 +33,27 @@
void
moveball()
{
- static Point bp={6, 6}; /* Ball Position */
+ /*
+ static Point bp={6, 6}; // Ball Position
static double Δi=4, Δj=4;
- /* Collision detection */
+ // Collision detection
if(bp.x > p.x - (r*3) || bp.x < -r) Δi = Δi*-1;
if(bp.y > p.y - (r*3) || bp.y < -r) Δj = Δj*-1;
- /* Increment ball position */
+ // Increment ball position
bp.x = bp.x + Δi;
bp.y = bp.y + Δj;
draw(screen, rectaddpt(screen->r, bp), ball, nil, ZP);
+ */
+
+
+ Point out = runestring(
+ screen, p, display->black, ZP,
+ ourfont, s
+ );
+ flushimage(display, 1);
}
@@ -73,6 +76,33 @@
}
+// Center font rendering at a point?
+// from faces(1)
+/*
+void
+center(Font *f, Point p, char *s, Image *color)
+{
+ int i, n, dx;
+ Rune rbuf[32];
+ char sbuf[32*UTFmax+1];
+
+ dx = stringwidth(f, s);
+ if(dx > Facesize){
+ n = torune(rbuf, s, nelem(rbuf));
+ for(i=0; i<n; i++){
+ dx = runestringnwidth(f, rbuf, i+1);
+ if(dx > Facesize)
+ break;
+ }
+ sprint(sbuf, "%.*S", i, rbuf);
+ s = sbuf;
+ dx = stringwidth(f, s);
+ }
+ p.x += (Facesize-dx)/2;
+ string(screen, p, color, ZP, f, s);
+}
+*/
+
/* Draw red ball inside a square of white background
* When ball is drawn at new position, background will
* blot out the previous image */
@@ -80,11 +110,24 @@
void
initball()
{
- Image *brush;
- brush=allocimage(display, Rect(0,0,1,1), CMAP8, 1, DRed);
+ Point out;
+ ourfont = openfont(display, "/lib/font/bit/vga/unicode.font");
+
+ p = runestringsize(ourfont, s);
+
+ //brush = allocimage(display, Rect(0,0,1,1), CMAP8, 1, DBlack);
+ out = runestring(
+ screen, p, display->black, ZP,
+ ourfont, s
+ );
+ flushimage(display, 1);
+ //sysfatal("%d %d\n", p.x, p.y);
+
+ /*
ball=allocimage(display, (Rectangle){(Point){0,0},(Point){r*4,r*4}},
screen->chan, 0, DWhite);
fillellipse(ball, (Point){r*2,r*2}, r, r, brush, ZP);
+ */
}
@@ -124,7 +167,7 @@
if( (e == Emouse) &&
(ev.mouse.buttons & 4) &&
- (emenuhit(3, &ev.mouse, &menu) == 0)) exits(nil);
+ (emenuhit(3, &ev.mouse, &menu) == 0)) threadexitsall(nil);
else
if(e == timer)
moveball();