aboutsummaryrefslogtreecommitdiff
path: root/src/libframe/frinit.c
diff options
context:
space:
mode:
authorrsc <devnull@localhost>2003-09-30 17:47:43 +0000
committerrsc <devnull@localhost>2003-09-30 17:47:43 +0000
commitb5990708483a1fa452b3d4b6ed2bfa998deeeb39 (patch)
tree9d2413286307f7e29a1906ebe4d1b59477ff886d /src/libframe/frinit.c
parent76193d7cb0457807b2f0b95f909ab5de19480cd7 (diff)
downloadplan9port-b5990708483a1fa452b3d4b6ed2bfa998deeeb39.tar.gz
plan9port-b5990708483a1fa452b3d4b6ed2bfa998deeeb39.tar.bz2
plan9port-b5990708483a1fa452b3d4b6ed2bfa998deeeb39.zip
Initial import.
Diffstat (limited to 'src/libframe/frinit.c')
-rw-r--r--src/libframe/frinit.c83
1 files changed, 83 insertions, 0 deletions
diff --git a/src/libframe/frinit.c b/src/libframe/frinit.c
new file mode 100644
index 00000000..c178ede1
--- /dev/null
+++ b/src/libframe/frinit.c
@@ -0,0 +1,83 @@
+#include <u.h>
+#include <libc.h>
+#include <draw.h>
+#include <mouse.h>
+#include <frame.h>
+
+void
+frinit(Frame *f, Rectangle r, Font *ft, Image *b, Image *cols[NCOL])
+{
+ f->font = ft;
+ f->display = b->display;
+ f->maxtab = 8*stringwidth(ft, "0");
+ f->nbox = 0;
+ f->nalloc = 0;
+ f->nchars = 0;
+ f->nlines = 0;
+ f->p0 = 0;
+ f->p1 = 0;
+ f->box = 0;
+ f->lastlinefull = 0;
+ if(cols != 0)
+ memmove(f->cols, cols, sizeof f->cols);
+ frsetrects(f, r, b);
+ if(f->tick==nil && f->cols[BACK]!=0)
+ frinittick(f);
+}
+
+void
+frinittick(Frame *f)
+{
+ Image *b;
+ Font *ft;
+
+ b = f->display->screenimage;
+ ft = f->font;
+ if(f->tick)
+ freeimage(f->tick);
+ f->tick = allocimage(f->display, Rect(0, 0, FRTICKW, ft->height), b->chan, 0, DWhite);
+ if(f->tick == nil)
+ return;
+ if(f->tickback)
+ freeimage(f->tickback);
+ f->tickback = allocimage(f->display, f->tick->r, b->chan, 0, DWhite);
+ if(f->tickback == 0){
+ freeimage(f->tick);
+ f->tick = 0;
+ return;
+ }
+ /* background color */
+ draw(f->tick, f->tick->r, f->cols[BACK], nil, ZP);
+ /* vertical line */
+ draw(f->tick, Rect(FRTICKW/2, 0, FRTICKW/2+1, ft->height), f->display->black, nil, ZP);
+ /* box on each end */
+ draw(f->tick, Rect(0, 0, FRTICKW, FRTICKW), f->cols[TEXT], nil, ZP);
+ draw(f->tick, Rect(0, ft->height-FRTICKW, FRTICKW, ft->height), f->cols[TEXT], nil, ZP);
+}
+
+void
+frsetrects(Frame *f, Rectangle r, Image *b)
+{
+ f->b = b;
+ f->entire = r;
+ f->r = r;
+ f->r.max.y -= (r.max.y-r.min.y)%f->font->height;
+ f->maxlines = (r.max.y-r.min.y)/f->font->height;
+}
+
+void
+frclear(Frame *f, int freeall)
+{
+ if(f->nbox)
+ _frdelbox(f, 0, f->nbox-1);
+ if(f->box)
+ free(f->box);
+ if(freeall){
+ freeimage(f->tick);
+ freeimage(f->tickback);
+ f->tick = 0;
+ f->tickback = 0;
+ }
+ f->box = 0;
+ f->ticked = 0;
+}