home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
vsiftp.vmssoftware.com
/
VSIPUBLIC@vsiftp.vmssoftware.com.tar
/
FREEWARE
/
FREEWARE40.ZIP
/
xpaint-247
/
coloredit.c
< prev
next >
Wrap
C/C++ Source or Header
|
1997-01-03
|
4KB
|
142 lines
/* +-------------------------------------------------------------------+ */
/* | Copyright 1993, David Koblas (koblas@netcom.com) | */
/* | Copyright 1995, 1996 Torsten Martinsen (bullestock@dk-online.dk) | */
/* | | */
/* | Permission to use, copy, modify, and to distribute this software | */
/* | and its documentation for any purpose is hereby granted without | */
/* | fee, provided that the above copyright notice appear in all | */
/* | copies and that both that copyright notice and this permission | */
/* | notice appear in supporting documentation. There is no | */
/* | representations about the suitability of this software for | */
/* | any purpose. this software is provided "as is" without express | */
/* | or implied warranty. | */
/* | | */
/* +-------------------------------------------------------------------+ */
/* $Id: colorEdit.c,v 1.3 1996/04/19 09:06:29 torsten Exp $ */
#include <X11/Intrinsic.h>
#include <X11/StringDefs.h>
#include <X11/Shell.h>
#ifndef VMS
#include <X11/Xaw/Form.h>
#include <X11/Xaw/Command.h>
#else
#include <X11Xaw/Form.h>
#include <X11Xaw/Command.h>
#endif
#include "misc.h"
#include "palette.h"
#include "color.h"
#include "protocol.h"
typedef struct {
XtCallbackProc okProc;
XtPointer closure;
Widget wIn;
Widget shell, pick;
Palette *map;
Boolean allowWrite;
XColor origColor;
} LocalInfo;
static void
commonCB(LocalInfo * info, XColor * col)
{
Widget cw = info->wIn;
XtCallbackProc proc = info->okProc;
XtPointer closure = info->closure;
XtDestroyWidget(info->shell);
XtFree((XtPointer) info);
proc(cw, closure, (XtPointer) col);
}
static void
changeBgCancel(Widget w, LocalInfo * info, XtPointer junk2)
{
if (info->allowWrite)
PaletteSetPixel(info->map, ColorPickerGetPixel(info->pick),
&info->origColor);
commonCB(info, NULL);
}
static void
changeBgOk(Widget w, LocalInfo * info, XtPointer junk2)
{
XColor xcol;
xcol = *ColorPickerGetXColor(info->pick);
commonCB(info, &xcol);
}
void
ColorEditor(Widget w, Pixel pixel, Palette * map, Boolean allowWrite,
XtCallbackProc okProc, XtPointer closure)
{
Position x, y;
Widget shell, form, ok, cancel, pick;
Pixel pix;
LocalInfo *info = XtNew(LocalInfo);
info->okProc = okProc;
info->closure = closure;
info->wIn = w;
info->allowWrite = allowWrite;
XtVaGetValues(GetShell(w), XtNx, &x, XtNy, &y, NULL);
shell = XtVaCreatePopupShell("colorEditDialog",
transientShellWidgetClass, GetShell(w),
XtNx, x + 24,
XtNy, y + 24,
XtNcolormap, map->cmap,
NULL);
PaletteAddUser(map, shell);
form = XtVaCreateManagedWidget("form", formWidgetClass, shell,
NULL);
if (allowWrite) {
pix = pixel;
} else {
pix = PaletteGetUnused(map);
}
pick = ColorPickerPalette(form, map, &pix);
info->origColor = *PaletteLookup(map, pixel);
ColorPickerSetXColor(pick, &info->origColor);
ok = XtVaCreateManagedWidget("ok",
commandWidgetClass, form,
XtNfromVert, pick,
XtNtop, XtChainBottom,
XtNbottom, XtChainBottom,
XtNleft, XtChainLeft,
XtNright, XtChainLeft,
NULL);
cancel = XtVaCreateManagedWidget("cancel",
commandWidgetClass, form,
XtNfromVert, pick,
XtNfromHoriz, ok,
XtNtop, XtChainBottom,
XtNbottom, XtChainBottom,
XtNleft, XtChainLeft,
XtNright, XtChainLeft,
NULL);
XtAddCallback(cancel, XtNcallback,
(XtCallbackProc) changeBgCancel, (XtPointer) info);
XtAddCallback(ok, XtNcallback,
(XtCallbackProc) changeBgOk, (XtPointer) info);
AddDestroyCallback(shell,
(DestroyCallbackFunc) changeBgCancel, (XtPointer) info);
info->shell = shell;
info->pick = pick;
info->map = map;
XtPopup(shell, XtGrabNone);
}