commit 902005ab22e18dddf6b58ff1ddda4b0e6c487cde
parent 6c8586171e5f913e3dd1d451d20c7f8a7465a40a
Author: glenda <glenda@9front.local>
Date: Wed, 25 Nov 2020 21:06:23 +0000
commiting whats here, but somehow menuhit doesnt work
Diffstat:
M | scope.c | | | 100 | +++++++++++++++++++++++++++++++++++++++++++++++++++++++++---------------------- |
1 file changed, 72 insertions(+), 28 deletions(-)
diff --git a/scope.c b/scope.c
@@ -4,16 +4,16 @@
#include <draw.h>
#include <mouse.h>
#include <cursor.h>
-// #include <keyboard.h>
+#include <keyboard.h>
#define LMAX 1024
#define RBUF 1024
#define DFPS 60
enum {
- C_BG = 0xffffffff,
+ C_BG = 0x3f3f3fff,
C_GG = 0x000000ff,
- C_FG = 0x000000ff,
+ C_FG = 0xffff00ff,
};
Point P[LMAX];
@@ -24,12 +24,15 @@ struct Readctl {
Channel *c;
};
-Image *Im, *Ibg, *Igg, *Ifg;
+Image *Im, *Ibg, *Igg, *Ifg, *Igrid;
Rectangle R;
int rh;
void (*dlines)(void);
+
+
+
void
usage(void)
{
@@ -45,6 +48,27 @@ dclear(void)
}
void
+dgrid(void)
+{
+ const int div = 8;
+ int i;
+ Rectangle r;
+ Point p;
+ /* horizontal */
+ r =Rect(0,0,rh,1);
+ for (i = 0; i <= div; i++){
+ p = Pt(0, i * (rh-1)/div);
+ draw(Igrid, rectaddpt(r, p), Igg, 0, ZP);
+ }
+ /* vertical */
+ r = Rect(0,0,1,rh);
+ for (i = 0; i <= div; i++){
+ p = Pt(i * (rh-1)/div, 0);
+ draw(Igrid, rectaddpt(r, p), Igg, 0, ZP);
+ }
+}
+
+void
dfade(void)
{
draw(screen, R, Ibg, Im, ZP);
@@ -56,10 +80,10 @@ dXY(void)
int i;
Point p;
for (i = 0; i < LMAX; i++){
- p = addpt(P[i], addpt(R.min, Pt(rh/2, rh/2)));
+ p = Pt(P[i].x, -P[i].y);
+ p = addpt(p, addpt(R.min, Pt(rh/2, rh/2)));
draw(screen, Rpt(p, addpt(p, Pt(1,1))), Ifg, 0, ZP);
}
- //poly(screen, P, LMAX, 0, 0, 0, Ifg, ZP);
}
void
@@ -69,9 +93,9 @@ dboth(void)
Point p0, p1;
for (i = 0; i < LMAX; i++){
p0.x = R.min.x + i * rh / LMAX;
- p0.y = R.min.y + rh/4 + P[i].x/2;
+ p0.y = R.min.y + rh/4 - P[i].x/2;
p1.x = p0.x;
- p1.y = R.min.y + (3 * rh)/4 + P[i].y/2;
+ p1.y = R.min.y + (3 * rh)/4 - P[i].y/2;
draw(screen, Rpt(p0, addpt(p0, Pt(1,1))), Ifg, 0, ZP);
draw(screen, Rpt(p1, addpt(p1, Pt(1,1))), Ifg, 0, ZP);
}
@@ -85,7 +109,7 @@ dmono(int c)
for (i = 0; i < LMAX; i++){
p.x = R.min.x + i * rh / LMAX;
p.y = R.min.y + rh/2;
- p.y += c ? P[i].x : P[i].y;
+ p.y += c ? -P[i].x : -P[i].y;
draw(screen, Rpt(p, addpt(p, Pt(1,1))), Ifg, 0, ZP);
}
}
@@ -155,16 +179,20 @@ getdrawrect(void)
void
threadmain(int argc, char **argv)
{
+ long pp;
Mousectl *mctl;
+ Keyboardctl *kctl;
+ Rune kv;
Mouse mv;
int rv[2];
Channel *supc;
int sv;
Readctl *rctl;
s16int prv[2];
-
- dlines = dXY;
+ dlines = dXY;
+ pp = 0;
+
ARGBEGIN {
case 'l':
dlines = dleft;
@@ -184,12 +212,12 @@ threadmain(int argc, char **argv)
if (argc > 0) usage();
if (initdraw(nil, nil, "scope") < 0) sysfatal("initdraw failed: %r");
if ((mctl = initmouse(0, 0)) == nil) sysfatal("initmouse failed: %r");
-
+ if ((kctl = initkeyboard(0)) == nil) sysfatal("initkeyboard failed: %r");
supc = chancreate(sizeof(int), 0);
- Ibg = allocimage(display, Rect(0,0,1,1), RGBA32, 1, C_BG);
- Igg = allocimage(display, Rect(0,0,1,1), RGBA32, 1, C_GG);
- Ifg = allocimage(display, Rect(0,0,1,1), RGBA32, 1, C_FG);
+ Ibg = allocimage(display, Rect(0,0,1,1), RGB24, 1, C_BG);
+ Igg = allocimage(display, Rect(0,0,1,1), RGB24, 1, C_GG);
+ Ifg = allocimage(display, Rect(0,0,1,1), RGB24, 1, C_FG);
Im = allocimage(display, Rect(0,0,1,1), RGBA32, 1, 0xffffff1f);
rctl = malloc(sizeof(Readctl));
rctl->c = chancreate(sizeof(s16int) * 2, LMAX);
@@ -197,12 +225,20 @@ threadmain(int argc, char **argv)
threadcreate(threadupdate, supc, 8 * 1024);
proccreate(procread, rctl, 64*1024);
+ char *menustr[2] = {
+ "left",
+ nil,
+ };
+
+ Menu menu = {menustr, nil, 0};
+
R = getdrawrect();
+ Igrid = allocimage(display, Rect(0,0,rh,rh), RGB24, 0, C_BG);
+ dgrid();
dclear();
-
- Alt alts[5] = {
- //{0, 0, CHANNOP},
- //{0, 0, CHANNOP},
+ flushimage(display, 1);
+ Alt alts[6] = {
+ {kctl->c, &kv, CHANRCV},
{mctl->c, &mv, CHANRCV},
{mctl->resizec, rv, CHANRCV},
{supc, &sv, CHANRCV},
@@ -211,23 +247,31 @@ threadmain(int argc, char **argv)
};
for(;;){
switch(alt(alts)){
- case 0: /* mouse */
+ case 0: /* keyboard */
+ if (kv == 'q') threadexitsall(0);
+ if (kv == 0x7f) threadexitsall(0);
break;
- case 1: /* resize */
+ case 1: /* mouse */
+ if (mv.buttons == 1) {
+ menuhit(1, mctl, &menu, 0);
+ }
+ break;
+ case 2: /* resize */
if(getwindow(display, Refnone) < 0)
sysfatal("resize failed: %r");
R = getdrawrect();
+ freeimage(Igrid);
+ Igrid = allocimage(display, Rect(0,0,rh,rh), RGB24, 0, C_BG);
+ dgrid();
dclear();
- case 2: /* update screen */
- dclear();
+ case 3: /* update screen */
+ draw(screen, R, Igrid, 0, ZP);
dlines();
flushimage(display, 1);
break;
- case 3: /* read input */
- memmove(P+1, P, sizeof(Point) * (LMAX - 1));
- P[0] = //addpt(
- //addpt(Pt(rh/2, rh/2), R.min),
- (Pt(prv[0] * rh / 0xffff, prv[1] * rh / 0xffff));
+ case 4: /* read input */
+ P[pp] = (Pt(prv[0] * rh / 0xffff, prv[1] * rh / 0xffff));
+ pp = (pp+1)%LMAX;
break;
}
}