Blame lib/Xm/GetPixData.c

Packit b099d7
/* $XConsortium: GetPixData.c /main/6 1995/10/25 20:05:46 cde-sun $ */
Packit b099d7
/*
Packit b099d7
 * Motif
Packit b099d7
 *
Packit b099d7
 * Copyright (c) 1987-2012, The Open Group. All rights reserved.
Packit b099d7
 *
Packit b099d7
 * These libraries and programs are free software; you can
Packit b099d7
 * redistribute them and/or modify them under the terms of the GNU
Packit b099d7
 * Lesser General Public License as published by the Free Software
Packit b099d7
 * Foundation; either version 2 of the License, or (at your option)
Packit b099d7
 * any later version.
Packit b099d7
 *
Packit b099d7
 * These libraries and programs are distributed in the hope that
Packit b099d7
 * they will be useful, but WITHOUT ANY WARRANTY; without even the
Packit b099d7
 * implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
Packit b099d7
 * PURPOSE. See the GNU Lesser General Public License for more
Packit b099d7
 * details.
Packit b099d7
 *
Packit b099d7
 * You should have received a copy of the GNU Lesser General Public
Packit b099d7
 * License along with these librararies and programs; if not, write
Packit b099d7
 * to the Free Software Foundation, Inc., 51 Franklin Street, Fifth
Packit b099d7
 * Floor, Boston, MA 02110-1301 USA
Packit b099d7
 * 
Packit b099d7
 */
Packit b099d7
/*
Packit b099d7
 * HISTORY
Packit b099d7
 */
Packit b099d7
Packit b099d7
#ifdef HAVE_CONFIG_H
Packit b099d7
#include <config.h>
Packit b099d7
#endif
Packit b099d7
Packit b099d7
Packit b099d7
#include <Xm/XmP.h>
Packit b099d7
#include "ImageCachI.h"
Packit b099d7
#include "XmI.h"
Packit b099d7
Packit b099d7
/*******************************************************************
Packit b099d7
 *
Packit b099d7
 * XmeGetPixmapData.
Packit b099d7
 *   see if this pixmap is in the cache. If it is then return all the
Packit b099d7
 *   gory details about it. If not put it in the cache first.
Packit b099d7
 *   The RETURN pointers can be NULL.
Packit b099d7
 *   This function never fails (unless pixmap bad id) and always returns
Packit b099d7
 *   valid information for depth, with, height, etc .
Packit b099d7
 *   It returns True if the pixmap was in the cache to start with
Packit b099d7
 *   and True if it had to fetch it to the server first.
Packit b099d7
 *
Packit b099d7
 *******************************************************************/
Packit b099d7
Boolean 
Packit b099d7
XmeGetPixmapData(
Packit b099d7
    Screen *screen,
Packit b099d7
    Pixmap pixmap,
Packit b099d7
    char **image_name,
Packit b099d7
    int *depth,
Packit b099d7
    Pixel *foreground,
Packit b099d7
    Pixel *background,
Packit b099d7
    int *hot_x,
Packit b099d7
    int *hot_y,
Packit b099d7
    unsigned int *width,
Packit b099d7
    unsigned int *height)
Packit b099d7
{
Packit b099d7
    char *loc_image_name;
Packit b099d7
    int loc_depth;
Packit b099d7
    Pixel loc_foreground;
Packit b099d7
    Pixel loc_background;
Packit b099d7
    int loc_hot_x;
Packit b099d7
    int loc_hot_y;
Packit b099d7
    unsigned int loc_width = 0;
Packit b099d7
    unsigned int loc_height;
Packit b099d7
    XtAppContext app;
Packit b099d7
    
Packit b099d7
    app = XtDisplayToApplicationContext(DisplayOfScreen(screen));
Packit b099d7
    
Packit b099d7
    _XmAppLock(app);
Packit b099d7
    
Packit b099d7
    /* support passed NULL argument */
Packit b099d7
    if (!image_name) image_name = &loc_image_name ;
Packit b099d7
    if (!depth) depth = &loc_depth ;
Packit b099d7
    if (!background) background = &loc_background ;
Packit b099d7
    if (!foreground) foreground = &loc_foreground ;
Packit b099d7
    if (!hot_x) hot_x = &loc_hot_x ;
Packit b099d7
    if (!hot_y) hot_y = &loc_hot_y ;
Packit b099d7
    if (!width) width = &loc_width ;
Packit b099d7
    if (!height) height = &loc_height ;
Packit b099d7
Packit b099d7
    if (_XmGetPixmapData(screen, pixmap, image_name, depth, foreground,
Packit b099d7
			 background, hot_x, hot_y, width, height)) {
Packit b099d7
	_XmAppUnlock(app);
Packit b099d7
	return True ;
Packit b099d7
    }
Packit b099d7
Packit b099d7
    
Packit b099d7
    /* not in the cache, generate an incomplete entry in the pixmap cache */
Packit b099d7
    /* Use a magic name, which will have _XmCachePixmap not cache this
Packit b099d7
       one in the pixmap_data name based cache */
Packit b099d7
Packit b099d7
    if (_XmCachePixmap(pixmap, screen, DIRECT_PIXMAP_CACHED, 1, 0, 0, 0, 0)) {
Packit b099d7
	/* and query again */
Packit b099d7
	_XmGetPixmapData(screen, pixmap, image_name, depth, foreground,
Packit b099d7
			 background, hot_x, hot_y, width, height);
Packit b099d7
    }
Packit b099d7
Packit b099d7
    _XmAppUnlock(app);
Packit b099d7
Packit b099d7
    return (False);
Packit b099d7
}
Packit b099d7