Color Picker
Availability LightWave 6.0 | Component Layout, Modeler | Header lwhost.h
The color picker global returns a function that prompts the user for a color selection. The request displays the color dialog currently installed in LightWave. This may be the default system dialog or a custom ColorPicker plug-in.
The function returned by the color picker global calls the color picker module's activation function directly. Plug-ins calling the function act as the host side of the ColorPicker plug-in class.
Global Call
LWColorActivateFunc *colorpick; colorpick = global( LWCOLORACTIVATEFUNC_GLOBAL, GFUSE_TRANSIENT );
The global function returns a pointer to an LWColorActivateFunc.
typedef int LWColorActivateFunc (int version, LWColorPickLocal *);
The return value of this function can be any of the values defined for the return values of activation functions. Any value
other than AFUNC_OK
must be handled as an error.
The version is passed as the version
argument to the color picker's activation
function. This should be set to the value defined by the LWCOLORPICK_VERSION
symbol in lwdialog.h
. Color picker plug-ins with a different activation version
will return AFUNC_BADVERSION
.
The second argument to this function is a pointer to a structure that is passed as the local
argument to the color picker's activation function.
The Local Structure
The color picker function passes an LWColorPickLocal as the local argument to the activation function of the color picker plug-in.
typedef void LWHotColorFunc (void *data, float r, float g, float b); typedef struct st_LWColorPickLocal { int result; const char *title; float red, green, blue; void *data; LWHotColorFunc *hotFunc; } LWColorPickLocal;
result
- The result of the request. This will be 1 if the user selected a color, 0 if the user cancelled the request, and a negative number to indicate an error.
title
- The title string. This is generally displayed near the top of the color dialog and tells the user the context of the color request.
red, green, blue
- The initial color. If the user selects a color, these fields will be modified to contain the selected color. The nominal range for RGB levels is 0.0 to 1.0, but they can be outside this range.
data
- A pointer to data that will be passed to your hot color callback. This can point to anything your callback requires, or NULL. The color picker ignores it.
hotFunc( data, r, g, b )
- A color callback you supply. The color picker calls this while the user is playing with any of its color selection mechanisms. This allows you to update your own display interactively as the user selects a color. (The "hot" part of the name refers to this dynamic interaction. This isn't an NTSC color gamut test.) The callback should execute quickly enough that it doesn't bog down the interactivity of the color picker with the user.
Example
This code fragment asks the user for a color.
#include <lwserver.h> #include <lwhost.h> void colorcb( MyDisplayData *data, float r, float g, float b ) { /* redraw my display with the current color */ ... } LWColorActivateFunc *colorpick; LWColorPickLocal clrloc; MyDisplayData myhotdata; int result; colorpick = global( LWCOLORACTIVATEFUNC_GLOBAL, GFUSE_TRANSIENT ); if ( !colorpick ) goto NoColorPick; /* global calls can fail */ clrloc.title = "Widget Color"; clrloc.red = current_red; clrloc.green = current_green; clrloc.blue = current_blue; clrloc.data = &myhotdata; clrloc.hotFunc = colorcb; result = colorpick( LWCOLORPICK_VERSION, &clrloc ); if ( result == AFUNC_OK && clrloc.result > 0 ) { current_red = clrloc.red; current_green = clrloc.green; current_blue = clrloc.blue; ...