Files
Arquivotheca.SunOS-4.1.4/usr.lib/libsuntool/icon/icon_object.c
seta75D ff309bfe1c Init
2021-10-11 18:37:13 -03:00

199 lines
4.6 KiB
C

#ifndef lint
#ifdef sccs
static char sccsid[] = "@(#)icon_object.c 1.1 94/10/31 Copyr 1984 Sun Micro";
#endif
#endif
/*****************************************************************************/
/* icon_object.c */
/* Copyright (c) 1985 by Sun Microsystems, Inc. */
/*****************************************************************************/
#include <stdio.h>
#include <varargs.h>
#include <pixrect/pixrect_hs.h>
#include <sunwindow/rect.h>
#include <sunwindow/rectlist.h>
#include <sunwindow/pixwin.h>
#include <suntool/icon.h>
static int icon_init_attrs(), icon_set_attrs();
/*****************************************************************************/
/* icon_create */
/*****************************************************************************/
/* VARARGS0 */
Icon
icon_create(va_alist)
va_dcl
{
Attr_avlist avlist[ATTR_STANDARD_SIZE];
va_list valist;
register struct icon *icon;
char *calloc();
extern PIXFONT *pw_pfsysopen();
va_start(valist);
(void)attr_make((char **)avlist, ATTR_STANDARD_SIZE, valist);
va_end(valist);
if (!(icon = (struct icon *) (LINT_CAST(calloc (1, sizeof(struct icon))))))
return NULL;
icon_init_attrs(icon);
(void)icon_set_attrs(icon, avlist);
if (!icon->ic_font)
icon->ic_font = pw_pfsysopen();
return (Icon) icon;
}
static
icon_init_attrs(icon)
register icon_handle icon;
{
icon->ic_width = 64;
icon->ic_height = 64;
icon->ic_gfxrect.r_width = 64;
icon->ic_gfxrect.r_height = 64;
}
/*****************************************************************************/
/* icon_destroy */
/*****************************************************************************/
icon_destroy(icon_client)
Icon icon_client;
{
icon_handle icon;
icon = (icon_handle)(LINT_CAST(icon_client));
free((char *)(LINT_CAST(icon)));
}
/*****************************************************************************/
/* icon_set */
/*****************************************************************************/
/*VARARGS1*/
int
icon_set(icon_client, va_alist)
Icon icon_client;
va_dcl
{
Attr_avlist avlist[ATTR_STANDARD_SIZE];
va_list valist;
icon_handle icon;
icon = (icon_handle)(LINT_CAST(icon_client));
va_start(valist);
(void)attr_make((char **)avlist, ATTR_STANDARD_SIZE, valist);
va_end(valist);
return icon_set_attrs(icon, avlist);
}
/*VARARGS1*/
static int
icon_set_attrs(icon, avlist)
register icon_handle icon;
register Attr_avlist avlist;
{
register Icon_attribute attr;
Rect *r;
while (attr = (Icon_attribute) *avlist++) {
switch (attr) {
case ICON_X:
avlist++;
break;
case ICON_Y:
avlist++;
break;
case ICON_WIDTH:
icon->ic_width = (short) *avlist++;
break;
case ICON_HEIGHT:
icon->ic_height = (short) (LINT_CAST(*avlist++));
break;
case ICON_IMAGE:
icon->ic_mpr = (struct pixrect *) (LINT_CAST(*avlist++));
break;
case ICON_IMAGE_RECT:
r = (Rect *) (LINT_CAST(*avlist++));
if (r)
icon->ic_gfxrect = *r;
break;
case ICON_LABEL_RECT:
r = (Rect *) (LINT_CAST(*avlist++));
if (r)
icon->ic_textrect = *r;
break;
case ICON_LABEL:
icon->ic_text = (char *) *avlist++;
break;
case ICON_FONT:
icon->ic_font = (struct pixfont *) (LINT_CAST(*avlist++));
break;
default:
avlist = attr_skip(attr, avlist);
break;
}
}
return 1;
}
/*****************************************************************************/
/* icon_get */
/*****************************************************************************/
caddr_t
icon_get(icon_client, attr)
register Icon icon_client;
Icon_attribute attr;
{
icon_handle icon;
icon = (icon_handle)(LINT_CAST(icon_client));
switch (attr) {
case ICON_WIDTH:
return (caddr_t) icon->ic_width;
case ICON_HEIGHT:
return (caddr_t) icon->ic_height;
case ICON_IMAGE:
return (caddr_t) icon->ic_mpr;
case ICON_IMAGE_RECT:
return (caddr_t) &(icon->ic_gfxrect);
case ICON_LABEL_RECT:
return (caddr_t) &(icon->ic_textrect);
case ICON_LABEL:
return (caddr_t) icon->ic_text;
case ICON_FONT:
return (caddr_t) icon->ic_font;
case ICON_X:
case ICON_Y:
default:
return (caddr_t) NULL;
}
}