shithub: riscv

Download patch

ref: 7af85b9e74ab055d55ad20ce8dd6d9caf002d525
parent: b3df8945bd2512349ae7662843d5bdcf15b3804d
author: cinap_lenrek <cinap_lenrek@felloff.net>
date: Fri Feb 7 21:33:29 EST 2014

jpg: center image in screen

when using the jpg(1) programs interactively, draw the
image in the center of it. this avoids wasting space
with always on borders on small windows and looks better
when used in fullscreen.

--- a/sys/src/cmd/jpg/bmp.c
+++ b/sys/src/cmd/jpg/bmp.c
@@ -24,6 +24,16 @@
 
 Rawimage** readbmp(int fd, int colorspace);
 
+Rectangle
+imager(Image *i)
+{
+	Point p1, p2;
+
+	p1 = addpt(divpt(subpt(i->r.max, i->r.min), 2), i->r.min);
+	p2 = addpt(divpt(subpt(screen->clipr.max, screen->clipr.min), 2), screen->clipr.min);
+	return rectaddpt(i->r, subpt(p2, p1));
+}
+
 void
 eresized(int new)
 {
@@ -35,9 +45,7 @@
 	}
 	if(image == nil)
 		return;
-	r = insetrect(screen->clipr, Edge+Border);
-	r.max.x = r.min.x+Dx(image->r);
-	r.max.y = r.min.y+Dy(image->r);
+	r = imager(image);
 	border(screen, r, -Border, nil, ZP);
 	drawop(screen, r, image, nil, image->r.min, S);
 	flushimage(display, 1);
--- a/sys/src/cmd/jpg/gif.c
+++ b/sys/src/cmd/jpg/gif.c
@@ -26,14 +26,14 @@
 Rectangle
 imager(void)
 {
-	Rectangle r;
+	Point p1, p2;
 
 	if(allims==nil || allims[0]==nil)
 		return screen->r;
-	r = insetrect(screen->clipr, Edge+Border);
-	r.max.x = r.min.x+Dx(allims[0]->r);
-	r.max.y = r.min.y+Dy(allims[0]->r);
-	return r;
+
+	p1 = addpt(divpt(subpt(allims[0]->r.max, allims[0]->r.min), 2), allims[0]->r.min);
+	p2 = addpt(divpt(subpt(screen->clipr.max, screen->clipr.min), 2), screen->clipr.min);
+	return rectaddpt(allims[0]->r, subpt(p2, p1));
 }
 
 void
--- a/sys/src/cmd/jpg/jpg.c
+++ b/sys/src/cmd/jpg/jpg.c
@@ -26,6 +26,16 @@
 
 char	*show(int, char*, int);
 
+Rectangle
+imager(Image *i)
+{
+	Point p1, p2;
+
+	p1 = addpt(divpt(subpt(i->r.max, i->r.min), 2), i->r.min);
+	p2 = addpt(divpt(subpt(screen->clipr.max, screen->clipr.min), 2), screen->clipr.min);
+	return rectaddpt(i->r, subpt(p2, p1));
+}
+
 void
 eresized(int new)
 {
@@ -37,9 +47,7 @@
 	}
 	if(image == nil)
 		return;
-	r = insetrect(screen->clipr, Edge+Border);
-	r.max.x = r.min.x+Dx(image->r);
-	r.max.y = r.min.y+Dy(image->r);
+	r = imager(image);
 	border(screen, r, -Border, nil, ZP);
 	drawop(screen, r, image, nil, image->r.min, S);
 	flushimage(display, 1);
--- a/sys/src/cmd/jpg/png.c
+++ b/sys/src/cmd/jpg/png.c
@@ -23,6 +23,16 @@
 
 char	*show(int, char*, int);
 
+Rectangle
+imager(Image *i)
+{
+	Point p1, p2;
+
+	p1 = addpt(divpt(subpt(i->r.max, i->r.min), 2), i->r.min);
+	p2 = addpt(divpt(subpt(screen->clipr.max, screen->clipr.min), 2), screen->clipr.min);
+	return rectaddpt(i->r, subpt(p2, p1));
+}
+
 void
 eresized(int new)
 {
@@ -34,9 +44,7 @@
 	}
 	if(image == nil)
 		return;
-	r = insetrect(screen->clipr, Edge+Border);
-	r.max.x = r.min.x+Dx(image->r);
-	r.max.y = r.min.y+Dy(image->r);
+	r = imager(image);
 	border(screen, r, -Border, nil, ZP);
 	draw(screen, r, image, nil, image->r.min);
 	flushimage(display, 1);
--- a/sys/src/cmd/jpg/ppm.c
+++ b/sys/src/cmd/jpg/ppm.c
@@ -22,6 +22,16 @@
 
 char	*show(int, char*);
 
+Rectangle
+imager(Image *i)
+{
+	Point p1, p2;
+
+	p1 = addpt(divpt(subpt(i->r.max, i->r.min), 2), i->r.min);
+	p2 = addpt(divpt(subpt(screen->clipr.max, screen->clipr.min), 2), screen->clipr.min);
+	return rectaddpt(i->r, subpt(p2, p1));
+}
+
 void
 eresized(int new)
 {
@@ -33,9 +43,7 @@
 	}
 	if(image == nil)
 		return;
-	r = insetrect(screen->clipr, Edge+Border);
-	r.max.x = r.min.x+Dx(image->r);
-	r.max.y = r.min.y+Dy(image->r);
+	r = imager(image);
 	border(screen, r, -Border, nil, ZP);
 	drawop(screen, r, image, nil, image->r.min, S);
 	flushimage(display, 1);
--- a/sys/src/cmd/jpg/tga.c
+++ b/sys/src/cmd/jpg/tga.c
@@ -24,6 +24,16 @@
 
 Rawimage** readtga(int fd);
 
+Rectangle
+imager(Image *i)
+{
+	Point p1, p2;
+
+	p1 = addpt(divpt(subpt(i->r.max, i->r.min), 2), i->r.min);
+	p2 = addpt(divpt(subpt(screen->clipr.max, screen->clipr.min), 2), screen->clipr.min);
+	return rectaddpt(i->r, subpt(p2, p1));
+}
+
 void
 eresized(int new)
 {
@@ -35,9 +45,7 @@
 	}
 	if(image == nil)
 		return;
-	r = insetrect(screen->clipr, Edge+Border);
-	r.max.x = r.min.x+Dx(image->r);
-	r.max.y = r.min.y+Dy(image->r);
+	r = imager(image);
 	border(screen, r, -Border, nil, ZP);
 	drawop(screen, r, image, nil, image->r.min, S);
 	flushimage(display, 1);
--- a/sys/src/cmd/jpg/tif.c
+++ b/sys/src/cmd/jpg/tif.c
@@ -22,6 +22,16 @@
 int init(void);
 char *show(int, char *, int);
 
+Rectangle
+imager(Image *i)
+{
+	Point p1, p2;
+
+	p1 = addpt(divpt(subpt(i->r.max, i->r.min), 2), i->r.min);
+	p2 = addpt(divpt(subpt(screen->clipr.max, screen->clipr.min), 2), screen->clipr.min);
+	return rectaddpt(i->r, subpt(p2, p1));
+}
+
 void
 eresized(int new)
 {
@@ -31,9 +41,7 @@
 		sysfatal("getwindow: %r");
 	if(image == nil)
 		return;
-	r = insetrect(screen->clipr, Edge+Border);
-	r.max.x = r.min.x + Dx(image->r);
-	r.max.y = r.min.y + Dy(image->r);
+	r = imager(image);
 	border(screen, r, -Border, nil, ZP);
 	drawop(screen, r, image, nil, image->r.min, S);
 	flushimage(display, 1);
--- a/sys/src/cmd/jpg/v210.c
+++ b/sys/src/cmd/jpg/v210.c
@@ -24,6 +24,16 @@
 
 Rawimage** readV210(int fd, int colorspace);
 
+Rectangle
+imager(Image *i)
+{
+	Point p1, p2;
+
+	p1 = addpt(divpt(subpt(i->r.max, i->r.min), 2), i->r.min);
+	p2 = addpt(divpt(subpt(screen->clipr.max, screen->clipr.min), 2), screen->clipr.min);
+	return rectaddpt(i->r, subpt(p2, p1));
+}
+
 void
 eresized(int new)
 {
@@ -35,9 +45,7 @@
 	}
 	if(image == nil)
 		return;
-	r = insetrect(screen->clipr, Edge+Border);
-	r.max.x = r.min.x+Dx(image->r);
-	r.max.y = r.min.y+Dy(image->r);
+	r = imager(image);
 	border(screen, r, -Border, nil, ZP);
 	drawop(screen, r, image, nil, image->r.min, S);
 	flushimage(display, 1);
--- a/sys/src/cmd/jpg/yuv.c
+++ b/sys/src/cmd/jpg/yuv.c
@@ -24,6 +24,16 @@
 
 Rawimage** readyuv(int fd, int colorspace);
 
+Rectangle
+imager(Image *i)
+{
+	Point p1, p2;
+
+	p1 = addpt(divpt(subpt(i->r.max, i->r.min), 2), i->r.min);
+	p2 = addpt(divpt(subpt(screen->clipr.max, screen->clipr.min), 2), screen->clipr.min);
+	return rectaddpt(i->r, subpt(p2, p1));
+}
+
 void
 eresized(int new)
 {
@@ -35,9 +45,7 @@
 	}
 	if(image == nil)
 		return;
-	r = insetrect(screen->clipr, Edge+Border);
-	r.max.x = r.min.x+Dx(image->r);
-	r.max.y = r.min.y+Dy(image->r);
+	r = imager(image);
 	border(screen, r, -Border, nil, ZP);
 	drawop(screen, r, image, nil, image->r.min, S);
 	flushimage(display, 1);