|
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 |
|