|
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 |
* HISTORY
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
#ifdef HAVE_CONFIG_H
|
|
Packit |
b099d7 |
#include <config.h>
|
|
Packit |
b099d7 |
#endif
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
#ifdef REV_INFO
|
|
Packit |
b099d7 |
#ifndef lint
|
|
Packit |
b099d7 |
static char rcsid[] = "$XConsortium: Mrmicon.c /main/14 1996/11/13 14:01:43 drk $"
|
|
Packit |
b099d7 |
#endif
|
|
Packit |
b099d7 |
#endif
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/* (c) Copyright 1989, 1990, DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASS. */
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
*++
|
|
Packit |
b099d7 |
* FACILITY:
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* UIL Resource Manager (URM)
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* ABSTRACT:
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* This module contains routines which operate on URM icon images -
|
|
Packit |
b099d7 |
* RGMIconImage structs.
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
*--
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* INCLUDE FILES
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
#include <stdio.h>
|
|
Packit |
b099d7 |
#include <Mrm/MrmAppl.h>
|
|
Packit |
b099d7 |
#include <Mrm/Mrm.h>
|
|
Packit |
b099d7 |
#include "MrmMsgI.h"
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
*++
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* PROCEDURE DESCRIPTION:
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* This routine creates and returns an X pixmap from a URM icon
|
|
Packit |
b099d7 |
* for some widget. It uses the foreground and background obtainable
|
|
Packit |
b099d7 |
* from the widget as required.
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* FORMAL PARAMETERS:
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* icon URM icon image to be converted to X pixmap
|
|
Packit |
b099d7 |
* screen screen to use for pixmap
|
|
Packit |
b099d7 |
* display display to use for pixmap
|
|
Packit |
b099d7 |
* fgpix foreground color for pixmap
|
|
Packit |
b099d7 |
* bgpix background color for pixmap
|
|
Packit |
b099d7 |
* pixmap to return resulting X pixmap
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* IMPLICIT INPUTS:
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* IMPLICIT OUTPUTS:
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* FUNCTION VALUE:
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* URM status
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* SIDE EFFECTS:
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
*--
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
Cardinal
|
|
Packit |
b099d7 |
UrmCreatePixmap (RGMIconImagePtr icon,
|
|
Packit |
b099d7 |
Screen *screen,
|
|
Packit |
b099d7 |
Display *display,
|
|
Packit |
b099d7 |
Pixel fgpix,
|
|
Packit |
b099d7 |
Pixel bgpix,
|
|
Packit |
b099d7 |
Pixel *pixmap,
|
|
Packit |
b099d7 |
Widget parent)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* Local variables
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
Cardinal result; /* function results */
|
|
Packit |
b099d7 |
RGMColorTablePtr ctable; /* color table in icon */
|
|
Packit |
b099d7 |
unsigned maxbits; /* # bits required for X image */
|
|
Packit |
b099d7 |
int srcpix; /* # bits per pixel in icon (actual) */
|
|
Packit |
b099d7 |
int dds ;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* Convert the color table colors to pixels.
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
ctable = icon->color_table.ctptr;
|
|
Packit |
b099d7 |
result =
|
|
Packit |
b099d7 |
Urm__RealizeColorTable (screen, display, fgpix, bgpix, ctable, parent);
|
|
Packit |
b099d7 |
if ( result != MrmSUCCESS ) return result;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* Use the depth of screen to infer the number of bits required to
|
|
Packit |
b099d7 |
* hold the pixels in X format. The ZPixmap format only supports 1, 8, 16,
|
|
Packit |
b099d7 |
* and 32 bit pixels, so we always map to one of these sizes.
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
if (parent) dds = parent->core.depth;
|
|
Packit |
b099d7 |
else dds = DefaultDepthOfScreen(screen) ;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if (dds == 1)
|
|
Packit |
b099d7 |
maxbits = 1;
|
|
Packit |
b099d7 |
else if (dds <= 8)
|
|
Packit |
b099d7 |
maxbits = 8;
|
|
Packit |
b099d7 |
else if (dds <= 16)
|
|
Packit |
b099d7 |
maxbits = 16;
|
|
Packit |
b099d7 |
else
|
|
Packit |
b099d7 |
maxbits = 32;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* See if the icon can be mapped as a bitmap. This will be true if the
|
|
Packit |
b099d7 |
* color table has only FG/BG entries, or uses only those entries.
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
if ( ctable->count <= 2 ) maxbits = 1;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* Compute the number of bits available in the icon pixmap
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
switch ( icon->pixel_size )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
case URMPixelSize1Bit:
|
|
Packit |
b099d7 |
srcpix = 1;
|
|
Packit |
b099d7 |
break;
|
|
Packit |
b099d7 |
case URMPixelSize2Bit:
|
|
Packit |
b099d7 |
srcpix = 2;
|
|
Packit |
b099d7 |
break;
|
|
Packit |
b099d7 |
case URMPixelSize4Bit:
|
|
Packit |
b099d7 |
srcpix = 4;
|
|
Packit |
b099d7 |
break;
|
|
Packit |
b099d7 |
case URMPixelSize8Bit:
|
|
Packit |
b099d7 |
srcpix = 8;
|
|
Packit |
b099d7 |
break;
|
|
Packit |
b099d7 |
default:
|
|
Packit |
b099d7 |
return MrmNOT_VALID;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* Map the icon image pixmap from color table indices to Pixel values.
|
|
Packit |
b099d7 |
* There are three cases:
|
|
Packit |
b099d7 |
* maxbits == 1; a bitmap is possible, so map to a bitmap.
|
|
Packit |
b099d7 |
* maxbits <= # bits/pixel in pixmap. Map in place. In fact,
|
|
Packit |
b099d7 |
* only works if maxbits == srcpix == 8.
|
|
Packit |
b099d7 |
* maxbits > # bits/pixel. Map to allocated pixmap.
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* Each of the three routines which performs these mappings completes
|
|
Packit |
b099d7 |
* the entire process of doing the mapping and creating the X pixmap.
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
if ( maxbits == 1 )
|
|
Packit |
b099d7 |
return Urm__MapIconBitmap
|
|
Packit |
b099d7 |
(icon, srcpix, ctable, screen, display, pixmap);
|
|
Packit |
b099d7 |
if ((maxbits == 8) && (srcpix == 8))
|
|
Packit |
b099d7 |
return Urm__MapIconReplace
|
|
Packit |
b099d7 |
(icon, srcpix, ctable, screen, display, pixmap, parent);
|
|
Packit |
b099d7 |
if ( maxbits > srcpix )
|
|
Packit |
b099d7 |
return Urm__MapIconAllocate
|
|
Packit |
b099d7 |
(icon, srcpix, maxbits, ctable, screen, display, pixmap, parent);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
return MrmNOT_VALID;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
*++
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* PROCEDURE DESCRIPTION:
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* This routine creates and returns an X pixmap of depth 1 from a URM icon
|
|
Packit |
b099d7 |
* for some widget.
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* FORMAL PARAMETERS:
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* icon URM icon image to be converted to X pixmap
|
|
Packit |
b099d7 |
* screen screen to use for pixmap
|
|
Packit |
b099d7 |
* display display to use for pixmap
|
|
Packit |
b099d7 |
* pixmap to return resulting X pixmap
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* IMPLICIT INPUTS:
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* IMPLICIT OUTPUTS:
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* FUNCTION VALUE:
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* URM status
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* SIDE EFFECTS:
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
*--
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
Cardinal
|
|
Packit |
b099d7 |
UrmCreateBitmap (RGMIconImagePtr icon,
|
|
Packit |
b099d7 |
Screen *screen,
|
|
Packit |
b099d7 |
Display *display,
|
|
Packit |
b099d7 |
Pixel *pixmap)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* Local variables
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
int srcpix; /* # bits per pixel in icon (actual) */
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* Compute the number of bits available in the icon pixmap
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
switch ( icon->pixel_size )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
case URMPixelSize1Bit:
|
|
Packit |
b099d7 |
srcpix = URMPixelSize1Bit;
|
|
Packit |
b099d7 |
break;
|
|
Packit |
b099d7 |
default:
|
|
Packit |
b099d7 |
return MrmNOT_VALID;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
return Urm__MapIconBitmapDepth1 (icon, srcpix, screen, display, pixmap);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
*++
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* PROCEDURE DESCRIPTION:
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* This routine creates and returns an X pixmap from the X bitmap file
|
|
Packit |
b099d7 |
* name specified. It uses the foreground and background as needed.
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* FORMAL PARAMETERS:
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* filename file containing the bitmap to be converted to X pixmap
|
|
Packit |
b099d7 |
* screen screen to use for pixmap
|
|
Packit |
b099d7 |
* display display to use for pixmap - not used
|
|
Packit |
b099d7 |
* fgint foreground color for pixmap
|
|
Packit |
b099d7 |
* bgint background color for pixmap
|
|
Packit |
b099d7 |
* pixmap to return resulting X pixmap
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* IMPLICIT INPUTS:
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* IMPLICIT OUTPUTS:
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* FUNCTION VALUE:
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* URM status
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* SIDE EFFECTS:
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
*--
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
Cardinal
|
|
Packit |
b099d7 |
Urm__CW_ReadBitmapFile (String filename,
|
|
Packit |
b099d7 |
Screen *screen,
|
|
Packit |
b099d7 |
Pixel fgint,
|
|
Packit |
b099d7 |
Pixel bgint,
|
|
Packit |
b099d7 |
Pixmap *pixmap,
|
|
Packit |
b099d7 |
Widget parent)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
int depth;
|
|
Packit |
b099d7 |
char err_msg[300];
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
** Create a pixmap from a X bitmap file specification
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
depth = parent ? parent->core.depth : DefaultDepthOfScreen(screen);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
*pixmap = XmGetPixmapByDepth(screen, filename, fgint, bgint, depth);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if (*pixmap == XmUNSPECIFIED_PIXMAP)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
pixmap = 0;
|
|
Packit |
b099d7 |
sprintf (err_msg, _MrmMMsg_0033, filename);
|
|
Packit |
b099d7 |
return Urm__UT_Error ("UrmReadBitmapFile", err_msg,
|
|
Packit |
b099d7 |
NULL, NULL, MrmFAILURE);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
return MrmSUCCESS;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
*++
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* PROCEDURE DESCRIPTION:
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* This routine maps the pixmap in the icon into a bitmap. The
|
|
Packit |
b099d7 |
* bitmap is written over pixmap data. The X pixmap is then
|
|
Packit |
b099d7 |
* constructed as an XYBitmap.
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* FORMAL PARAMETERS:
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* icon the IconImage being converted
|
|
Packit |
b099d7 |
* srcpix number of bits/pixel in icon
|
|
Packit |
b099d7 |
* ctable the color table for (in) icon
|
|
Packit |
b099d7 |
* screen screen for the X pixmap
|
|
Packit |
b099d7 |
* display display for the X pixmap
|
|
Packit |
b099d7 |
* pixmap to return the result
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* IMPLICIT INPUTS:
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* IMPLICIT OUTPUTS:
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* FUNCTION VALUE:
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* SIDE EFFECTS:
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
*--
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
Cardinal
|
|
Packit |
b099d7 |
Urm__MapIconBitmap(RGMIconImagePtr icon,
|
|
Packit |
b099d7 |
int srcpix,
|
|
Packit |
b099d7 |
RGMColorTablePtr ctable,
|
|
Packit |
b099d7 |
Screen *screen,
|
|
Packit |
b099d7 |
Display *display,
|
|
Packit |
b099d7 |
Pixmap *pixmap)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* Local variables
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
Pixel fgpix; /* foreground pixel value */
|
|
Packit |
b099d7 |
int iconwid; /* icon width */
|
|
Packit |
b099d7 |
int srclinebyt; /* # bytes per icon line */
|
|
Packit |
b099d7 |
int dstlinebyt; /* # bytes per bitmap line */
|
|
Packit |
b099d7 |
char *srcbytptr; /* image byte pointer */
|
|
Packit |
b099d7 |
char *dstbytptr; /* bitmap pointer */
|
|
Packit |
b099d7 |
int lin; /* icon line number */
|
|
Packit |
b099d7 |
int byt; /* line byte number */
|
|
Packit |
b099d7 |
int pix; /* line pixel number */
|
|
Packit |
b099d7 |
unsigned char srcbyt; /* icon image byte */
|
|
Packit |
b099d7 |
unsigned char dstbyt; /* mapped image byte */
|
|
Packit |
b099d7 |
int tndx; /* color table index */
|
|
Packit |
b099d7 |
XImage *imagep; /* X image */
|
|
Packit |
b099d7 |
GC gc;
|
|
Packit |
b099d7 |
XGCValues gcValues;
|
|
Packit |
b099d7 |
int endian; /* to determine which endian. */
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* Overwrite the icon data with a bitmap. Use 0 for background, 1 for
|
|
Packit |
b099d7 |
* foreground.
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
fgpix = ctable->item[URMColorTableFG].color_pixel;
|
|
Packit |
b099d7 |
iconwid = icon->width;
|
|
Packit |
b099d7 |
srclinebyt = (iconwid*srcpix+7) / 8;
|
|
Packit |
b099d7 |
dstlinebyt = (iconwid+7) / 8;
|
|
Packit |
b099d7 |
srcbytptr = icon->pixel_data.pdptr;
|
|
Packit |
b099d7 |
for ( lin=0 ; lin<icon->height ; lin++ )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
pix = 0;
|
|
Packit |
b099d7 |
dstbytptr = icon->pixel_data.pdptr + lin*dstlinebyt;
|
|
Packit |
b099d7 |
dstbyt = 0;
|
|
Packit |
b099d7 |
for ( byt=0 ; byt
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
srcbyt = *srcbytptr;
|
|
Packit |
b099d7 |
switch ( icon->pixel_size )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
case URMPixelSize1Bit:
|
|
Packit |
b099d7 |
*dstbytptr = srcbyt;
|
|
Packit |
b099d7 |
srcbytptr += 1;
|
|
Packit |
b099d7 |
dstbytptr += 1;
|
|
Packit |
b099d7 |
pix += 8;
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* NOTE: The original algorithm used here cleared any
|
|
Packit |
b099d7 |
* unused bits of the last byte. I don't think
|
|
Packit |
b099d7 |
* the protocol requires that...
|
|
Packit |
b099d7 |
if ( pix > iconwid )
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
continue;
|
|
Packit |
b099d7 |
case URMPixelSize2Bit:
|
|
Packit |
b099d7 |
tndx = srcbyt & 0x3;
|
|
Packit |
b099d7 |
if ( pix < iconwid )
|
|
Packit |
b099d7 |
if ( ctable->item[tndx].color_pixel == fgpix)
|
|
Packit |
b099d7 |
dstbyt |= 1<<(pix%8);
|
|
Packit |
b099d7 |
pix += 1;
|
|
Packit |
b099d7 |
srcbyt >>= 2;
|
|
Packit |
b099d7 |
tndx = srcbyt & 0x3;
|
|
Packit |
b099d7 |
if ( pix < iconwid )
|
|
Packit |
b099d7 |
if ( ctable->item[tndx].color_pixel == fgpix)
|
|
Packit |
b099d7 |
dstbyt |= 1<<(pix%8);
|
|
Packit |
b099d7 |
pix += 1;
|
|
Packit |
b099d7 |
srcbyt >>= 2;
|
|
Packit |
b099d7 |
tndx = srcbyt & 0x3;
|
|
Packit |
b099d7 |
if ( pix < iconwid )
|
|
Packit |
b099d7 |
if ( ctable->item[tndx].color_pixel == fgpix)
|
|
Packit |
b099d7 |
dstbyt |= 1<<(pix%8);
|
|
Packit |
b099d7 |
pix += 1;
|
|
Packit |
b099d7 |
srcbyt >>= 2;
|
|
Packit |
b099d7 |
tndx = srcbyt & 0x3;
|
|
Packit |
b099d7 |
if ( pix < iconwid )
|
|
Packit |
b099d7 |
if ( ctable->item[tndx].color_pixel == fgpix)
|
|
Packit |
b099d7 |
dstbyt |= 1<<(pix%8);
|
|
Packit |
b099d7 |
pix += 1;
|
|
Packit |
b099d7 |
break;
|
|
Packit |
b099d7 |
case URMPixelSize4Bit:
|
|
Packit |
b099d7 |
tndx = srcbyt & 0xF;
|
|
Packit |
b099d7 |
if ( pix < iconwid )
|
|
Packit |
b099d7 |
if ( ctable->item[tndx].color_pixel == fgpix)
|
|
Packit |
b099d7 |
dstbyt |= 1<<(pix%8);
|
|
Packit |
b099d7 |
pix += 1;
|
|
Packit |
b099d7 |
srcbyt >>= 4;
|
|
Packit |
b099d7 |
tndx = srcbyt & 0xF;
|
|
Packit |
b099d7 |
if ( pix < iconwid )
|
|
Packit |
b099d7 |
if ( ctable->item[tndx].color_pixel == fgpix)
|
|
Packit |
b099d7 |
dstbyt |= 1<<(pix%8);
|
|
Packit |
b099d7 |
pix += 1;
|
|
Packit |
b099d7 |
break;
|
|
Packit |
b099d7 |
case URMPixelSize8Bit:
|
|
Packit |
b099d7 |
if ( pix < iconwid )
|
|
Packit |
b099d7 |
if ( ctable->item[srcbyt].color_pixel == fgpix)
|
|
Packit |
b099d7 |
dstbyt |= 1<<(pix%8);
|
|
Packit |
b099d7 |
pix += 1;
|
|
Packit |
b099d7 |
break;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* NOTE: The "1Bit" case CONTINUEs directly and will never
|
|
Packit |
b099d7 |
* reach this point in the loop...
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
srcbytptr += 1;
|
|
Packit |
b099d7 |
if ( pix%8 == 0 )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
*dstbytptr = dstbyt;
|
|
Packit |
b099d7 |
dstbytptr += 1;
|
|
Packit |
b099d7 |
dstbyt = 0;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
if ( pix%8 != 0 )
|
|
Packit |
b099d7 |
*dstbytptr = dstbyt;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
imagep = XCreateImage(display,
|
|
Packit |
b099d7 |
DefaultVisualOfScreen(screen),
|
|
Packit |
b099d7 |
1,
|
|
Packit |
b099d7 |
XYBitmap,
|
|
Packit |
b099d7 |
0,
|
|
Packit |
b099d7 |
icon->pixel_data.pdptr,
|
|
Packit |
b099d7 |
(unsigned int)icon->width,
|
|
Packit |
b099d7 |
(unsigned int)icon->height,
|
|
Packit |
b099d7 |
8,
|
|
Packit |
b099d7 |
dstlinebyt);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if ( imagep == NULL )
|
|
Packit |
b099d7 |
return Urm__UT_Error ("Urm__MapIconBitmap", _MrmMMsg_0034,
|
|
Packit |
b099d7 |
NULL, NULL, MrmFAILURE);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* Well, Uil creates a uid icon in its byteorder, on his side
|
|
Packit |
b099d7 |
* XCreateImage creates an image in the byte_order of the server, so
|
|
Packit |
b099d7 |
* its not correct, we have to adjust the byte_order fields of this
|
|
Packit |
b099d7 |
* image to match those of the icon.
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
endian = 1;
|
|
Packit |
b099d7 |
imagep->bitmap_unit = 8 ;
|
|
Packit |
b099d7 |
if (*(char *) &endian) {
|
|
Packit |
b099d7 |
imagep->byte_order = LSBFirst ;
|
|
Packit |
b099d7 |
imagep->bitmap_bit_order = LSBFirst ;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
else {
|
|
Packit |
b099d7 |
imagep->byte_order = MSBFirst;
|
|
Packit |
b099d7 |
imagep->bitmap_bit_order = LSBFirst ;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
*pixmap = XCreatePixmap (display,
|
|
Packit |
b099d7 |
RootWindowOfScreen(screen),
|
|
Packit |
b099d7 |
icon->width,
|
|
Packit |
b099d7 |
icon->height,
|
|
Packit |
b099d7 |
(unsigned)DefaultDepthOfScreen(screen));
|
|
Packit |
b099d7 |
if ( *pixmap == (Pixmap)0)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
XFree((char*)imagep);
|
|
Packit |
b099d7 |
return Urm__UT_Error ("Urm__MapIconBitmap", _MrmMMsg_0035,
|
|
Packit |
b099d7 |
NULL, NULL, MrmFAILURE);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* Build a gc to use when drawing into the pixmap
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
gcValues.foreground = ctable->item[URMColorTableFG].color_pixel;
|
|
Packit |
b099d7 |
gcValues.background = ctable->item[URMColorTableBG].color_pixel;
|
|
Packit |
b099d7 |
gcValues.fill_style = FillTiled;
|
|
Packit |
b099d7 |
gcValues.tile = *pixmap;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
gc = XCreateGC (display,
|
|
Packit |
b099d7 |
RootWindowOfScreen (screen),
|
|
Packit |
b099d7 |
GCForeground | GCBackground | GCFillStyle | GCTile,
|
|
Packit |
b099d7 |
&gcValues);
|
|
Packit |
b099d7 |
if ( gc == NULL )
|
|
Packit |
b099d7 |
return Urm__UT_Error ("Urm__MapIconBitmap", _MrmMMsg_0036,
|
|
Packit |
b099d7 |
NULL, NULL, MrmFAILURE);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* Put bits into the pixmap
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
XPutImage (display,
|
|
Packit |
b099d7 |
*pixmap,
|
|
Packit |
b099d7 |
gc,
|
|
Packit |
b099d7 |
imagep,
|
|
Packit |
b099d7 |
0, 0, /* source x, y */
|
|
Packit |
b099d7 |
0, 0, icon->width, icon->height); /* dest, loc & size */
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
XFreeGC (display, gc);
|
|
Packit |
b099d7 |
XFree ((char*)imagep);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* Successfully created
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
return MrmSUCCESS;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
*++
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* PROCEDURE DESCRIPTION:
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* This routine maps the pixmap in the icon into a bitmap. The
|
|
Packit |
b099d7 |
* bitmap is written over pixmap data. The X pixmap is then
|
|
Packit |
b099d7 |
* constructed as an XYBitmap.
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* FORMAL PARAMETERS:
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* icon the IconImage being converted
|
|
Packit |
b099d7 |
* srcpix number of bits/pixel in icon
|
|
Packit |
b099d7 |
* screen screen for the X pixmap
|
|
Packit |
b099d7 |
* display display for the X pixmap
|
|
Packit |
b099d7 |
* pixmap to return the result
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* IMPLICIT INPUTS:
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* IMPLICIT OUTPUTS:
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* FUNCTION VALUE:
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* SIDE EFFECTS:
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
*--
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
Cardinal
|
|
Packit |
b099d7 |
Urm__MapIconBitmapDepth1 (RGMIconImagePtr icon,
|
|
Packit |
b099d7 |
int srcpix,
|
|
Packit |
b099d7 |
Screen *screen,
|
|
Packit |
b099d7 |
Display *display,
|
|
Packit |
b099d7 |
Pixmap *pixmap)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* Local variables
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
int iconwid; /* icon width */
|
|
Packit |
b099d7 |
int srclinebyt; /* # bytes per icon line */
|
|
Packit |
b099d7 |
int dstlinebyt; /* # bytes per bitmap line */
|
|
Packit |
b099d7 |
char *srcbytptr; /* image byte pointer */
|
|
Packit |
b099d7 |
char *dstbytptr; /* bitmap pointer */
|
|
Packit |
b099d7 |
int lin; /* icon line number */
|
|
Packit |
b099d7 |
int byt; /* line byte number */
|
|
Packit |
b099d7 |
int pix; /* line pixel number */
|
|
Packit |
b099d7 |
unsigned char srcbyt; /* icon image byte */
|
|
Packit |
b099d7 |
unsigned char dstbyt; /* mapped image byte */
|
|
Packit |
b099d7 |
XImage *imagep; /* X image */
|
|
Packit |
b099d7 |
GC gc;
|
|
Packit |
b099d7 |
XGCValues gcValues;
|
|
Packit |
b099d7 |
int endian; /* to determine which endian. */
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* Overwrite the icon data with a bitmap. Use 0 for background, 1 for
|
|
Packit |
b099d7 |
* foreground.
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
iconwid = icon->width;
|
|
Packit |
b099d7 |
srclinebyt = (iconwid*srcpix+7) / 8;
|
|
Packit |
b099d7 |
dstlinebyt = (iconwid+7) / 8;
|
|
Packit |
b099d7 |
srcbytptr = icon->pixel_data.pdptr;
|
|
Packit |
b099d7 |
for ( lin=0 ; lin<icon->height ; lin++ )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
pix = 0;
|
|
Packit |
b099d7 |
dstbytptr = icon->pixel_data.pdptr + lin*dstlinebyt;
|
|
Packit |
b099d7 |
dstbyt = 0;
|
|
Packit |
b099d7 |
for ( byt=0 ; byt
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
srcbyt = *srcbytptr;
|
|
Packit |
b099d7 |
switch ( icon->pixel_size )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
case URMPixelSize1Bit:
|
|
Packit |
b099d7 |
*dstbytptr = srcbyt;
|
|
Packit |
b099d7 |
srcbytptr += 1;
|
|
Packit |
b099d7 |
dstbytptr += 1;
|
|
Packit |
b099d7 |
pix += 8;
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* NOTE: The original algorithm used here cleared any
|
|
Packit |
b099d7 |
* unused bits of the last byte. I don't think
|
|
Packit |
b099d7 |
* the protocol requires that...
|
|
Packit |
b099d7 |
if ( pix > iconwid )
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
continue;
|
|
Packit |
b099d7 |
default:
|
|
Packit |
b099d7 |
return MrmNOT_VALID;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
if ( pix%8 != 0 )
|
|
Packit |
b099d7 |
*dstbytptr = dstbyt;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
imagep = XCreateImage(display,
|
|
Packit |
b099d7 |
DefaultVisualOfScreen(screen),
|
|
Packit |
b099d7 |
1,
|
|
Packit |
b099d7 |
XYBitmap,
|
|
Packit |
b099d7 |
0,
|
|
Packit |
b099d7 |
icon->pixel_data.pdptr,
|
|
Packit |
b099d7 |
(unsigned int)icon->width,
|
|
Packit |
b099d7 |
(unsigned int)icon->height,
|
|
Packit |
b099d7 |
8,
|
|
Packit |
b099d7 |
dstlinebyt);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if ( imagep == NULL )
|
|
Packit |
b099d7 |
return Urm__UT_Error ("Urm__MapIconBitmapDepth1", _MrmMMsg_0034,
|
|
Packit |
b099d7 |
NULL, NULL, MrmFAILURE);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/* Well, Uil creates a uid icon in its byteorder, on his side
|
|
Packit |
b099d7 |
XCreateImage creates an image in the byte_order of the server, so
|
|
Packit |
b099d7 |
its not correct, we have to adjust the byte_order fields of this
|
|
Packit |
b099d7 |
image to match those of the icon. */
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
endian = 1;
|
|
Packit |
b099d7 |
imagep->bitmap_unit = 8 ;
|
|
Packit |
b099d7 |
if (*(char *) &endian) {
|
|
Packit |
b099d7 |
imagep->byte_order = LSBFirst ;
|
|
Packit |
b099d7 |
imagep->bitmap_bit_order = LSBFirst ;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
else {
|
|
Packit |
b099d7 |
imagep->byte_order = MSBFirst;
|
|
Packit |
b099d7 |
imagep->bitmap_bit_order = LSBFirst ;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
*pixmap = XCreatePixmap (display,
|
|
Packit |
b099d7 |
RootWindowOfScreen(screen),
|
|
Packit |
b099d7 |
icon->width,
|
|
Packit |
b099d7 |
icon->height,
|
|
Packit |
b099d7 |
1);
|
|
Packit |
b099d7 |
if ( *pixmap == (Pixmap)0)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
XFree((char*)imagep);
|
|
Packit |
b099d7 |
return Urm__UT_Error ("Urm__MapIconBitmapDepth1", _MrmMMsg_0035,
|
|
Packit |
b099d7 |
NULL, NULL, MrmFAILURE);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* Build a gc to use when drawing into the pixmap
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
gcValues.foreground = 1;
|
|
Packit |
b099d7 |
gcValues.background = 0;
|
|
Packit |
b099d7 |
gcValues.fill_style = FillTiled;
|
|
Packit |
b099d7 |
gcValues.tile = *pixmap;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
gc = XCreateGC (display,
|
|
Packit |
b099d7 |
*pixmap,
|
|
Packit |
b099d7 |
GCForeground | GCBackground | GCFillStyle | GCTile,
|
|
Packit |
b099d7 |
&gcValues);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if ( gc == NULL )
|
|
Packit |
b099d7 |
return Urm__UT_Error ("Urm__MapIconBitmapDepth1", _MrmMMsg_0036,
|
|
Packit |
b099d7 |
NULL, NULL, MrmFAILURE);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* Put bits into the pixmap
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
XPutImage (display,
|
|
Packit |
b099d7 |
*pixmap,
|
|
Packit |
b099d7 |
gc,
|
|
Packit |
b099d7 |
imagep,
|
|
Packit |
b099d7 |
0, 0, /* source x, y */
|
|
Packit |
b099d7 |
0, 0, icon->width, icon->height); /* dest, loc & size */
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
XFreeGC (display, gc);
|
|
Packit |
b099d7 |
XFree ((char *)imagep);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* Successfully created
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
return MrmSUCCESS;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
*++
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* PROCEDURE DESCRIPTION:
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* This routine maps the pixmap in the icon into a ZPixmap. The
|
|
Packit |
b099d7 |
* ZPixmap is written over the icon image pixmap data. The X pixmap
|
|
Packit |
b099d7 |
* is then constructed as a ZPixmap from the overwritten data.
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* This routine is called only when srcpix == 8.
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* FORMAL PARAMETERS:
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* icon the IconImage being converted
|
|
Packit |
b099d7 |
* srcpix number of bits/pixel in icon
|
|
Packit |
b099d7 |
* ctable the color table for (in) icon
|
|
Packit |
b099d7 |
* screen screen for the X pixmap
|
|
Packit |
b099d7 |
* display display for the X pixmap
|
|
Packit |
b099d7 |
* pixmap to return the result
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* IMPLICIT INPUTS:
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* IMPLICIT OUTPUTS:
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* FUNCTION VALUE:
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* SIDE EFFECTS:
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
*--
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
Cardinal
|
|
Packit |
b099d7 |
Urm__MapIconReplace (RGMIconImagePtr icon,
|
|
Packit |
b099d7 |
int srcpix,
|
|
Packit |
b099d7 |
RGMColorTablePtr ctable,
|
|
Packit |
b099d7 |
Screen *screen,
|
|
Packit |
b099d7 |
Display *display,
|
|
Packit |
b099d7 |
Pixmap *pixmap,
|
|
Packit |
b099d7 |
Widget parent)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* Local variables
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
int iconwid; /* icon width */
|
|
Packit |
b099d7 |
int linebyt; /* # bytes per icon line */
|
|
Packit |
b099d7 |
char *bytptr; /* image byte pointer */
|
|
Packit |
b099d7 |
int lin; /* icon line number */
|
|
Packit |
b099d7 |
int byt; /* line byte number */
|
|
Packit |
b099d7 |
int pix; /* line pixel number */
|
|
Packit |
b099d7 |
unsigned char srcbyt; /* icon image byte */
|
|
Packit |
b099d7 |
XImage *imagep; /* X image */
|
|
Packit |
b099d7 |
GC gc;
|
|
Packit |
b099d7 |
XGCValues gcValues;
|
|
Packit |
b099d7 |
int depth; /* depth of screen */
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* Overwrite the pixmap with actual Pixel values. The source and destination
|
|
Packit |
b099d7 |
* bit widths are the same (==8), and the same pointer can be used for
|
|
Packit |
b099d7 |
* both source and destination.
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
iconwid = icon->width;
|
|
Packit |
b099d7 |
linebyt = (iconwid*srcpix+7) / 8;
|
|
Packit |
b099d7 |
bytptr = icon->pixel_data.pdptr;
|
|
Packit |
b099d7 |
for ( lin=0 ; lin<icon->height ; lin++ )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
pix = 0;
|
|
Packit |
b099d7 |
for ( byt=0 ; byt
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
srcbyt = *bytptr;
|
|
Packit |
b099d7 |
if ( pix < iconwid )
|
|
Packit |
b099d7 |
*bytptr = ctable->item[srcbyt].color_pixel;
|
|
Packit |
b099d7 |
pix += 1;
|
|
Packit |
b099d7 |
bytptr += 1;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
depth = parent ? parent->core.depth : DefaultDepthOfScreen(screen);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
imagep = XCreateImage(display,
|
|
Packit |
b099d7 |
DefaultVisualOfScreen(screen),
|
|
Packit |
b099d7 |
depth,
|
|
Packit |
b099d7 |
ZPixmap,
|
|
Packit |
b099d7 |
0,
|
|
Packit |
b099d7 |
icon->pixel_data.pdptr,
|
|
Packit |
b099d7 |
(unsigned int)icon->width,
|
|
Packit |
b099d7 |
(unsigned int)icon->height,
|
|
Packit |
b099d7 |
srcpix,
|
|
Packit |
b099d7 |
linebyt);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if ( imagep == NULL )
|
|
Packit |
b099d7 |
return Urm__UT_Error ("Urm__MapIconReplace", _MrmMMsg_0034,
|
|
Packit |
b099d7 |
NULL, NULL, MrmFAILURE);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
*pixmap = XCreatePixmap (display,
|
|
Packit |
b099d7 |
RootWindowOfScreen(screen),
|
|
Packit |
b099d7 |
icon->width,
|
|
Packit |
b099d7 |
icon->height,
|
|
Packit |
b099d7 |
(unsigned)depth);
|
|
Packit |
b099d7 |
if ( *pixmap == (Pixmap)0)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
XFree((char*)imagep);
|
|
Packit |
b099d7 |
return Urm__UT_Error ("Urm__MapIconReplace", _MrmMMsg_0035,
|
|
Packit |
b099d7 |
NULL, NULL, MrmFAILURE);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* Build a gc to use when drawing into the pixmap
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
gcValues.foreground = ctable->item[URMColorTableFG].color_pixel;
|
|
Packit |
b099d7 |
gcValues.background = ctable->item[URMColorTableBG].color_pixel;
|
|
Packit |
b099d7 |
gcValues.fill_style = FillTiled;
|
|
Packit |
b099d7 |
gcValues.tile = *pixmap;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
gc = XCreateGC (display,
|
|
Packit |
b099d7 |
RootWindowOfScreen (screen),
|
|
Packit |
b099d7 |
GCForeground | GCBackground | GCFillStyle | GCTile,
|
|
Packit |
b099d7 |
&gcValues);
|
|
Packit |
b099d7 |
if ( gc == NULL )
|
|
Packit |
b099d7 |
return Urm__UT_Error ("Urm__MapIconReplace", _MrmMMsg_0036,
|
|
Packit |
b099d7 |
NULL, NULL, MrmFAILURE);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* Put bits into the pixmap
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
XPutImage (display,
|
|
Packit |
b099d7 |
*pixmap,
|
|
Packit |
b099d7 |
gc,
|
|
Packit |
b099d7 |
imagep,
|
|
Packit |
b099d7 |
0, 0, /* source x, y */
|
|
Packit |
b099d7 |
0, 0, icon->width, icon->height); /* dest, loc & size */
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
XFreeGC (display, gc);
|
|
Packit |
b099d7 |
XFree((char*)imagep);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* Successfully created
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
return MrmSUCCESS;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
*++
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* PROCEDURE DESCRIPTION:
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* This routine maps the pixmap in the icon into a ZPixmap. The
|
|
Packit |
b099d7 |
* ZPixmap is allocated 1 byte per pixel, as the icon image pixmap
|
|
Packit |
b099d7 |
* has too few bits per pixel to be replace in situ. The X pixmap
|
|
Packit |
b099d7 |
* is created from the allocated ZPixmap.
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* FORMAL PARAMETERS:
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* icon the IconImage being converted
|
|
Packit |
b099d7 |
* srcpix number of bits/pixel in icon
|
|
Packit |
b099d7 |
* dstpix number of bits/pixel in resulting image
|
|
Packit |
b099d7 |
* ctable the color table for (in) icon
|
|
Packit |
b099d7 |
* screen screen for the X pixmap
|
|
Packit |
b099d7 |
* display display for the X pixmap
|
|
Packit |
b099d7 |
* pixmap to return the result
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* IMPLICIT INPUTS:
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* IMPLICIT OUTPUTS:
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* FUNCTION VALUE:
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* SIDE EFFECTS:
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
*--
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
Cardinal
|
|
Packit |
b099d7 |
Urm__MapIconAllocate (RGMIconImagePtr icon,
|
|
Packit |
b099d7 |
int srcpix,
|
|
Packit |
b099d7 |
int dstpix,
|
|
Packit |
b099d7 |
RGMColorTablePtr ctable,
|
|
Packit |
b099d7 |
Screen *screen,
|
|
Packit |
b099d7 |
Display *display,
|
|
Packit |
b099d7 |
Pixmap *pixmap,
|
|
Packit |
b099d7 |
Widget parent)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* Local variables
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
int iconwid; /* icon width */
|
|
Packit |
b099d7 |
int iconhgt; /* icon height */
|
|
Packit |
b099d7 |
char *alloc_pixmap; /* allocated pixmap */
|
|
Packit |
b099d7 |
int dstbytsize; /* # 8-bit bytes per bitmap byte */
|
|
Packit |
b099d7 |
int srclinebyt; /* # bytes per icon line */
|
|
Packit |
b099d7 |
char *srcbytptr; /* image byte pointer */
|
|
Packit |
b099d7 |
int lin; /* icon line number */
|
|
Packit |
b099d7 |
int byt; /* line byte number */
|
|
Packit |
b099d7 |
int bit; /* bit loop index */
|
|
Packit |
b099d7 |
int pix; /* line pixel number */
|
|
Packit |
b099d7 |
unsigned char srcbyt; /* icon image byte */
|
|
Packit |
b099d7 |
int bitmask; /* mask all but significant bits */
|
|
Packit |
b099d7 |
int num_bits; /* real (not coded) pixel size */
|
|
Packit |
b099d7 |
int tndx; /* color table index */
|
|
Packit |
b099d7 |
XImage *imagep; /* X image */
|
|
Packit |
b099d7 |
GC gc;
|
|
Packit |
b099d7 |
XGCValues gcValues;
|
|
Packit |
b099d7 |
int depth; /* depth of screen */
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* Allocate a new pixmap image.
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
iconwid = icon->width;
|
|
Packit |
b099d7 |
iconhgt = icon->height;
|
|
Packit |
b099d7 |
if (dstpix <= 8) dstpix = 8;
|
|
Packit |
b099d7 |
else if (dstpix <= 16) dstpix = 16;
|
|
Packit |
b099d7 |
else dstpix = 32;
|
|
Packit |
b099d7 |
dstbytsize = dstpix / 8;
|
|
Packit |
b099d7 |
alloc_pixmap = (char *) XtMalloc (iconwid * iconhgt * dstbytsize);
|
|
Packit |
b099d7 |
if (alloc_pixmap == NULL)
|
|
Packit |
b099d7 |
return Urm__UT_Error ("Urm__MapIconAllocate", _MrmMMsg_0037,
|
|
Packit |
b099d7 |
NULL, NULL, MrmFAILURE);
|
|
Packit |
b099d7 |
srclinebyt = (iconwid * srcpix + 7) / 8;
|
|
Packit |
b099d7 |
srcbytptr = icon->pixel_data.pdptr;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
depth = parent ? parent->core.depth : DefaultDepthOfScreen(screen);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
imagep = XCreateImage(display,
|
|
Packit |
b099d7 |
DefaultVisualOfScreen(screen),
|
|
Packit |
b099d7 |
depth,
|
|
Packit |
b099d7 |
ZPixmap,
|
|
Packit |
b099d7 |
0,
|
|
Packit |
b099d7 |
alloc_pixmap,
|
|
Packit |
b099d7 |
iconwid,
|
|
Packit |
b099d7 |
iconhgt,
|
|
Packit |
b099d7 |
dstpix,
|
|
Packit |
b099d7 |
0); /* Let Xlib calculate it. */
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if ( imagep == NULL )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
XtFree (alloc_pixmap);
|
|
Packit |
b099d7 |
return Urm__UT_Error ("Urm__MapIconAllocate", _MrmMMsg_0034,
|
|
Packit |
b099d7 |
NULL, NULL, MrmFAILURE);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if(icon->pixel_size == URMPixelSize1Bit)
|
|
Packit |
b099d7 |
{ num_bits = 1; bitmask=0x1; }
|
|
Packit |
b099d7 |
else if(icon->pixel_size == URMPixelSize2Bit)
|
|
Packit |
b099d7 |
{ num_bits = 2; bitmask=0x3; }
|
|
Packit |
b099d7 |
else if(icon->pixel_size == URMPixelSize4Bit)
|
|
Packit |
b099d7 |
{ num_bits = 4; bitmask=0xF; }
|
|
Packit |
b099d7 |
else if(icon->pixel_size == URMPixelSize8Bit)
|
|
Packit |
b099d7 |
{ num_bits = 8; bitmask=0xFF; }
|
|
Packit |
b099d7 |
for ( pix=0,lin=0 ; lin<icon->height ; pix=0,lin++ )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
for ( byt=0 ; byt
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
srcbyt = *srcbytptr;
|
|
Packit |
b099d7 |
for ( bit=0 ; bit<8 ; bit+=num_bits )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
tndx = srcbyt & bitmask;
|
|
Packit |
b099d7 |
if ( pix < iconwid )
|
|
Packit |
b099d7 |
XPutPixel(imagep, pix, lin, ctable->item[tndx].color_pixel);
|
|
Packit |
b099d7 |
pix++;
|
|
Packit |
b099d7 |
srcbyt >>= num_bits;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
*pixmap = XCreatePixmap (display,
|
|
Packit |
b099d7 |
RootWindowOfScreen(screen),
|
|
Packit |
b099d7 |
iconwid,
|
|
Packit |
b099d7 |
iconhgt,
|
|
Packit |
b099d7 |
(unsigned)depth);
|
|
Packit |
b099d7 |
if ( *pixmap == (Pixmap)0)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
XtFree (alloc_pixmap);
|
|
Packit |
b099d7 |
XFree((char*)imagep);
|
|
Packit |
b099d7 |
return Urm__UT_Error ("Urm__MapIconAllocate", _MrmMMsg_0035,
|
|
Packit |
b099d7 |
NULL, NULL, MrmFAILURE);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* Build a gc to use when drawing into the pixmap
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
gcValues.foreground = ctable->item[URMColorTableFG].color_pixel;
|
|
Packit |
b099d7 |
gcValues.background = ctable->item[URMColorTableBG].color_pixel;
|
|
Packit |
b099d7 |
gcValues.fill_style = FillTiled;
|
|
Packit |
b099d7 |
gcValues.tile = *pixmap;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
gc = XCreateGC (display,
|
|
Packit |
b099d7 |
RootWindowOfScreen (screen),
|
|
Packit |
b099d7 |
GCForeground | GCBackground | GCFillStyle | GCTile,
|
|
Packit |
b099d7 |
&gcValues);
|
|
Packit |
b099d7 |
if ( gc == NULL )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
XtFree (alloc_pixmap);
|
|
Packit |
b099d7 |
return Urm__UT_Error ("Urm__MapIconAllocate", _MrmMMsg_0036,
|
|
Packit |
b099d7 |
NULL, NULL, MrmFAILURE);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* Put bits into the pixmap
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
XPutImage (display,
|
|
Packit |
b099d7 |
*pixmap,
|
|
Packit |
b099d7 |
gc,
|
|
Packit |
b099d7 |
imagep,
|
|
Packit |
b099d7 |
0, 0, /* source x, y */
|
|
Packit |
b099d7 |
0, 0, iconwid, iconhgt); /* dest, loc & size */
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* don't deallocate with XDestroyImage, which would destroy alloc_pixmap
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
XFree((char*)imagep);
|
|
Packit |
b099d7 |
XFreeGC (display, gc);
|
|
Packit |
b099d7 |
XtFree (alloc_pixmap);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* Successfully created
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
return MrmSUCCESS;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
*++
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* PROCEDURE DESCRIPTION:
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* This routine sets the Pixel values corresponding to each of the
|
|
Packit |
b099d7 |
* entries in the color table. Foreground and background are set by
|
|
Packit |
b099d7 |
* querying the widget for those values, or falling back on
|
|
Packit |
b099d7 |
* Black/WhitePixelOfScreen. All other colors are set by honoring
|
|
Packit |
b099d7 |
* FG/BG setting for monochrome devices, or by getting the xolor
|
|
Packit |
b099d7 |
* Pixel values from X.
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* FORMAL PARAMETERS:
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* screen screen to use for color table
|
|
Packit |
b099d7 |
* display display to use for color table
|
|
Packit |
b099d7 |
* fgpix foreground color for color table
|
|
Packit |
b099d7 |
* bgpix background color for color table
|
|
Packit |
b099d7 |
* ctable the color table
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* IMPLICIT INPUTS:
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* IMPLICIT OUTPUTS:
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* FUNCTION VALUE:
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* SIDE EFFECTS:
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
*--
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
Cardinal
|
|
Packit |
b099d7 |
Urm__RealizeColorTable (Screen *screen,
|
|
Packit |
b099d7 |
Display *display,
|
|
Packit |
b099d7 |
Pixel fgpix,
|
|
Packit |
b099d7 |
Pixel bgpix,
|
|
Packit |
b099d7 |
RGMColorTablePtr ctable,
|
|
Packit |
b099d7 |
Widget parent)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* Local variables
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
Cardinal result; /* function results */
|
|
Packit |
b099d7 |
Cardinal ndx; /* loop index */
|
|
Packit |
b099d7 |
RGMColorTableEntryPtr citem; /* color table entry */
|
|
Packit |
b099d7 |
Colormap cmap; /* default color map */
|
|
Packit |
b099d7 |
int depth; /* # planes in screen */
|
|
Packit |
b099d7 |
char err_msg[300];
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* Load the foreground and background pixel values.
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
ctable->item[URMColorTableFG].color_pixel = fgpix;
|
|
Packit |
b099d7 |
ctable->item[URMColorTableBG].color_pixel = bgpix;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* Get the Pixel for each defined color. Honor the FG/BG specification
|
|
Packit |
b099d7 |
* if present on monochrome displays. Otherwise, get the Pixel value for
|
|
Packit |
b099d7 |
* the color. Use the FG/BG specification as a fallback for unfound
|
|
Packit |
b099d7 |
* colors in non-monochrome. If no reasonable color Pixel can be found,
|
|
Packit |
b099d7 |
* return an error.
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
cmap = parent ? parent->core.colormap : DefaultColormapOfScreen(screen);
|
|
Packit |
b099d7 |
depth = parent ? parent->core.depth : DefaultDepthOfScreen(screen);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
for ( ndx=URMColorTableUserMin ; ndx<ctable->count ; ndx++ )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
citem = &ctable->item[ndx];
|
|
Packit |
b099d7 |
if ( depth == 1 )
|
|
Packit |
b099d7 |
switch ( citem->color_item.cptr->mono_state )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
case URMColorMonochromeUnspecified:
|
|
Packit |
b099d7 |
switch (citem->color_item.cptr->desc_type)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
case URMColorDescTypeName:
|
|
Packit |
b099d7 |
result = Urm__UT_GetNamedColorPixel
|
|
Packit |
b099d7 |
(display, cmap, citem->color_item.cptr, &citem->color_pixel,
|
|
Packit |
b099d7 |
ctable->item[URMColorTableBG].color_pixel);
|
|
Packit |
b099d7 |
if ( result != MrmSUCCESS) {
|
|
Packit |
b099d7 |
/* we use PARTIAL_SUCCESS only to indicate
|
|
Packit |
b099d7 |
the color allocation failed and we've
|
|
Packit |
b099d7 |
substituted the fallback color. We still
|
|
Packit |
b099d7 |
want a warning, though */
|
|
Packit |
b099d7 |
if (result == MrmPARTIAL_SUCCESS) {
|
|
Packit |
b099d7 |
result = MrmSUCCESS;
|
|
Packit |
b099d7 |
sprintf (err_msg, _MrmMMsg_0038,
|
|
Packit |
b099d7 |
citem->color_item.cptr->desc.name);
|
|
Packit |
b099d7 |
return Urm__UT_Error ("Urm__RealizeColorTable",
|
|
Packit |
b099d7 |
err_msg, NULL, NULL, result);
|
|
Packit |
b099d7 |
} else {
|
|
Packit |
b099d7 |
sprintf (err_msg, _MrmMMsg_0038,
|
|
Packit |
b099d7 |
citem->color_item.cptr->desc.name);
|
|
Packit |
b099d7 |
return Urm__UT_Error ("Urm__RealizeColorTable",
|
|
Packit |
b099d7 |
err_msg, NULL, NULL, result);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
break;
|
|
Packit |
b099d7 |
case URMColorDescTypeRGB:
|
|
Packit |
b099d7 |
result = Urm__UT_GetColorPixel
|
|
Packit |
b099d7 |
(display, cmap, citem->color_item.cptr, &citem->color_pixel,
|
|
Packit |
b099d7 |
ctable->item[URMColorTableBG].color_pixel);
|
|
Packit |
b099d7 |
if ( result != MrmSUCCESS ) {
|
|
Packit |
b099d7 |
/* we use PARTIAL_SUCCESS only to indicate
|
|
Packit |
b099d7 |
the color allocation failed and we've
|
|
Packit |
b099d7 |
substituted the fallback color. We still
|
|
Packit |
b099d7 |
want a warning, though */
|
|
Packit |
b099d7 |
if (result == MrmPARTIAL_SUCCESS) {
|
|
Packit |
b099d7 |
result = MrmSUCCESS;
|
|
Packit |
b099d7 |
sprintf (err_msg, _MrmMMsg_0038,
|
|
Packit |
b099d7 |
citem->color_item.cptr->desc.name);
|
|
Packit |
b099d7 |
return Urm__UT_Error ("Urm__RealizeColorTable",
|
|
Packit |
b099d7 |
err_msg, NULL, NULL, result);
|
|
Packit |
b099d7 |
} else {
|
|
Packit |
b099d7 |
sprintf (err_msg, _MrmMMsg_0039,
|
|
Packit |
b099d7 |
citem->color_item.cptr->desc.rgb.red,
|
|
Packit |
b099d7 |
citem->color_item.cptr->desc.rgb.green,
|
|
Packit |
b099d7 |
citem->color_item.cptr->desc.rgb.blue) ;
|
|
Packit |
b099d7 |
return Urm__UT_Error ("Urm__RealizeColorTable",
|
|
Packit |
b099d7 |
err_msg, NULL, NULL, result);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
break;
|
|
Packit |
b099d7 |
default:
|
|
Packit Service |
1f15c3 |
sprintf(err_msg, _MrmMMsg_0040);
|
|
Packit |
b099d7 |
return Urm__UT_Error ("Urm__RelizeColorTable",
|
|
Packit |
b099d7 |
err_msg, NULL, NULL, MrmFAILURE) ;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
break;
|
|
Packit |
b099d7 |
case URMColorMonochromeForeground:
|
|
Packit |
b099d7 |
citem->color_pixel =
|
|
Packit |
b099d7 |
ctable->item[URMColorTableFG].color_pixel;
|
|
Packit |
b099d7 |
break;
|
|
Packit |
b099d7 |
case URMColorMonochromeBackground:
|
|
Packit |
b099d7 |
citem->color_pixel =
|
|
Packit |
b099d7 |
ctable->item[URMColorTableBG].color_pixel;
|
|
Packit |
b099d7 |
break;
|
|
Packit |
b099d7 |
default:
|
|
Packit |
b099d7 |
sprintf (err_msg, _MrmMMsg_0041,
|
|
Packit |
b099d7 |
citem->color_item.cptr->mono_state);
|
|
Packit |
b099d7 |
return Urm__UT_Error ("Urm__RealizeColorTable",
|
|
Packit |
b099d7 |
err_msg, NULL, NULL, result);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
else
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
switch (citem->color_item.cptr->desc_type)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
case URMColorDescTypeName:
|
|
Packit |
b099d7 |
result = Urm__UT_GetNamedColorPixel
|
|
Packit |
b099d7 |
(display, cmap, citem->color_item.cptr, &citem->color_pixel,
|
|
Packit |
b099d7 |
((citem->color_item.cptr->mono_state ==
|
|
Packit |
b099d7 |
URMColorMonochromeForeground) ?
|
|
Packit |
b099d7 |
ctable->item[URMColorTableFG].color_pixel :
|
|
Packit |
b099d7 |
ctable->item[URMColorTableBG].color_pixel));
|
|
Packit |
b099d7 |
if (result != MrmSUCCESS) {
|
|
Packit |
b099d7 |
/* we use PARTIAL_SUCCESS only to indicate
|
|
Packit |
b099d7 |
the color allocation failed and we've
|
|
Packit |
b099d7 |
substituted the fallback color. We still
|
|
Packit |
b099d7 |
want a warning, though */
|
|
Packit |
b099d7 |
if (result == MrmPARTIAL_SUCCESS) {
|
|
Packit |
b099d7 |
result = MrmSUCCESS;
|
|
Packit |
b099d7 |
sprintf (err_msg, _MrmMMsg_0038,
|
|
Packit |
b099d7 |
citem->color_item.cptr->desc.name);
|
|
Packit |
b099d7 |
return Urm__UT_Error ("Urm__RealizeColorTable",
|
|
Packit |
b099d7 |
err_msg, NULL, NULL, result);
|
|
Packit |
b099d7 |
} else {
|
|
Packit |
b099d7 |
sprintf (err_msg, _MrmMMsg_0038,
|
|
Packit |
b099d7 |
citem->color_item.cptr->desc.name);
|
|
Packit |
b099d7 |
Urm__UT_Error ("Urm__RealizeColorTable",
|
|
Packit |
b099d7 |
err_msg, NULL, NULL, result);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
break;
|
|
Packit |
b099d7 |
case URMColorDescTypeRGB:
|
|
Packit |
b099d7 |
result = Urm__UT_GetColorPixel
|
|
Packit |
b099d7 |
(display, cmap, citem->color_item.cptr, &citem->color_pixel,
|
|
Packit |
b099d7 |
ctable->item[URMColorTableBG].color_pixel);
|
|
Packit |
b099d7 |
if (result != MrmSUCCESS) {
|
|
Packit |
b099d7 |
/* we use PARTIAL_SUCCESS only to indicate
|
|
Packit |
b099d7 |
the color allocation failed and we've
|
|
Packit |
b099d7 |
substituted the fallback color. We still
|
|
Packit |
b099d7 |
want a warning, though */
|
|
Packit |
b099d7 |
if (result == MrmPARTIAL_SUCCESS) {
|
|
Packit |
b099d7 |
result = MrmSUCCESS;
|
|
Packit |
b099d7 |
sprintf (err_msg, _MrmMMsg_0038,
|
|
Packit |
b099d7 |
citem->color_item.cptr->desc.name);
|
|
Packit |
b099d7 |
return Urm__UT_Error ("Urm__RealizeColorTable",
|
|
Packit |
b099d7 |
err_msg, NULL, NULL, result);
|
|
Packit |
b099d7 |
} else {
|
|
Packit |
b099d7 |
sprintf (err_msg, _MrmMMsg_0039,
|
|
Packit |
b099d7 |
citem->color_item.cptr->desc.rgb.red,
|
|
Packit |
b099d7 |
citem->color_item.cptr->desc.rgb.green,
|
|
Packit |
b099d7 |
citem->color_item.cptr->desc.rgb.blue) ;
|
|
Packit |
b099d7 |
Urm__UT_Error ("Urm__RealizeColorTable",
|
|
Packit |
b099d7 |
err_msg, NULL, NULL, result);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
break;
|
|
Packit |
b099d7 |
default:
|
|
Packit |
b099d7 |
result = MrmFAILURE;
|
|
Packit Service |
1f15c3 |
sprintf (err_msg, _MrmMMsg_0040);
|
|
Packit |
b099d7 |
Urm__UT_Error ("Urm__RelizeColorTable",
|
|
Packit |
b099d7 |
err_msg, NULL, NULL, MrmFAILURE) ;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
if ( result != MrmSUCCESS )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
switch ( citem->color_item.cptr->mono_state )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
case URMColorMonochromeForeground:
|
|
Packit |
b099d7 |
citem->color_pixel =
|
|
Packit |
b099d7 |
ctable->item[URMColorTableFG].color_pixel;
|
|
Packit |
b099d7 |
break;
|
|
Packit |
b099d7 |
case URMColorMonochromeBackground:
|
|
Packit |
b099d7 |
citem->color_pixel =
|
|
Packit |
b099d7 |
ctable->item[URMColorTableBG].color_pixel;
|
|
Packit |
b099d7 |
break;
|
|
Packit |
b099d7 |
default:
|
|
Packit |
b099d7 |
return result;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
return MrmSUCCESS;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
*++
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* PROCEDURE DESCRIPTION:
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* This routine makes a copy of a URM icon into a memory block
|
|
Packit |
b099d7 |
* which has been pre-allocated. The block must be big enough
|
|
Packit |
b099d7 |
* to hold both the header and the bit vector.
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* FORMAL PARAMETERS:
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* dst_icon the memory block to receive the copy
|
|
Packit |
b099d7 |
* src_icon the URM icon descriptor to be copied.
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* IMPLICIT INPUTS:
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* IMPLICIT OUTPUTS:
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* FUNCTION VALUE:
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* SIDE EFFECTS:
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
*--
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
RGMIconImagePtr
|
|
Packit |
b099d7 |
UrmCopyAllocatedIconImage (RGMIconImagePtr dst_icon,
|
|
Packit |
b099d7 |
RGMIconImagePtr src_icon)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* Copy the header and bit vector into the new memory block.
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
dst_icon->validation = URMIconImageValid;
|
|
Packit |
b099d7 |
dst_icon->pixel_size = src_icon->pixel_size;
|
|
Packit |
b099d7 |
dst_icon->width = src_icon->width;
|
|
Packit |
b099d7 |
dst_icon->height = src_icon->height;
|
|
Packit |
b099d7 |
dst_icon->hot_x = src_icon->hot_x;
|
|
Packit |
b099d7 |
dst_icon->hot_y = src_icon->hot_y;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* Copy the color table as an immediate. It is allocated immediately
|
|
Packit |
b099d7 |
* after the image header.
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* Copy the pixel data
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
return dst_icon;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
*++
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* PROCEDURE DESCRIPTION:
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* This routine attempts to look up the name of a color, and return
|
|
Packit |
b099d7 |
* the pixel value required as a widget arglist value. It will use
|
|
Packit |
b099d7 |
* the default color map if necessary, and returns the closest color
|
|
Packit |
b099d7 |
* supported by the hardware (as defined by X), not the exact database
|
|
Packit |
b099d7 |
* definition. If the screen is depth 1 (monochrome), the routine will
|
|
Packit |
b099d7 |
* honor the monochrome rendition specified in the color descriptor.
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* FORMAL PARAMETERS:
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* display specifies the X server connection
|
|
Packit |
b099d7 |
* cmap color map ID. If NULL, the default color map is used
|
|
Packit |
b099d7 |
* colorptr color descriptor
|
|
Packit |
b099d7 |
* pixel_return to return the pixel value for the color
|
|
Packit |
b099d7 |
* fallback fallback color to use in case of alloc failure
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* IMPLICIT INPUTS:
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* IMPLICIT OUTPUTS:
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* FUNCTION VALUE:
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* MrmSUCCESS color found and translated
|
|
Packit |
b099d7 |
* MrmNOT_FOUND conversion failure
|
|
Packit |
b099d7 |
* MrmPARTIAL_SUCCESS internal only, for allocation failure
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* SIDE EFFECTS:
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
*--
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
Cardinal
|
|
Packit |
b099d7 |
Urm__UT_GetNamedColorPixel (Display *display,
|
|
Packit |
b099d7 |
Colormap cmap,
|
|
Packit |
b099d7 |
RGMColorDescPtr colorptr,
|
|
Packit |
b099d7 |
Pixel *pixel_return,
|
|
Packit |
b099d7 |
Pixel fallback)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* Local variables
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
XColor screen_def; /* realizable values */
|
|
Packit |
b099d7 |
XColor exact_def; /* exact values */
|
|
Packit |
b099d7 |
int status; /* function return */
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if ( cmap == (Colormap)0)
|
|
Packit |
b099d7 |
cmap = DefaultColormap (display, DefaultScreen(display));
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/* CR 9891: Support new pixel constants. */
|
|
Packit |
b099d7 |
if (XmeNamesAreEqual(colorptr->desc.name, "default_select_color"))
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
*pixel_return = XmDEFAULT_SELECT_COLOR;
|
|
Packit |
b099d7 |
return MrmSUCCESS;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
else if (XmeNamesAreEqual(colorptr->desc.name, "reversed_ground_colors"))
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
*pixel_return = XmREVERSED_GROUND_COLORS;
|
|
Packit |
b099d7 |
return MrmSUCCESS;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
else if (XmeNamesAreEqual(colorptr->desc.name, "highlight_color"))
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
*pixel_return = XmHIGHLIGHT_COLOR;
|
|
Packit |
b099d7 |
return MrmSUCCESS;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
status = XAllocNamedColor
|
|
Packit |
b099d7 |
(display, cmap, colorptr->desc.name, &screen_def, &exact_def);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if ( status == 0) {
|
|
Packit |
b099d7 |
if (fallback) {
|
|
Packit |
b099d7 |
*pixel_return = fallback;
|
|
Packit |
b099d7 |
return MrmPARTIAL_SUCCESS;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
else
|
|
Packit |
b099d7 |
return MrmFAILURE;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
*pixel_return = screen_def.pixel;
|
|
Packit |
b099d7 |
return MrmSUCCESS;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
*++
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* PROCEDURE DESCRIPTION:
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* This routine attempts to look up the RGB values of a color, and return
|
|
Packit |
b099d7 |
* the pixel value required as a widget arglist value. It will use
|
|
Packit |
b099d7 |
* the default color map if necessary, and returns the closest color
|
|
Packit |
b099d7 |
* supported by the hardware (as defined by X), not the exact database
|
|
Packit |
b099d7 |
* definition. If the screen is depth 1 (monochrome), the routine will
|
|
Packit |
b099d7 |
* honor the monochrome rendition specified in the color descriptor.
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* FORMAL PARAMETERS:
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* display specifies the X server connection
|
|
Packit |
b099d7 |
* cmap color map ID. If NULL, the default color map is used
|
|
Packit |
b099d7 |
* colorptr color descriptor
|
|
Packit |
b099d7 |
* pixel_return to return the pixel value for the color
|
|
Packit |
b099d7 |
* fallback fallback color to use in case of alloc failure
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* IMPLICIT INPUTS:
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* IMPLICIT OUTPUTS:
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* FUNCTION VALUE:
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* MrmSUCCESS color found and translated
|
|
Packit |
b099d7 |
* MrmNOT_FOUND conversion failure
|
|
Packit |
b099d7 |
* MrmPARTIAL_SUCCESS internal only, for allocation failure
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* SIDE EFFECTS:
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
*--
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
Cardinal
|
|
Packit |
b099d7 |
Urm__UT_GetColorPixel (Display *display,
|
|
Packit |
b099d7 |
Colormap cmap,
|
|
Packit |
b099d7 |
RGMColorDescPtr colorptr,
|
|
Packit |
b099d7 |
Pixel *pixel_return,
|
|
Packit |
b099d7 |
Pixel fallback)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* Local variables
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
XColor screen_in_out; /* realizable values */
|
|
Packit |
b099d7 |
int status; /* function return */
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if ( cmap == (Colormap)0)
|
|
Packit |
b099d7 |
cmap = DefaultColormap (display, DefaultScreen(display));
|
|
Packit |
b099d7 |
screen_in_out.red = colorptr->desc.rgb.red;
|
|
Packit |
b099d7 |
screen_in_out.green = colorptr->desc.rgb.green;
|
|
Packit |
b099d7 |
screen_in_out.blue = colorptr->desc.rgb.blue;
|
|
Packit |
b099d7 |
status = XAllocColor (display, cmap, &screen_in_out);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if ( status == 0) {
|
|
Packit |
b099d7 |
if (fallback) {
|
|
Packit |
b099d7 |
*pixel_return = fallback;
|
|
Packit |
b099d7 |
return MrmPARTIAL_SUCCESS;
|
|
Packit |
b099d7 |
} else
|
|
Packit |
b099d7 |
return MrmFAILURE;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
*pixel_return = screen_in_out.pixel;
|
|
Packit |
b099d7 |
return MrmSUCCESS;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
*++
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* PROCEDURE DESCRIPTION:
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* This routine computes the number of bytes used by a URM icon
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* FORMAL PARAMETERS:
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* icon URM icon image
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* IMPLICIT INPUTS:
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* IMPLICIT OUTPUTS:
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* FUNCTION VALUE:
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* # bytes in the image
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* SIDE EFFECTS:
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
*--
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
Cardinal
|
|
Packit |
b099d7 |
UrmIconImageSize (RGMIconImagePtr icon)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* Local variables
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
int bytes_per_line; /* # bytes for padded width */
|
|
Packit |
b099d7 |
int raster_len; /* bytes in image */
|
|
Packit |
b099d7 |
Cardinal size; /* # bytes in descriptor */
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
bytes_per_line = (icon->width+7) / 8;
|
|
Packit |
b099d7 |
raster_len = bytes_per_line * icon->height;
|
|
Packit |
b099d7 |
size = sizeof(RGMIconImage) + (raster_len-1)*sizeof(char);
|
|
Packit |
b099d7 |
return size;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
*++
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* PROCEDURE DESCRIPTION:
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* This routine computes the number of bytes necessary to store
|
|
Packit |
b099d7 |
* the given color table in a single memory block.
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* FORMAL PARAMETERS:
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* ctable An allocated color table
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* IMPLICIT INPUTS:
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* IMPLICIT OUTPUTS:
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* FUNCTION VALUE:
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* table size in bytes
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* SIDE EFFECTS:
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
*--
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*ARGSUSED*/
|
|
Packit |
b099d7 |
Cardinal
|
|
Packit |
b099d7 |
UrmColorTableSize (RGMColorTablePtr ctable) /* unused */
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
return sizeof(RGMColorTable);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
}
|