/* Load an animation from a series of PNG files. */ AG_Anim * AG_AnimFromPNGs(const char *pattern) { AG_Anim *a = NULL; AG_Surface *su; char path[AG_PATHNAME_MAX]; int i; for (i = 0; ; i++) { Snprintf(path, sizeof(path), pattern, i); if (!AG_FileExists(path)) { if (i == 0) { continue; } else { break; } } if ((su = AG_SurfaceFromPNG(path)) == NULL) { break; } if (a == NULL) { a = AG_AnimRGBA(su->w, su->h, su->format->BitsPerPixel, 0, su->format->Rmask, su->format->Gmask, su->format->Bmask, su->format->Amask); if (a == NULL) { AG_SurfaceFree(su); return (NULL); } } if (AG_AnimFrameNew(a,su) == -1) { goto fail; } } return (a); fail: AG_AnimFree(a); return (NULL); }
BOOL LoadGlobalIconPng(char *path, char *filename) { char fullpath[MAXPATHLEN + 1]; int len; if(filename == NULL) return FALSE; if(strlen(filename) >= MAXPATHLEN) return FALSE; fullpath[0] = '\0'; if(path == NULL) { #ifdef RSSDIR strcpy(fullpath, RSSDIR); #else strcpy(fullpath, "./.xm7/"); #endif } else { if(strlen(path) >= MAXPATHLEN) return FALSE; strcpy(fullpath, path); } len = strlen(fullpath) + strlen(filename); if(len >= MAXPATHLEN) return FALSE; strcat(fullpath, filename); if(!AG_FileExists(fullpath)) { // Fallback return FALSE; } else { AG_Surface *mark; AG_Surface *scaled; scaled = NULL; mark = AG_SurfaceFromPNG(fullpath); if(mark != NULL) { SDL_Surface *icon; if(AG_ScaleSurface(mark, 32, 32, &scaled) < 0) { // Scale because Windows-Icon must be 32x32. AG_SurfaceFree(mark); return FALSE; } icon = (SDL_Surface *)AG_SurfaceExportSDL(scaled); if(icon == NULL) { AG_SurfaceFree(scaled); AG_SurfaceFree(mark); return FALSE; } if(AG_UsingSDL(NULL) && (agDriverSw != NULL)) { SDL_WM_SetIcon(icon, NULL); } else if(agDriverMw) { // AG_WindowSetIcon(MainWindow, mark); } SDL_FreeSurface(icon); AG_SurfaceFree(scaled); AG_SurfaceFree(mark); return TRUE; } else { return FALSE; // Illegal PNG. } } }
/* 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); }