home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
The World of Computer Software
/
World_Of_Computer_Software-02-385-Vol-1of3.iso
/
x
/
xtici.zip
/
xtici
/
huebar.c
< prev
next >
Wrap
C/C++ Source or Header
|
1991-08-28
|
5KB
|
175 lines
/*
* Code and supporting documentation (c) Copyright 1990 1991 Tektronix, Inc.
* All Rights Reserved
*
* This file is a component of an X Window System client which uses the Xcms
* Color Management System. TekColor is a trademark of Tektronix, Inc. The
* TekColor Editor is the subject of U.S. and foreign patents pending. The
* term "TekHVC" designates a particular color space that is the subject of
* U.S. Patent No. 4,985,853 (equivalent foreign patents pending).
* Permission is hereby granted to use, copy, modify, sell, and otherwise
* distribute this software and its documentation for the X Window System
* environment, for any purpose and without fee, provided that:
*
* 1. The code and documentation are only used to implement a
* TekColor Editor in an X Window System environment; and
* 2. This copyright and permission notice is reproduced in all copies
* of the code and in supporting documentation.
*
* Permission is granted to modify this code as required to allow it to
* be compiled on any host computer, provided that the functionality of
* the TekColor Editor is not modified in any way. A description of any
* modifications must be sent to Tektronix, Inc. Contact
* Tektronix Inc., P.O. Box 1000, Mail Station 60-850,
* Network Displays Division Engineering, Wilsonville, OR 97070.
*
* Tektronix makes no representation about the suitability of this software
* for any purpose. It is provided "as is" and with all faults.
*
* TEKTRONIX DISCLAIMS ALL WARRANTIES APPLICABLE TO THIS SOFTWARE,
* INCLUDING THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
* PARTICULAR PURPOSE. IN NO EVENT SHALL TEKTRONIX BE LIABLE FOR ANY
* SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER
* RESULTING FROM LOSS OF USE, DATA, OR PROFITS, WHETHER IN AN ACTION OF
* CONTRACT, NEGLIGENCE, OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
* CONNECTION WITH THE USE OR THE PERFORMANCE OF THIS SOFTWARE.
*
* NAME
* huebar - a widget to select and display hues
*
* DESCRIPTION
* The huebar displays the current hue.
* Users can interact with it to select new hues.
* The bar can be filled to display the range of fully saturated colors
* the monitor can display or a range of colors with the same value and
* chroma as the current color.
* This package creates, updates and responds to user input in the huebar.
*/
#ifndef LINT
static char *copy_notice = "Copyright 1991 Tektronix, Inc.";
#ifdef RCS_ID
static char *rcsid= "$Header: huebar.c,v 1.2 91/08/22 11:33:39 adamsc Exp $";
#endif /* RCS_ID */
#endif /* LINT */
/*
* EXTERNAL INCLUDES
*/
/*
* INTERNAL INCLUDES
*/
#include "xtici.h"
#include "widgets/ColorS.h"
/*
* EXTERNS
*/
/*
* GLOBALS
*/
#ifdef DEC
# define GLOBAL global
#else /* DEC */
# define GLOBAL
#endif
/*
* LOCAL DEFINES
*/
/*
* LOCAL TYPEDEFS
*
*/
/*
* LOCALS VARIABLES
*/
#ifdef DEBUG
# define STATIC
#else
# define STATIC static
#endif
/************************************************************************
* *
* PRIVATE ROUTINES *
* *
************************************************************************/
/* ARGSUSED */
STATIC void ChangedHue(w, pwhich, pcall)
Widget w;
XtPointer pwhich;
XtPointer pcall;
{
int which = (int)pwhich;
ScaleCallbackStruct *call = (ScaleCallbackStruct *)pcall;
XcmsColor new;
switch (call->reason) {
/* Just end of gesture, don't change any values */
case CR_DISARM:
EndColor(which);
return;
/* First event of gesture */
case CR_ARM:
BeginGesture(GestureMouse);
return;
/* Gesture is a single event; so record the gesture as completed */
case CR_SINGLE_SELECT:
BeginGesture(GestureNone);
break;
case CR_DRAG:
case CR_VALUE_CHANGED:
break;
}
new.spec.TekHVC.H = (XcmsFloat)call->value / 10.0;
new.spec.TekHVC.V = currentHvc.spec.TekHVC.V;
new.spec.TekHVC.C = currentHvc.spec.TekHVC.C;
new.pixel = currentHvc.pixel;
new.format = XcmsTekHVCFormat;
NewHvc(&new, which, HueChange);
call->value = (int)(new.spec.TekHVC.H * 10.0);
}
/************************************************************************
* *
* PUBLIC ROUTINES *
* *
************************************************************************/
Widget CreateHueForm(parent, name, args, count)
Widget parent;
char *name;
Arg *args;
Cardinal count;
{
Widget hue_form = XtCreateManagedWidget(name, colorScaleWidgetClass,
parent, args, count);
XtAddCallback(hue_form, XtNvalueChangedCallback, ChangedHue,
(XtPointer)HuebarWidget);
return(hue_form);
}
void UpdateHueWidget()
{
int adjusted;
Arg arg;
adjusted = (int)(currentHvc.spec.TekHVC.H * 10.0 + 0.5);
/* rounding may put hue over 359.9 */
if (adjusted >= 3600)
adjusted -= 3600;
XtSetArg(arg, XtNvalue, adjusted);
XtSetValues(huebar, &arg, 1);
}