The R Project SVN R

Rev

Rev 17112 | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 17112 Rev 17165
Line 152... Line 152...
152
 
152
 
153
	/* Device driver actions */
153
	/* Device driver actions */
154
 
154
 
155
static void PicTeX_Activate(NewDevDesc *dd);
155
static void PicTeX_Activate(NewDevDesc *dd);
156
static void PicTeX_Circle(double x, double y, double r,
156
static void PicTeX_Circle(double x, double y, double r,
157
		       int col, int fill, int lty, double lwd,
157
		       int col, int fill, double gamma, int lty, double lwd,
158
		       NewDevDesc *dd);
158
		       NewDevDesc *dd);
159
static void PicTeX_Clip(double x0, double x1, double y0, double y1, 
159
static void PicTeX_Clip(double x0, double x1, double y0, double y1, 
160
		     NewDevDesc *dd);
160
		     NewDevDesc *dd);
161
static void PicTeX_Close(NewDevDesc *dd);
161
static void PicTeX_Close(NewDevDesc *dd);
162
static void PicTeX_Deactivate(NewDevDesc *dd);
162
static void PicTeX_Deactivate(NewDevDesc *dd);
163
static void PicTeX_Hold(NewDevDesc *dd);
163
static void PicTeX_Hold(NewDevDesc *dd);
164
static Rboolean PicTeX_Locator(double *x, double *y, NewDevDesc *dd);
164
static Rboolean PicTeX_Locator(double *x, double *y, NewDevDesc *dd);
165
static void PicTeX_Line(double x1, double y1, double x2, double y2,
165
static void PicTeX_Line(double x1, double y1, double x2, double y2,
166
		     int col, int lty, double lwd,
166
		     int col, double gamma, int lty, double lwd,
167
		     NewDevDesc *dd);
167
		     NewDevDesc *dd);
168
static void PicTeX_MetricInfo(int c, int font, double cex, double ps,
168
static void PicTeX_MetricInfo(int c, int font, double cex, double ps,
169
			      double* ascent, double* descent,
169
			      double* ascent, double* descent,
170
			      double* width, NewDevDesc *dd);
170
			      double* width, NewDevDesc *dd);
171
static void PicTeX_Mode(int mode, NewDevDesc *dd);
171
static void PicTeX_Mode(int mode, NewDevDesc *dd);
172
static void PicTeX_NewPage(int fill, NewDevDesc *dd);
172
static void PicTeX_NewPage(int fill, double gamma, NewDevDesc *dd);
173
static void PicTeX_Polygon(int n, double *x, double *y, 
173
static void PicTeX_Polygon(int n, double *x, double *y, 
174
			int col, int fill, int lty, double lwd,
174
			int col, int fill, double gamma, int lty, double lwd,
175
			NewDevDesc *dd);
175
			NewDevDesc *dd);
176
static void PicTeX_Rect(double x0, double y0, double x1, double y1,
176
static void PicTeX_Rect(double x0, double y0, double x1, double y1,
177
		     int col, int fill, int lty, double lwd,
177
		     int col, int fill, double gamma, int lty, double lwd,
178
		     NewDevDesc *dd);
178
		     NewDevDesc *dd);
179
static void PicTeX_Size(double *left, double *right,
179
static void PicTeX_Size(double *left, double *right,
180
		     double *bottom, double *top,
180
		     double *bottom, double *top,
181
		     NewDevDesc *dd);
181
		     NewDevDesc *dd);
182
static double PicTeX_StrWidth(char *str, int font,
182
static double PicTeX_StrWidth(char *str, int font,
183
			      double cex, double ps, NewDevDesc *dd);
183
			      double cex, double ps, NewDevDesc *dd);
184
static void PicTeX_Text(double x, double y, char *str, 
184
static void PicTeX_Text(double x, double y, char *str, 
185
		     double rot, double hadj, 
185
		     double rot, double hadj, 
186
		     int col, int font, double cex, double ps,
186
		     int col, double gamma, int font, double cex, double ps,
187
		     NewDevDesc *dd);
187
		     NewDevDesc *dd);
188
static Rboolean PicTeX_Open(NewDevDesc*, picTeXDesc*);
188
static Rboolean PicTeX_Open(NewDevDesc*, picTeXDesc*);
189
 
189
 
190
	/* Support routines */
190
	/* Support routines */
191
 
191
 
Line 287... Line 287...
287
    ptd->cliptop = y1;
287
    ptd->cliptop = y1;
288
}
288
}
289
 
289
 
290
	/* Start a new page */
290
	/* Start a new page */
291
 
291
 
292
static void PicTeX_NewPage(int fill, NewDevDesc *dd)
292
static void PicTeX_NewPage(int fill, double gamma, NewDevDesc *dd)
293
{
293
{
294
    picTeXDesc *ptd = (picTeXDesc *) dd->deviceSpecific;
294
    picTeXDesc *ptd = (picTeXDesc *) dd->deviceSpecific;
295
 
295
 
296
    int face, size;
296
    int face, size;
297
    if (ptd->pageno) {
297
    if (ptd->pageno) {
Line 410... Line 410...
410
	ptd->clippedy0 = ptd->cliptop ;
410
	ptd->clippedy0 = ptd->cliptop ;
411
    }
411
    }
412
}
412
}
413
 
413
 
414
static void PicTeX_Line(double x1, double y1, double x2, double y2,
414
static void PicTeX_Line(double x1, double y1, double x2, double y2,
415
		     int col, int lty, double lwd,
415
		     int col, double gamma, int lty, double lwd,
416
		     NewDevDesc *dd)
416
		     NewDevDesc *dd)
417
{
417
{
418
    picTeXDesc *ptd = (picTeXDesc *) dd->deviceSpecific;
418
    picTeXDesc *ptd = (picTeXDesc *) dd->deviceSpecific;
419
 
419
 
420
    if (x1 != x2 || y1 != y2) {
420
    if (x1 != x2 || y1 != y2) {
Line 434... Line 434...
434
		ptd->clippedx1, ptd->clippedy1);
434
		ptd->clippedx1, ptd->clippedy1);
435
    }
435
    }
436
}
436
}
437
 
437
 
438
static void PicTeX_Polyline(int n, double *x, double *y, 
438
static void PicTeX_Polyline(int n, double *x, double *y, 
439
			    int col, int lty, double lwd,
439
			    int col, double gamma, int lty, double lwd,
440
			    NewDevDesc *dd)
440
			    NewDevDesc *dd)
441
{
441
{
442
    double x1, y1, x2, y2;
442
    double x1, y1, x2, y2;
443
    int i;
443
    int i;
444
    picTeXDesc *ptd = (picTeXDesc *) dd->deviceSpecific;
444
    picTeXDesc *ptd = (picTeXDesc *) dd->deviceSpecific;
Line 478... Line 478...
478
}
478
}
479
 
479
 
480
 
480
 
481
/* Possibly Filled Rectangle */
481
/* Possibly Filled Rectangle */
482
static void PicTeX_Rect(double x0, double y0, double x1, double y1,
482
static void PicTeX_Rect(double x0, double y0, double x1, double y1,
483
		     int col, int fill, int lty, double lwd,
483
		     int col, int fill, double gamma, int lty, double lwd,
484
		     NewDevDesc *dd)
484
		     NewDevDesc *dd)
485
{
485
{
486
    double x[4], y[4];
486
    double x[4], y[4];
487
 
487
 
488
    x[0] = x0; y[0] = y0;
488
    x[0] = x0; y[0] = y0;
489
    x[1] = x0; y[1] = y1;
489
    x[1] = x0; y[1] = y1;
490
    x[2] = x1; y[2] = y1;
490
    x[2] = x1; y[2] = y1;
491
    x[3] = x1; y[3] = y0;
491
    x[3] = x1; y[3] = y0;
492
    PicTeX_Polygon(4, x, y, col, fill, lty, lwd, dd);
492
    PicTeX_Polygon(4, x, y, col, fill, gamma, lty, lwd, dd);
493
}
493
}
494
 
494
 
495
static void PicTeX_Circle(double x, double y, double r,
495
static void PicTeX_Circle(double x, double y, double r,
496
		       int col, int fill, int lty, double lwd,
496
		       int col, int fill, double gamma, int lty, double lwd,
497
		       NewDevDesc *dd)
497
		       NewDevDesc *dd)
498
{
498
{
499
    picTeXDesc *ptd = (picTeXDesc *) dd->deviceSpecific;
499
    picTeXDesc *ptd = (picTeXDesc *) dd->deviceSpecific;
500
 
500
 
501
    fprintf(ptd->texfp,
501
    fprintf(ptd->texfp,
502
	    "\\circulararc 360 degrees from %.2f %.2f center at %.2f %.2f\n",
502
	    "\\circulararc 360 degrees from %.2f %.2f center at %.2f %.2f\n",
503
	    x, (y + r), x, y);
503
	    x, (y + r), x, y);
504
}
504
}
505
 
505
 
506
static void PicTeX_Polygon(int n, double *x, double *y, 
506
static void PicTeX_Polygon(int n, double *x, double *y, 
507
			int col, int fill, int lty, double lwd,
507
			int col, int fill, double gamma, int lty, double lwd,
508
			NewDevDesc *dd)
508
			NewDevDesc *dd)
509
{
509
{
510
    double x1, y1, x2, y2;
510
    double x1, y1, x2, y2;
511
    int i;
511
    int i;
512
    picTeXDesc *ptd = (picTeXDesc *) dd->deviceSpecific;
512
    picTeXDesc *ptd = (picTeXDesc *) dd->deviceSpecific;
Line 567... Line 567...
567
 
567
 
568
/* Rotated Text */
568
/* Rotated Text */
569
 
569
 
570
static void PicTeX_Text(double x, double y, char *str, 
570
static void PicTeX_Text(double x, double y, char *str, 
571
		     double rot, double hadj, 
571
		     double rot, double hadj, 
572
		     int col, int font, double cex, double ps,
572
		     int col, double gamma, int font, double cex, double ps,
573
		     NewDevDesc *dd)
573
		     NewDevDesc *dd)
574
{
574
{
575
    int size;
575
    int size;
576
    double xoff = 0.0, yoff = 0.0;
576
    double xoff = 0.0, yoff = 0.0;
577
    picTeXDesc *ptd = (picTeXDesc *) dd->deviceSpecific;
577
    picTeXDesc *ptd = (picTeXDesc *) dd->deviceSpecific;
Line 618... Line 618...
618
 
618
 
619
    strcpy(ptd->filename, filename);
619
    strcpy(ptd->filename, filename);
620
 
620
 
621
    dd->startfill = str2col(bg);
621
    dd->startfill = str2col(bg);
622
    dd->startcol = str2col(fg);
622
    dd->startcol = str2col(fg);
-
 
623
    dd->startps = 10;
-
 
624
    dd->startlty = 0;
-
 
625
    dd->startfont = 1;
-
 
626
    dd->startgamma = 1;
623
    
627
 
624
    dd->newDevStruct = 1;
628
    dd->newDevStruct = 1;
625
    
629
    
626
    dd->activate = PicTeX_Activate;
630
    dd->activate = PicTeX_Activate;
627
    dd->deactivate = PicTeX_Deactivate;
631
    dd->deactivate = PicTeX_Deactivate;
628
    dd->open = PicTeX_Open;
632
    dd->open = PicTeX_Open;
Line 655... Line 659...
655
	return FALSE;
659
	return FALSE;
656
 
660
 
657
    /* Base Pointsize */
661
    /* Base Pointsize */
658
    /* Nominal Character Sizes in Pixels */
662
    /* Nominal Character Sizes in Pixels */
659
 
663
 
660
    dd->startps = 10;
-
 
661
    dd->cra[0] =	 (6.0/12.0) * 10.0;
664
    dd->cra[0] =	 (6.0/12.0) * 10.0;
662
    dd->cra[1] =	(10.0/12.0) * 10.0;
665
    dd->cra[1] =	(10.0/12.0) * 10.0;
663
 
666
 
664
    /* Character Addressing Offsets */
667
    /* Character Addressing Offsets */
665
    /* These offsets should center a single */
668
    /* These offsets should center a single */
Line 678... Line 681...
678
    dd->canChangeFont = TRUE;
681
    dd->canChangeFont = TRUE;
679
    dd->canRotateText = FALSE;
682
    dd->canRotateText = FALSE;
680
    dd->canResizeText = TRUE;
683
    dd->canResizeText = TRUE;
681
    dd->canClip = TRUE;
684
    dd->canClip = TRUE;
682
    dd->canHAdj = 0;
685
    dd->canHAdj = 0;
-
 
686
    dd->canChangeGamma = FALSE;
683
 
687
 
684
    ptd->lty = 1;
688
    ptd->lty = 1;
685
    ptd->pageno = 0;
689
    ptd->pageno = 0;
686
    ptd->debug = debug;
690
    ptd->debug = debug;
687
 
691