RE: RGB "dialing" facility
Grant McDorman wrote:
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1
Little motif app I wrote for this attached (yes I know the list will strip it,
but Fred will get it directly).
To compile:
cc -o colourslider colourslider.c -lXm -lXt -lX11
(may need to add -I/usr/dt/include -I/usr/openwin/include -L/usr/dt/lib
- -L/usr/openwin/lib depending on your Solaris version; don't need it on Sol 8
here.)
The program should work on any display depth and type.
I can send the compiled version if you want too.
Have fun.
On December 2, 2002 06:44 am, Shing-Fat Fred Ma wrote:
But
I was actually looking for an Xwindows
tool that lets me turn knobs or slide
sliders to interactively adjust the colors
with real time feedback.
- --
Grant McDorman <[EMAIL PROTECTED]>, Sr. Software Design Consultant
Cedara Software Corp. <URL:http://www.cedara.com>
(formerly I.S.G. Technologies Inc.)
Mississauga, Ontario, Canada
Grant,
It works great! Thanks a bunch!
By the way, would you mind if I post this email on
my web page? I've encouraged a number of
fellow grad students to use TightVNC, and they
might find it useful (though it would be more for
public dissemination, since the grad students
can always run it from my bin directory).
Fred
P.S. Might fine way of spelling "colour"
there ;)
--
Fred Ma, [EMAIL PROTECTED]
Carleton University, Dept. of Electronics
1125 Colonel By Drive, Ottawa, Ontario
Canada, K1S 5B6
#include <stdio.h>
#include <string.h>
#include <ctype.h>
#include <Xm/Xm.h>
#include <Xm/Scale.h>
#include <Xm/TextF.h>
#include <Xm/Label.h>
#include <Xm/Form.h>
#include <Xm/ToggleB.h>
static Widget redScale, blueScale, greenScale;
static Widget textBox;
static Widget sampleChip;
static Widget fgbgToggle;
static Widget topLevel;
static Widget topManager;
static XtAppContext app;
static const char * appclass = "Coloursel";
static int allocated = 0;
static XColor fg;
static XColor bg;
static int getRed()
{
int value;
XmScaleGetValue(redScale, &value);
return value;
}
static int getGreen()
{
int value;
XmScaleGetValue(greenScale, &value);
return value;
}
static int getBlue()
{
int value;
XmScaleGetValue(blueScale, &value);
return value;
}
static void change(Widget slider, XtPointer call, XtPointer client)
{
static XColor rgb;
static char buffer[512];
/* free previous value if required */
if (allocated) {
XFreeColors(XtDisplay(slider), DefaultColormapOfScreen(XtScreen(slider)), &rgb.pixel, 1, 0);
}
/* construct RGB value from sliders */
/* note hardcoded shift for 16-bit RGB values used by XAllocColor */
rgb.red = getRed() << 8;
rgb.green = getGreen() << 8;
rgb.blue = getBlue() << 8;
rgb.flags = DoRed | DoGreen | DoBlue;
XAllocColor(XtDisplay(slider), DefaultColormapOfScreen(XtScreen(slider)), &rgb);
XtVaSetValues(sampleChip, XmToggleButtonGetState(fgbgToggle) ? XmNforeground : XmNbackground, rgb.pixel, NULL);
sprintf(buffer, "#%02X/%02X/%02X", rgb.red >> 8, rgb.green >> 8, rgb.blue >> 8);
XmTextFieldSetString(textBox, buffer);
}
static void changefgbg(Widget toggle, XtPointer call, XtPointer client)
{
if (XmToggleButtonGetState(toggle)) {
bg.red = getRed();
bg.blue = getBlue();
bg.green = getGreen();
XmScaleSetValue(redScale, fg.red);
XmScaleSetValue(greenScale, fg.green);
XmScaleSetValue(blueScale, fg.blue);
} else {
fg.red = getRed();
fg.blue = getBlue();
fg.green = getGreen();
XmScaleSetValue(redScale, bg.red);
XmScaleSetValue(greenScale, bg.green);
XmScaleSetValue(blueScale, bg.blue);
}
change(redScale, NULL, NULL);
}
int main(argc, argv)
int argc;
char* argv[];
{
XmString label;
topLevel = XtAppInitialize (&app, appclass, NULL, 0,
&argc, argv, NULL, NULL, 0);
topManager = XtVaCreateWidget("topManager", xmFormWidgetClass, topLevel, NULL);
redScale = XtVaCreateManagedWidget("redScale", xmScaleWidgetClass, topManager,
XmNmaximum, 255,
XmNvalue, 255,
XmNorientation, XmHORIZONTAL,
XmNleftAttachment, XmATTACH_FORM,
XmNtopAttachment, XmATTACH_FORM,
XmNleftOffset, 2,
XmNtopOffset, 2,
NULL);
greenScale = XtVaCreateManagedWidget("greenScale", xmScaleWidgetClass, topManager,
XmNmaximum, 255,
XmNvalue, 255,
XmNorientation, XmHORIZONTAL,
XmNleftAttachment, XmATTACH_FORM,
XmNtopAttachment, XmATTACH_WIDGET,
XmNtopWidget, redScale,
XmNleftOffset, 2,
XmNtopOffset, 2,
NULL);
blueScale = XtVaCreateManagedWidget("blueScale", xmScaleWidgetClass, topManager,
XmNmaximum, 255,
XmNvalue, 255,
XmNorientation, XmHORIZONTAL,
XmNleftAttachment, XmATTACH_FORM,
XmNtopAttachment, XmATTACH_WIDGET,
XmNtopWidget, greenScale,
XmNleftOffset, 2,
XmNtopOffset, 2,
NULL);
label = XmStringCreateLtoR("Foreground", "DEFAULT");
fgbgToggle = XtVaCreateManagedWidget("fgbg", xmToggleButtonWidgetClass, topManager,
XmNleftAttachment, XmATTACH_FORM,
XmNtopAttachment, XmATTACH_WIDGET,
XmNtopWidget, blueScale,
XmNleftOffset, 2,
XmNtopOffset, 2,
XmNlabelString, label,
XmNset, False,
NULL);
textBox = XtVaCreateManagedWidget("textBox", xmTextFieldWidgetClass, topManager,
XmNleftAttachment, XmATTACH_FORM,
XmNtopAttachment, XmATTACH_WIDGET,
XmNtopWidget, fgbgToggle,
XmNleftOffset, 2,
XmNtopOffset, 2,
NULL);
sampleChip = XtVaCreateManagedWidget("sample", xmLabelWidgetClass, topManager,
XmNleftAttachment, XmATTACH_WIDGET,
XmNtopAttachment, XmATTACH_FORM,
XmNleftWidget, blueScale,
XmNleftOffset, 2,
XmNtopOffset, 2,
NULL);
XtAddCallback(redScale, XmNvalueChangedCallback, change, NULL);
XtAddCallback(greenScale, XmNvalueChangedCallback, change, NULL);
XtAddCallback(blueScale, XmNvalueChangedCallback, change, NULL);
XtAddCallback(redScale, XmNdragCallback, change, NULL);
XtAddCallback(greenScale, XmNdragCallback, change, NULL);
XtAddCallback(blueScale, XmNdragCallback, change, NULL);
XtAddCallback(fgbgToggle, XmNvalueChangedCallback, changefgbg, NULL);
change(redScale, NULL, NULL);
XmToggleButtonSetState(fgbgToggle, True, True); /* caused callback to set background */
allocated = 1;
XtManageChild(topManager);
XtRealizeWidget(topLevel);
XtAppMainLoop(app);
return 0; /* keep gcc happy */
}
_______________________________________________
VNC-List mailing list
[EMAIL PROTECTED]
http://www.realvnc.com/mailman/listinfo/vnc-list