Plan 9 from Bell Labs’s /usr/web/sources/contrib/uriel/changes/2006/0103/5

Copyright © 2021 Plan 9 Foundation.
Distributed under the MIT License.
Download the Plan 9 distribution.


Remember rotations across pages.
 [rsc] --rw-rw-r-- M 208511 glenda sys 2152 Jan  4 07:22 sys/src/cmd/page/page.h
	/n/sourcesdump/2006/0104/plan9/sys/src/cmd/page/page.h:42,47 - 
	/n/sources/plan9/sys/src/cmd/page/page.h:42,48
	  
	  void rot180(Image*);
	  Image *rot90(Image*);
	+ Image *rot270(Image*);
	  Image *resample(Image*, Image*);
	  
	  /* ghostscript interface shared by ps, pdf */
 [rsc] --rw-rw-r-- M 208511 glenda sys 10435 Jan  4 07:22 sys/src/cmd/page/rotate.c
	/n/sourcesdump/2006/0104/plan9/sys/src/cmd/page/rotate.c:245,250 - 
	/n/sources/plan9/sys/src/cmd/page/rotate.c:245,275
	  	return(tmp);
	  }
	  
	+ /* rotates an image 270 degrees clockwise */
	+ Image *
	+ rot270(Image *im)
	+ {
	+ 	Image *tmp;
	+ 	int i, j, dx, dy;
	+ 
	+ 	dx = Dx(im->r);
	+ 	dy = Dy(im->r);
	+ 	tmp = xallocimage(display, Rect(0, 0, dy, dx), im->chan, 0, DCyan);
	+ 	if(tmp == nil) {
	+ 		fprint(2, "out of memory during rot270: %r\n");
	+ 		wexits("memory");
	+ 	}
	+ 
	+ 	for(i = 0; i < dy; i++) {
	+ 		for(j = 0; j < dx; j++) {
	+ 			drawop(tmp, Rect(i, j, i+1, j+1), im, nil, Pt(dx-(j+1), i), S);
	+ 		}
	+ 	}
	+ 	freeimage(im);
	+ 
	+ 	return(tmp);
	+ }
	+ 
	  /* from resample.c -- resize from → to using interpolation */
	  
	  
 [rsc] --rw-rw-r-- M 208511 glenda sys 22893 Jan  4 07:22 sys/src/cmd/page/view.c
	/n/sourcesdump/2006/0104/plan9/sys/src/cmd/page/view.c:16,22 - 
	/n/sources/plan9/sys/src/cmd/page/view.c:16,22
	  Document *doc;
	  Image *im;
	  int page;
	- int upside = 0;
	+ int angle = 0;
	  int showbottom = 0;		/* on the next showpage, move the image so the bottom is visible. */
	  
	  Rectangle ulrange;	/* the upper left corner of the image must be in this rectangle */
	/n/sourcesdump/2006/0104/plan9/sys/src/cmd/page/view.c:156,163 - 
	/n/sources/plan9/sys/src/cmd/page/view.c:156,172
	  		im = tmp;
	  	}
	  
	- 	if(upside)
	+ 	switch(angle){
	+ 	case 90:
	+ 		im = rot90(im);
	+ 		break;
	+ 	case 180:
	  		rot180(im);
	+ 		break;
	+ 	case 270:
	+ 		im = rot270(im);
	+ 		break;
	+ 	}
	  
	  	esetcursor(nil);
	  	if(showbottom){
	/n/sourcesdump/2006/0104/plan9/sys/src/cmd/page/view.c:390,396 - 
	/n/sources/plan9/sys/src/cmd/page/view.c:399,405
	  				esetcursor(&reading);
	  				rot180(im);
	  				esetcursor(nil);
	- 				upside = !upside;
	+ 				angle = (angle+180) % 360;
	  				redraw(screen);
	  				flushimage(display, 1);
	  				break;
	/n/sourcesdump/2006/0104/plan9/sys/src/cmd/page/view.c:589,594 - 
	/n/sources/plan9/sys/src/cmd/page/view.c:598,604
	  					esetcursor(&reading);
	  					im = rot90(im);
	  					esetcursor(nil);
	+ 					angle = (angle+90) % 360;
	  					redraw(screen);
	  					flushimage(display, 1);
	  					break;
	/n/sourcesdump/2006/0104/plan9/sys/src/cmd/page/view.c:598,604 - 
	/n/sources/plan9/sys/src/cmd/page/view.c:608,614
	  					esetcursor(&reading);
	  					rot180(im);
	  					esetcursor(nil);
	- 					upside = !upside;
	+ 					angle = (angle+180) % 360;
	  					redraw(screen);
	  					flushimage(display, 1);
	  					break;

	/n/sourcesdump/2006/0104/plan9/sys/src/cmd/page/view.c:16,22 - 
	/n/sources/plan9/sys/src/cmd/page/view.c:16,22
	  Document *doc;
	  Image *im;
	  int page;
	- int upside = 0;
	+ int angle = 0;
	  int showbottom = 0;		/* on the next showpage, move the image so the bottom is visible. */
	  
	  Rectangle ulrange;	/* the upper left corner of the image must be in this rectangle */
	/n/sourcesdump/2006/0104/plan9/sys/src/cmd/page/view.c:156,163 - 
	/n/sources/plan9/sys/src/cmd/page/view.c:156,172
	  		im = tmp;
	  	}
	  
	- 	if(upside)
	+ 	switch(angle){
	+ 	case 90:
	+ 		im = rot90(im);
	+ 		break;
	+ 	case 180:
	  		rot180(im);
	+ 		break;
	+ 	case 270:
	+ 		im = rot270(im);
	+ 		break;
	+ 	}
	  
	  	esetcursor(nil);
	  	if(showbottom){
	/n/sourcesdump/2006/0104/plan9/sys/src/cmd/page/view.c:390,396 - 
	/n/sources/plan9/sys/src/cmd/page/view.c:399,405
	  				esetcursor(&reading);
	  				rot180(im);
	  				esetcursor(nil);
	- 				upside = !upside;
	+ 				angle = (angle+180) % 360;
	  				redraw(screen);
	  				flushimage(display, 1);
	  				break;
	/n/sourcesdump/2006/0104/plan9/sys/src/cmd/page/view.c:589,594 - 
	/n/sources/plan9/sys/src/cmd/page/view.c:598,604
	  					esetcursor(&reading);
	  					im = rot90(im);
	  					esetcursor(nil);
	+ 					angle = (angle+90) % 360;
	  					redraw(screen);
	  					flushimage(display, 1);
	  					break;
	/n/sourcesdump/2006/0104/plan9/sys/src/cmd/page/view.c:598,604 - 
	/n/sources/plan9/sys/src/cmd/page/view.c:608,614
	  					esetcursor(&reading);
	  					rot180(im);
	  					esetcursor(nil);
	- 					upside = !upside;
	+ 					angle = (angle+180) % 360;
	  					redraw(screen);
	  					flushimage(display, 1);
	  					break;


Bell Labs OSI certified Powered by Plan 9

(Return to Plan 9 Home Page)

Copyright © 2021 Plan 9 Foundation. All Rights Reserved.
Comments to [email protected].