| tmanage off-screen tick better - plan9port - [fork] Plan 9 from user space | |
| git clone git://src.adamsgaard.dk/plan9port | |
| Log | |
| Files | |
| Refs | |
| README | |
| LICENSE | |
| --- | |
| commit 7a3533513e6f401bf62d94d4577922771090ffb4 | |
| parent 813751d7549110861174912c9c12ea01dae0d084 | |
| Author: rsc <devnull@localhost> | |
| Date: Thu, 10 May 2007 19:08:47 +0000 | |
| manage off-screen tick better | |
| Diffstat: | |
| M src/cmd/samterm/flayer.c | 24 +++++++++++++++++------- | |
| M src/cmd/samterm/flayer.h | 2 +- | |
| 2 files changed, 18 insertions(+), 8 deletions(-) | |
| --- | |
| diff --git a/src/cmd/samterm/flayer.c b/src/cmd/samterm/flayer.c | |
| t@@ -274,6 +274,7 @@ void | |
| flsetselect(Flayer *l, long p0, long p1) | |
| { | |
| ulong fp0, fp1; | |
| + int ticked; | |
| l->click = 0; | |
| if(l->visible==None || !flprepare(l)){ | |
| t@@ -281,9 +282,12 @@ flsetselect(Flayer *l, long p0, long p1) | |
| return; | |
| } | |
| l->p0 = p0, l->p1 = p1; | |
| - flfp0p1(l, &fp0, &fp1); | |
| - if(fp0==l->f.p0 && fp1==l->f.p1) | |
| + flfp0p1(l, &fp0, &fp1, &ticked); | |
| + if(fp0==l->f.p0 && fp1==l->f.p1){ | |
| + if(l->f.ticked != ticked) | |
| + frdrawseltick(&l->f, frptofchar(&l->f, fp0), fp0, fp1,… | |
| return; | |
| + } | |
| if(fp1<=l->f.p0 || fp0>=l->f.p1 || l->f.p0==l->f.p1 || fp0==fp1){ | |
| /* no overlap or trivial repainting */ | |
| t@@ -315,18 +319,23 @@ flsetselect(Flayer *l, long p0, long p1) | |
| } | |
| void | |
| -flfp0p1(Flayer *l, ulong *pp0, ulong *pp1) | |
| +flfp0p1(Flayer *l, ulong *pp0, ulong *pp1, int *ticked) | |
| { | |
| long p0 = l->p0-l->origin, p1 = l->p1-l->origin; | |
| - if(p0 < 0) | |
| + *ticked = 1; | |
| + if(p0 < 0){ | |
| + *ticked = 0; | |
| p0 = 0; | |
| + } | |
| if(p1 < 0) | |
| p1 = 0; | |
| if(p0 > l->f.nchars) | |
| p0 = l->f.nchars; | |
| - if(p1 > l->f.nchars) | |
| + if(p1 > l->f.nchars){ | |
| + *ticked = 0; | |
| p1 = l->f.nchars; | |
| + } | |
| *pp0 = p0; | |
| *pp1 = p1; | |
| } | |
| t@@ -401,6 +410,7 @@ flprepare(Flayer *l) | |
| Frame *f; | |
| ulong n; | |
| Rune *r; | |
| + int ticked; | |
| if(l->visible == None) | |
| return 0; | |
| t@@ -418,8 +428,8 @@ flprepare(Flayer *l) | |
| r = (*l->textfn)(l, n, &n); | |
| frinsert(f, r, r+n, (ulong)0); | |
| frdrawsel(f, frptofchar(f, f->p0), f->p0, f->p1, 0); | |
| - flfp0p1(l, &f->p0, &f->p1); | |
| - frdrawsel(f, frptofchar(f, f->p0), f->p0, f->p1, 1); | |
| + flfp0p1(l, &f->p0, &f->p1, &ticked); | |
| + frdrawseltick(f, frptofchar(f, f->p0), f->p0, f->p1, 1, ticked… | |
| l->lastsr = ZR; | |
| scrdraw(l, scrtotal(l)); | |
| } | |
| diff --git a/src/cmd/samterm/flayer.h b/src/cmd/samterm/flayer.h | |
| t@@ -28,7 +28,7 @@ struct Flayer | |
| void flborder(Flayer*, int); | |
| void flclose(Flayer*); | |
| void fldelete(Flayer*, long, long); | |
| -void flfp0p1(Flayer*, ulong*, ulong*); | |
| +void flfp0p1(Flayer*, ulong*, ulong*, int*); | |
| void flinit(Flayer*, Rectangle, Font*, Image**); | |
| void flinsert(Flayer*, Rune*, Rune*, long); | |
| void flnew(Flayer*, Rune *(*fn)(Flayer*, long, ulong*), int, void*); |