Lines Matching refs:closure

130 struct closure {
452 icoClearArea(struct closure *closure, int x, int y, int w, int h)
459 closure->gcontext,
460 closure->drawbuf->pixels[0]);
463 XFillRectangle(dpy,closure->win,closure->gcontext,x,y,w,h);
465 XClearArea(dpy,closure->win,x,y,w,h,0);
472 initPoly(struct closure *closure, Polyinfo *poly, int icoW, int icoH)
481 ConcatMat(r1, r2, closure->xform);
483 memcpy(closure->xv[0], vertices, NV * sizeof(Point3D));
484 closure->xv_buffer = 0;
486 closure->wo2 = icoW / 2.0;
487 closure->ho2 = icoH / 2.0;
491 setDrawBuf (struct closure *closure, int n)
498 closure->win = closure->multibuffers[n];
503 closure->drawbuf = closure->bufs+n;
504 xgcv.foreground = closure->drawbuf->pixels[closure->pixelsperbuf-1];
505 xgcv.background = closure->drawbuf->pixels[0];
508 xgcv.plane_mask = closure->drawbuf->enplanemask;
511 XChangeGC(dpy, closure->gcontext, mask, &xgcv);
515 setDisplayBuf(struct closure *closure, int n,
523 XmbufDisplayBuffers (dpy, 1, &closure->multibuffers[n], msleepcount, 0);
529 closure->dpybuf = closure->bufs+n;
530 if (closure->totalpixels > 2)
531 XStoreColors(dpy,closure->cmap,closure->dpybuf->colors,closure->totalpixels);
535 setBufColor(struct closure *closure, int n, XColor *color)
541 for (i=0; i<closure->nplanesets; i++) {
542 b = closure->bufs+i;
543 for (j=0; j<(dblbuf&&!multibufext?closure->pixelsperbuf:1); j++) {
544 cx = n + j*closure->pixelsperbuf;
567 drawPoly(struct closure *closure, Polyinfo *poly, GC gc,
591 closure->xv_buffer = !closure->xv_buffer;
592 PartialNonHomTransform(NV, closure->xform,
593 closure->xv[!closure->xv_buffer],
594 closure->xv[closure->xv_buffer]);
599 pxv = closure->xv[closure->xv_buffer];
602 pv2->x = (int) ((pxv->x + 1.0) * closure->wo2) + icoX;
603 pv2->y = (int) ((pxv->y + 1.0) * closure->ho2) + icoY;
611 pxv = closure->xv[closure->xv_buffer];
615 bzero(closure->drawn, sizeof(closure->drawn));
618 setDrawBuf(closure, closure->dbufnum);
624 icoClearArea(closure,
625 closure->drawbuf->prevX - linewidth/2,
626 closure->drawbuf->prevY - linewidth/2,
628 icoClearArea(closure,
656 closure->drawbuf->pixels[facecolor]);
662 XFillPolygon(dpy, closure->win, gc, ppts, pcount,
672 if (!closure->drawn[p0][p1]) {
673 closure->drawn[p0][p1] = 1;
674 closure->drawn[p1][p0] = 1;
689 XSetForeground(dpy, gc, closure->drawbuf->pixels[0]);
693 icoClearArea(closure,
694 closure->drawbuf->prevX - linewidth/2,
695 closure->drawbuf->prevY - linewidth/2,
699 icoClearArea(closure,
705 XSetForeground(dpy, gc, closure->drawbuf->pixels[
706 closure->pixelsperbuf-1]);
709 XDrawSegments(dpy, closure->win, gc, edges, pe - edges);
716 closure->drawbuf->prevX = icoX;
717 closure->drawbuf->prevY = icoY;
718 setDisplayBuf(closure, closure->dbufnum, 0);
721 closure->dbufnum = 1 - closure->dbufnum;
727 initDBufs(struct closure *closure, unsigned long fg, unsigned long bg,
734 closure->nplanesets = (dblbuf && !multibufext ? 2 : 1);
736 closure->planesperbuf = planesperbuf;
737 closure->pixelsperbuf = 1<<planesperbuf;
738 closure->totalplanes = closure->nplanesets * planesperbuf;
739 closure->totalpixels = 1<<closure->totalplanes;
740 closure->plane_masks = (unsigned long *)
741 xalloc(closure->totalplanes * sizeof(unsigned long));
742 closure->dbufnum = 0;
743 for (i=0; i < closure->nplanesets; i++) {
744 b = closure->bufs+i;
745 b->plane_masks = closure->plane_masks + (i*planesperbuf);
747 xalloc(closure->totalpixels * sizeof(XColor));
749 xalloc(closure->pixelsperbuf * sizeof(unsigned long));
752 if (closure->totalplanes == 1) {
753 closure->pixels[0] = bg;
754 closure->plane_masks[0] = fg ^ bg;
756 int t = XAllocColorCells(dpy, closure->cmap, 0,
757 closure->plane_masks, closure->totalplanes,
758 closure->pixels, 1);
767 XQueryColor(dpy,closure->cmap,&fgcolor);
768 XQueryColor(dpy,closure->cmap,&bgcolor);
770 setBufColor(closure, 0,&bgcolor);
771 setBufColor(closure, 1,&fgcolor);
772 for (i=0; i<closure->nplanesets; i++) {
773 b = closure->bufs+i;
774 for (j0=0; j0<(dblbuf&&!multibufext?closure->pixelsperbuf:1); j0++) {
775 for (j1=0; j1<closure->pixelsperbuf; j1++) {
776 j = (j0<<closure->planesperbuf)|j1;
778 else jj= (j1<<closure->planesperbuf)|j0;
779 b->colors[jj].pixel = closure->pixels[0];
782 b->colors[jj].pixel ^= closure->plane_masks[k];
792 for (j=0; j<closure->pixelsperbuf; j++) {
793 b->pixels[j] = closure->pixels[0];
802 setDrawBuf(closure, 0);
803 XSetBackground(dpy, closure->gcontext, closure->bufs[0].pixels[0]);
804 XSetWindowBackground(dpy, closure->draw_window, closure->bufs[0].pixels[0]);
805 XSetPlaneMask(dpy, closure->gcontext, AllPlanes);
806 icoClearArea(closure, 0, 0, closure->winW, closure->winH); /* clear entire window */
811 setBufColname(struct closure *closure, int n, const char *colname)
816 t = XLookupColor(dpy,closure->cmap,colname,&dcolor,&color);
820 setBufColor(closure, n,&color);
844 struct closure *closure = ptr;
852 closure->cmap = XDefaultColormap(dpy,DefaultScreen(dpy));
853 if (!closure->cmap) {
862 if (XAllocNamedColor (dpy, closure->cmap, background_colorname,
871 if (XAllocNamedColor (dpy, closure->cmap, colornames[0], &cdef, &igndef))
886 closure->draw_window = DefaultRootWindow(dpy);
889 closure->winW = DisplayWidth(dpy, DefaultScreen(dpy));
890 closure->winH = DisplayHeight(dpy, DefaultScreen(dpy));
892 closure->winW = closure->winH = (multibufext&&dblbuf ? 300 : 600);
893 winX = (DisplayWidth(dpy, DefaultScreen(dpy)) - closure->winW) >> 1;
894 winY = (DisplayHeight(dpy, DefaultScreen(dpy)) - closure->winH) >> 1;
897 (unsigned int *)&closure->winW,
898 (unsigned int *)&closure->winH);
906 closure->draw_window = XCreateWindow(dpy,
908 winX, winY, closure->winW, closure->winH, 0,
913 len = sprintf(buf, "Ico: thread %d", closure->thread_num);
914 XChangeProperty(dpy, closure->draw_window,
918 XChangeProperty(dpy, closure->draw_window,
922 (void) XSetWMProtocols (dpy, closure->draw_window,
924 XMapWindow(dpy, closure->draw_window);
929 XIfEvent(dpy, &xev, predicate, (XPointer) closure->draw_window);
936 if (XGetWindowAttributes(dpy,closure->draw_window,&xwa)==0) {
939 closure->winW = xwa.width;
940 closure->winH = xwa.height;
962 closure->win = None;
966 if (XmbufCreateBuffers (dpy, closure->draw_window, 2, update_action,
968 closure->multibuffers) == 2) {
969 XCopyArea (dpy, closure->draw_window, closure->multibuffers[1],
971 0, 0, closure->winW, closure->winH, 0, 0);
972 closure->win = closure->multibuffers[1];
977 if (closure->win == None) closure->win = closure->draw_window;
990 closure->gcontext = XCreateGC (dpy, closure->draw_window, vmask, &xgcv);
996 initDBufs(closure, fg,bg,bits);
999 setBufColname(closure, i+1,colornames[i]);
1004 initDBufs(closure, fg,bg,1);
1008 setDisplayBuf(closure, dblbuf?1:0, 1); /* insert new colors */
1017 icoX = ((closure->winW - icoW) * (rand() & 0xFF)) >> 8;
1018 icoY = ((closure->winH - icoH) * (rand() & 0xFF)) >> 8;
1025 initPoly(closure, polyobj, icoW, icoH);
1044 XIfEvent(dpy, &xev, predicate, (XPointer) closure->win);
1048 (XPointer) closure->win);
1055 if (xev.xconfigure.width != closure->winW ||
1056 xev.xconfigure.height != closure->winH)
1058 closure->winW = xev.xconfigure.width;
1059 closure->winH = xev.xconfigure.height;
1096 if (icoX < 0 || icoX + icoW > closure->winW) {
1102 if (icoY < 0 || icoY + icoH > closure->winH) {
1108 drawPoly(closure, polyobj, closure->gcontext,
1111 XDestroyWindow(dpy, closure->win);
1170 struct closure *closure;
1321 closure = (struct closure *) xalloc(sizeof(struct closure));
1322 closure->thread_num = i;
1323 xthread_fork(do_ico_window, closure);
1331 closure = (struct closure *) xalloc(sizeof(struct closure));
1332 do_ico_window(closure);