15 static Image *vscrtmp;
16 static Image *hscrtmp;
23 vscrtmp = eallocimage(display, Rect(0, 0, 32, screen->r.max.y), screen->chan, 0, DNofill);
24 hscrtmp = eallocimage(display, Rect(0, 0, screen->r.max.x, 32), screen->chan, 0, DNofill);
29 scrpos(Rectangle r, uint p0, uint p1, uint tot)
46 q.max.y -= h*(tot-p1)/tot;
47 if(q.max.y < q.min.y+2){
48 if(q.min.y+2 <= r.max.y)
69 r2 = scrpos(r1, t->org, t->org+t->nchars, t->rs.nr);
70 if(!eqrect(r2, t->lastsr)){
72 draw(b, r1, t->cols[BORD], nil, ZP);
73 draw(b, r2, t->cols[BACK], nil, ZP);
74 r2.min.x = r2.max.x-1;
75 draw(b, r2, t->cols[BORD], nil, ZP);
76 draw(t->b, r, b, nil, Pt(0, r1.min.y));
77 /*flushimage(display, 1);/*BUG?*/
87 timer = timerstart(dt);
91 alts[1].c = mousectl->c;
92 alts[1].v = &mousectl->Mouse;
107 textscroll(Text *t, int but)
113 s = insetrect(t->scrollr, 1);
118 flushimage(display, 1);
126 p0 = (vlong)t->rs.nr*(y-s.min.y)/h;
128 p0 = textbacknl(t, p0, 2);
130 textsetorigin(t, p0, FALSE);
136 p0 = textbacknl(t, t->org, (my-s.min.y)/t->font->height);
138 p0 = t->org+frcharofpt(t, Pt(s.max.x, my));
140 textsetorigin(t, p0, TRUE);
144 flushimage(display, 1);
146 nbrecv(mousectl->c, &mousectl->Mouse);
150 }while(mouse->buttons & (1<<(but-1)));
151 while(mouse->buttons)
161 pagescrldraw(Page *p)
169 r1 = Rect(0,0,Dx(p->hscrollr), Dy(p->hscrollr));
172 l = muldiv(p->pos.x, d, t);
173 h = muldiv(p->pos.x+d, d, t);
174 draw(hscrtmp, r1, tagcols[HIGH], nil, ZP);
175 r1.max.x = r1.min.x+h;
179 draw(hscrtmp, r1, tagcols[BACK], nil, ZP);
181 r1 = Rect(0,0,Dx(p->vscrollr), Dy(p->vscrollr));
184 l = muldiv(p->pos.y, d, t);
185 h = muldiv(p->pos.y+d, d, t);
186 draw(vscrtmp, r1, tagcols[HIGH], nil, ZP);
187 r1.max.y = r1.min.y+h;
191 draw(vscrtmp, r1, tagcols[BACK], nil, ZP);
193 draw(screen, p->vscrollr, vscrtmp, nil, vscrtmp->r.min);
194 draw(screen, p->hscrollr, hscrtmp, nil, hscrtmp->r.min);
198 pagescroll(Page *p, int but, int horizontal)
202 int m, om, first, d, size;
203 int smin, smax, ss, *pos;
206 s = insetrect(p->hscrollr, 1);
207 ss = s.max.x - s.min.x;
209 size = Dx(p->lay->r);
216 s = insetrect(p->vscrollr, 1);
217 ss = s.max.y-s.min.y;
219 size = Dy(p->lay->r);
229 flushimage(display, 1);
237 m += (m-om)*Panspeed;
239 m -= (om-m)*Panspeed;
249 p0 = muldiv(m-smin, size, ss);
264 p0 = min(p0, size-d);
273 flushimage(display, 1);
275 nbrecv(mousectl->c, &mousectl->Mouse);
279 }while(mouse->buttons & (1<<(but-1)));
280 while(mouse->buttons)
285 pagescrollxy(Page *p, int x, int y)
292 p->pos.x = max(p->pos.x, 0);
293 p->pos.x = min(p->pos.x, Dx(p->lay->r)-Dx(p->r));
298 p->pos.y = max(p->pos.y, 0);
299 p->pos.y = min(p->pos.y, Dy(p->lay->r)-Dy(p->r));