manage off-screen tick better
This commit is contained in:
parent
813751d754
commit
7a3533513e
2 changed files with 18 additions and 8 deletions
|
|
@ -274,6 +274,7 @@ void
|
||||||
flsetselect(Flayer *l, long p0, long p1)
|
flsetselect(Flayer *l, long p0, long p1)
|
||||||
{
|
{
|
||||||
ulong fp0, fp1;
|
ulong fp0, fp1;
|
||||||
|
int ticked;
|
||||||
|
|
||||||
l->click = 0;
|
l->click = 0;
|
||||||
if(l->visible==None || !flprepare(l)){
|
if(l->visible==None || !flprepare(l)){
|
||||||
|
|
@ -281,9 +282,12 @@ flsetselect(Flayer *l, long p0, long p1)
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
l->p0 = p0, l->p1 = p1;
|
l->p0 = p0, l->p1 = p1;
|
||||||
flfp0p1(l, &fp0, &fp1);
|
flfp0p1(l, &fp0, &fp1, &ticked);
|
||||||
if(fp0==l->f.p0 && fp1==l->f.p1)
|
if(fp0==l->f.p0 && fp1==l->f.p1){
|
||||||
|
if(l->f.ticked != ticked)
|
||||||
|
frdrawseltick(&l->f, frptofchar(&l->f, fp0), fp0, fp1, 1, ticked);
|
||||||
return;
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
if(fp1<=l->f.p0 || fp0>=l->f.p1 || l->f.p0==l->f.p1 || fp0==fp1){
|
if(fp1<=l->f.p0 || fp0>=l->f.p1 || l->f.p0==l->f.p1 || fp0==fp1){
|
||||||
/* no overlap or trivial repainting */
|
/* no overlap or trivial repainting */
|
||||||
|
|
@ -315,18 +319,23 @@ flsetselect(Flayer *l, long p0, long p1)
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
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;
|
long p0 = l->p0-l->origin, p1 = l->p1-l->origin;
|
||||||
|
|
||||||
if(p0 < 0)
|
*ticked = 1;
|
||||||
|
if(p0 < 0){
|
||||||
|
*ticked = 0;
|
||||||
p0 = 0;
|
p0 = 0;
|
||||||
|
}
|
||||||
if(p1 < 0)
|
if(p1 < 0)
|
||||||
p1 = 0;
|
p1 = 0;
|
||||||
if(p0 > l->f.nchars)
|
if(p0 > l->f.nchars)
|
||||||
p0 = l->f.nchars;
|
p0 = l->f.nchars;
|
||||||
if(p1 > l->f.nchars)
|
if(p1 > l->f.nchars){
|
||||||
|
*ticked = 0;
|
||||||
p1 = l->f.nchars;
|
p1 = l->f.nchars;
|
||||||
|
}
|
||||||
*pp0 = p0;
|
*pp0 = p0;
|
||||||
*pp1 = p1;
|
*pp1 = p1;
|
||||||
}
|
}
|
||||||
|
|
@ -401,6 +410,7 @@ flprepare(Flayer *l)
|
||||||
Frame *f;
|
Frame *f;
|
||||||
ulong n;
|
ulong n;
|
||||||
Rune *r;
|
Rune *r;
|
||||||
|
int ticked;
|
||||||
|
|
||||||
if(l->visible == None)
|
if(l->visible == None)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
@ -418,8 +428,8 @@ flprepare(Flayer *l)
|
||||||
r = (*l->textfn)(l, n, &n);
|
r = (*l->textfn)(l, n, &n);
|
||||||
frinsert(f, r, r+n, (ulong)0);
|
frinsert(f, r, r+n, (ulong)0);
|
||||||
frdrawsel(f, frptofchar(f, f->p0), f->p0, f->p1, 0);
|
frdrawsel(f, frptofchar(f, f->p0), f->p0, f->p1, 0);
|
||||||
flfp0p1(l, &f->p0, &f->p1);
|
flfp0p1(l, &f->p0, &f->p1, &ticked);
|
||||||
frdrawsel(f, frptofchar(f, f->p0), f->p0, f->p1, 1);
|
frdrawseltick(f, frptofchar(f, f->p0), f->p0, f->p1, 1, ticked);
|
||||||
l->lastsr = ZR;
|
l->lastsr = ZR;
|
||||||
scrdraw(l, scrtotal(l));
|
scrdraw(l, scrtotal(l));
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -28,7 +28,7 @@ struct Flayer
|
||||||
void flborder(Flayer*, int);
|
void flborder(Flayer*, int);
|
||||||
void flclose(Flayer*);
|
void flclose(Flayer*);
|
||||||
void fldelete(Flayer*, long, long);
|
void fldelete(Flayer*, long, long);
|
||||||
void flfp0p1(Flayer*, ulong*, ulong*);
|
void flfp0p1(Flayer*, ulong*, ulong*, int*);
|
||||||
void flinit(Flayer*, Rectangle, Font*, Image**);
|
void flinit(Flayer*, Rectangle, Font*, Image**);
|
||||||
void flinsert(Flayer*, Rune*, Rune*, long);
|
void flinsert(Flayer*, Rune*, Rune*, long);
|
||||||
void flnew(Flayer*, Rune *(*fn)(Flayer*, long, ulong*), int, void*);
|
void flnew(Flayer*, Rune *(*fn)(Flayer*, long, ulong*), int, void*);
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue