RGB "dialing" facility?

Shing-Fat Fred Ma fma@doe.carleton.ca
Mon Dec 2 18:38:00 2002


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 <grant.mcdorman@cedara.com>, 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, fma@doe.carleton.ca
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 */
>}