void setUpPalette(Lcd *x, RGBColor *oldColor, PaletteHandle *oldPalette) { if (hasColorQD) { if (numPaletteColors>2){ GetForeColor(oldColor); *oldPalette = GetPalette(&x->lcd_box.b_patcher->p_wind->w_gp); SetPalette(&x->lcd_box.b_patcher->p_wind->w_gp,x->lcd_palette,FALSE); PmForeColor(x->lcd_pIndex); } } GetPenState(&x->lcd_penState); PenMode(x->lcd_penMode); PenSize(1,1); }
void DrawInfoBox (WINDOWID win, const char *info) { WindowPtr theMacWindow; Rect r,box,WinRect; CGrafPtr myPort; Rect myClipRect; short w; GRAPH_WINDOW *gw; Str255 pstr; gw = (GRAPH_WINDOW *)win; theMacWindow = MAC_WIN(gw); /* set port */ myPort = GetWindowPort(theMacWindow); SetPort(myPort); GetPortBounds(myPort,&WinRect); PmForeColor(1); /* black */ GetPortBounds(myPort,&r); /* info box */ SetRect(&box,r.left+1,r.bottom-14,r.right-121,r.bottom); /* set clipping region to info box */ ClipRect(&box); EraseRect(&box); CopyCStringToPascal(info,pstr); w = StringWidth(pstr); MoveTo((box.left+box.right)/2-w/2,box.bottom-3); TextSize(9); DrawString(pstr); /* adjust clipping rectangle again to plottable area */ myClipRect.left = gw->Local_LL[0]; myClipRect.right = gw->Local_UR[0]; myClipRect.bottom = gw->Local_LL[1]; myClipRect.top = gw->Local_UR[1]; ClipRect(&myClipRect); }
static int RasterizeFile (FILE *stream, AWindowRecord *myWindow, short wx, short wy) { char *buffer; /* input buffer */ long blockSize; /* METABUFFERSIZE */ long blockUsed; /* actual buffer size used */ long itemCounter; /* number of commands in buffer */ char *data; /* data pointer in buffer */ short fx,fy; /* file screen size */ Fixed sx,sy; /* scaling factors */ int i,error,j,size; char opCode; short x,y,r,g,b,n,lw,ts,m,ms,w; short x1,y1,x2,y2; short xx[SIZE],yy[SIZE]; PolyHandle myPoly; char s[CSIZE]; unsigned char c; RGBColor newColor; PaletteHandle myPalette; long l; /* get file parameters */ rewind(stream); error = fread(&blockSize,4,1,stream); if (error!=1) return(1); /* block size */ error = fread(&fx,2,1,stream); if (error!=1) return(1); /* x size */ error = fread(&fy,2,1,stream); if (error!=1) return(1); /* y size */ /* compute scaling factors */ sx = FixRatio(wx-1,fx-1); sy = FixRatio(wy-1,fy-1); /* default values */ lw = 1; ts = 12; m = 0; ms = 6; /* allocate input buffer */ buffer = malloc(blockSize); if (buffer==NULL) return(1); SetPort((GrafPtr)(myWindow->theWindow)); EraseRect(&(myWindow->usableRect)); /* loop through the blocks */ while (!feof(stream)) { /* read block parameters */ error = fread(&blockUsed,4,1,stream); if (error!=1) {free(buffer); return(1);} error = fread(&itemCounter,4,1,stream); if (error!=1) {free(buffer); return(1);} error = fread(buffer,blockUsed,1,stream);if (error!=1) {free(buffer); return(1);} /* init pointer to next item */ data = buffer; /* for all items */ for (i=0; i<itemCounter; i++) { /* get op code */ opCode = *(data++); switch (opCode) { case opMove : x = *((short *)data); data += 2; y = *((short *)data); data += 2; TRFMX(x); TRFMY(y); MoveTo(x,y); break; case opDraw : x = *((short *)data); data += 2; y = *((short *)data); data += 2; TRFMX(x); TRFMY(y); LineTo(x,y); break; case opPolyline : n = *((short *)data); data += 2; if (n>=SIZE) {free(buffer); return(2);} size = n<<1; memcpy(xx,data,size); data += size; memcpy(yy,data,size); data += size; for (j=0; j<n; j++) { TRFMX(xx[j]); TRFMY(yy[j]); } MoveTo(xx[0],yy[0]); for (j=1; j<n; j++) LineTo(xx[j],yy[j]); break; case opPolygon : n = *((short *)data); data += 2; if (n>=SIZE) {free(buffer); return(2);} size = n<<1; memcpy(xx,data,size); data += size; memcpy(yy,data,size); data += size; for (j=0; j<n; j++) { TRFMX(xx[j]); TRFMY(yy[j]); } if (n<3) break; myPoly = OpenPoly(); MoveTo(xx[0],yy[0]); for (j=1; j<n; j++) LineTo(xx[j],yy[j]); LineTo(xx[0],yy[0]); ClosePoly(); PaintPoly(myPoly); FramePoly(myPoly); KillPoly(myPoly); break; case opPolymark : n = *((short *)data); data += 2; if (n>=SIZE) {free(buffer); return(2);} size = n<<1; memcpy(xx,data,size); data += size; memcpy(yy,data,size); data += size; for (j=0; j<n; j++) { TRFMX(xx[j]); TRFMY(yy[j]); } for (j=0; j<n; j++) Marker(m,ms,xx[j],yy[j]); break; case opText : n = *((short *)data); data += 2; if (n>=CSIZE-1) {free(buffer); return(2);} memcpy(s,data,n); s[n] = 0; data += n; DrawString((ConstStr255Param)c2pstr(s)); break; case opCenteredText : x = *((short *)data); data += 2; y = *((short *)data); data += 2; TRFMX(x); TRFMY(y); n = *((short *)data); data += 2; if (n>=CSIZE-1) {free(buffer); return(2);} memcpy(s,data,n); s[n] = 0; data += n; c2pstr(s); w = StringWidth((ConstStr255Param)s); MoveTo(x-w/2,y+ts/2); DrawString((ConstStr255Param)s); break; case opSetLineWidth : n = *((short *)data); data += 2; lw = n; PenSize(n,n); break; case opSetTextSize : n = *((short *)data); data += 2; ts = n; TextSize(n); break; case opSetMarker : n = *((short *)data); data += 2; m = n; break; case opSetMarkerSize : n = *((short *)data); data += 2; ms = n; break; case opSetColor : c = *((unsigned char *)data); data++; PmForeColor((short)c); break; case opSetEntry : c = *((unsigned char *)data); data++; r = (short) (*((unsigned char *)data)); data++; g = (short) (*((unsigned char *)data)); data++; b = (short) (*((unsigned char *)data)); data++; myPalette = GetPalette(myWindow->theWindow); myWindow->red[c] = newColor.red = r<<8; myWindow->green[c] = newColor.green = g<<8; myWindow->blue[c] = newColor.blue = b<<8; SetEntryColor(myPalette,(short) c,&newColor); ActivatePalette(myWindow->theWindow); break; case opSetPalette : x = (short) (*((unsigned char *)data)); data++; y = (short) (*((unsigned char *)data)); data++; myPalette = GetPalette(myWindow->theWindow); for (j=x; j<=y; j++) { r = (short) (*((unsigned char *)data)); data++; g = (short) (*((unsigned char *)data)); data++; b = (short) (*((unsigned char *)data)); data++; myWindow->red[j] = newColor.red = r<<8; myWindow->green[j] = newColor.green = g<<8; myWindow->blue[j] = newColor.blue = b<<8; SetEntryColor(myPalette,(short) j,&newColor); } ActivatePalette(myWindow->theWindow); break; case opNewLine : lw = *((unsigned char *)data); data++; c = *((unsigned char *)data); data++; x1 = *((short *)data); data += 2; y1 = *((short *)data); data += 2; x2 = *((short *)data); data += 2; y2 = *((short *)data); data += 2; TRFMX(x1); TRFMY(y1); TRFMX(x2); TRFMY(y2); PenSize(lw,lw); PmForeColor((short)c); MoveTo(x1,y1); LineTo(x2,y2); break; case opNewPolyline : lw = *((unsigned char *)data); data++; c = *((unsigned char *)data); data++; n = *((short *)data); data += 2; if (n>=SIZE) {free(buffer); return(2);} size = n<<1; memcpy(xx,data,size); data += size; memcpy(yy,data,size); data += size; for (j=0; j<n; j++) { TRFMX(xx[j]); TRFMY(yy[j]); } PenSize(lw,lw); PmForeColor((short)c); MoveTo(xx[0],yy[0]); for (j=1; j<n; j++) LineTo(xx[j],yy[j]); break; case opNewPolygon : c = *((unsigned char *)data); data++; n = *((short *)data); data += 2; if (n>=SIZE) {free(buffer); return(2);} size = n<<1; memcpy(xx,data,size); data += size; memcpy(yy,data,size); data += size; for (j=0; j<n; j++) { TRFMX(xx[j]); TRFMY(yy[j]); } if (n<3) break; PmForeColor((short)c); myPoly = OpenPoly(); MoveTo(xx[0],yy[0]); for (j=1; j<n; j++) LineTo(xx[j],yy[j]); LineTo(xx[0],yy[0]); ClosePoly(); PaintPoly(myPoly); FramePoly(myPoly); KillPoly(myPoly); break; case opNewPolymark : m = *((unsigned char *)data); data++; ms = *((unsigned char *)data); data++; c = *((unsigned char *)data); data++; n = *((short *)data); data += 2; if (n>=SIZE) {free(buffer); return(2);} size = n<<1; memcpy(xx,data,size); data += size; memcpy(yy,data,size); data += size; for (j=0; j<n; j++) { TRFMX(xx[j]); TRFMY(yy[j]); } PmForeColor((short)c); for (j=0; j<n; j++) Marker(m,ms,xx[j],yy[j]); break; case opNewText : ts = *((unsigned char *)data); data++; c = *((unsigned char *)data); data++; x = *((short *)data); data += 2; y = *((short *)data); data += 2; TRFMX(x); TRFMY(y); n = *((short *)data); data += 2; if (n>=CSIZE-1) {free(buffer); return(2);} memcpy(s,data,n); s[n] = 0; data += n; MoveTo(x,y); TextSize(ts); PmForeColor((short)c); DrawString((ConstStr255Param)c2pstr(s)); break; case opNewCenteredText : ts = *((unsigned char *)data); data++; c = *((unsigned char *)data); data++; x = *((short *)data); data += 2; y = *((short *)data); data += 2; TRFMX(x); TRFMY(y); n = *((short *)data); data += 2; if (n>=CSIZE-1) {free(buffer); return(2);} memcpy(s,data,n); s[n] = 0; data += n; c2pstr(s); w = StringWidth((ConstStr255Param)s); TextSize(ts); PmForeColor((short)c); MoveTo(x-w/2,y+ts/2); DrawString((ConstStr255Param)c2pstr(s)); break; default : break; } } } return(0); }
static void MacSetColor (long index) { PmForeColor((short)index); CurrColor = index; }