The R Project SVN R

Rev

Rev 6430 | Rev 6625 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 6430 Rev 6458
Line 64... Line 64...
64
	/* common to all device types (see Graphics.h)		*/
64
	/* common to all device types (see Graphics.h)		*/
65
	/* so go in the GPar structure rather than this device- */
65
	/* so go in the GPar structure rather than this device- */
66
	/* specific structure					*/
66
	/* specific structure					*/
67
	/********************************************************/
67
	/********************************************************/
68
 
68
 
69
enum DeviceKinds {SCREEN=0, PRINTER, METAFILE, PNG, JPEG};
69
enum DeviceKinds {SCREEN=0, PRINTER, METAFILE, PNG, JPEG, BMP};
70
 
70
 
71
typedef struct {
71
typedef struct {
72
    /* R Graphics Parameters */
72
    /* R Graphics Parameters */
73
    /* local device copy so that we can detect */
73
    /* local device copy so that we can detect */
74
    /* when parameter changes */
74
    /* when parameter changes */
Line 92... Line 92...
92
  /* SCREEN section*/
92
  /* SCREEN section*/
93
    popup locpopup, grpopup;
93
    popup locpopup, grpopup;
94
    button  stoploc;
94
    button  stoploc;
95
    menubar mbar, mbarloc;
95
    menubar mbar, mbarloc;
96
    menu  msubsave;
96
    menu  msubsave;
97
    menuitem mpng, mjpeg50, mjpeg75, mjpeg100;
97
    menuitem mpng, mbmp, mjpeg50, mjpeg75, mjpeg100;
98
    menuitem mps, mwm, mclpbm, mclpwm, mprint, mclose;
98
    menuitem mps, mwm, mclpbm, mclpwm, mprint, mclose;
99
    menuitem mrec, madd, mreplace, mprev, mnext, mclear, msvar, mgvar;
99
    menuitem mrec, madd, mreplace, mprev, mnext, mclear, msvar, mgvar;
100
    int   recording, replaying, needsave;
100
    int   recording, replaying, needsave;
101
    bitmap bm;
101
    bitmap bm;
102
  /* PNG and JPEG section */
102
  /* PNG and JPEG section */
Line 181... Line 181...
181
static void SetLinetype(int, double, DevDesc *);
181
static void SetLinetype(int, double, DevDesc *);
182
static int Load_Rbitmap_Dll();
182
static int Load_Rbitmap_Dll();
183
void Unload_Rbitmap_Dll();
183
void Unload_Rbitmap_Dll();
184
static void SaveAsPng(DevDesc *dd,char *fn);
184
static void SaveAsPng(DevDesc *dd,char *fn);
185
static void SaveAsJpeg(DevDesc *dd,int quality,char *fn);
185
static void SaveAsJpeg(DevDesc *dd,int quality,char *fn);
-
 
186
static void SaveAsBmp(DevDesc *dd,char *fn);
186
static void SaveAsBitmap(DevDesc *dd);
187
static void SaveAsBitmap(DevDesc *dd);
187
void  ProcessEvents();
188
void  ProcessEvents();
188
 
189
 
189
static void PrivateCopyDevice(DevDesc *dd,DevDesc *ndd, char *name)
190
static void PrivateCopyDevice(DevDesc *dd,DevDesc *ndd, char *name)
190
{
191
{
Line 400... Line 401...
400
{
401
{
401
    x11Desc *xd = (x11Desc *) dd->deviceSpecific;
402
    x11Desc *xd = (x11Desc *) dd->deviceSpecific;
402
 
403
 
403
    if (face < 1 || face > fontnum)
404
    if (face < 1 || face > fontnum)
404
	face = 1;
405
	face = 1;
405
    size = MulDiv(12,xd->wanteddpi,xd->truedpi);
406
    size = MulDiv(size,xd->wanteddpi,xd->truedpi);
406
    if (size < SMALLEST)
407
    if (size < SMALLEST)
407
	size = SMALLEST;
408
	size = SMALLEST;
408
    if (size > LARGEST)
409
    if (size > LARGEST)
409
	size = LARGEST;
410
	size = LARGEST;
410
    if (!xd->usefixed &&
411
    if (!xd->usefixed &&
Line 581... Line 582...
581
    DevDesc *dd = (DevDesc *) getdata(m);
582
    DevDesc *dd = (DevDesc *) getdata(m);
582
    x11Desc *xd = (x11Desc *) dd->deviceSpecific;
583
    x11Desc *xd = (x11Desc *) dd->deviceSpecific;
583
    char *fn;
584
    char *fn;
584
    if (m==xd->mpng) {
585
    if (m==xd->mpng) {
585
      setuserfilter("Png files (*.png)\0*.png\0\0");
586
      setuserfilter("Png files (*.png)\0*.png\0\0");
-
 
587
      fn = askfilesave("Portable network graphics file", "");
-
 
588
    } else if (m==xd->mbmp) {
-
 
589
      setuserfilter("Windows bitmap files (*.bmp)\0*.bmp\0\0");
586
      fn = askfilesave("Png file", "");
590
      fn = askfilesave("Windows bitmap file", "");      
587
    } else { 
591
    } else { 
588
      setuserfilter("Jpeg files (*.jpeg,*jpg)\0*.jpeg;*.jpg\0\0");
592
      setuserfilter("Jpeg files (*.jpeg,*jpg)\0*.jpeg;*.jpg\0\0");
589
      fn = askfilesave("Jpeg file", "");
593
      fn = askfilesave("Jpeg file", "");
590
    }
594
    }
591
    if (!fn) return;
595
    if (!fn) return;
592
    fixslash(fn);
596
    fixslash(fn);
593
    gsetcursor(xd->gawin, WatchCursor);
597
    gsetcursor(xd->gawin, WatchCursor);
594
    show(xd->gawin);
598
    show(xd->gawin);
595
    if (m==xd->mpng) SaveAsPng(dd,fn);
599
    if (m==xd->mpng) SaveAsPng(dd,fn);
-
 
600
    else if (m==xd->mbmp) SaveAsBmp(dd,fn);
596
    else if (m==xd->mjpeg50) SaveAsJpeg(dd,50,fn);
601
    else if (m==xd->mjpeg50) SaveAsJpeg(dd,50,fn);
597
    else if (m==xd->mjpeg75) SaveAsJpeg(dd,75,fn);
602
    else if (m==xd->mjpeg75) SaveAsJpeg(dd,75,fn);
598
    else SaveAsJpeg(dd,100,fn);
603
    else SaveAsJpeg(dd,100,fn);
599
    gsetcursor(xd->gawin, ArrowCursor);
604
    gsetcursor(xd->gawin, ArrowCursor);
600
    show(xd->gawin);
605
    show(xd->gawin);
Line 961... Line 966...
961
    }
966
    }
962
    if (dd->displayList != R_NilValue) {
967
    if (dd->displayList != R_NilValue) {
963
	enable(xd->madd);
968
	enable(xd->madd);
964
	enable(xd->mprint);
969
	enable(xd->mprint);
965
	enable(xd->mpng);
970
	enable(xd->mpng);
-
 
971
	enable(xd->mbmp);
966
	enable(xd->mjpeg50);
972
	enable(xd->mjpeg50);
967
	enable(xd->mjpeg75);
973
	enable(xd->mjpeg75);
968
	enable(xd->mjpeg100);
974
	enable(xd->mjpeg100);
969
	enable(xd->mwm);
975
	enable(xd->mwm);
970
	enable(xd->mps);
976
	enable(xd->mps);
971
	enable(xd->mclpwm);
977
	enable(xd->mclpwm);
-
 
978
	enable(xd->mclpbm);
972
    } else {
979
    } else {
973
	disable(xd->madd);
980
	disable(xd->madd);
974
	disable(xd->mprint);
981
	disable(xd->mprint);
975
	disable(xd->msubsave);
982
	disable(xd->msubsave);
976
	disable(xd->mpng);
983
	disable(xd->mpng);
-
 
984
	disable(xd->mbmp);
977
	disable(xd->mjpeg50);
985
	disable(xd->mjpeg50);
978
	disable(xd->mjpeg75);
986
	disable(xd->mjpeg75);
979
	disable(xd->mjpeg100);
987
	disable(xd->mjpeg100);
980
	disable(xd->mwm);
988
	disable(xd->mwm);
981
	disable(xd->mps);
989
	disable(xd->mps);
982
	disable(xd->mclpwm);
990
	disable(xd->mclpwm);
-
 
991
	disable(xd->mclpbm);
983
    }
992
    }
984
    draw(xd->mbar);
993
    draw(xd->mbar);
985
}
994
}
986
 
995
 
987
 
996
 
Line 1083... Line 1092...
1083
  MCHECK(m = newmenu("File"));
1092
  MCHECK(m = newmenu("File"));
1084
  MCHECK(xd->msubsave = newsubmenu(m, "Save as"));
1093
  MCHECK(xd->msubsave = newsubmenu(m, "Save as"));
1085
  MCHECK(xd->mwm = newmenuitem("Metafile", 0, menuwm));
1094
  MCHECK(xd->mwm = newmenuitem("Metafile", 0, menuwm));
1086
  MCHECK(xd->mps = newmenuitem("Postscript", 0, menups));
1095
  MCHECK(xd->mps = newmenuitem("Postscript", 0, menups));
1087
  MCHECK(xd->mpng = newmenuitem("Png", 0, menufilebitmap));
1096
  MCHECK(xd->mpng = newmenuitem("Png", 0, menufilebitmap));
-
 
1097
  MCHECK(xd->mbmp = newmenuitem("Bmp", 0, menufilebitmap));
1088
  MCHECK(newsubmenu(xd->msubsave,"Jpeg"));
1098
  MCHECK(newsubmenu(xd->msubsave,"Jpeg"));
1089
  MCHECK(xd->mjpeg50 = newmenuitem("50% quality", 0, menufilebitmap));
1099
  MCHECK(xd->mjpeg50 = newmenuitem("50% quality", 0, menufilebitmap));
1090
  MCHECK(xd->mjpeg75 = newmenuitem("75% quality", 0, menufilebitmap));
1100
  MCHECK(xd->mjpeg75 = newmenuitem("75% quality", 0, menufilebitmap));
1091
  MCHECK(xd->mjpeg100 = newmenuitem("100% quality", 0, menufilebitmap));
1101
  MCHECK(xd->mjpeg100 = newmenuitem("100% quality", 0, menufilebitmap));
1092
  MCHECK(newsubmenu(m, "Copy to the clipboard"));
1102
  MCHECK(newsubmenu(m, "Copy to the clipboard"));
Line 1132... Line 1142...
1132
			    getdepth(xd->gawin)));
1142
			    getdepth(xd->gawin)));
1133
 
1143
 
1134
  addto(xd->gawin);
1144
  addto(xd->gawin);
1135
  setdata(xd->mbar, (void *) dd);
1145
  setdata(xd->mbar, (void *) dd);
1136
  setdata(xd->mpng, (void *) dd);
1146
  setdata(xd->mpng, (void *) dd);
-
 
1147
  setdata(xd->mbmp, (void *) dd);
1137
  setdata(xd->mjpeg50, (void *) dd);
1148
  setdata(xd->mjpeg50, (void *) dd);
1138
  setdata(xd->mjpeg75, (void *) dd);
1149
  setdata(xd->mjpeg75, (void *) dd);
1139
  setdata(xd->mjpeg100, (void *) dd);
1150
  setdata(xd->mjpeg100, (void *) dd);
1140
  setdata(xd->mps, (void *) dd);
1151
  setdata(xd->mps, (void *) dd);
1141
  setdata(xd->mwm, (void *) dd);
1152
  setdata(xd->mwm, (void *) dd);
Line 1184... Line 1195...
1184
    } else if (!strcmp(dsp, "win.print")) {
1195
    } else if (!strcmp(dsp, "win.print")) {
1185
	xd->kind = PRINTER;
1196
	xd->kind = PRINTER;
1186
	xd->gawin = newprinter(MM_PER_INCH * w, MM_PER_INCH * h);
1197
	xd->gawin = newprinter(MM_PER_INCH * w, MM_PER_INCH * h);
1187
	if (!xd->gawin)
1198
	if (!xd->gawin)
1188
	    return 0;
1199
	    return 0;
1189
    } else if (!strncmp(dsp, "png:", 4)) {
1200
    } else if (!strncmp(dsp, "png:", 4) || !strncmp(dsp,"bmp:",4)) {
1190
        xd->kind = PNG ;
1201
        xd->kind = (dsp[0]=='p') ? PNG : BMP;
1191
	if (!Load_Rbitmap_Dll()) {
1202
	if (!Load_Rbitmap_Dll()) {
1192
	  warning("Impossible to load Rbitmap.dll");
1203
	  warning("Impossible to load Rbitmap.dll");
1193
	  return 0;
1204
	  return 0;
1194
	}
1205
	}
1195
	/*
1206
	/*
Line 1211... Line 1222...
1211
	  warning("Impossible to load Rbitmap.dll");
1222
	  warning("Impossible to load Rbitmap.dll");
1212
	  return 0;
1223
	  return 0;
1213
	}
1224
	}
1214
	*p = '\0';
1225
	*p = '\0';
1215
	xd->quality = atoi(&dsp[5]);
1226
	xd->quality = atoi(&dsp[5]);
-
 
1227
	*p = ':' ;
1216
	if (((xd->gawin = newbitmap(w,h,256)) == NULL) || 
1228
	if (((xd->gawin = newbitmap(w,h,256)) == NULL) || 
1217
	    ((xd->fp=fopen(p+1,"wb")) == NULL )) {
1229
	    ((xd->fp=fopen(p+1,"wb")) == NULL )) {
1218
	  if (xd->gawin != NULL) del(xd->gawin);
1230
	  if (xd->gawin != NULL) del(xd->gawin);
1219
	  if (xd->fp != NULL) fclose(xd->fp);
1231
	  if (xd->fp != NULL) fclose(xd->fp);
1220
	  return 0;
1232
	  return 0;
Line 1248... Line 1260...
1248
    rr = getrect(xd->gawin);
1260
    rr = getrect(xd->gawin);
1249
    xd->windowWidth = rr.width;
1261
    xd->windowWidth = rr.width;
1250
    xd->windowHeight = rr.height;
1262
    xd->windowHeight = rr.height;
1251
    xd->clip = rr;
1263
    xd->clip = rr;
1252
    xd->truedpi = devicepixelsy(xd->gawin);
1264
    xd->truedpi = devicepixelsy(xd->gawin);
1253
    if ((xd->kind==PNG) || (xd->kind==JPEG)) 
1265
    if ((xd->kind==PNG) || (xd->kind==JPEG) || (xd->kind==BMP)) 
1254
      xd->wanteddpi = 72 ;
1266
      xd->wanteddpi = 72 ;
1255
    else
1267
    else
1256
      xd->wanteddpi = xd->truedpi;
1268
      xd->wanteddpi = xd->truedpi;
1257
    setdata(xd->gawin, (void *) dd);
1269
    setdata(xd->gawin, (void *) dd);
1258
    xd->needsave = 0;
1270
    xd->needsave = 0;
Line 1369... Line 1381...
1369
	error("A metafile can store only one figure.");
1381
	error("A metafile can store only one figure.");
1370
    if ((xd->kind == PNG) && xd->needsave)
1382
    if ((xd->kind == PNG) && xd->needsave)
1371
	error("A png file can store only one figure.");
1383
	error("A png file can store only one figure.");
1372
    if ((xd->kind == JPEG) && xd->needsave)
1384
    if ((xd->kind == JPEG) && xd->needsave)
1373
	error("A jpeg file can store only one figure.");
1385
	error("A jpeg file can store only one figure.");
-
 
1386
    if ((xd->kind == BMP) && xd->needsave)
-
 
1387
	error("A bmp file can store only one figure.");
1374
    if (xd->kind==SCREEN) {
1388
    if (xd->kind==SCREEN) {
1375
	if (xd->recording && xd->needsave)
1389
	if (xd->recording && xd->needsave)
1376
	    AddtoPlotHistory(savedDisplayList, &savedGPar, 0);
1390
	    AddtoPlotHistory(savedDisplayList, &savedGPar, 0);
1377
	if (xd->replaying)
1391
	if (xd->replaying)
1378
	    xd->needsave = 0;
1392
	    xd->needsave = 0;
Line 1405... Line 1419...
1405
    x11Desc *xd = (x11Desc *) dd->deviceSpecific;
1419
    x11Desc *xd = (x11Desc *) dd->deviceSpecific;
1406
 
1420
 
1407
    if (xd->kind==SCREEN) {
1421
    if (xd->kind==SCREEN) {
1408
	hide(xd->gawin);
1422
	hide(xd->gawin);
1409
	del(xd->bm);
1423
	del(xd->bm);
1410
    } else if ((xd->kind == PNG) || (xd->kind == JPEG) ) {
1424
    } else if ((xd->kind == PNG) || (xd->kind == JPEG) || (xd->kind == BMP)) {
1411
      SaveAsBitmap(dd);
1425
      SaveAsBitmap(dd);
1412
    } 
1426
    } 
1413
    del(xd->font);
1427
    del(xd->font);
1414
    del(xd->gawin);
1428
    del(xd->gawin);
1415
/* 
1429
/* 
Line 1953... Line 1967...
1953
	errorcall(call, "invalid filename argument");
1967
	errorcall(call, "invalid filename argument");
1954
    tp = CHAR(STRING(type)[0]);
1968
    tp = CHAR(STRING(type)[0]);
1955
 
1969
 
1956
    if(!strcmp(tp, "png")) {
1970
    if(!strcmp(tp, "png")) {
1957
	SaveAsPng(dd, fn);
1971
	SaveAsPng(dd, fn);
-
 
1972
    } else if (!strcmp(tp,"bmp")) {
-
 
1973
        SaveAsBmp(dd,fn);
1958
    } else if(!strcmp(tp, "jpeg") || !strcmp(tp,"jpg")) {
1974
    } else if(!strcmp(tp, "jpeg") || !strcmp(tp,"jpg")) {
1959
      /*Default quality suggested in libjpeg*/
1975
      /*Default quality suggested in libjpeg*/
1960
        SaveAsJpeg(dd, 75, fn); 
1976
        SaveAsJpeg(dd, 75, fn); 
1961
    } else if (!strcmp(tp, "wmf")) {
1977
    } else if (!strcmp(tp, "wmf")) {
1962
	sprintf(display, "win.metafile:%s", fn);
1978
	sprintf(display, "win.metafile:%s", fn);
Line 1970... Line 1986...
1970
 
1986
 
1971
 
1987
 
1972
/* Rbitmap  */
1988
/* Rbitmap  */
1973
#define BITMAP_DLL_NAME "\\BIN\\RBITMAP.DLL\0"
1989
#define BITMAP_DLL_NAME "\\BIN\\RBITMAP.DLL\0"
1974
typedef int (*R_SaveAsBitmap)();
1990
typedef int (*R_SaveAsBitmap)();
1975
static R_SaveAsBitmap R_SaveAsPng, R_SaveAsJpeg;
1991
static R_SaveAsBitmap R_SaveAsPng, R_SaveAsJpeg, R_SaveAsBmp;
1976
static int RbitmapAlreadyLoaded=0;
1992
static int RbitmapAlreadyLoaded=0;
1977
static HINSTANCE hRbitmapDll;
1993
static HINSTANCE hRbitmapDll;
1978
 
1994
 
1979
static int Load_Rbitmap_Dll()
1995
static int Load_Rbitmap_Dll()
1980
{    
1996
{    
Line 1984... Line 2000...
1984
   strcat(szFullPath, BITMAP_DLL_NAME);
2000
   strcat(szFullPath, BITMAP_DLL_NAME);
1985
   if (((hRbitmapDll = LoadLibrary(szFullPath)) != NULL) && 
2001
   if (((hRbitmapDll = LoadLibrary(szFullPath)) != NULL) && 
1986
       ((R_SaveAsPng=
2002
       ((R_SaveAsPng=
1987
	 (R_SaveAsBitmap)GetProcAddress(hRbitmapDll,"R_SaveAsPng")) 
2003
	 (R_SaveAsBitmap)GetProcAddress(hRbitmapDll,"R_SaveAsPng")) 
1988
	!= NULL) &&
2004
	!= NULL) &&
-
 
2005
       ((R_SaveAsBmp=
-
 
2006
	 (R_SaveAsBitmap)GetProcAddress(hRbitmapDll,"R_SaveAsBmp")) 
-
 
2007
	!= NULL) &&
1989
       ((R_SaveAsJpeg=
2008
       ((R_SaveAsJpeg=
1990
	 (R_SaveAsBitmap)GetProcAddress(hRbitmapDll,"R_SaveAsJpeg")) 
2009
	 (R_SaveAsBitmap)GetProcAddress(hRbitmapDll,"R_SaveAsJpeg")) 
1991
	!= NULL)) {
2010
	!= NULL)) {
1992
     RbitmapAlreadyLoaded = 1;
2011
     RbitmapAlreadyLoaded = 1;
1993
   } else {	
2012
   } else {	
Line 2009... Line 2028...
2009
}
2028
}
2010
 
2029
 
2011
/* This is the device version */
2030
/* This is the device version */
2012
static void SaveAsBitmap(DevDesc *dd)
2031
static void SaveAsBitmap(DevDesc *dd)
2013
{
2032
{
-
 
2033
  rect r;
2014
  x11Desc *xd = (x11Desc *) dd->deviceSpecific;
2034
  x11Desc *xd = (x11Desc *) dd->deviceSpecific;
-
 
2035
  r = ggetcliprect(xd->gawin);
-
 
2036
  gsetcliprect(xd->gawin,getrect(xd->gawin));
2015
  if (xd->kind==PNG) 
2037
  if (xd->kind==PNG) 
2016
    R_SaveAsPng(xd->gawin,xd->windowWidth, xd->windowHeight,
2038
    R_SaveAsPng(xd->gawin,xd->windowWidth, xd->windowHeight,
2017
		privategetpixel,0,xd->fp) ;
2039
		privategetpixel,0,xd->fp) ;
2018
  else
2040
  else if (xd->kind==JPEG)
2019
    R_SaveAsJpeg(xd->gawin, xd->windowWidth, xd->windowHeight,
2041
    R_SaveAsJpeg(xd->gawin, xd->windowWidth, xd->windowHeight,
2020
		 privategetpixel,0,xd->quality,xd->fp) ;
2042
		 privategetpixel,0,xd->quality,xd->fp) ;
-
 
2043
  else 
-
 
2044
    R_SaveAsBmp(xd->gawin, xd->windowWidth, xd->windowHeight,
-
 
2045
		 privategetpixel,0,xd->fp) ;
-
 
2046
  gsetcliprect(xd->gawin,r);
2021
  fclose(xd->fp);
2047
  fclose(xd->fp);
2022
}
2048
}
2023
 
2049
 
2024
/* This is the menu item version */
2050
/* This are the menu item version */
2025
static void SaveAsPng(DevDesc *dd,char *fn)
2051
static void SaveAsPng(DevDesc *dd,char *fn)
2026
{
2052
{
2027
  FILE *fp;
2053
  FILE *fp;
-
 
2054
  rect r;
2028
  x11Desc *xd = (x11Desc *) dd->deviceSpecific;
2055
  x11Desc *xd = (x11Desc *) dd->deviceSpecific;
2029
  if (!Load_Rbitmap_Dll()) {
2056
  if (!Load_Rbitmap_Dll()) {
2030
    R_ShowMessage("Impossible to load Rbitmap.dll");
2057
    R_ShowMessage("Impossible to load Rbitmap.dll");
2031
    return;
2058
    return;
2032
  }
2059
  }
Line 2036... Line 2063...
2036
    strcpy(msg,"Impossible to open ");
2063
    strcpy(msg,"Impossible to open ");
2037
    strncat(msg,fn,MAX_PATH);
2064
    strncat(msg,fn,MAX_PATH);
2038
    R_ShowMessage(msg);
2065
    R_ShowMessage(msg);
2039
    return;
2066
    return;
2040
  }
2067
  }
-
 
2068
  r = ggetcliprect(xd->bm);
-
 
2069
  gsetcliprect(xd->bm,getrect(xd->bm));
2041
  R_SaveAsPng(xd->bm,xd->windowWidth, xd->windowHeight,
2070
  R_SaveAsPng(xd->bm,xd->windowWidth, xd->windowHeight,
2042
	      privategetpixel,0,fp) ;
2071
	      privategetpixel,0,fp) ;
-
 
2072
  gsetcliprect(xd->bm,r);
2043
  fclose(fp);
2073
  fclose(fp);
2044
}
2074
}
2045
 
2075
 
2046
static void SaveAsJpeg(DevDesc *dd,int quality,char *fn)
2076
static void SaveAsJpeg(DevDesc *dd,int quality,char *fn)
2047
{
2077
{
2048
  FILE *fp;
2078
  FILE *fp;
-
 
2079
  rect r;
2049
  x11Desc *xd = (x11Desc *) dd->deviceSpecific;
2080
  x11Desc *xd = (x11Desc *) dd->deviceSpecific;
2050
  if (!Load_Rbitmap_Dll()) {
2081
  if (!Load_Rbitmap_Dll()) {
2051
    R_ShowMessage("Impossible to load Rbitmap.dll");
2082
    R_ShowMessage("Impossible to load Rbitmap.dll");
2052
    return;
2083
    return;
2053
  }
2084
  }
Line 2056... Line 2087...
2056
    strcpy(msg,"Impossible to open ");
2087
    strcpy(msg,"Impossible to open ");
2057
    strncat(msg,fn,MAX_PATH);
2088
    strncat(msg,fn,MAX_PATH);
2058
    R_ShowMessage(msg);
2089
    R_ShowMessage(msg);
2059
    return;
2090
    return;
2060
  }
2091
  }
-
 
2092
  r = ggetcliprect(xd->bm);
-
 
2093
  gsetcliprect(xd->bm,getrect(xd->bm));
2061
  R_SaveAsJpeg(xd->bm,xd->windowWidth, xd->windowHeight,
2094
  R_SaveAsJpeg(xd->bm,xd->windowWidth, xd->windowHeight,
2062
	      privategetpixel,0,quality,fp) ;
2095
	      privategetpixel,0,quality,fp) ;
-
 
2096
  gsetcliprect(xd->bm,r);
2063
  fclose(fp);
2097
  fclose(fp);
2064
}
2098
}
2065
 
2099
 
2066
 
2100
 
-
 
2101
static void SaveAsBmp(DevDesc *dd,char *fn)
-
 
2102
{
-
 
2103
  FILE *fp;
-
 
2104
  rect r;
-
 
2105
  x11Desc *xd = (x11Desc *) dd->deviceSpecific;
-
 
2106
  if (!Load_Rbitmap_Dll()) {
-
 
2107
    R_ShowMessage("Impossible to load Rbitmap.dll");
-
 
2108
    return;
-
 
2109
  }
-
 
2110
  if ((fp=fopen(fn,"wb"))==NULL) {
-
 
2111
    char msg[MAX_PATH+32];
-
 
2112
 
-
 
2113
    strcpy(msg,"Impossible to open ");
-
 
2114
    strncat(msg,fn,MAX_PATH);
-
 
2115
    R_ShowMessage(msg);
-
 
2116
    return;
-
 
2117
  }
-
 
2118
  r = ggetcliprect(xd->bm);
-
 
2119
  gsetcliprect(xd->bm,getrect(xd->bm));
-
 
2120
  R_SaveAsBmp(xd->bm,xd->windowWidth, xd->windowHeight,
-
 
2121
	      privategetpixel,0,fp) ;
-
 
2122
  gsetcliprect(xd->bm,r);
-
 
2123
  fclose(fp);
-
 
2124
}
2067
 
2125
 
2068
 
2126