diff options
author | hubertf <hubertf@pkgsrc.org> | 1999-06-13 16:23:52 +0000 |
---|---|---|
committer | hubertf <hubertf@pkgsrc.org> | 1999-06-13 16:23:52 +0000 |
commit | ac91b297b41119005ca5c9444c6c06bbea1e2829 (patch) | |
tree | b67ec3d3ff525a13bce747cb3cf34dbcd5aebf0c /graphics/xv | |
parent | 25cb23d49dfb9419f6387d137cc2b37e42663faf (diff) | |
download | pkgsrc-ac91b297b41119005ca5c9444c6c06bbea1e2829.tar.gz |
Add patches from
http://www.mit.edu/afs/athena/contrib/graphics/src/xv/patches/png
to enable PNG support.
Set PKGNAME to ${DISTNAME}pl1 to reflect this.
Diffstat (limited to 'graphics/xv')
-rw-r--r-- | graphics/xv/Makefile | 4 | ||||
-rw-r--r-- | graphics/xv/patches/patch-png1 | 975 | ||||
-rw-r--r-- | graphics/xv/patches/patch-png2 | 963 | ||||
-rw-r--r-- | graphics/xv/patches/patch-png2-Imakefile | 96 | ||||
-rw-r--r-- | graphics/xv/patches/patch-png2-Makefile | 67 | ||||
-rw-r--r-- | graphics/xv/patches/patch-png2-Makefile.std | 68 | ||||
-rw-r--r-- | graphics/xv/patches/patch-png2-xv.c | 57 | ||||
-rw-r--r-- | graphics/xv/patches/patch-png2-xv.h | 162 | ||||
-rw-r--r-- | graphics/xv/patches/patch-png2-xvbrowse.c | 53 | ||||
-rw-r--r-- | graphics/xv/patches/patch-png2-xvdir.c | 83 | ||||
-rw-r--r-- | graphics/xv/patches/patch-png2-xvevent.c | 97 | ||||
-rw-r--r-- | graphics/xv/patches/patch-png3 | 39 |
12 files changed, 2663 insertions, 1 deletions
diff --git a/graphics/xv/Makefile b/graphics/xv/Makefile index fb82f537f44..c491848adda 100644 --- a/graphics/xv/Makefile +++ b/graphics/xv/Makefile @@ -1,8 +1,9 @@ -# $NetBSD: Makefile,v 1.18 1999/04/13 15:31:06 agc Exp $ +# $NetBSD: Makefile,v 1.19 1999/06/13 16:23:52 hubertf Exp $ # FreeBSD Id: Makefile,v 1.14 1997/07/03 07:37:08 asami Exp # DISTNAME= xv-3.10a +PKGNAME= ${DISTNAME}pl1 CATEGORIES= graphics x11 MASTER_SITES= ftp://ftp.cis.upenn.edu/pub/xv/ \ ftp://ftp.kuis.kyoto-u.ac.jp/X11/contrib/clients/xv/ \ @@ -19,6 +20,7 @@ HOMEPAGE= http://www-vis.lbl.gov/software/xv.html DEPENDS+= tiff-3.4:../../graphics/tiff DEPENDS+= jpeg-6b:../../graphics/jpeg DEPENDS+= ghostscript-5.50:../../print/ghostscript5 +DEPENDS+= png-1.0.3:../png USE_IMAKE= yes diff --git a/graphics/xv/patches/patch-png1 b/graphics/xv/patches/patch-png1 new file mode 100644 index 00000000000..093ed331de5 --- /dev/null +++ b/graphics/xv/patches/patch-png1 @@ -0,0 +1,975 @@ +$NetBSD: patch-png1,v 1.1 1999/06/13 16:23:53 hubertf Exp $ + +The source in this patch is available at +http://www.mit.edu/afs/athena/contrib/graphics/src/xv/patches/png/xvpng.c + +--------------------------------------------------------------------------- + +--- /dev/null Sun Jun 13 01:55:42 1999 ++++ xvpng.c Fri Jun 14 01:42:11 1996 +@@ -0,0 +1,965 @@ ++/* ++ * xvpng.c - load and write routines for 'PNG' format pictures ++ * ++ * callable functions ++ * ++ * CreatePNGW() ++ * PNGDialog(vis) ++ * PNGCheckEvent(xev) ++ * PNGSaveParams(fname, col) ++ * LoadPNG(fname, pinfo) ++ */ ++ ++/*#include "copyright.h"*/ ++/* (c) 1995 by Alexander Lehmann <lehmann@mathematik.th-darmstadt.de> ++ * this file is a suplement to xv and is supplied under the same copying ++ * conditions (except the shareware part) ++ * Modified by Andreas Dilger <adilger@enel.ucalgary.ca> to fix ++ * error handling for bad PNGs, add dialogs for interlacing and ++ * compression selection, and upgrade to libpng-0.89 ++ * The copyright will be passed on to JB at some future point if he ++ * so desires. ++ */ ++ ++#include "xv.h" ++ ++#ifdef HAVE_PNG ++ ++#include "png.h" ++ ++/*** Stuff for PNG Dialog box ***/ ++#define PWIDE 318 ++#define PHIGH 215 ++ ++#define DISPLAY_GAMMA 2.20 /* Default display gamma */ ++/* Default zlib compression level ++#define COMPRESSION Z_BEST_COMPRESSION ++*/ ++#define COMPRESSION 6 ++ ++#define DWIDE 86 ++#define DHIGH 104 ++#define PFX PWIDE-93 ++#define PFY 44 ++#define PFH 20 ++ ++#define P_BOK 0 ++#define P_BCANC 1 ++#define P_NBUTTS 2 ++ ++#define BUTTH 24 ++ ++/*** local functions ***/ ++static void drawPD PARM((int, int, int, int)); ++static void clickPD PARM((int, int)); ++static void doCmd PARM((int)); ++static void writePNG PARM((void)); ++static int WritePNG PARM((FILE *, byte *, int, int, int, ++ byte *, byte *, byte *, int)); ++ ++static void png_xv_error PARM((png_struct *png_ptr, char *message)); ++static void png_xv_warning PARM((png_struct *png_ptr, char *message)); ++ ++/*** local variables ***/ ++static char *filename; ++static char *fbasename; ++static int colorType; ++static int read_anything; ++static double Display_Gamma = DISPLAY_GAMMA; ++ ++static DIAL cDial, gDial; ++static BUTT pbut[P_NBUTTS]; ++static CBUTT interCB; ++static CBUTT FdefCB, FnoneCB, FsubCB, FupCB, FavgCB, FPaethCB; ++ ++/**************************************************************************/ ++/* PNG SAVE DIALOG ROUTINES ***********************************************/ ++/**************************************************************************/ ++ ++ ++/*******************************************/ ++void CreatePNGW() ++{ ++ pngW = CreateWindow("xv png", "XVPNG", NULL, ++ PWIDE, PHIGH, infofg, infobg, 0); ++ if (!pngW) FatalError("can't create PNG window!"); ++ ++ XSelectInput(theDisp, pngW, ExposureMask | ButtonPressMask | KeyPressMask); ++ ++ DCreate(&cDial, pngW, 12, 25, DWIDE, DHIGH, (double)Z_NO_COMPRESSION, ++ (double)Z_BEST_COMPRESSION, COMPRESSION, 1.0, 2.0, ++ infofg, infobg, hicol, locol, "Compression", NULL); ++ ++ DCreate(&gDial, pngW, DWIDE+27, 25, DWIDE, DHIGH, 1.0, 3.5,DISPLAY_GAMMA,0.01,0.2, ++ infofg, infobg, hicol, locol, "Disp. Gamma", NULL); ++ ++ CBCreate(&interCB, pngW, DWIDE+30, DHIGH+3*LINEHIGH+2, "interlace", ++ infofg, infobg, hicol, locol); ++ ++ CBCreate(&FdefCB, pngW, PFX, PFY, "Default", ++ infofg, infobg, hicol, locol); ++ FdefCB.val = 1; ++ ++ CBCreate(&FnoneCB, pngW, PFX, FdefCB.y + PFH + 4, "none", ++ infofg, infobg, hicol, locol); ++ CBCreate(&FsubCB, pngW, PFX, FnoneCB.y + PFH, "sub", ++ infofg, infobg, hicol, locol); ++ CBCreate(&FupCB, pngW, PFX, FsubCB.y + PFH, "up", ++ infofg, infobg, hicol, locol); ++ CBCreate(&FavgCB, pngW, PFX, FupCB.y + PFH, "average", ++ infofg, infobg, hicol, locol); ++ CBCreate(&FPaethCB, pngW, PFX, FavgCB.y + PFH, "Paeth", ++ infofg, infobg, hicol, locol); ++ ++ FnoneCB.val = FsubCB.val = FupCB.val = FavgCB.val = FPaethCB.val = 1; ++ CBSetActive(&FnoneCB, !FdefCB.val); ++ CBSetActive(&FsubCB, !FdefCB.val); ++ CBSetActive(&FupCB, !FdefCB.val); ++ CBSetActive(&FavgCB, !FdefCB.val); ++ CBSetActive(&FPaethCB, !FdefCB.val); ++ ++ BTCreate(&pbut[P_BOK], pngW, PWIDE-180-1, PHIGH-10-BUTTH-1, 80, BUTTH, ++ "Ok", infofg, infobg, hicol, locol); ++ BTCreate(&pbut[P_BCANC], pngW, PWIDE-90-1, PHIGH-10-BUTTH-1, 80, BUTTH, ++ "Cancel", infofg, infobg, hicol, locol); ++ ++ XMapSubwindows(theDisp, pngW); ++} ++ ++ ++/*******************************************/ ++void PNGDialog(vis) ++ int vis; ++{ ++ if (vis) { ++ CenterMapWindow(pngW, pbut[P_BOK].x + (int) pbut[P_BOK].w/2, ++ pbut[P_BOK].y + (int) pbut[P_BOK].h/2, ++ PWIDE, PHIGH); ++ } ++ else XUnmapWindow(theDisp, pngW); ++ pngUp = vis; ++} ++ ++ ++/*******************************************/ ++int PNGCheckEvent(xev) ++ XEvent *xev; ++{ ++ /* check event to see if it's for one of our subwindows. If it is, ++ deal accordingly, and return '1'. Otherwise, return '0' */ ++ ++ int rv; ++ rv = 1; ++ ++ if (!pngUp) return 0; ++ ++ if (xev->type == Expose) { ++ int x,y,w,h; ++ XExposeEvent *e = (XExposeEvent *) xev; ++ x = e->x; y = e->y; w = e->width; h = e->height; ++ ++ /* throw away excess expose events for 'dumb' windows */ ++ if (e->count > 0 && (e->window == cDial.win)) {} ++ ++ else if (e->window == pngW) drawPD(x, y, w, h); ++ else if (e->window == cDial.win) DRedraw(&cDial); ++ else if (e->window == gDial.win) DRedraw(&gDial); ++ else rv = 0; ++ } ++ ++ else if (xev->type == ButtonPress) { ++ XButtonEvent *e = (XButtonEvent *) xev; ++ int x,y; ++ x = e->x; y = e->y; ++ ++ if (e->button == Button1) { ++ if (e->window == pngW) clickPD(x,y); ++ else if (e->window == cDial.win) DTrack(&cDial,x,y); ++ else if (e->window == gDial.win) DTrack(&gDial,x,y); ++ else rv = 0; ++ } /* button1 */ ++ else rv = 0; ++ } /* button press */ ++ ++ else if (xev->type == KeyPress) { ++ XKeyEvent *e = (XKeyEvent *) xev; ++ char buf[128]; KeySym ks; ++ int stlen; ++ ++ stlen = XLookupString(e,buf,128,&ks,(XComposeStatus *) NULL); ++ buf[stlen] = '\0'; ++ ++ RemapKeyCheck(ks, buf, &stlen); ++ ++ if (e->window == pngW) { ++ if (stlen) { ++ if (buf[0] == '\r' || buf[0] == '\n') { /* enter */ ++ FakeButtonPress(&pbut[P_BOK]); ++ } ++ else if (buf[0] == '\033') { /* ESC */ ++ FakeButtonPress(&pbut[P_BCANC]); ++ } ++ } ++ } ++ else rv = 0; ++ } ++ else rv = 0; ++ ++ if (rv==0 && (xev->type == ButtonPress || xev->type == KeyPress)) { ++ XBell(theDisp, 50); ++ rv = 1; /* eat it */ ++ } ++ ++ return rv; ++} ++ ++ ++/*******************************************/ ++void PNGSaveParams(fname, col) ++ char *fname; ++ int col; ++{ ++ filename = fname; ++ colorType = col; ++} ++ ++ ++/*******************************************/ ++static void drawPD(x, y, w, h) ++ int x, y, w, h; ++{ ++ char *title = "Save PNG file..."; ++ ++ char ctitle1[20]; ++ char *ctitle2 = "Useful range"; ++ char *ctitle3 = "is 2 - 7."; ++ char *ctitle4 = "Uncompressed = 0"; ++ ++ char *ftitle = "Row Filters:"; ++ ++ char gtitle[20]; ++ ++ int i; ++ XRectangle xr; ++ ++ xr.x = x; xr.y = y; xr.width = w; xr.height = h; ++ XSetClipRectangles(theDisp, theGC, 0,0, &xr, 1, Unsorted); ++ ++ XSetForeground(theDisp, theGC, infofg); ++ XSetBackground(theDisp, theGC, infobg); ++ ++ for (i=0; i<P_NBUTTS; i++) BTRedraw(&pbut[i]); ++ ++ DrawString(pngW, 15, 6+ASCENT, title); ++ ++ sprintf(ctitle1, "Default = %d", COMPRESSION); ++ DrawString(pngW, 18, 6+DHIGH+cDial.y+ASCENT, ctitle1); ++ DrawString(pngW, 17, 6+DHIGH+cDial.y+ASCENT+LINEHIGH, ctitle2); ++ DrawString(pngW, 17, 6+DHIGH+cDial.y+ASCENT+2*LINEHIGH, ctitle3); ++ DrawString(pngW, 17, 6+DHIGH+cDial.y+ASCENT+3*LINEHIGH, ctitle4); ++ ++ sprintf(gtitle, "Default = %g", DISPLAY_GAMMA); ++ DrawString(pngW, DWIDE+30, 6+DHIGH+gDial.y+ASCENT, gtitle); ++ ++ ULineString(pngW, FdefCB.x, FdefCB.y-3-DESCENT, ftitle); ++ XDrawRectangle(theDisp, pngW, theGC, FdefCB.x-11, FdefCB.y-LINEHIGH-3, ++ 93, 8*LINEHIGH+15); ++ CBRedraw(&FdefCB); ++ XDrawLine(theDisp, pngW, theGC, FdefCB.x-11, FdefCB.y+LINEHIGH+4, ++ FdefCB.x+82, FdefCB.y+LINEHIGH+4); ++ ++ CBRedraw(&FnoneCB); ++ CBRedraw(&FupCB); ++ CBRedraw(&FsubCB); ++ CBRedraw(&FavgCB); ++ CBRedraw(&FPaethCB); ++ ++ CBRedraw(&interCB); ++ ++ XSetClipMask(theDisp, theGC, None); ++} ++ ++ ++/*******************************************/ ++static void clickPD(x,y) ++ int x,y; ++{ ++ int i; ++ BUTT *bp; ++ ++ /* check BUTTs */ ++ ++ for (i=0; i<P_NBUTTS; i++) { ++ bp = &pbut[i]; ++ if (PTINRECT(x, y, bp->x, bp->y, bp->w, bp->h)) break; ++ } ++ ++ if (i<P_NBUTTS) { /* found one */ ++ if (BTTrack(bp)) doCmd(i); ++ } ++ ++ /* check CBUTTs */ ++ ++ else if (CBClick(&FdefCB,x,y)) { ++ int oldval = FdefCB.val; ++ ++ CBTrack(&FdefCB); ++ ++ if (oldval != FdefCB.val) ++ { ++ CBSetActive(&FnoneCB, !FdefCB.val); ++ CBSetActive(&FsubCB, !FdefCB.val); ++ CBSetActive(&FupCB, !FdefCB.val); ++ CBSetActive(&FavgCB, !FdefCB.val); ++ CBSetActive(&FPaethCB, !FdefCB.val); ++ ++ CBRedraw(&FnoneCB); ++ CBRedraw(&FupCB); ++ CBRedraw(&FsubCB); ++ CBRedraw(&FavgCB); ++ CBRedraw(&FPaethCB); ++ } ++ } ++ else if (CBClick(&FnoneCB,x,y)) CBTrack(&FnoneCB); ++ else if (CBClick(&FsubCB,x,y)) CBTrack(&FsubCB); ++ else if (CBClick(&FupCB,x,y)) CBTrack(&FupCB); ++ else if (CBClick(&FavgCB,x,y)) CBTrack(&FavgCB); ++ else if (CBClick(&FPaethCB,x,y)) CBTrack(&FPaethCB); ++ else if (CBClick(&interCB,x,y)) CBTrack(&interCB); ++} ++ ++ ++/*******************************************/ ++static void doCmd(cmd) ++ int cmd; ++{ ++ switch (cmd) { ++ case P_BOK: { ++ char *fullname; ++ ++ writePNG(); ++ PNGDialog(0); ++ ++ fullname = GetDirFullName(); ++ if (!ISPIPE(fullname[0])) { ++ XVCreatedFile(fullname); ++ StickInCtrlList(0); ++ } ++ } ++ break; ++ ++ case P_BCANC: PNGDialog(0); break; ++ ++ default: break; ++ } ++} ++ ++ ++/*******************************************/ ++static void writePNG() ++{ ++ FILE *fp; ++ int w, h, nc, rv, ptype, pfree; ++ byte *inpix, *rmap, *gmap, *bmap; ++ ++ fp = OpenOutFile(filename); ++ if (!fp) return; ++ ++ fbasename = BaseName(filename); ++ ++ WaitCursor(); ++ inpix = GenSavePic(&ptype, &w, &h, &pfree, &nc, &rmap, &gmap, &bmap); ++ ++ rv = WritePNG(fp, inpix, ptype, w, h, rmap, gmap, bmap, nc); ++ ++ SetCursors(-1); ++ ++ if (CloseOutFile(fp, filename, rv) == 0) DirBox(0); ++ ++ if (pfree) free(inpix); ++} ++ ++ ++/*******************************************/ ++int WritePNG(fp, pic, ptype, w, h, rmap, gmap, bmap, numcols) ++ FILE *fp; ++ byte *pic; ++ int ptype, w, h; ++ byte *rmap, *gmap, *bmap; ++ int numcols; ++{ ++ png_struct *png_ptr; ++ png_info *info_ptr; ++ png_color palette[256]; ++ png_textp text; ++ byte remap[256]; ++ int i, filter, linesize = 0, pass; ++ byte *p, *png_line; ++ char software[256]; ++ char *savecmnt = NULL; ++ ++ if ((png_ptr = png_create_write_struct(PNG_LIBPNG_VER_STRING, NULL, ++ png_xv_error, png_xv_warning)) == NULL) { ++ FatalError("malloc failure in WritePNG"); ++ } ++ ++ if ((info_ptr = png_create_info_struct(png_ptr)) == NULL) ++ { ++ png_destroy_write_struct(&png_ptr, &info_ptr); ++ FatalError("malloc failure in WritePNG"); ++ } ++ ++ if (setjmp(png_ptr->jmpbuf)) { ++ png_destroy_write_struct(&png_ptr, &info_ptr); ++ return -1; ++ } ++ ++ png_init_io(png_ptr, fp); ++ ++ png_set_compression_level(png_ptr, (int)cDial.val); ++ ++ /* Don't bother filtering if we aren't compressing the image */ ++ if (FdefCB.val) ++ { ++ if ((int)cDial.val == 0) ++ png_set_filter(png_ptr, 0, PNG_FILTER_NONE); ++ } ++ else ++ { ++ filter = FnoneCB.val ? PNG_FILTER_NONE : 0; ++ filter |= FsubCB.val ? PNG_FILTER_SUB : 0; ++ filter |= FupCB.val ? PNG_FILTER_UP : 0; ++ filter |= FavgCB.val ? PNG_FILTER_AVG : 0; ++ filter |= FPaethCB.val ? PNG_FILTER_PAETH : 0; ++ ++ png_set_filter(png_ptr, 0, filter); ++ } ++ ++ info_ptr->width = w; ++ info_ptr->height = h; ++ ++ info_ptr->interlace_type = interCB.val ? 1 : 0; ++ ++ if (colorType == F_FULLCOLOR || colorType == F_REDUCED) { ++ if(ptype == PIC24) { ++ linesize = 3*w; ++ info_ptr->color_type = PNG_COLOR_TYPE_RGB; ++ info_ptr->bit_depth = 8; ++ } else { ++ linesize = w; ++ info_ptr->color_type = PNG_COLOR_TYPE_PALETTE; ++ if(numcols <= 2) ++ info_ptr->bit_depth = 1; ++ else ++ if(numcols <= 4) ++ info_ptr->bit_depth = 2; ++ else ++ if(numcols <= 16) ++ info_ptr->bit_depth = 4; ++ else ++ info_ptr->bit_depth = 8; ++ ++ for(i = 0; i < numcols; i++) { ++ palette[i].red = rmap[i]; ++ palette[i].green = gmap[i]; ++ palette[i].blue = bmap[i]; ++ } ++ info_ptr->num_palette = numcols; ++ info_ptr->palette = palette; ++ info_ptr->valid |= PNG_INFO_PLTE; ++ } ++ } ++ ++ else if(colorType == F_GREYSCALE || colorType == F_BWDITHER) { ++ info_ptr->color_type = PNG_COLOR_TYPE_GRAY; ++ if(colorType == F_BWDITHER) { ++ /* shouldn't happen */ ++ if (ptype == PIC24) FatalError("PIC24 and B/W Stipple in WritePNG()"); ++ ++ info_ptr->bit_depth = 1; ++ if(MONO(rmap[0], gmap[0], bmap[0]) > MONO(rmap[1], gmap[1], bmap[1])) { ++ remap[0] = 1; ++ remap[1] = 0; ++ } ++ else { ++ remap[0] = 0; ++ remap[1] = 1; ++ } ++ linesize = w; ++ } ++ else { ++ if(ptype == PIC24) { ++ linesize = w*3; ++ info_ptr->bit_depth = 8; ++ } ++ else { ++ int low_presc; ++ ++ linesize = w; ++ ++ for(i = 0; i < numcols; i++) ++ remap[i] = MONO(rmap[i], gmap[i], bmap[i]); ++ ++ for(; i < 256; i++) ++ remap[i]=0; ++ ++ info_ptr->bit_depth = 8; ++ ++ /* Note that this fails most of the time because of gamma */ ++ /* try to adjust to 4 bit prescision grayscale */ ++ ++ low_presc=1; ++ ++ for(i = 0; i < numcols; i++) { ++ if((remap[i] & 0x0f) * 0x11 != remap[i]) { ++ low_presc = 0; ++ break; ++ } ++ } ++ ++ if(low_presc) { ++ for(i = 0; i < numcols; i++) { ++ remap[i] &= 0xf; ++ } ++ info_ptr->bit_depth = 4; ++ ++ /* try to adjust to 2 bit prescision grayscale */ ++ ++ for(i = 0; i < numcols; i++) { ++ if((remap[i] & 0x03) * 0x05 != remap[i]) { ++ low_presc = 0; ++ break; ++ } ++ } ++ } ++ ++ if(low_presc) { ++ for(i = 0; i < numcols; i++) { ++ remap[i] &= 3; ++ } ++ info_ptr->bit_depth = 2; ++ ++ /* try to adjust to 1 bit prescision grayscale */ ++ ++ for(i = 0; i < numcols; i++) { ++ if((remap[i] & 0x01) * 0x03 != remap[i]) { ++ low_presc = 0; ++ break; ++ } ++ } ++ } ++ ++ if(low_presc) { ++ for(i = 0; i < numcols; i++) { ++ remap[i] &= 1; ++ } ++ info_ptr->bit_depth = 1; ++ } ++ } ++ } ++ } ++ ++ else ++ png_error(png_ptr, "Unknown colorstyle in WritePNG"); ++ ++ if ((text = (png_textp)malloc(sizeof(png_text)))) { ++ sprintf(software, "XV %s", REVDATE); ++ ++ text->compression = -1; ++ text->key = "Software"; ++ text->text = software; ++ text->text_length = strlen(text->text); ++ ++ info_ptr->max_text = 1; ++ info_ptr->num_text = 1; ++ info_ptr->text = text; ++ } ++ ++ Display_Gamma = gDial.val; /* Save the current gamma for loading */ ++ ++ info_ptr->gamma = 1.0/gDial.val; ++ info_ptr->valid |= PNG_INFO_gAMA; ++ ++ png_write_info(png_ptr, info_ptr); ++ ++ if(info_ptr->bit_depth < 8) ++ png_set_packing(png_ptr); ++ ++ pass=png_set_interlace_handling(png_ptr); ++ ++ if((png_line = malloc(linesize)) == NULL) ++ png_error(png_ptr, "cannot allocate temp image line"); ++ ++ for(i = 0; i < pass; i++) { ++ int j; ++ p = pic; ++ for(j = 0; j < h; j++) { ++ fflush(stdout); ++ if(info_ptr->color_type == PNG_COLOR_TYPE_GRAY) { ++ int k; ++ for(k = 0; k < w; k++) ++ png_line[k] = ptype==PIC24 ? MONO(p[k*3], p[k*3+1], p[k*3+2]) : ++ remap[p[k]]; ++ png_write_row(png_ptr, png_line); ++ } else /* rbg or palette */ ++ png_write_row(png_ptr, p); ++ if((j & 0x1f) == 0) WaitCursor(); ++ p += linesize; ++ } ++ } ++ ++ free(png_line); ++ ++ if (text) ++ { ++ if (picComments && strlen(picComments) && ++ (savecmnt = (char *)malloc((strlen(picComments) + 1)*sizeof(char)))) { ++ png_textp tp; ++ char *comment, *key; ++ ++ strcpy(savecmnt, picComments); ++ key = savecmnt; ++ tp = text; ++ info_ptr->num_text = 0; ++ ++ comment = strchr(key, ':'); ++ ++ do { ++ /* Allocate a larger structure for comments if necessary */ ++ if (info_ptr->num_text >= info_ptr->max_text) ++ { ++ if ((tp = ++ realloc(text, (info_ptr->num_text + 2)*sizeof(png_text))) == NULL) ++ { ++ break; ++ } ++ else ++ { ++ text = tp; ++ tp = &text[info_ptr->num_text]; ++ info_ptr->max_text += 2; ++ } ++ } ++ ++ /* See if it looks like a PNG keyword from LoadPNG */ ++ if(comment && comment[1] == ':' && comment - key <= 80) { ++ *(comment++) = '\0'; ++ *(comment++) = '\0'; ++ ++ /* If the comment is the 'Software' chunk XV writes, we remove it, ++ since we have already stored one */ ++ if (strcmp(key, "Software") == 0 && strncmp(comment, "XV", 2) == 0) { ++ key = strchr(comment, '\n'); ++ if(key) ++ key++; /* skip \n */ ++ comment = strchr(key, ':'); ++ } ++ /* We have another keyword and/or comment to write out */ ++ else { ++ tp->key = key; ++ tp->text = comment; ++ ++ /* We have to find the end of this comment, and the next keyword ++ if there is one */ ++ do { ++ key = comment = strchr(comment, ':'); ++ } while (key && key[1] != ':'); ++ ++ /* It looks like another keyword, go backward to the beginning */ ++ if (key) { ++ while(key > tp->text && *key != '\n') ++ key--; ++ ++ if (key > tp->text && comment - key <= 80) { ++ *key = '\0'; ++ key++; ++ } ++ } ++ ++ tp->text_length = strlen(tp->text); ++ ++ /* We don't have another keyword, so remove the last newline */ ++ if (!key && tp->text[tp->text_length - 1] == '\n') ++ { ++ tp->text[tp->text_length] = '\0'; ++ tp->text_length--; ++ } ++ ++ tp->compression = tp->text_length > 640 ? 0 : -1; ++ info_ptr->num_text++; ++ tp++; ++ } ++ } ++ /* It is just a generic comment */ ++ else { ++ tp->key = "Comment"; ++ tp->text = key; ++ tp->text_length = strlen(tp->text); ++ tp->compression = tp->text_length > 750 ? 0 : -1; ++ info_ptr->num_text++; ++ key = NULL; ++ } ++ } while (key && *key); ++ } ++ else ++ { ++ info_ptr->num_text = 0; ++ } ++ } ++ info_ptr->text = text; ++ ++ png_convert_from_time_t(&(info_ptr->mod_time), time(NULL)); ++ info_ptr->valid |= PNG_INFO_tIME; ++ ++ png_write_end(png_ptr, info_ptr); ++ png_destroy_write_struct(&png_ptr, &info_ptr); ++ ++ if (text) ++ { ++ free(text); ++ if (savecmnt) ++ free(savecmnt); ++ } ++ ++ return 0; ++} ++ ++ ++/*******************************************/ ++int LoadPNG(fname, pinfo) ++ char *fname; ++ PICINFO *pinfo; ++/*******************************************/ ++{ ++ /* returns '1' on success */ ++ ++ FILE *fp; ++ png_struct *png_ptr; ++ png_info *info_ptr; ++ png_color_16 my_background; ++ int i,j; ++ int linesize; ++ int filesize; ++ int pass; ++ size_t commentsize; ++ ++ fbasename = BaseName(fname); ++ ++ pinfo->pic = (byte *) NULL; ++ pinfo->comment = (char *) NULL; ++ ++ read_anything=0; ++ ++ /* open the file */ ++ fp = xv_fopen(fname,"r"); ++ if (!fp) ++ { ++ SetISTR(ISTR_WARNING,"%s: can't open file", fname); ++ return 0; ++ } ++ ++ /* find the size of the file */ ++ fseek(fp, 0L, 2); ++ filesize = ftell(fp); ++ fseek(fp, 0L, 0); ++ ++ png_ptr = png_create_read_struct(PNG_LIBPNG_VER_STRING, NULL, ++ png_xv_error, png_xv_warning); ++ if(!png_ptr) { ++ fclose(fp); ++ FatalError("malloc failure in LoadPNG"); ++ } ++ ++ info_ptr = png_create_info_struct(png_ptr); ++ ++ if(!info_ptr) { ++ fclose(fp); ++ png_destroy_read_struct(&png_ptr, (png_infopp)NULL, (png_infopp)NULL); ++ FatalError("malloc failure in LoadPNG"); ++ } ++ ++ if(setjmp(png_ptr->jmpbuf)) { ++ fclose(fp); ++ png_destroy_read_struct(&png_ptr, &info_ptr, (png_infopp)NULL); ++ if(!read_anything) { ++ if(pinfo->pic) { ++ free(pinfo->pic); ++ pinfo->pic = NULL; ++ } ++ if(pinfo->comment) { ++ free(pinfo->comment); ++ pinfo->comment = NULL; ++ } ++ } ++ return read_anything; ++ } ++ ++ png_init_io(png_ptr, fp); ++ png_read_info(png_ptr, info_ptr); ++ ++ pinfo->w = pinfo->normw = info_ptr->width; ++ pinfo->h = pinfo->normh = info_ptr->height; ++ ++ pinfo->frmType = F_PNG; ++ ++ sprintf(pinfo->fullInfo, "PNG, %d bit ", ++ info_ptr->bit_depth * info_ptr->channels); ++ ++ switch(info_ptr->color_type) { ++ case PNG_COLOR_TYPE_PALETTE: ++ strcat(pinfo->fullInfo, "palette color"); ++ break; ++ ++ case PNG_COLOR_TYPE_GRAY: ++ strcat(pinfo->fullInfo, "grayscale"); ++ break; ++ ++ case PNG_COLOR_TYPE_GRAY_ALPHA: ++ strcat(pinfo->fullInfo, "grayscale+alpha"); ++ break; ++ ++ case PNG_COLOR_TYPE_RGB: ++ strcat(pinfo->fullInfo, "truecolor"); ++ break; ++ ++ case PNG_COLOR_TYPE_RGB_ALPHA: ++ strcat(pinfo->fullInfo, "truecolor+alpha"); ++ break; ++ } ++ ++ sprintf(pinfo->fullInfo + strlen(pinfo->fullInfo), ++ ", %sinterlaced. (%d bytes)", ++ info_ptr->interlace_type ? "" : "non-", filesize); ++ ++ sprintf(pinfo->shrtInfo, "%dx%d PNG", info_ptr->width, info_ptr->height); ++ ++ if (info_ptr->bit_depth < 8) ++ png_set_packing(png_ptr); ++ ++ if (info_ptr->valid & PNG_INFO_gAMA) ++ png_set_gamma(png_ptr, Display_Gamma, info_ptr->gamma); ++ else ++ png_set_gamma(png_ptr, Display_Gamma, 0.45); ++ ++ if (info_ptr->valid & PNG_INFO_bKGD) ++ png_set_background(png_ptr, &info_ptr->background, ++ PNG_BACKGROUND_GAMMA_FILE, 1, 1.0); ++ else { ++ my_background.red = my_background.green = my_background.blue = ++ my_background.gray = 0; ++ png_set_background(png_ptr, &my_background, PNG_BACKGROUND_GAMMA_SCREEN, ++ 0, Display_Gamma); ++ } ++ ++ if (info_ptr->bit_depth == 16) ++ png_set_strip_16(png_ptr); ++ ++ if (info_ptr->color_type == PNG_COLOR_TYPE_GRAY || ++ info_ptr->color_type == PNG_COLOR_TYPE_GRAY_ALPHA) ++ { ++ if (info_ptr->bit_depth == 1) ++ pinfo->colType = F_BWDITHER; ++ else ++ pinfo->colType = F_GREYSCALE; ++ png_set_expand(png_ptr); ++ } ++ ++ pass=png_set_interlace_handling(png_ptr); ++ ++ png_read_update_info(png_ptr, info_ptr); ++ ++ if(info_ptr->color_type == PNG_COLOR_TYPE_RGB || ++ info_ptr->color_type == PNG_COLOR_TYPE_RGB_ALPHA) { ++ linesize = pinfo->w * 3; ++ pinfo->colType = F_FULLCOLOR; ++ pinfo->type = PIC24; ++ } else { ++ linesize = pinfo->w; ++ pinfo->type = PIC8; ++ if(info_ptr->color_type == PNG_COLOR_TYPE_GRAY || ++ info_ptr->color_type == PNG_COLOR_TYPE_GRAY_ALPHA) { ++ for(i = 0; i < 256; i++) ++ pinfo->r[i] = pinfo->g[i] = pinfo->b[i] = i; ++ } else { ++ pinfo->colType = F_FULLCOLOR; ++ for(i = 0; i < info_ptr->num_palette; i++) { ++ pinfo->r[i] = info_ptr->palette[i].red; ++ pinfo->g[i] = info_ptr->palette[i].green; ++ pinfo->b[i] = info_ptr->palette[i].blue; ++ } ++ } ++ } ++ pinfo->pic = calloc((size_t)(linesize*pinfo->h), (size_t)1); ++ ++ if(!pinfo->pic) { ++ png_error(png_ptr, "can't allocate space for PNG image"); ++ } ++ ++ png_start_read_image(png_ptr); ++ ++ for(i = 0; i < pass; i++) { ++ byte *p = pinfo->pic; ++ for(j = 0; j < pinfo->h; j++) { ++ png_read_row(png_ptr, p, NULL); ++ read_anything = 1; ++ if((j & 0x1f) == 0) WaitCursor(); ++ p += linesize; ++ } ++ } ++ ++ png_read_end(png_ptr, info_ptr); ++ ++ if(info_ptr->num_text > 0) { ++ commentsize = 1; ++ ++ for(i = 0; i < info_ptr->num_text; i++) ++ commentsize += strlen(info_ptr->text[i].key) + 1 + ++ info_ptr->text[i].text_length + 2; ++ ++ if((pinfo->comment = malloc(commentsize)) == NULL) { ++ png_warning(png_ptr,"can't allocate comment string"); ++ } ++ else { ++ pinfo->comment[0] = '\0'; ++ for(i = 0; i < info_ptr->num_text; i++) { ++ strcat(pinfo->comment, info_ptr->text[i].key); ++ strcat(pinfo->comment, "::"); ++ strcat(pinfo->comment, info_ptr->text[i].text); ++ strcat(pinfo->comment, "\n"); ++ } ++ } ++ } ++ ++ png_destroy_read_struct(&png_ptr, &info_ptr, (png_infopp)NULL); ++ ++ fclose(fp); ++ ++ return 1; ++} ++ ++ ++/*******************************************/ ++static void ++png_xv_error(png_ptr, message) ++ png_struct *png_ptr; ++ char *message; ++{ ++ SetISTR(ISTR_WARNING,"%s: libpng error: %s", fbasename, message); ++ ++ longjmp(png_ptr->jmpbuf, 1); ++} ++ ++ ++/*******************************************/ ++static void ++png_xv_warning(png_ptr, message) ++ png_struct *png_ptr; ++ char *message; ++{ ++ if (!png_ptr) ++ return; ++ ++ SetISTR(ISTR_WARNING,"%s: libpng warning: %s", fbasename, message); ++} ++ ++#endif diff --git a/graphics/xv/patches/patch-png2 b/graphics/xv/patches/patch-png2 new file mode 100644 index 00000000000..de1719f7cb3 --- /dev/null +++ b/graphics/xv/patches/patch-png2 @@ -0,0 +1,963 @@ +$NetBSD: patch-png2,v 1.1 1999/06/13 16:23:53 hubertf Exp $ + +This patch is based on +http://www.mit.edu/afs/athena/contrib/graphics/src/xv/patches/png/xvpng.diff +It was edited to fit into the NetBSD Packages Collection! - HF + +--------------------------------------------------------------------------- + +This is v1.2 of the PNG patch for xv. This version adds a PNG dialog +so that the gamma, compression, interlacing, and filters can be selected +when saving PNG images. The gamma dial needed floating point values, so +it required modifying the Dial widget, and subsequently affected all of +the popups that use a Dial (jpeg, ps, and color). + +To add PNG support to xv, you need the xv-3.10a source code, libpng and zlib. + +To apply the patch, go into the xv-3.10a directory and execute +patch -p1 < thisfile + +The Makefile expects libpng and zlib to be already compiled. The versions +I used were libpng-0.89 and zlib 1.0.2, but it should work with later +versions. You will also have to modify the makefile to give the location +of libpng and zlib on your system. + +Andreas Dilger <adilger@enel.ucalgary.ca> +http://www-mddsp.enel.ucalgary.ca/People/adilger/ + +Alexander Lehmann <lehmann@mathematik.th-darmstadt.de> +http://www.mathematik.th-darmstadt.de/~lehmann/ + +diff -c3 xv-3.10a/xvdial.c xvdial.c +*** xv-3.10a/xvdial.c Tue Jan 3 14:20:31 1995 +--- xvdial.c Wed May 29 14:37:54 1996 +*************** +*** 41,60 **** + + + /* local functions */ +! static int whereInDial PARM((DIAL *, int, int)); +! static void drawArrow PARM((DIAL *)); +! static void drawValStr PARM((DIAL *)); +! static void drawButt PARM((DIAL *, int, int)); +! static int computeDialVal PARM((DIAL *, int, int)); +! static void dimDial PARM((DIAL *)); + + + /***************************************************/ +! void DCreate(dp, parent, x, y, w, h, minv, maxv, curv, page, + fg, bg, hi, lo, title, units) + DIAL *dp; + Window parent; +! int x,y,w,h,minv,maxv,curv,page; + unsigned long fg,bg,hi,lo; + char *title, *units; + { +--- 41,61 ---- + + + /* local functions */ +! static int whereInDial PARM((DIAL *, int, int)); +! static void drawArrow PARM((DIAL *)); +! static void drawValStr PARM((DIAL *)); +! static void drawButt PARM((DIAL *, int, int)); +! static double computeDialVal PARM((DIAL *, int, int)); +! static void dimDial PARM((DIAL *)); + + + /***************************************************/ +! void DCreate(dp, parent, x, y, w, h, minv, maxv, curv, inc, page, + fg, bg, hi, lo, title, units) + DIAL *dp; + Window parent; +! int x,y,w,h; +! double minv,maxv,curv,inc,page; + unsigned long fg,bg,hi,lo; + char *title, *units; + { +*************** +*** 98,115 **** + 1,fg,bg); + if (!dp->win) FatalError("can't create dial window"); + +! DSetRange(dp, minv, maxv, curv, page); + XSelectInput(theDisp, dp->win, ExposureMask | ButtonPressMask); + } + + + /***************************************************/ +! void DSetRange(dp, minv, maxv, curv, page) +! DIAL *dp; +! int minv, maxv, curv, page; + { + if (maxv<minv) maxv=minv; +! dp->min = minv; dp->max = maxv; dp->page = page; + dp->active = (minv < maxv); + + DSetVal(dp, curv); +--- 99,116 ---- + 1,fg,bg); + if (!dp->win) FatalError("can't create dial window"); + +! DSetRange(dp, minv, maxv, curv, inc, page); + XSelectInput(theDisp, dp->win, ExposureMask | ButtonPressMask); + } + + + /***************************************************/ +! void DSetRange(dp, minv, maxv, curv, inc, page) +! DIAL *dp; +! double minv, maxv, curv, inc, page; + { + if (maxv<minv) maxv=minv; +! dp->min = minv; dp->max = maxv; dp->inc = inc; dp->page = page; + dp->active = (minv < maxv); + + DSetVal(dp, curv); +*************** +*** 118,125 **** + + /***************************************************/ + void DSetVal(dp, curv) +! DIAL *dp; +! int curv; + { + RANGE(curv, dp->min, dp->max); /* make sure curv is in-range */ + +--- 119,126 ---- + + /***************************************************/ + void DSetVal(dp, curv) +! DIAL *dp; +! double curv; + { + RANGE(curv, dp->min, dp->max); /* make sure curv is in-range */ + +*************** +*** 129,135 **** + XSetForeground(theDisp, theGC, dp->bg); + drawArrow(dp); + +! dp->val = curv; + + /* draw new arrow and string */ + XSetForeground(theDisp, theGC, dp->fg); +--- 130,136 ---- + XSetForeground(theDisp, theGC, dp->bg); + drawArrow(dp); + +! dp->val = (double)((int)(curv / dp->inc + (curv > 0 ? 0.5 : -0.5))) * dp->inc; + + /* draw new arrow and string */ + XSetForeground(theDisp, theGC, dp->fg); +*************** +*** 202,208 **** + int mx,my; + { + Window rW,cW; +! int rx,ry, x,y, ipos, pos, lit, i, origval; + unsigned int mask; + + lit = 0; +--- 203,210 ---- + int mx,my; + { + Window rW,cW; +! int rx, ry, x, y, ipos, pos, lit; +! double origval; + unsigned int mask; + + lit = 0; +*************** +*** 224,232 **** + if (ipos != INDIAL) { + drawButt(dp, ipos, 1); + switch (ipos) { +! case INCW1: if (dp->val < dp->max) DSetVal(dp, dp->val+1); break; + case INCW2: if (dp->val < dp->max) DSetVal(dp, dp->val+dp->page); break; +! case INCCW1: if (dp->val > dp->min) DSetVal(dp, dp->val-1); break; + case INCCW2: if (dp->val > dp->min) DSetVal(dp, dp->val-dp->page); break; + } + if (dp->drawobj != NULL) (dp->drawobj)(); +--- 226,234 ---- + if (ipos != INDIAL) { + drawButt(dp, ipos, 1); + switch (ipos) { +! case INCW1: if (dp->val < dp->max) DSetVal(dp, dp->val+dp->inc); break; + case INCW2: if (dp->val < dp->max) DSetVal(dp, dp->val+dp->page); break; +! case INCCW1: if (dp->val > dp->min) DSetVal(dp, dp->val-dp->inc); break; + case INCCW2: if (dp->val > dp->min) DSetVal(dp, dp->val-dp->page); break; + } + if (dp->drawobj != NULL) (dp->drawobj)(); +*************** +*** 235,242 **** + } + + else { +! i = computeDialVal(dp, mx, my); +! DSetVal(dp, i); + if (dp->drawobj != NULL) (dp->drawobj)(); + } + +--- 237,245 ---- + } + + else { +! double v; +! v = computeDialVal(dp, mx, my); +! DSetVal(dp, v); + if (dp->drawobj != NULL) (dp->drawobj)(); + } + +*************** +*** 246,256 **** + if (!(mask & Button1Mask)) break; /* button released */ + + if (ipos == INDIAL) { +! int j; +! i = computeDialVal(dp, x, y); +! j = dp->val; +! DSetVal(dp, i); +! if (j != dp->val) { + /* track whatever dial controls */ + if (dp->drawobj != NULL) (dp->drawobj)(); + } +--- 249,259 ---- + if (!(mask & Button1Mask)) break; /* button released */ + + if (ipos == INDIAL) { +! double v, w; +! v = computeDialVal(dp, x, y); +! w = dp->val; +! DSetVal(dp, v); +! if (w != dp->val) { + /* track whatever dial controls */ + if (dp->drawobj != NULL) (dp->drawobj)(); + } +*************** +*** 266,276 **** + + if (lit) { + switch (ipos) { +! case INCW1: if (dp->val < dp->max) DSetVal(dp, dp->val+1); + break; + case INCW2: if (dp->val < dp->max) DSetVal(dp, dp->val+dp->page); + break; +! case INCCW1: if (dp->val > dp->min) DSetVal(dp, dp->val-1); + break; + case INCCW2: if (dp->val > dp->min) DSetVal(dp, dp->val-dp->page); + break; +--- 269,279 ---- + + if (lit) { + switch (ipos) { +! case INCW1: if (dp->val < dp->max) DSetVal(dp, dp->val+dp->inc); + break; + case INCW2: if (dp->val < dp->max) DSetVal(dp, dp->val+dp->page); + break; +! case INCCW1: if (dp->val > dp->min) DSetVal(dp, dp->val-dp->inc); + break; + case INCCW2: if (dp->val > dp->min) DSetVal(dp, dp->val-dp->page); + break; +*************** +*** 320,338 **** + static void drawArrow(dp) + DIAL *dp; + { +! int i, rad, cx, cy; + XPoint arrow[4]; + + rad = dp->rad; cx = dp->cx; cy = dp->cy; + + /* map pos (range minv..maxv) into degrees (range 240..-60) */ +! i = 240 + (-300 * (dp->val - dp->min)) / (dp->max - dp->min); +! arrow[0].x = cx + (int) ((double) rad * .80 * cos(i * DEG2RAD)); +! arrow[0].y = cy - (int) ((double) rad * .80 * sin(i * DEG2RAD)); +! arrow[1].x = cx + (int) ((double) rad * .33 * cos((i+160) * DEG2RAD)); +! arrow[1].y = cy - (int) ((double) rad * .33 * sin((i+160) * DEG2RAD)); +! arrow[2].x = cx + (int) ((double) rad * .33 * cos((i-160) * DEG2RAD)); +! arrow[2].y = cy - (int) ((double) rad * .33 * sin((i-160) * DEG2RAD)); + arrow[3].x = arrow[0].x; + arrow[3].y = arrow[0].y; + XDrawLines(theDisp, dp->win, theGC, arrow, 4, CoordModeOrigin); +--- 323,342 ---- + static void drawArrow(dp) + DIAL *dp; + { +! int rad, cx, cy; +! double v; + XPoint arrow[4]; + + rad = dp->rad; cx = dp->cx; cy = dp->cy; + + /* map pos (range minv..maxv) into degrees (range 240..-60) */ +! v = 240 + (-300 * (dp->val - dp->min)) / (dp->max - dp->min); +! arrow[0].x = cx + (int) ((double) rad * .80 * cos(v * DEG2RAD)); +! arrow[0].y = cy - (int) ((double) rad * .80 * sin(v * DEG2RAD)); +! arrow[1].x = cx + (int) ((double) rad * .33 * cos((v+160) * DEG2RAD)); +! arrow[1].y = cy - (int) ((double) rad * .33 * sin((v+160) * DEG2RAD)); +! arrow[2].x = cx + (int) ((double) rad * .33 * cos((v-160) * DEG2RAD)); +! arrow[2].y = cy - (int) ((double) rad * .33 * sin((v-160) * DEG2RAD)); + arrow[3].x = arrow[0].x; + arrow[3].y = arrow[0].y; + XDrawLines(theDisp, dp->win, theGC, arrow, 4, CoordModeOrigin); +*************** +*** 343,365 **** + static void drawValStr(dp) + DIAL *dp; + { +! int i, x1, x2; + char foo[60], foo1[60]; + + /* compute longest string necessary so we can right-align this thing */ +! sprintf(foo,"%d",dp->min); x1 = strlen(foo); +! sprintf(foo,"%d",dp->max); x2 = strlen(foo); + if (dp->min < 0 && dp->max > 0) x2++; /* put '+' at beginning */ + i = x1; if (x2>x1) i = x2; + if (dp->units) i += strlen(dp->units); + +! if (dp->min < 0 && dp->max > 0) sprintf(foo,"%+d", dp->val); +! else sprintf(foo,"%d", dp->val); + + if (dp->units) strcat(foo,dp->units); + foo1[0] = '\0'; + if (strlen(foo) < (size_t) i) { +! for (i = i - strlen(foo); i>0; i--) strcat(foo1," "); + } + strcat(foo1, foo); + +--- 347,383 ---- + static void drawValStr(dp) + DIAL *dp; + { +! int tot, i, x1, x2; + char foo[60], foo1[60]; + + /* compute longest string necessary so we can right-align this thing */ +! sprintf(foo,"%d",(int)dp->min); x1 = strlen(foo); +! sprintf(foo,"%d",(int)dp->max); x2 = strlen(foo); + if (dp->min < 0 && dp->max > 0) x2++; /* put '+' at beginning */ + i = x1; if (x2>x1) i = x2; + if (dp->units) i += strlen(dp->units); + +! sprintf(foo,"%g",dp->inc); /* space for decimal values */ +! tot = i + strlen(foo) - 1; /* Take away the 0 from the beginning */ +! +! if (dp->min < 0.0 && dp->max > 0.0) sprintf(foo,"%+g", dp->val); +! else sprintf(foo,"%g", dp->val); +! +! if (dp->inc < 1.0) +! { +! int j; +! +! if (dp->val == (double)((int)dp->val)) +! strcat(foo,"."); +! +! for (j = strlen(foo); j < tot; j++) +! strcat(foo,"0"); +! } + + if (dp->units) strcat(foo,dp->units); + foo1[0] = '\0'; + if (strlen(foo) < (size_t) i) { +! for (i-=strlen(foo);i>0;i--) strcat(foo1," "); + } + strcat(foo1, foo); + +*************** +*** 411,422 **** + + + /***************************************************/ +! static int computeDialVal(dp, x, y) + DIAL *dp; + int x, y; + { +! int dx, dy, val; +! double angle; + + /* compute dx, dy (distance from cx, cy). Note: +dy is *up* */ + dx = x - dp->cx; dy = dp->cy - y; +--- 429,441 ---- + + + /***************************************************/ +! static double computeDialVal(dp, x, y) + DIAL *dp; + int x, y; + { +! int dx, dy; +! +! double angle, val; + + /* compute dx, dy (distance from cx, cy). Note: +dy is *up* */ + dx = x - dp->cx; dy = dp->cy - y; +*************** +*** 436,443 **** + if (angle > 270.0) angle -= 360.0; + if (angle < -90.0) angle += 360.0; + +! val = (int) ((dp->max - dp->min) * (240.0 - angle) / 300.0) + dp->min; + + return val; + } + +--- 455,464 ---- + if (angle > 270.0) angle -= 360.0; + if (angle < -90.0) angle += 360.0; + +! val = ((dp->max - dp->min) * (240.0 - angle) / 300.0) + dp->min; + ++ /* round value to be an even multiple of dp->inc */ ++ val = (double)((int)(val / dp->inc + 0.5)) * dp->inc; + return val; + } + +diff -c3 xv-3.10a/xvgam.c xvgam.c +*** xv-3.10a/xvgam.c Fri Jan 13 12:51:14 1995 +--- xvgam.c Wed May 29 11:13:56 1996 +*************** +*** 265,275 **** + BTCreate(&gbut[G_BRNDCOL], cmapF, 5 + 66 + 67 + 2, 189, 66, BUTTH, + "Random", infofg, infobg, hicol, locol); + +! DCreate(&rhDial, cmapF, 5, 215, 66, 100, 0,360,180, 5, + infofg, infobg, hicol, locol, "Hue", NULL); +! DCreate(&gsDial, cmapF, 72, 215, 66, 100, 0,360,180, 5, + infofg, infobg, hicol, locol, "Sat.", NULL); +! DCreate(&bvDial, cmapF, 139, 215, 66, 100, 0,360,180, 5, + infofg, infobg, hicol, locol, "Value", NULL); + + rhDial.drawobj = gsDial.drawobj = bvDial.drawobj = dragEditColor; +--- 265,275 ---- + BTCreate(&gbut[G_BRNDCOL], cmapF, 5 + 66 + 67 + 2, 189, 66, BUTTH, + "Random", infofg, infobg, hicol, locol); + +! DCreate(&rhDial, cmapF, 5, 215, 66, 100, 0.0, 360.0, 180.0, 1.0, 5.0, + infofg, infobg, hicol, locol, "Hue", NULL); +! DCreate(&gsDial, cmapF, 72, 215, 66, 100, 0.0, 360.0, 180.0, 1.0, 5.0, + infofg, infobg, hicol, locol, "Sat.", NULL); +! DCreate(&bvDial, cmapF, 139, 215, 66, 100, 0.0, 360.0, 180.0, 1.0, 5.0, + infofg, infobg, hicol, locol, "Value", NULL); + + rhDial.drawobj = gsDial.drawobj = bvDial.drawobj = dragEditColor; +*************** +*** 359,365 **** + + srcHD.drawobj = dstHD.drawobj = whtHD.drawobj = dragHueDial; + +! DCreate(&satDial, hsvF, 100, 199, 100, 121, -100, 100, 0, 5, + infofg, infobg,hicol,locol, "Saturation", "%"); + + hueRB = RBCreate(NULL, hsvF, 7, 153, "1", +--- 359,365 ---- + + srcHD.drawobj = dstHD.drawobj = whtHD.drawobj = dragHueDial; + +! DCreate(&satDial, hsvF, 100, 199, 100, 121, -100.0, 100.0, 0.0, 1.0, 5.0, + infofg, infobg,hicol,locol, "Saturation", "%"); + + hueRB = RBCreate(NULL, hsvF, 7, 153, "1", +*************** +*** 722,728 **** + + if (whtHD.enabCB.val && whtHD.satval) hsvnonlinear++; + +! if (satDial.val != 0) hsvnonlinear++; + + /* check intensity graf */ + for (i=0; i<256 && intGraf.func[i]==i; i++); +--- 722,728 ---- + + if (whtHD.enabCB.val && whtHD.satval) hsvnonlinear++; + +! if (satDial.val != 0.0) hsvnonlinear++; + + /* check intensity graf */ + for (i=0; i<256 && intGraf.func[i]==i; i++); +*************** +*** 1291,1304 **** + rgb2hsv(rcmap[editColor], gcmap[editColor], bcmap[editColor], &h, &s, &v); + if (h<0) h = 0; + +! DSetVal(&rhDial, (int) h); +! DSetVal(&gsDial, (int) (s*100)); +! DSetVal(&bvDial, (int) (v*100)); + } + else { +! DSetVal(&rhDial, rcmap[editColor]); +! DSetVal(&gsDial, gcmap[editColor]); +! DSetVal(&bvDial, bcmap[editColor]); + } + } + +--- 1291,1304 ---- + rgb2hsv(rcmap[editColor], gcmap[editColor], bcmap[editColor], &h, &s, &v); + if (h<0) h = 0; + +! DSetVal(&rhDial, h); +! DSetVal(&gsDial, s*100); +! DSetVal(&bvDial, v*100); + } + else { +! DSetVal(&rhDial, (double)rcmap[editColor]); +! DSetVal(&gsDial, (double)gcmap[editColor]); +! DSetVal(&bvDial, (double)bcmap[editColor]); + } + } + +*************** +*** 1310,1325 **** + + if (hsvmode) { + int rv, gv, bv; +! hsv2rgb((double) rhDial.val, ((double) gsDial.val) / 100.0, +! ((double) bvDial.val) / 100.0, &rv, &gv, &bv); + rcmap[editColor] = rv; + gcmap[editColor] = gv; + bcmap[editColor] = bv; + } + else { +! rcmap[editColor] = rhDial.val; +! gcmap[editColor] = gsDial.val; +! bcmap[editColor] = bvDial.val; + } + } + +--- 1310,1324 ---- + + if (hsvmode) { + int rv, gv, bv; +! hsv2rgb(rhDial.val, gsDial.val / 100.0, bvDial.val / 100.0, &rv, &gv, &bv); + rcmap[editColor] = rv; + gcmap[editColor] = gv; + bcmap[editColor] = bv; + } + else { +! rcmap[editColor] = (int)rhDial.val; +! gcmap[editColor] = (int)gsDial.val; +! bcmap[editColor] = (int)bvDial.val; + } + } + +*************** +*** 1561,1569 **** + gsDial.title = "Green"; + bvDial.title = "Blue"; + +! DSetRange(&rhDial, 0, 255, rcmap[editColor], 16); +! DSetRange(&gsDial, 0, 255, gcmap[editColor], 16); +! DSetRange(&bvDial, 0, 255, bcmap[editColor], 16); + + XClearWindow(theDisp, rhDial.win); DRedraw(&rhDial); + XClearWindow(theDisp, gsDial.win); DRedraw(&gsDial); +--- 1560,1568 ---- + gsDial.title = "Green"; + bvDial.title = "Blue"; + +! DSetRange(&rhDial, 0.0, 255.0, (double)rcmap[editColor], 1.0, 16.0); +! DSetRange(&gsDial, 0.0, 255.0, (double)gcmap[editColor], 1.0, 16.0); +! DSetRange(&bvDial, 0.0, 255.0, (double)bcmap[editColor], 1.0, 16.0); + + XClearWindow(theDisp, rhDial.win); DRedraw(&rhDial); + XClearWindow(theDisp, gsDial.win); DRedraw(&gsDial); +*************** +*** 1581,1589 **** + &h, &s, &v); + + if (h<0.0) h = 0.0; +! DSetRange(&rhDial, 0, 360, (int) h, 5); +! DSetRange(&gsDial, 0, 100, (int) (s*100), 5); +! DSetRange(&bvDial, 0, 100, (int) (v*100), 5); + + XClearWindow(theDisp, rhDial.win); DRedraw(&rhDial); + XClearWindow(theDisp, gsDial.win); DRedraw(&gsDial); +--- 1580,1588 ---- + &h, &s, &v); + + if (h<0.0) h = 0.0; +! DSetRange(&rhDial, 0.0, 360.0, h, 1.0, 5.0); +! DSetRange(&gsDial, 0.0, 100.0, s*100, 1.0, 5.0); +! DSetRange(&bvDial, 0.0, 100.0, v*100, 1.0, 5.0); + + XClearWindow(theDisp, rhDial.win); DRedraw(&rhDial); + XClearWindow(theDisp, gsDial.win); DRedraw(&gsDial); +*************** +*** 1891,1897 **** + } + + /* apply satDial value to s */ +! s = s + ((double) satDial.val) / 100.0; + if (s<0.0) s = 0.0; + if (s>1.0) s = 1.0; + +--- 1890,1896 ---- + } + + /* apply satDial value to s */ +! s = s + satDial.val / 100.0; + if (s<0.0) s = 0.0; + if (s>1.0) s = 1.0; + +*************** +*** 2007,2013 **** + + gs->hueRBnum = RBWhich(hueRB); + +! gs->satval = satDial.val; + GetGrafState(&intGraf,&gs->istate); + GetGrafState(&rGraf, &gs->rstate); + GetGrafState(&gGraf, &gs->gstate); +--- 2006,2012 ---- + + gs->hueRBnum = RBWhich(hueRB); + +! gs->satval = (int)satDial.val; + GetGrafState(&intGraf,&gs->istate); + GetGrafState(&rGraf, &gs->rstate); + GetGrafState(&gGraf, &gs->gstate); +*************** +*** 2064,2071 **** + changed++; + } + +! if (gs->satval != satDial.val) { +! DSetVal(&satDial,gs->satval); + changed++; + } + +--- 2063,2070 ---- + changed++; + } + +! if (gs->satval != (int)satDial.val) { +! DSetVal(&satDial,(double)gs->satval); + changed++; + } + +*************** +*** 3200,3206 **** + + if (whtHD.enabCB.val && whtHD.satval) hsvmod++; + +! if (satDial.val != 0) hsvmod++; + + /* check intensity graf */ + for (i=0; i<256; i++) { +--- 3199,3205 ---- + + if (whtHD.enabCB.val && whtHD.satval) hsvmod++; + +! if (satDial.val != 0.0) hsvmod++; + + /* check intensity graf */ + for (i=0; i<256; i++) { +*************** +*** 3284,3290 **** + } + + /* apply satDial value to s */ +! s = s + satDial.val; + if (s< 0) s = 0; + if (s>100) s = 100; + +--- 3283,3289 ---- + } + + /* apply satDial value to s */ +! s = s + (int)satDial.val; + if (s< 0) s = 0; + if (s>100) s = 100; + +diff -c3 xv-3.10a/xvjpeg.c xvjpeg.c +*** xv-3.10a/xvjpeg.c Thu Jan 5 01:17:13 1995 +--- xvjpeg.c Wed May 29 11:15:02 1996 +*************** +*** 87,96 **** + + XSelectInput(theDisp, jpegW, ExposureMask | ButtonPressMask | KeyPressMask); + +! DCreate(&qDial, jpegW, 10, 10, 80, 100, 1, 100, 75, 5, + infofg, infobg, hicol, locol, "Quality", "%"); + +! DCreate(&smDial, jpegW, 120, 10, 80, 100, 0, 100, 0, 5, + infofg, infobg, hicol, locol, "Smoothing", "%"); + + BTCreate(&jbut[J_BOK], jpegW, JWIDE-180-1, JHIGH-10-BUTTH-1, 80, BUTTH, +--- 85,94 ---- + + XSelectInput(theDisp, jpegW, ExposureMask | ButtonPressMask | KeyPressMask); + +! DCreate(&qDial, jpegW, 10, 10, 80, 100, 1.0, 100.0, 75.0, 1.0, 5.0, + infofg, infobg, hicol, locol, "Quality", "%"); + +! DCreate(&smDial, jpegW, 120, 10, 80, 100, 0.0, 100.0, 0.0, 1.0, 5.0, + infofg, infobg, hicol, locol, "Smoothing", "%"); + + BTCreate(&jbut[J_BOK], jpegW, JWIDE-180-1, JHIGH-10-BUTTH-1, 80, BUTTH, +*************** +*** 759,766 **** + + + jpeg_set_defaults(&cinfo); +! jpeg_set_quality(&cinfo, qDial.val, TRUE); +! cinfo.smoothing_factor = smDial.val; + + + jpeg_start_compress(&cinfo, TRUE); +--- 757,764 ---- + + + jpeg_set_defaults(&cinfo); +! jpeg_set_quality(&cinfo, (int)qDial.val, TRUE); +! cinfo.smoothing_factor = (int)smDial.val; + + + jpeg_start_compress(&cinfo, TRUE); +*************** +*** 769,775 **** + /*** COMMENT HANDLING ***/ + + sprintf(xvcmt, "%sXV %s Quality = %d, Smoothing = %d\n", +! CREATOR_STR, REVDATE, qDial.val, smDial.val); + + if (picComments) { /* append XV comment */ + char *sp, *sp1; int done; +--- 767,773 ---- + /*** COMMENT HANDLING ***/ + + sprintf(xvcmt, "%sXV %s Quality = %d, Smoothing = %d\n", +! CREATOR_STR, REVDATE, (int)qDial.val, (int)smDial.val); + + if (picComments) { /* append XV comment */ + char *sp, *sp1; int done; +diff -c3 xv-3.10a/xvmisc.c xvmisc.c +*** xv-3.10a/xvmisc.c Fri Jan 13 16:41:34 1995 +--- xvmisc.c Tue May 28 14:57:52 1996 +*************** +*** 520,525 **** +--- 520,529 ---- + if (tiffW) XDestroyWindow(theDisp, tiffW); + #endif + ++ #ifdef HAVE_PNG ++ if (pngW) XDestroyWindow(theDisp, pngW); ++ #endif ++ + /* if NOT using stdcmap for images, free stdcmap */ + if (colorMapMode != CM_STDCMAP) { + int j; +*************** +*** 715,720 **** +--- 719,728 ---- + + #ifdef HAVE_TIFF + if (tiffW) XDefineCursor(theDisp, tiffW, otherc); ++ #endif ++ ++ #ifdef HAVE_PNG ++ if (pngW) XDefineCursor(theDisp, pngW, otherc); + #endif + } + +diff -c3 xv-3.10a/xvpopup.c xvpopup.c +*** xv-3.10a/xvpopup.c Thu Jan 19 11:09:31 1995 +--- xvpopup.c Wed May 29 11:18:43 1996 +*************** +*** 200,213 **** + + if (!padHaveDooDads) { + DCreate(&padWDial, popW, 16, puhigh-16-100-1,75,100, +! 1, 2048, pWIDE, 10, + infofg, infobg, hicol, locol, "Width", NULL); + DCreate(&padHDial, popW, 16+1+75, puhigh-16-100-1,75,100, +! 1, 2048, pHIGH, 10, + infofg, infobg, hicol, locol, "Height", NULL); + + DCreate(&padODial, popW, 16+1+75+75+9, puhigh-16-100-1,75,100, +! 0, 100, 100, 10, + infofg, infobg, hicol, locol, "Opaque", NULL); + + MBCreate(&padMthdMB, popW, 100-2+44, 10, 140, 19, NULL, +--- 200,213 ---- + + if (!padHaveDooDads) { + DCreate(&padWDial, popW, 16, puhigh-16-100-1,75,100, +! 1.0, 2048.0, (double)pWIDE, 1.0, 10.0, + infofg, infobg, hicol, locol, "Width", NULL); + DCreate(&padHDial, popW, 16+1+75, puhigh-16-100-1,75,100, +! 1.0, 2048.0, (double)pHIGH, 1.0, 10.0, + infofg, infobg, hicol, locol, "Height", NULL); + + DCreate(&padODial, popW, 16+1+75+75+9, puhigh-16-100-1,75,100, +! 0.0, 100.0, 100.0, 1.0, 10.0, + infofg, infobg, hicol, locol, "Opaque", NULL); + + MBCreate(&padMthdMB, popW, 100-2+44, 10, 140, 19, NULL, +*************** +*** 258,266 **** + else if (poptyp == ISPAD) { + BTSetActive(&bts[0], (int) strlen(gsBuf)); + i = pWIDE * 3; RANGE(i,2048,9999); +! DSetRange(&padWDial, 1, i, padWDial.val, 10); + i = pHIGH * 3; RANGE(i,2048,9999); +! DSetRange(&padHDial, 1, i, padHDial.val, 10); + + DSetActive(&padWDial, (padMode!=PAD_LOAD)); /* DSetRange activates dial */ + DSetActive(&padHDial, (padMode!=PAD_LOAD)); +--- 258,266 ---- + else if (poptyp == ISPAD) { + BTSetActive(&bts[0], (int) strlen(gsBuf)); + i = pWIDE * 3; RANGE(i,2048,9999); +! DSetRange(&padWDial, 1.0, (double)i, padWDial.val, 1.0, 10.0); + i = pHIGH * 3; RANGE(i,2048,9999); +! DSetRange(&padHDial, 1.0, (double)i, padHDial.val, 1.0, 10.0); + + DSetActive(&padWDial, (padMode!=PAD_LOAD)); /* DSetRange activates dial */ + DSetActive(&padHDial, (padMode!=PAD_LOAD)); +*************** +*** 465,473 **** + changedGSBuf(); /* careful! popW doesn't exist yet! */ + + if (padHaveDooDads) { +! oldW = padWDial.val; +! oldH = padHDial.val; +! oldO = padODial.val; + } + else { oldW = pWIDE; oldH = pHIGH; oldO = 100; } + +--- 465,473 ---- + changedGSBuf(); /* careful! popW doesn't exist yet! */ + + if (padHaveDooDads) { +! oldW = (int)padWDial.val; +! oldH = (int)padHDial.val; +! oldO = (int)padODial.val; + } + else { oldW = pWIDE; oldH = pHIGH; oldO = 100; } + +*************** +*** 486,494 **** + } + + if (rv == 1) { /* cancelled: restore normal values */ +! DSetVal(&padWDial, oldW); +! DSetVal(&padHDial, oldH); +! DSetVal(&padODial, oldO); + } + + XUnmapWindow(theDisp, padWDial.win); +--- 486,494 ---- + } + + if (rv == 1) { /* cancelled: restore normal values */ +! DSetVal(&padWDial, (double)oldW); +! DSetVal(&padHDial, (double)oldH); +! DSetVal(&padODial, (double)oldO); + } + + XUnmapWindow(theDisp, padWDial.win); +*************** +*** 498,506 **** + /* load up return values */ + *pMode = padMode; + *pStr = padBuf; +! *pWide = padWDial.val; +! *pHigh = padHDial.val; +! *pOpaque = padODial.val; + *pOmode = padOMode; + + return rv; +--- 498,506 ---- + /* load up return values */ + *pMode = padMode; + *pStr = padBuf; +! *pWide = (int)padWDial.val; +! *pHigh = (int)padHDial.val; +! *pOpaque = (int)padODial.val; + *pOmode = padOMode; + + return rv; +*************** +*** 972,979 **** + else if (popUp == ISPAD) { + if (PTINRECT(x, y, padDButt.x, padDButt.y, padDButt.w, padDButt.h)) { + if (BTTrack(&padDButt)) { +! DSetVal(&padWDial, pWIDE); +! DSetVal(&padHDial, pHIGH); + } + } + +--- 970,977 ---- + else if (popUp == ISPAD) { + if (PTINRECT(x, y, padDButt.x, padDButt.y, padDButt.w, padDButt.h)) { + if (BTTrack(&padDButt)) { +! DSetVal(&padWDial, (double)pWIDE); +! DSetVal(&padHDial, (double)pHIGH); + } + } + +diff -c3 xv-3.10a/xvps.c xvps.c +*** xv-3.10a/xvps.c Thu Dec 22 15:34:42 1994 +--- xvps.c Wed May 29 11:04:28 1996 +*************** +*** 139,147 **** + CBCreate(&encapsCB, psW, 240, 7, "preview", infofg, infobg, hicol, locol); + CBCreate(&pscompCB, psW, 331, 7, "compress", infofg, infobg, hicol, locol); + +! DCreate(&xsDial, psW, 240, 30, 80, 100, 10, 800, 100, 5, + infofg, infobg, hicol, locol, "Width", "%"); +! DCreate(&ysDial, psW, 331, 30, 80, 100, 10, 800, 100, 5, + infofg, infobg, hicol, locol, "Height", "%"); + xsDial.drawobj = changedScale; + ysDial.drawobj = changedScale; +--- 139,147 ---- + CBCreate(&encapsCB, psW, 240, 7, "preview", infofg, infobg, hicol, locol); + CBCreate(&pscompCB, psW, 331, 7, "compress", infofg, infobg, hicol, locol); + +! DCreate(&xsDial, psW, 240, 30, 80, 100, 10.0, 800.0, 100.0, 0.5, 5.0, + infofg, infobg, hicol, locol, "Width", "%"); +! DCreate(&ysDial, psW, 331, 30, 80, 100, 10.0, 800.0, 100.0, 0.5, 5.0, + infofg, infobg, hicol, locol, "Height", "%"); + xsDial.drawobj = changedScale; + ysDial.drawobj = changedScale; +*************** +*** 236,245 **** + + if (rd_int("psres")) { /* xv.psres: default paper resolution */ + if (def_int >= 10 && def_int <= 720) { +! int i = (int) ((PIX2INCH * 100) / def_int); + +! DSetVal(&xsDial, i); +! DSetVal(&ysDial, i); + } + } + +--- 236,245 ---- + + if (rd_int("psres")) { /* xv.psres: default paper resolution */ + if (def_int >= 10 && def_int <= 720) { +! double v = (PIX2INCH * 100) / def_int; + +! DSetVal(&xsDial, v); +! DSetVal(&ysDial, v); + } + } + +*************** +*** 836,842 **** + if (scx < scy) { sz_iny = h * scx; } + else { sz_inx = w * scy; } + +! DSetVal(&xsDial, (int) ((100 * (sz_inx * PIX2INCH) / w) + .5)); + DSetVal(&ysDial, xsDial.val); + + sz_inx = (double) w / PIX2INCH * (xsDial.val / 100.0); +--- 836,842 ---- + if (scx < scy) { sz_iny = h * scx; } + else { sz_inx = w * scy; } + +! DSetVal(&xsDial, 100 * (sz_inx * PIX2INCH) / w); + DSetVal(&ysDial, xsDial.val); + + sz_inx = (double) w / PIX2INCH * (xsDial.val / 100.0); diff --git a/graphics/xv/patches/patch-png2-Imakefile b/graphics/xv/patches/patch-png2-Imakefile new file mode 100644 index 00000000000..940be820add --- /dev/null +++ b/graphics/xv/patches/patch-png2-Imakefile @@ -0,0 +1,96 @@ +$NetBSD: patch-png2-Imakefile,v 1.1 1999/06/13 16:23:54 hubertf Exp $ + +This patch is based on +http://www.mit.edu/afs/athena/contrib/graphics/src/xv/patches/png/xvpng.diff +It was edited to fit into the NetBSD Packages Collection! - HF + +--------------------------------------------------------------------------- + + +--- Imakefile.orig Sun Jun 13 04:15:05 1999 ++++ Imakefile Sun Jun 13 04:31:20 1999 +@@ -23,6 +23,9 @@ + #define HavePDS + + ++#define UseInstalledPng ++#define UseInstalledZlib ++ + /* + * if you are running on a SysV-based machine, such as HP, Silicon Graphics, + * etc, uncomment one of the following lines to get you *most* of the way +@@ -149,6 +152,35 @@ + PDS = -DDOPDS + #endif + ++/* ++### ++### if, for whatever reason, you're unable to get the PNG library to compile ++### on your machine, *COMMENT OUT* the following lines ++### ++*/ ++#ifdef UseInstalledPng ++PNG = -DDOPNG ++PNGDIR = ${LOCALBASE} ++PNGINC = -I$(PNGDIR)/include ++PNGLIB = -L$(PNGDIR)/lib -lpng -lz ++LIBPNG = ${PNGLIB} ++PNGINCLUDE = ${PNGINC} ++#endif ++ ++/* ++### ++### if, for whatever reason, you're unable to get the PNG library to compile ++### on your machine, *COMMENT OUT* the following lines ++### ++*/ ++#ifdef UseInstalledZlib ++ZLIBDIR = /usr ++ZLIBINC = -I$(ZLIBDIR)/include ++ZLIBLIB = -L$(ZLIBDIR)/lib -lz ++LIBZLIB = ${ZLIB} ++ZLIBINCLUDE = ${ZLIBINC} ++#endif ++ + #if defined(SCOArchitecture) + SCO= -Dsco -DPOSIX -DNO_RANDOM + SYS_LIBRARIES= -lm -lc -lx +@@ -157,14 +189,14 @@ + #endif + + +-DEPLIBS = $(DEPLIBJPEG) $(DEPLIBTIFF) +-LOCAL_LIBRARIES = $(XLIB) $(LIBJPEG) $(LIBTIFF) ++DEPLIBS = $(DEPLIBJPEG) $(DEPLIBTIFF) $(DEPLIBPNG) $(DEPLIBZLIB) ++LOCAL_LIBRARIES = $(XLIB) $(LIBJPEG) $(LIBTIFF) $(LIBPNG) $(LIBZLIB) + + DEFINES= $(SCO) $(UNIX) $(NODIRENT) $(VPRINTF) $(TIMERS) \ +- $(HPUX7) $(JPEG) $(TIFF) $(PDS) $(DXWM) $(RAND) \ ++ $(HPUX7) $(JPEG) $(TIFF) $(PNG) $(PDS) $(DXWM) $(RAND) \ + $(BACKING_STORE) $(BSDTYPES) $(SGI) + +-INCLUDES = $(JPEGINCLUDE) $(TIFFINCLUDE) ++INCLUDES = $(JPEGINCLUDE) $(TIFFINCLUDE) $(PNGINCLUDE) $(ZLIBINCLUDE) + + SRCS1 = xv.c xvevent.c xvroot.c xvmisc.c xvimage.c xvcolor.c xvsmooth.c \ + xv24to8.c xvgif.c xvpm.c xvinfo.c xvctrl.c xvscrl.c xvalg.c \ +@@ -172,7 +204,8 @@ + xvdial.c xvgraf.c xvsunras.c xvjpeg.c xvps.c xvpopup.c xvdflt.c \ + xvtiff.c xvtiffwr.c xvpds.c xvrle.c xviris.c xvgrab.c vprintf.c \ + xvbrowse.c xvtext.c xvpcx.c xviff.c xvtarga.c xvxpm.c xvcut.c \ +- xvxwd.c xvfits.c xvmag.c xvmaki.c xvpic.c xvpi.c xvpic2.c xvpcd.c ++ xvxwd.c xvfits.c xvmag.c xvmaki.c xvpic.c xvpi.c xvpic2.c xvpcd.c \ ++ xvpng.c + + OBJS1 = xv.o xvevent.o xvroot.o xvmisc.o xvimage.o xvcolor.o xvsmooth.o \ + xv24to8.o xvgif.o xvpm.o xvinfo.o xvctrl.o xvscrl.o xvalg.o \ +@@ -180,7 +213,8 @@ + xvdial.o xvgraf.o xvsunras.o xvjpeg.o xvps.o xvpopup.o xvdflt.o \ + xvtiff.o xvtiffwr.o xvpds.o xvrle.o xviris.o xvgrab.o vprintf.o \ + xvbrowse.o xvtext.o xvpcx.o xviff.o xvtarga.o xvxpm.o xvcut.o \ +- xvxwd.o xvfits.o xvmag.o xvmaki.o xvpic.o xvpi.o xvpic2.o xvpcd.o ++ xvxwd.o xvfits.o xvmag.o xvmaki.o xvpic.o xvpi.o xvpic2.o xvpcd.o \ ++ xvpng.o + + SRCS2= bggen.c + OBJS2= bggen.o diff --git a/graphics/xv/patches/patch-png2-Makefile b/graphics/xv/patches/patch-png2-Makefile new file mode 100644 index 00000000000..16849979b9e --- /dev/null +++ b/graphics/xv/patches/patch-png2-Makefile @@ -0,0 +1,67 @@ +$NetBSD: patch-png2-Makefile,v 1.1 1999/06/13 16:23:54 hubertf Exp $ + +This patch is based on +http://www.mit.edu/afs/athena/contrib/graphics/src/xv/patches/png/xvpng.diff +It was edited to fit into the NetBSD Packages Collection! - HF + +--------------------------------------------------------------------------- + + +--- Makefile.patched Sun Jun 13 02:40:36 1999 ++++ Makefile Sun Jun 13 02:44:11 1999 +@@ -54,6 +54,24 @@ + $(JPEGLIB): $(JPEGDIR)/jconfig.h + cd $(JPEGDIR) ; make + ++### ++### if, for whatever reason, you're unable to get the PNG library to compile ++### on your machine, *COMMENT OUT* the following lines ++### ++PNG = -DDOPNG ++PNGDIR = ${LOCALBASE} ++PNGINC = -I$(PNGDIR)/include ++PNGLIB = -L$(PNGDIR)/lib -lpng ++ ++ ++### ++### if, for whatever reason, you're unable to get the PNG library to compile ++### on your machine, *COMMENT OUT* the following lines ++### ++ZLIBDIR = /usr ++ZLIBINC = -I$(ZLIBDIR)/include ++ZLIBLIB = -L$(ZLIBDIR)/lib -lz ++ + + ### + ### if, for whatever reason, you're unable to get the TIFF library to compile +@@ -188,9 +206,9 @@ + + CFLAGS = $(CCOPTS) $(JPEG) $(JPEGINC) $(TIFF) $(TIFFINC) $(PDS) \ + $(NODIRENT) $(VPRINTF) $(TIMERS) $(UNIX) $(BSDTYPES) $(RAND) \ +- $(DXWM) $(MCHN) ++ $(DXWM) $(MCHN) $(PNG) $(PNGINC) $(ZLIBINC) + +-LIBS = -lX11 $(JPEGLIB) $(TIFFLIB) -lm ++LIBS = -lX11 $(JPEGLIB) $(TIFFLIB) $(PNGLIB) $(ZLIBLIB) -lm + + OBJS = xv.o xvevent.o xvroot.o xvmisc.o xvimage.o xvcolor.o xvsmooth.o \ + xv24to8.o xvgif.o xvpm.o xvinfo.o xvctrl.o xvscrl.o xvalg.o \ +@@ -198,7 +216,8 @@ + xvdial.o xvgraf.o xvsunras.o xvjpeg.o xvps.o xvpopup.o xvdflt.o \ + xvtiff.o xvtiffwr.o xvpds.o xvrle.o xviris.o xvgrab.o vprintf.o \ + xvbrowse.o xvtext.o xvpcx.o xviff.o xvtarga.o xvxpm.o xvcut.o \ +- xvxwd.o xvfits.o xvmag.o xvmaki.o xvpic.o xvpi.o xvpic2.o xcpcd.o ++ xvxwd.o xvfits.o xvmag.o xvmaki.o xvpic.o xvpi.o xvpic2.o xcpcd.o \ ++ xvpng.o + + MISC = README INSTALL CHANGELOG IDEAS + +@@ -269,7 +288,7 @@ + xvbrowse.o: bits/br_pcx bits/br_jfif bits/br_tiff bits/br_pds + xvbrowse.o: bits/br_ps bits/br_iff bits/br_targa bits/br_xpm + xvbrowse.o: bits/br_trash bits/fcurs bits/fccurs bits/fdcurs bits/fcursm +-xvbrowse.o: bits/br_xwd ++xvbrowse.o: bits/br_xwd bits/br_png + + xvbutt.o: bits/cboard50 bits/rb_frame bits/rb_frame1 bits/rb_top + xvbutt.o: bits/rb_bot bits/rb_dtop bits/rb_dbot bits/rb_body diff --git a/graphics/xv/patches/patch-png2-Makefile.std b/graphics/xv/patches/patch-png2-Makefile.std new file mode 100644 index 00000000000..b3a37326e53 --- /dev/null +++ b/graphics/xv/patches/patch-png2-Makefile.std @@ -0,0 +1,68 @@ +$NetBSD: patch-png2-Makefile.std,v 1.1 1999/06/13 16:23:54 hubertf Exp $ + +This patch is based on +http://www.mit.edu/afs/athena/contrib/graphics/src/xv/patches/png/xvpng.diff +It was edited to fit into the NetBSD Packages Collection! - HF + +--------------------------------------------------------------------------- + + +--- Makefile.std.patched Sun Jun 13 03:16:57 1999 ++++ Makefile.std Sun Jun 13 03:21:41 1999 +@@ -56,6 +56,25 @@ + + + ### ++### if, for whatever reason, you're unable to get the PNG library to compile ++### on your machine, *COMMENT OUT* the following lines ++### ++PNG = -DDOPNG ++PNGDIR = ${LOCALBASE} ++PNGINC = -I$(PNGDIR)/include ++PNGLIB = -L$(PNGDIR)/lib -lpng ++ ++ ++### ++### if, for whatever reason, you're unable to get the PNG library to compile ++### on your machine, *COMMENT OUT* the following lines ++### ++ZLIBDIR = /usr ++ZLIBINC = -I$(ZLIBDIR)/include ++ZLIBLIB = -L$(ZLIBDIR)/lib -lz ++ ++ ++### + ### if, for whatever reason, you're unable to get the TIFF library to compile + ### on your machine, *COMMENT OUT* the following lines + ### +@@ -188,9 +207,9 @@ + + CFLAGS = $(CCOPTS) $(JPEG) $(JPEGINC) $(TIFF) $(TIFFINC) $(PDS) \ + $(NODIRENT) $(VPRINTF) $(TIMERS) $(UNIX) $(BSDTYPES) $(RAND) \ +- $(DXWM) $(MCHN) ++ $(DXWM) $(MCHN) $(PNG) $(PNGINC) $(ZLIBINC) + +-LIBS = -lX11 $(JPEGLIB) $(TIFFLIB) -lm ++LIBS = -lX11 $(JPEGLIB) $(TIFFLIB) $(PNGLIB) $(ZLIBLIB) -lm + + OBJS = xv.o xvevent.o xvroot.o xvmisc.o xvimage.o xvcolor.o xvsmooth.o \ + xv24to8.o xvgif.o xvpm.o xvinfo.o xvctrl.o xvscrl.o xvalg.o \ +@@ -198,7 +217,8 @@ + xvdial.o xvgraf.o xvsunras.o xvjpeg.o xvps.o xvpopup.o xvdflt.o \ + xvtiff.o xvtiffwr.o xvpds.o xvrle.o xviris.o xvgrab.o vprintf.o \ + xvbrowse.o xvtext.o xvpcx.o xviff.o xvtarga.o xvxpm.o xvcut.o \ +- xvxwd.o xvfits.o xvmag.o xvmaki.o xvpic.o xvpi.o xvpic2.o xcpcd.o ++ xvxwd.o xvfits.o xvmag.o xvmaki.o xvpic.o xvpi.o xvpic2.o xcpcd.o \ ++ xvpng.o + + MISC = README INSTALL CHANGELOG IDEAS + +@@ -269,7 +289,7 @@ + xvbrowse.o: bits/br_pcx bits/br_jfif bits/br_tiff bits/br_pds + xvbrowse.o: bits/br_ps bits/br_iff bits/br_targa bits/br_xpm + xvbrowse.o: bits/br_trash bits/fcurs bits/fccurs bits/fdcurs bits/fcursm +-xvbrowse.o: bits/br_xwd ++xvbrowse.o: bits/br_xwd bits/br_png + + xvbutt.o: bits/cboard50 bits/rb_frame bits/rb_frame1 bits/rb_top + xvbutt.o: bits/rb_bot bits/rb_dtop bits/rb_dbot bits/rb_body diff --git a/graphics/xv/patches/patch-png2-xv.c b/graphics/xv/patches/patch-png2-xv.c new file mode 100644 index 00000000000..8f010e153f7 --- /dev/null +++ b/graphics/xv/patches/patch-png2-xv.c @@ -0,0 +1,57 @@ +$NetBSD: patch-png2-xv.c,v 1.1 1999/06/13 16:23:54 hubertf Exp $ + +This patch is based on +http://www.mit.edu/afs/athena/contrib/graphics/src/xv/patches/png/xvpng.diff +It was edited to fit into the NetBSD Packages Collection! - HF + +--------------------------------------------------------------------------- + + +--- xv.c.patched Sun Jun 13 02:45:51 1999 ++++ xv.c Sun Jun 13 02:49:26 1999 +@@ -279,6 +279,10 @@ + + pcdW = (Window) NULL; pcdUp = 0; + ++#ifdef HAVE_PNG ++ pngW = (Window) NULL; pngUp = 0; ++#endif ++ + imap = ctrlmap = gmap = browmap = cmtmap = 0; + + ch_offx = ch_offy = p_offx = p_offy = 0; +@@ -786,6 +790,11 @@ + + CreatePCDW(); + XSetTransientForHint(theDisp, pcdW, dirW); ++ ++#ifdef HAVE_PNG ++ CreatePNGW(); ++ XSetTransientForHint(theDisp, pngW, dirW); ++#endif + + LoadFishCursors(); + SetCursors(-1); +@@ -2649,6 +2658,11 @@ + (magicno[0]=='I' && magicno[1]=='I')) rv = RFT_TIFF; + #endif + ++#ifdef HAVE_PNG ++ else if (magicno[0]==0x89 && magicno[1]=='P' && ++ magicno[2]=='N' && magicno[3]=='G') rv = RFT_PNG; ++#endif ++ + #ifdef HAVE_PDS + else if (strncmp((char *) magicno, "NJPL1I00", (size_t) 8)==0 || + strncmp((char *) magicno+2,"NJPL1I", (size_t) 6)==0 || +@@ -2740,6 +2754,10 @@ + + #ifdef HAVE_TIFF + case RFT_TIFF: rv = LoadTIFF (fname, pinfo); break; ++#endif ++ ++#ifdef HAVE_PNG ++ case RFT_PNG: rv = LoadPNG (fname, pinfo); break; + #endif + + #ifdef HAVE_PDS diff --git a/graphics/xv/patches/patch-png2-xv.h b/graphics/xv/patches/patch-png2-xv.h new file mode 100644 index 00000000000..f21bc711095 --- /dev/null +++ b/graphics/xv/patches/patch-png2-xv.h @@ -0,0 +1,162 @@ +$NetBSD: patch-png2-xv.h,v 1.1 1999/06/13 16:23:54 hubertf Exp $ + +This patch is based on +http://www.mit.edu/afs/athena/contrib/graphics/src/xv/patches/png/xvpng.diff +It was edited to fit into the NetBSD Packages Collection! - HF + +--------------------------------------------------------------------------- + + +--- xv.h.orig Sun Jun 13 03:41:34 1999 ++++ xv.h Sun Jun 13 03:53:34 1999 +@@ -8,8 +8,8 @@ + #include "config.h" + + +-#define REVDATE "Version 3.10a Rev: 12/29/94" +-#define VERSTR "3.10a" ++#define REVDATE "Version 3.10a Rev: 12/29/94 (PNG patch 1.2)" ++#define VERSTR "3.10a(PNG)" + + /* + * uncomment the following, and modify for your site, but only if you've +@@ -343,6 +343,10 @@ + #define HAVE_TIFF + #endif + ++#ifdef DOPNG ++#define HAVE_PNG ++#endif ++ + #ifdef DOPDS + #define HAVE_PDS + #endif +@@ -478,31 +482,38 @@ + #define MACBSIZE 128 + #endif + ++#ifdef HAVE_PNG ++#define F_PNGINC 1 ++#else ++#define F_PNGINC 0 ++#endif ++ + #define F_GIF 0 + #define F_JPEG ( 0 + F_JPGINC) + #define F_TIFF ( 0 + F_JPGINC + F_TIFINC) +-#define F_PS ( 1 + F_JPGINC + F_TIFINC) +-#define F_PBMRAW ( 2 + F_JPGINC + F_TIFINC) +-#define F_PBMASCII ( 3 + F_JPGINC + F_TIFINC) +-#define F_XBM ( 4 + F_JPGINC + F_TIFINC) +-#define F_XPM ( 5 + F_JPGINC + F_TIFINC) +-#define F_BMP ( 6 + F_JPGINC + F_TIFINC) +-#define F_SUNRAS ( 7 + F_JPGINC + F_TIFINC) +-#define F_IRIS ( 8 + F_JPGINC + F_TIFINC) +-#define F_TARGA ( 9 + F_JPGINC + F_TIFINC) +-#define F_FITS (10 + F_JPGINC + F_TIFINC) +-#define F_PM (11 + F_JPGINC + F_TIFINC) +-#define F_MAG (12 + F_JPGINC + F_TIFINC) +-#define F_PIC (13 + F_JPGINC + F_TIFINC) +-#define F_MAKI (14 + F_JPGINC + F_TIFINC) +-#define F_PI (15 + F_JPGINC + F_TIFINC) +-#define F_PIC2_SS (16 + F_JPGINC + F_TIFINC) +-#define F_PIC2_SF (17 + F_JPGINC + F_TIFINC) +-#define F_PIC2_BM (18 + F_JPGINC + F_TIFINC) +-#define F_PIC2_BI (19 + F_JPGINC + F_TIFINC) /* ----- */ +-#define F_DELIM1 (20 + F_JPGINC + F_TIFINC) +-#define F_FILELIST (21 + F_JPGINC + F_TIFINC) +-#define F_MAXFMTS (22 + F_JPGINC + F_TIFINC) /* 16, normally */ ++#define F_PNG ( 0 + F_JPGINC + F_TIFINC + F_PNGINC) ++#define F_PS ( 1 + F_JPGINC + F_TIFINC + F_PNGINC) ++#define F_PBMRAW ( 2 + F_JPGINC + F_TIFINC + F_PNGINC) ++#define F_PBMASCII ( 3 + F_JPGINC + F_TIFINC + F_PNGINC) ++#define F_XBM ( 4 + F_JPGINC + F_TIFINC + F_PNGINC) ++#define F_XPM ( 5 + F_JPGINC + F_TIFINC + F_PNGINC) ++#define F_BMP ( 6 + F_JPGINC + F_TIFINC + F_PNGINC) ++#define F_SUNRAS ( 7 + F_JPGINC + F_TIFINC + F_PNGINC) ++#define F_IRIS ( 8 + F_JPGINC + F_TIFINC + F_PNGINC) ++#define F_TARGA ( 9 + F_JPGINC + F_TIFINC + F_PNGINC) ++#define F_FITS (10 + F_JPGINC + F_TIFINC + F_PNGINC) ++#define F_PM (11 + F_JPGINC + F_TIFINC + F_PNGINC) ++#define F_MAG (12 + F_JPGINC + F_TIFINC + F_PNGINC) ++#define F_PIC (13 + F_JPGINC + F_TIFINC + F_PNGINC) ++#define F_MAKI (14 + F_JPGINC + F_TIFINC + F_PNGINC) ++#define F_PI (15 + F_JPGINC + F_TIFINC + F_PNGINC) ++#define F_PIC2_SS (16 + F_JPGINC + F_TIFINC + F_PNGINC) ++#define F_PIC2_SF (17 + F_JPGINC + F_TIFINC + F_PNGINC) ++#define F_PIC2_BM (18 + F_JPGINC + F_TIFINC + F_PNGINC) ++#define F_PIC2_BI (19 + F_JPGINC + F_TIFINC + F_PNGINC) ++#define F_DELIM1 (20 + F_JPGINC + F_TIFINC + F_PNGINC) /* ----- */ ++#define F_FILELIST (21 + F_JPGINC + F_TIFINC + F_PNGINC) ++#define F_MAXFMTS (22 + F_JPGINC + F_TIFINC + F_PNGINC) /* 25, normally */ + + + +@@ -538,6 +549,7 @@ + #define RFT_PI 23 + #define RFT_PIC2 24 + #define RFT_PCD 25 ++#define RFT_PNG 26 /* HF: was 20 */ + + /* definitions for page up/down, arrow up/down list control */ + #define LS_PAGEUP 0 +@@ -798,9 +810,10 @@ + typedef struct { Window win; /* window ID */ + int x,y,w,h; /* window coords in parent */ + int active; /* true if can do anything*/ +- int min,max; /* min/max values 'pos' can take */ +- int val; /* 'value' of dial */ +- int page; /* amt val change on pageup/pagedown */ ++ double min,max; /* min/max values 'pos' can take */ ++ double val; /* 'value' of dial */ ++ double inc; /* amt val change on up/down */ ++ double page; /* amt val change on pageup/pagedown */ + char *title; /* title for this guage */ + char *units; /* string appended to value */ + u_long fg,bg,hi,lo; /* colors */ +@@ -1192,6 +1205,13 @@ + WHERE Window pcdW; + WHERE int pcdUp; /* is pcdW mapped, or what? */ + ++#ifdef HAVE_PNG ++/* stuff used for 'png' box */ ++WHERE Window pngW; ++WHERE int pngUp; /* is pngW mapped, or what? */ ++#endif ++ ++ + #undef WHERE + + +@@ -1506,12 +1526,12 @@ + + + /*************************** XVDIAL.C ***************************/ +-void DCreate PARM((DIAL *, Window, int, int, int, int, int, +- int, int, int, u_long, u_long, u_long, +- u_long, char *, char *)); ++void DCreate PARM((DIAL *, Window, int, int, int, int, double, ++ double, double, double, double, u_long, ++ u_long, u_long, u_long, char *, char *)); + +-void DSetRange PARM((DIAL *, int, int, int, int)); +-void DSetVal PARM((DIAL *, int)); ++void DSetRange PARM((DIAL *, double,double,double,double,double)); ++void DSetVal PARM((DIAL *, double)); + void DSetActive PARM((DIAL *, int)); + void DRedraw PARM((DIAL *)); + int DTrack PARM((DIAL *, int, int)); +@@ -1653,6 +1673,13 @@ + void TIFFDialog PARM((int)); + int TIFFCheckEvent PARM((XEvent *)); + void TIFFSaveParams PARM((char *, int)); ++ ++/**************************** XVPNG.C ***************************/ ++int LoadPNG PARM((char *, PICINFO *)); ++void CreatePNGW PARM((void)); ++void PNGDialog PARM((int)); ++int PNGCheckEvent PARM((XEvent *)); ++void PNGSaveParams PARM((char *, int)); + + /**************************** XVPDS.C ***************************/ + int LoadPDS PARM((char *, PICINFO *)); diff --git a/graphics/xv/patches/patch-png2-xvbrowse.c b/graphics/xv/patches/patch-png2-xvbrowse.c new file mode 100644 index 00000000000..10d50e8aba2 --- /dev/null +++ b/graphics/xv/patches/patch-png2-xvbrowse.c @@ -0,0 +1,53 @@ +$NetBSD: patch-png2-xvbrowse.c,v 1.1 1999/06/13 16:23:54 hubertf Exp $ + +This patch is based on +http://www.mit.edu/afs/athena/contrib/graphics/src/xv/patches/png/xvpng.diff +It was edited to fit into the NetBSD Packages Collection! - HF + +--------------------------------------------------------------------------- + + +--- xvbrowse.c.patched Sun Jun 13 03:22:27 1999 ++++ xvbrowse.c Sun Jun 13 03:25:38 1999 +@@ -61,6 +61,7 @@ + #include "bits/br_pic" + #include "bits/br_pi" + #include "bits/br_pic2" ++#include "bits/br_png" + + #include "bits/br_trash" + #include "bits/fcurs" +@@ -106,7 +107,8 @@ + #define BF_PI 31 + #define BF_PIC2 32 + #define BF_PCD 33 +-#define BF_MAX 34 /* # of built-in icons */ ++#define BF_PNG 34 ++#define BF_MAX 35 /* # of built-in icons */ + + #define ISLOADABLE(ftyp) (ftyp!=BF_DIR && ftyp!=BF_CHR && ftyp!=BF_BLK && \ + ftyp!=BF_SOCK && ftyp!=BF_FIFO) +@@ -543,6 +545,7 @@ + bfIcons[BF_PI] = MakePix1(br->win,br_pi_bits,br_pi_width,br_pi_height); + bfIcons[BF_PIC2]=MakePix1(br->win,br_pic2_bits,br_pic2_width,br_pic2_height); + bfIcons[BF_PCD] = MakePix1(br->win,br_pcd_bits,br_pcd_width,br_pcd_height); ++ bfIcons[BF_PNG]=MakePix1(br->win,br_png_bits,br_png_width,br_png_height); + + + /* check that they all got built */ +@@ -3045,6 +3048,7 @@ + case RFT_PI: bf->ftype = BF_PI; break; + case RFT_PIC2: bf->ftype = BF_PIC2; break; + case RFT_PCD: bf->ftype = BF_PCD; break; ++ case RFT_PNG: bf->ftype = BF_PNG; break; + } + } + } +@@ -3612,6 +3616,7 @@ + case RFT_PI: strcat(str,"PI file"); break; + case RFT_PIC2: strcat(str,"PIC2 file"); break; + case RFT_PCD: strcat(str,"PhotoCD file"); break; ++ case RFT_PNG: strcat(str,"PNG file"); break; + default: strcat(str,"file of unknown type"); break; + } + diff --git a/graphics/xv/patches/patch-png2-xvdir.c b/graphics/xv/patches/patch-png2-xvdir.c new file mode 100644 index 00000000000..9e37d81a0ff --- /dev/null +++ b/graphics/xv/patches/patch-png2-xvdir.c @@ -0,0 +1,83 @@ +$NetBSD: patch-png2-xvdir.c,v 1.1 1999/06/13 16:23:54 hubertf Exp $ + +This patch is based on +http://www.mit.edu/afs/athena/contrib/graphics/src/xv/patches/png/xvpng.diff +It was edited to fit into the NetBSD Packages Collection! - HF + +--------------------------------------------------------------------------- + + +--- xvdir.c.patched Sun Jun 13 03:27:12 1999 ++++ xvdir.c Sun Jun 13 03:33:01 1999 +@@ -62,6 +62,9 @@ + #ifdef HAVE_TIFF + "TIFF", + #endif ++#ifdef HAVE_PNG ++ "PNG", ++#endif + "PostScript", + "PBM/PGM/PPM (raw)", + "PBM/PGM/PPM (ascii)", +@@ -1123,6 +1126,14 @@ + } + #endif + ++#ifdef HAVE_PNG ++ else if (fmt == F_PNG) { /* PNG */ ++ PNGSaveParams(fullname, col); ++ PNGDialog(1); /* open PNG Dialog box */ ++ dbut[S_BOK].lit = 0; BTRedraw(&dbut[S_BOK]); ++ return 0; /* always 'succeeds' */ ++ } ++#endif + + + +@@ -1181,6 +1192,7 @@ + case F_FITS: + rv = WriteFITS (fp, thepic, ptype, w, h, rp, gp, bp, nc, col, + picComments); ++ break; + case F_MAG: + rv = WriteMAG (fp, thepic, ptype, w, h, rp, gp, bp, nc, col, + picComments); break; +@@ -1415,19 +1427,26 @@ + (strcmp(lowsuf,"eps" )==0) || + (strcmp(lowsuf,"rgb" )==0) || + (strcmp(lowsuf,"tga" )==0) || +- (strcmp(lowsuf,"xpm" )==0) || + (strcmp(lowsuf,"fits")==0) || + (strcmp(lowsuf,"fts" )==0) || ++#ifdef HAVE_JPEG + (strcmp(lowsuf,"jpg" )==0) || + (strcmp(lowsuf,"jpeg")==0) || + (strcmp(lowsuf,"jfif")==0) || ++#endif ++#ifdef HAVE_TIFF + (strcmp(lowsuf,"tif" )==0) || + (strcmp(lowsuf,"tiff")==0) || ++#endif ++#ifdef HAVE_PNG ++ (strcmp(lowsuf,"png" )==0) || ++#endif ++ (strcmp(lowsuf,"xpm" )==0) || + (strcmp(lowsuf,"mag" )==0) || + (strcmp(lowsuf,"pic" )==0) || + (strcmp(lowsuf,"mki" )==0) || + (strcmp(lowsuf,"pi" )==0) || +- (strcmp(lowsuf,"p2" )==0)){ ++ (strcmp(lowsuf,"p2" )==0)) { + + /* found one. set lowsuf = to the new suffix, and tack on to filename */ + +@@ -1462,6 +1481,9 @@ + + #ifdef HAVE_TIFF + case F_TIFF: strcpy(lowsuf,"tif"); break; ++#endif ++#ifdef HAVE_PNG ++ case F_PNG: strcpy(lowsuf,"png"); break; + #endif + case F_MAG: strcpy(lowsuf,"mag"); break; + case F_PIC: strcpy(lowsuf,"pic"); break; diff --git a/graphics/xv/patches/patch-png2-xvevent.c b/graphics/xv/patches/patch-png2-xvevent.c new file mode 100644 index 00000000000..b16ea1c65a9 --- /dev/null +++ b/graphics/xv/patches/patch-png2-xvevent.c @@ -0,0 +1,97 @@ +$NetBSD: patch-png2-xvevent.c,v 1.1 1999/06/13 16:23:54 hubertf Exp $ + +This patch is based on +http://www.mit.edu/afs/athena/contrib/graphics/src/xv/patches/png/xvpng.diff +It was edited to fit into the NetBSD Packages Collection! - HF + +--------------------------------------------------------------------------- + + +--- xvevent.c.patched Sun Jun 13 03:34:03 1999 ++++ xvevent.c Sun Jun 13 03:37:59 1999 +@@ -154,7 +154,7 @@ + int *donep; + { + static int wasInfoUp=0, wasCtrlUp=0, wasDirUp=0, wasGamUp=0, wasPsUp=0; +- static int wasJpegUp=0, wasTiffUp=0; ++ static int wasJpegUp=0, wasTiffUp=0, wasPngUp=0; + static int wasPcdUp=0; + + static int mainWKludge=0; /* force first mainW expose after a mainW config +@@ -234,6 +234,10 @@ + if (TIFFCheckEvent(event)) break; /* event has been processed */ + #endif + ++#ifdef HAVE_PNG ++ if (PNGCheckEvent (event)) break; /* event has been processed */ ++#endif ++ + if (PCDCheckEvent(event)) break; /* event has been processed */ + + if (GamCheckEvent (event)) break; /* event has been processed */ +@@ -362,6 +366,10 @@ + else if (client_event->window == tiffW) TIFFDialog(0); + #endif + ++#ifdef HAVE_PNG ++ else if (client_event->window == pngW) PNGDialog(0); ++#endif ++ + else if (client_event->window == pcdW) PCDDialog(0); + + else if (client_event->window == mainW) Quit(0); +@@ -544,6 +552,10 @@ + if (wasTiffUp) { TIFFDialog(wasTiffUp); wasTiffUp=0; } + #endif + ++#ifdef HAVE_PNG ++ if (wasPngUp) { PNGDialog(wasJpegUp); wasPngUp=0; } ++#endif ++ + if (wasPcdUp) { PCDDialog(wasPcdUp); wasPcdUp=0; } + + } +@@ -585,6 +597,10 @@ + if (tiffUp) { wasTiffUp = tiffUp; TIFFDialog(0); } + #endif + ++#ifdef HAVE_PNG ++ if (pngUp) { wasPngUp = pngUp; PNGDialog(0); } ++#endif ++ + if (pcdUp) { wasPcdUp = pcdUp; PCDDialog(0); } + + } +@@ -1158,6 +1174,10 @@ + if (TIFFCheckEvent(event)) break; + #endif + ++#ifdef HAVE_PNG ++ if (PNGCheckEvent (event)) break; ++#endif ++ + if (PCDCheckEvent(event)) break; + + if (GamCheckEvent (event)) break; +@@ -1379,6 +1399,10 @@ + if (TIFFCheckEvent(event)) break; + #endif + ++#ifdef HAVE_PNG ++ if (PNGCheckEvent (event)) break; ++#endif ++ + if (PCDCheckEvent(event)) break; + + if (GamCheckEvent (event)) break; +@@ -2385,6 +2409,10 @@ + + #ifdef HAVE_TIFF + if (tiffUp) TIFFDialog(0); /* close tiff window */ ++#endif ++ ++#ifdef HAVE_PNG ++ if (pngUp) PNGDialog(0); /* close png window */ + #endif + + if (pcdUp) PCDDialog(0); /* close pcd window */ diff --git a/graphics/xv/patches/patch-png3 b/graphics/xv/patches/patch-png3 new file mode 100644 index 00000000000..559ad0b1d82 --- /dev/null +++ b/graphics/xv/patches/patch-png3 @@ -0,0 +1,39 @@ +$NetBSD + +The source for this file can be found at +http://www.mit.edu/afs/athena/contrib/graphics/src/xv/patches/png/bits/br_png + +- HF + + +--- /dev/null Sun Jun 13 02:17:04 1999 ++++ bits/br_png Thu Jun 13 22:32:08 1996 +@@ -0,0 +1,28 @@ ++#define br_png_width 48 ++#define br_png_height 48 ++static unsigned char br_png_bits[] = { ++ 0xe0, 0xff, 0xff, 0xff, 0x01, 0x00, 0x20, 0x00, 0x00, 0x00, 0x03, 0x00, ++ 0x20, 0x00, 0x00, 0x00, 0x05, 0x00, 0x20, 0x00, 0x00, 0x00, 0x09, 0x00, ++ 0x20, 0x00, 0x00, 0x00, 0x11, 0x00, 0x20, 0x00, 0x00, 0x00, 0x21, 0x00, ++ 0x20, 0x00, 0x00, 0x00, 0x41, 0x00, 0x20, 0x00, 0x00, 0x00, 0x81, 0x00, ++ 0x20, 0x00, 0x00, 0x00, 0x01, 0x01, 0x20, 0x00, 0x00, 0x00, 0xff, 0x03, ++ 0x20, 0x00, 0x00, 0x00, 0x00, 0x02, 0x20, 0x00, 0x00, 0x00, 0x00, 0x02, ++ 0x20, 0x00, 0x00, 0x00, 0x00, 0x02, 0x20, 0xff, 0xff, 0xff, 0x3f, 0x02, ++ 0x20, 0x00, 0x00, 0x00, 0x00, 0x02, 0x20, 0xff, 0xff, 0xff, 0x3f, 0x02, ++ 0x20, 0x00, 0x00, 0x00, 0x00, 0x02, 0x20, 0x00, 0x00, 0x00, 0x00, 0x02, ++ 0x20, 0xf8, 0x19, 0xc3, 0x07, 0x02, 0x20, 0x18, 0x3b, 0x63, 0x0c, 0x02, ++ 0x20, 0x18, 0x3b, 0x33, 0x00, 0x02, 0x20, 0x18, 0x5b, 0x33, 0x00, 0x02, ++ 0x20, 0xf8, 0x59, 0x33, 0x0f, 0x02, 0x20, 0x18, 0x98, 0x33, 0x0c, 0x02, ++ 0x20, 0x18, 0x98, 0x33, 0x0c, 0x02, 0x20, 0x18, 0x18, 0x63, 0x0c, 0x02, ++ 0x20, 0x18, 0x18, 0xc3, 0x0b, 0x02, 0x20, 0x00, 0x00, 0x00, 0x00, 0x02, ++ 0x20, 0x00, 0x00, 0x00, 0x00, 0x02, 0x20, 0x00, 0x00, 0x00, 0x00, 0x02, ++ 0x20, 0x00, 0x00, 0x00, 0x00, 0x02, 0x20, 0xff, 0xff, 0xff, 0x3f, 0x02, ++ 0x20, 0x00, 0x00, 0x00, 0x00, 0x02, 0x20, 0xff, 0xff, 0xff, 0x3f, 0x02, ++ 0x20, 0x00, 0x00, 0x00, 0x00, 0x02, 0x20, 0x00, 0x00, 0x00, 0x00, 0x02, ++ 0x20, 0x00, 0x00, 0x00, 0x00, 0x02, 0x20, 0x00, 0x00, 0x00, 0x00, 0x02, ++ 0x20, 0x00, 0x00, 0x00, 0x00, 0x02, 0x20, 0x00, 0x00, 0x00, 0x00, 0x02, ++ 0x20, 0x00, 0x00, 0x00, 0x00, 0x02, 0x20, 0x00, 0x00, 0x00, 0x00, 0x02, ++ 0x20, 0x00, 0x00, 0x00, 0x00, 0x02, 0x20, 0x00, 0x00, 0x00, 0x00, 0x02, ++ 0x20, 0x00, 0x00, 0x00, 0x00, 0x02, 0x20, 0x00, 0x00, 0x00, 0x00, 0x02, ++ 0x20, 0x00, 0x00, 0x00, 0x00, 0x02, 0xe0, 0xff, 0xff, 0xff, 0xff, 0x03, ++ }; |