static char* tkscalebut1p(Tk *tk, char *arg, char **val) { int z[2]; char *v, *e; TkScale *tks = TKobj(TkScale, tk); int repeat; USED(val); v = tkscaleposn(tk->env, tk, arg, z); if(v == nil) return TkBadvl; e = nil; if(v[0] == '\0' || z[0] < tks->center-tks->sw || z[0] > tks->center+tks->sw) return nil; if(v == slider) { tks->flag |= Dragging; tks->relief = TKsunken; tks->pix = z[1]; tks->base = tks->value; tkscalecheckvalue(tk); } else { e = stepscale(tk, v, &repeat); if (e == nil && repeat) { tks->flag |= Autorepeat; tkrepeat(tk, screpeat, v, TkRptpause, TkRptinterval); } } tk->dirty = tkrect(tk, 1); return e; }
static char* tkentryb1p(Tk *tk, char* arg, char **ret) { TkEntry *tke = TKobj(TkEntry, tk); Point p; int i, locked, x; char buf[32], *e; USED(ret); x = atoi(arg); p = tkscrn2local(tk, Pt(x, 0)); sprint(buf, "@%d", p.x); e = tkentryparseindex(tk, buf, &i); if (e != nil) return e; tke->sel0 = 0; tke->sel1 = 0; tke->icursor = i; tke->anchor = i; tke->flag &= ~Ewordsel; locked = lockdisplay(tk->env->top->display); tke->xsel0 = 0; tke->xsel1 = 0; tke->xicursor = entrytextwidth(tk, tke->icursor); if (locked) unlockdisplay(tk->env->top->display); tke->oldx = x; blinkreset(tk); tkrepeat(tk, autoselect, nil, TkRptpause, TkRptinterval); tk->dirty = tkrect(tk, 0); return nil; }
/* tkScrolBut1P %x %y */ static char* tkScrolBut1P(Tk *tk, char *arg, char **val) { int pix; TkTop *t; char *e, *fmt, buf[Tkmaxitem]; TkScroll *tks = TKobj(TkScroll, tk); USED(val); t = tk->env->top; if (tks->flag & Autorepeat) return nil; arg = tkword(t, arg, buf, buf+sizeof(buf), nil); if(tks->orient == Tkvertical) tkword(t, arg, buf, buf+sizeof(buf), nil); if(buf[0] == '\0') return TkBadvl; pix = atoi(buf); tks->dragpix = pix; tks->dragtop = tks->top; tks->dragbot = tks->bot; pix += tk->borderwidth; fmt = nil; e = nil; if(pix <= tks->a1) { fmt = "%s scroll -1 unit"; tks->flag |= ButtonA1; } if(pix > tks->a1 && pix <= tks->t1) fmt = "%s scroll -1 page"; if(pix > tks->t1 && pix < tks->t2) tks->flag |= ButtonB1; if(pix >= tks->t2 && pix < tks->a2) fmt = "%s scroll 1 page"; if(pix >= tks->a2) { fmt = "%s scroll 1 unit"; tks->flag |= ButtonA2; } if(tks->cmd != nil && fmt != nil) { snprint(buf, sizeof(buf), fmt, tks->cmd); e = tkexec(t, buf, nil); tks->flag |= Autorepeat; tkrepeat(tk, sbrepeat, fmt, TkRptpause, TkRptinterval); } tk->dirty = tkrect(tk, 1); return e; }