diff options
Diffstat (limited to 'graphics/xv/patches/patch-png2')
-rw-r--r-- | graphics/xv/patches/patch-png2 | 963 |
1 files changed, 963 insertions, 0 deletions
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); |