1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89
|
/************************************************************************/
/* */
/* Retrieve images. */
/* */
/************************************************************************/
# include "config.h"
# include "appFrame.h"
# include "appIcons.h"
# include <X11/xpm.h>
# include <debugon.h>
static XpmAttributes APP_XpmAttributes;
int appGetImagePixmap( EditApplication * ea,
const char * name,
Pixmap * pPixmap )
{
int i;
int res;
NamedPicture * np;
Pixmap pixmap= (Pixmap)0;
Pixmap shapeMask= (Pixmap)0;
if ( ! APP_XpmAttributes.valuemask )
{
APP_XpmAttributes.valuemask= XpmRGBCloseness;
APP_XpmAttributes.red_closeness= 8;
APP_XpmAttributes.green_closeness= 8;
APP_XpmAttributes.blue_closeness= 16;
}
np= ea->eaNamedPictures;
for ( i= 0; i < ea->eaNamedPictureCount; np++, i++ )
{
if ( ! strcmp( name, np->npPictureName ) )
{ break; }
}
if ( i >= ea->eaNamedPictureCount )
{ SLDEB(name,ea->eaNamedPictureCount); return -1; }
if ( np->npPixmap )
{ *pPixmap= np->npPixmap; return 0; }
res= XpmCreatePixmapFromData( ea->eaDisplay,
RootWindow( ea->eaDisplay, DefaultScreen( ea->eaDisplay ) ),
np->npBuffer, &pixmap, &shapeMask,
&APP_XpmAttributes );
while( res == XpmColorFailed && APP_XpmAttributes.red_closeness < 10000 )
{
APP_XpmAttributes.red_closeness *= 2;
APP_XpmAttributes.green_closeness *= 2;
APP_XpmAttributes.blue_closeness *= 2;
res= XpmCreatePixmapFromData( ea->eaDisplay,
RootWindow( ea->eaDisplay, DefaultScreen( ea->eaDisplay ) ),
np->npBuffer, &pixmap, &shapeMask,
&APP_XpmAttributes );
}
if ( res )
{ SLDEB(name,res); return -1; }
np->npPixmap= pixmap;
*pPixmap= pixmap; return 0;
}
void appDiscardImagePixmaps( EditApplication * ea )
{
int i;
NamedPicture * np;
np= ea->eaNamedPictures;
for ( i= 0; i < ea->eaNamedPictureCount; np++, i++ )
{
if ( np->npPixmap )
{ XFreePixmap( ea->eaDisplay, np->npPixmap ); np->npPixmap= None; }
}
return;
}
|