コード例 #1
0
ファイル: anim.c プロジェクト: adsr/agar
/* Insert a new animation frame. */
int
AG_AnimFrameNew(AG_Anim *a, const AG_Surface *su)
{
	AG_AnimFrame *afNew, *af;
	AG_Surface *suTmp = NULL;
	int nf;

	AG_MutexLock(&a->lock);

	if (su->w != a->w || su->h != a->h) {
		if (AG_ScaleSurface(su, a->w, a->h, &suTmp) == -1)
			goto fail;
	} else {
		if ((suTmp = AG_SurfaceConvert(su, a->format)) == NULL)
			goto fail;
	}

	if ((afNew = TryRealloc(a->f, (a->n+1)*sizeof(AG_AnimFrame))) == NULL) {
		goto fail;
	}
	a->f = afNew;
	af = &a->f[a->n];
	af->flags = 0;
	if ((af->pixels = TryMalloc(su->h*a->pitch)) == NULL) {
		a->n--;
		goto fail;
	}
	memcpy(af->pixels, suTmp->pixels, su->h*a->pitch);
	nf = a->n++;
	AG_MutexUnlock(&a->lock);

	AG_SurfaceFree(suTmp);
	return (nf);
fail:
	AG_MutexUnlock(&a->lock);
	if (suTmp != NULL) {
		AG_SurfaceFree(suTmp);
	}
	return (-1);
}
コード例 #2
0
ファイル: agar_main.cpp プロジェクト: Artanejp/XM7-for-SDL
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.
      }
   }

}