/* 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); }
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); }