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.
This commit is contained in:
parent
25cb23d49d
commit
ac91b297b4
12 changed files with 2663 additions and 1 deletions
|
@ -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
|
||||
|
||||
|
|
975
graphics/xv/patches/patch-png1
Normal file
975
graphics/xv/patches/patch-png1
Normal file
|
@ -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
|
963
graphics/xv/patches/patch-png2
Normal file
963
graphics/xv/patches/patch-png2
Normal file
|
@ -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);
|
96
graphics/xv/patches/patch-png2-Imakefile
Normal file
96
graphics/xv/patches/patch-png2-Imakefile
Normal file
|
@ -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
|
67
graphics/xv/patches/patch-png2-Makefile
Normal file
67
graphics/xv/patches/patch-png2-Makefile
Normal file
|
@ -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
|
68
graphics/xv/patches/patch-png2-Makefile.std
Normal file
68
graphics/xv/patches/patch-png2-Makefile.std
Normal file
|
@ -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
|
57
graphics/xv/patches/patch-png2-xv.c
Normal file
57
graphics/xv/patches/patch-png2-xv.c
Normal file
|
@ -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
|
162
graphics/xv/patches/patch-png2-xv.h
Normal file
162
graphics/xv/patches/patch-png2-xv.h
Normal file
|
@ -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 *));
|
53
graphics/xv/patches/patch-png2-xvbrowse.c
Normal file
53
graphics/xv/patches/patch-png2-xvbrowse.c
Normal file
|
@ -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;
|
||||
}
|
||||
|
83
graphics/xv/patches/patch-png2-xvdir.c
Normal file
83
graphics/xv/patches/patch-png2-xvdir.c
Normal file
|
@ -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;
|
97
graphics/xv/patches/patch-png2-xvevent.c
Normal file
97
graphics/xv/patches/patch-png2-xvevent.c
Normal file
|
@ -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 */
|
39
graphics/xv/patches/patch-png3
Normal file
39
graphics/xv/patches/patch-png3
Normal file
|
@ -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,
|
||||
+ };
|
Loading…
Reference in a new issue