Esempio n. 1
0
/* Callback routine for AG_FileDlg. */
static int
LoadImage(AG_Event *event)
{
/*	AG_FileDlg *fd = AG_SELF(); */
	AG_Window *winParent = AG_PTR(1);
	char *file = AG_STRING(2);
	AG_FileType *ft = AG_PTR(3);
	AG_Surface *s;
	AG_Window *win;
	AG_Scrollview *sv;
	Uint8 *pSrc;
	Uint i;

	if (strcmp(ft->exts[0], "*.bmp") == 0) {
		s = AG_SurfaceFromBMP(file);
	} else if (strcmp(ft->exts[0], "*.jpg") == 0) {
		s = AG_SurfaceFromJPEG(file);
	} else if (strcmp(ft->exts[0], "*.png") == 0) {
		s = AG_SurfaceFromPNG(file);
	} else {
		AG_SetError("Unrecognized format: %s", ft->exts[0]);
		return (-1);
	}
	if (s == NULL)
		return (-1);

	if ((win = AG_WindowNew(0)) == NULL) {
		AG_SurfaceFree(s);
		return (-1);
	}
	AG_WindowSetCaption(win, "Image <%s>", AG_ShortFilename(file));

	/* We use AG_FileOptionFoo() to retrieve per-type options. */
	if (AG_FileOptionBool(ft,"invert")) {
		pSrc = (Uint8 *)s->pixels;
		for (i = 0; i < s->w*s->h; i++) {
			Uint8 r, g, b;

			AG_GetPixelRGB(AG_GET_PIXEL(s,pSrc), s->format,
			    &r,&g,&b);
			r = 255 - r;
			g = 255 - g;
			b = 255 - b;
			AG_PUT_PIXEL(s, pSrc,
			    AG_MapPixelRGB(s->format, r,g,b));
			pSrc += s->format->BytesPerPixel;
		}
	}

	/*
	 * Place an AG_Pixmap(3) widget inside of an AG_Scrollview(3) so
	 * the user can pan the view.
	 */
	sv = AG_ScrollviewNew(win, AG_SCROLLVIEW_BY_MOUSE|AG_SCROLLVIEW_EXPAND);
	AG_PixmapFromSurfaceScaled(sv, 0, s, s->w, s->h);
	AG_SurfaceFree(s);

	AG_WindowSetGeometry(win, -1, -1, 320, 240);
	AG_WindowAttach(winParent, win);
	AG_WindowShow(win);

	return (0);
}
Esempio n. 2
0
static int
TestGUI(void *obj, AG_Window *win)
{
	char path[AG_PATHNAME_MAX];
	AG_Surface *su, *su2;

	/* Load, display and save a PNG file. */
	AG_LabelNewS(win, 0, "Loading agar.png:");
	if (!AG_ConfigFile("load-path", "agar", "png", path, sizeof(path))) {
		if ((su = AG_SurfaceFromPNG(path)) == NULL) {
			AG_LabelNew(win, 0, "%s: %s", path, AG_GetError());
		} else {
			AG_PixmapFromSurface(win, 0, su);
		}
		AG_LabelNewS(win, 0, "Saving agar.png:");
		if (AG_SurfaceExportPNG(su, "agar-save.png") == -1) {
			AG_LabelNew(win, 0, "Save failed: %s", AG_GetError());
		} else {
			if ((su2 = AG_SurfaceFromPNG("agar-save.png")) == NULL) {
				AG_LabelNew(win, 0, "Load failed: %s", AG_GetError());
			} else {
				AG_PixmapFromSurface(win, 0, su2);
			}
		}
	} else {
		AG_LabelNewS(win, 0, AG_GetError());
	}

	/* Load/save a PNG file in indexed color format. */
	AG_LabelNewS(win, 0, "Loading agar-index.png:");
	if (!AG_ConfigFile("load-path", "agar-index", "png", path, sizeof(path))) {
		if ((su = AG_SurfaceFromPNG(path)) == NULL) {
			AG_LabelNew(win, 0, "Failed: %s", AG_GetError());
		} else {
			AG_PixmapFromSurface(win, 0, su);
		}
		AG_LabelNewS(win, 0, "Saving agar-index.png:");
		if (AG_SurfaceExportPNG(su, "agar-index-save.png") == -1) {
			AG_LabelNew(win, 0, "Save failed: %s", AG_GetError());
		} else {
			if ((su2 = AG_SurfaceFromPNG("agar-index-save.png")) == NULL) {
				AG_LabelNew(win, 0, "Load failed: %s", AG_GetError());
			} else {
				AG_PixmapFromSurface(win, 0, su2);
			}
		}
	} else {
		AG_LabelNewS(win, 0, AG_GetError());
	}

	/* Load/save a JPEG file. */
	AG_LabelNewS(win, 0, "Loading pepe.jpg:");
	if (!AG_ConfigFile("load-path", "pepe", "jpg", path, sizeof(path))) {
		if ((su = AG_SurfaceFromJPEG(path)) == NULL) {
			AG_LabelNew(win, 0, "Failed: %s", AG_GetError());
		} else {
			AG_PixmapFromSurface(win, 0, su);
		}
		AG_LabelNewS(win, 0, "Saving pepe.jpg:");
		if (AG_SurfaceExportJPEG(su, "pepe-save.jpg") == -1) {
			AG_LabelNew(win, 0, "Save failed: %s", AG_GetError());
		} else {
			if ((su2 = AG_SurfaceFromJPEG("pepe-save.jpg")) == NULL) {
				AG_LabelNew(win, 0, "Load failed: %s", AG_GetError());
			} else {
				AG_PixmapFromSurface(win, 0, su2);
			}
		}
	} else {
		AG_LabelNewS(win, 0, AG_GetError());
	}
	return (0);
}