{
edit.color_set = color_set;
CopyPixelSet(&edit.oldButtonColor,edit.color_set);
+
+ /* update "old" button if necessary */
+ if(style.visualClass==TrueColor || style.visualClass==DirectColor){
+ XtVaSetValues(edit.oldButton,
+ XmNbackground,edit.color_set->bg.pixel,
+ XmNarmColor,edit.color_set->bg.pixel,
+ XmNforeground,edit.color_set->fg.pixel,
+ XmNtopShadowColor,edit.color_set->ts.pixel,
+ XmNbottomShadowColor,edit.color_set->bs.pixel,NULL);
+ }
InitializeNewButton();
SetScales(&edit.color_set->bg);
XtManageChild(edit.DialogShell);
XtSetArg(args[n], XmNverticalSpacing, style.verticalSpacing); n++;
sampleForm = XmCreateForm(sampleTB, "sampleForm", args, n);
- /* Create Old and New Buttons */
- InitializeOldButton();
+ /* Create Old and New Buttons */
+ if(style.visualClass==TrueColor || style.visualClass==DirectColor){
+ edit.oldButtonColor.bg.pixel = edit.color_set->bg.pixel;
+ edit.oldButtonColor.fg.pixel = edit.color_set->fg.pixel;
+ edit.oldButtonColor.sc.pixel = edit.color_set->sc.pixel;
+ edit.oldButtonColor.bs.pixel = edit.color_set->bs.pixel;
+ edit.oldButtonColor.ts.pixel = edit.color_set->ts.pixel;
+ CopyPixelSet(&edit.oldButtonColor,edit.color_set);
+ }else{
+ InitializeOldButton();
+ }
if(!OldNewSame) {
n=0;
edit.color_set->bs.blue = 0;
}
- XStoreColors(style.display, style.colormap, colors, j );
+ if(style.visualClass==PseudoColor || style.visualClass==StaticColor)
+ {
+ XStoreColors(style.display, style.colormap, colors, j );
+ }
+ else if(style.visualClass==TrueColor || style.visualClass==DirectColor)
+ {
+ static unsigned long pixels[4];
+ static int count=0;
+
+ if(count){
+ XFreeColors(style.display,style.colormap,pixels,count,0);
+ count=0;
+ }
+
+ if(XAllocColor(style.display,style.colormap,&edit.color_set->fg))
+ pixels[count++]=edit.color_set->fg.pixel;
+ if(XAllocColor(style.display,style.colormap,&edit.color_set->bg))
+ pixels[count++]=edit.color_set->bg.pixel;
+ if(XAllocColor(style.display,style.colormap,&edit.color_set->ts))
+ pixels[count++]=edit.color_set->ts.pixel;
+ if(XAllocColor(style.display,style.colormap,&edit.color_set->bs))
+ pixels[count++]=edit.color_set->bs.pixel;
+
+ XtVaSetValues(edit.newButton,
+ XmNbackground,edit.color_set->bg.pixel,
+ XmNarmColor,edit.color_set->bg.pixel,
+ XmNforeground,edit.color_set->fg.pixel,
+ XmNtopShadowColor,edit.color_set->ts.pixel,
+ XmNbottomShadowColor,edit.color_set->bs.pixel,NULL);
+ }
}
/************************************************************************
XtSetValues(edit.oldButton, args, n);
}
-
- XStoreColors(style.display, style.colormap, colors, j );
+ if(style.visualClass == PseudoColor || style.visualClass == GrayScale)
+ XStoreColors(style.display, style.colormap, colors, j );
}
Widget w,
XtPointer client_data,
XtPointer call_data) ;
+static void colorEditorCB(
+ Widget w,
+ XtPointer client_data,
+ XtPointer call_data) ;
+
+static void allocNewColors(void);
static Boolean ValidName( char *name) ;
void loadDatabase();
XtSetArg (args[n], XmNrecomputeSize, False); n++;
XtSetArg (args[n], XmNwidth, COLOR_BUTTON_WIDTH); n++;
XtSetArg (args[n], XmNheight, COLOR_BUTTON_HEIGHT); n++;
- /* allow traversal only if dynamicColor is on */
- if (!style.dynamicColor)
+ /* allow traversal only if editing is possible */
+ if (style.dynamicColor || style.visualClass==TrueColor
+ || style.visualClass==DirectColor)
{
XtSetArg (args[n], XmNtraversalOn, False); n++;
}
string = CMPSTR(" ");
XtSetArg (args[n], XmNlabelString, string); n++;
colorButton[i] = XmCreatePushButton(paletteRc, "colorButton", args, n);
- /* allow access to modify functionality only if dynamicColor is on */
- if (style.dynamicColor)
+ /* allow access to modify functionality if available */
+ if (style.dynamicColor || style.visualClass==TrueColor
+ || style.visualClass==DirectColor)
XtAddCallback(colorButton[i], XmNactivateCallback, selectColorCB,
(XtPointer)i);
XmStringFree(string);
if(!save.restoreFlag)
selected_button = 0;
- /* draw selection border only if dynamicColor is on */
- if (style.dynamicColor)
+ /* draw selection border if editing is possible */
+ if (style.dynamicColor || style.visualClass==TrueColor
+ || style.visualClass==DirectColor)
{
n=0;
XtSetArg (args[n], XmNborderColor, BlackPixelOfScreen(style.screen)); n++;
XtSetValues(colorButton[selected_button],args,n);
}
-
+
+ if(style.visualClass==TrueColor || style.visualClass==DirectColor)
+ allocNewColors();
+
style.count++;
}
style.count++;
return(True);
}
+
+/*
+ * Allocate new pixel values and update color palette buttons.
+ * This is needed for screens without dynamicColor.
+ */
+static void allocNewColors(void)
+{
+ int i, n;
+ Arg args[10];
+ static unsigned long pixels[XmCO_MAX_NUM_COLORS*5];
+ static int count = 0;
+
+ if(count)
+ {
+ /* free the cells from last selection */
+ XFreeColors(style.display, style.colormap, pixels, count, 0);
+ count=0;
+ }
+
+ for (i=0; i<pCurrentPalette->num_of_colors; i++)
+ {
+ n=0;
+ if (XAllocColor(style.display, style.colormap,
+ &(pCurrentPalette->color[i].fg)) == 0) break;
+ pixels[count++] = pCurrentPalette->color[i].fg.pixel;
+
+ if (XAllocColor(style.display, style.colormap,
+ &(pCurrentPalette->color[i].bg)) == 0) break;
+ pixels[count++] = pCurrentPalette->color[i].bg.pixel;
+ XtSetArg (args[n], XmNbackground,
+ pCurrentPalette->color[i].bg.pixel); n++;
+
+ if (XAllocColor(style.display, style.colormap,
+ &(pCurrentPalette->color[i].sc)) == 0) break;
+ pixels[count++] = pCurrentPalette->color[i].sc.pixel;
+ XtSetArg (args[n], XmNarmColor,
+ pCurrentPalette->color[i].sc.pixel); n++;
+
+ if (UsePixmaps == FALSE)
+ {
+ if (XAllocColor(style.display, style.colormap,
+ &(pCurrentPalette->color[i].ts)) == 0) break;
+ pixels[count++] = pCurrentPalette->color[i].ts.pixel;
+ XtSetArg (args[n], XmNtopShadowColor,
+ pCurrentPalette->color[i].ts.pixel); n++;
+
+ if (XAllocColor(style.display, style.colormap,
+ &(pCurrentPalette->color[i].bs)) == 0) break;
+ pixels[count++] = pCurrentPalette->color[i].bs.pixel;
+ XtSetArg (args[n], XmNbottomShadowColor,
+ pCurrentPalette->color[i].bs.pixel); n++;
+ }
+ else /* create pixmaps for top/bottom shadow */
+ {
+ XmDestroyPixmap(style.screen, edit.pixmap25);
+ XmDestroyPixmap(style.screen, edit.pixmap75);
+
+ edit.pixmap25 = XmGetPixmap (style.screen,
+ "50_foreground",pCurrentPalette->color[i].bg.pixel,
+ WhitePixelOfScreen(style.screen));
+
+ edit.pixmap75 = XmGetPixmap (style.screen,
+ "50_foreground",pCurrentPalette->color[i].bg.pixel,
+ BlackPixelOfScreen(style.screen));
+
+ XtSetArg (args[n], XmNtopShadowPixmap, edit.pixmap25); n++;
+ XtSetArg (args[n], XmNbottomShadowPixmap, edit.pixmap75); n++;
+ }
+ XtSetValues(colorButton[i], args, n);
+ }
+}
/*
** This is the selection callback for the Scrolled list.
XtPointer client_data,
XtPointer call_data )
{
- register int n,i;
+ register int n;
Arg args[10];
XmListCallbackStruct *cb = (XmListCallbackStruct *)call_data;
palette *tmp_palette;
XmString string;
Pixel white, black;
- static unsigned long pixels[XmCO_MAX_NUM_COLORS*5];
- static int count;
- static Boolean First = True;
-
+ static Boolean First = True;
white = WhitePixelOfScreen(style.screen);
black = BlackPixelOfScreen(style.screen);
ReColorPalette();
else
{
- /* PUT DIALOG saying can't dynamically change */
- if(First)
- {
- InfoDialog(NEXT_SESSION, style.colorDialog, False);
- First = False;
- }
- else
- {
- if (TypeOfMonitor != XmCO_BLACK_WHITE)
-
- /* free the cells from last selection */
- XFreeColors(style.display, style.colormap, pixels,
- count, 0);
- }
-
if (TypeOfMonitor != XmCO_BLACK_WHITE)
{
- /* allocate new colors */
- count = 0;
-
- for (i=0; i<pCurrentPalette->num_of_colors; i++)
- {
- n=0;
- if (XAllocColor(style.display, style.colormap,
- &(pCurrentPalette->color[i].bg)) == 0)
- break;
- pixels[count++] = pCurrentPalette->color[i].bg.pixel;
- XtSetArg (args[n], XmNbackground,
- pCurrentPalette->color[i].bg.pixel); n++;
-
- if (XAllocColor(style.display, style.colormap,
- &(pCurrentPalette->color[i].sc)) == 0)
- break;
- pixels[count++] = pCurrentPalette->color[i].sc.pixel;
- XtSetArg (args[n], XmNarmColor,
- pCurrentPalette->color[i].sc.pixel); n++;
-
- if (UsePixmaps == FALSE)
- {
- if (XAllocColor(style.display, style.colormap,
- &(pCurrentPalette->color[i].ts)) == 0)
- break;
- pixels[count++] = pCurrentPalette->color[i].ts.pixel;
- XtSetArg (args[n], XmNtopShadowColor,
- pCurrentPalette->color[i].ts.pixel); n++;
-
- if (XAllocColor(style.display, style.colormap,
- &(pCurrentPalette->color[i].bs)) == 0)
- break;
- pixels[count++] = pCurrentPalette->color[i].bs.pixel;
- XtSetArg (args[n], XmNbottomShadowColor,
- pCurrentPalette->color[i].bs.pixel); n++;
- }
- else /* create pixmaps for top/bottom shadow */
- {
- XmDestroyPixmap(style.screen, edit.pixmap25);
- XmDestroyPixmap(style.screen, edit.pixmap75);
-
- edit.pixmap25 = XmGetPixmap (style.screen,
- "50_foreground",
- pCurrentPalette->color[i].bg.pixel,
- WhitePixelOfScreen(style.screen));
-
- edit.pixmap75 = XmGetPixmap (style.screen,
- "50_foreground",
- pCurrentPalette->color[i].bg.pixel,
- BlackPixelOfScreen(style.screen));
-
- XtSetArg (args[n], XmNtopShadowPixmap, edit.pixmap25);
- n++;
- XtSetArg (args[n], XmNbottomShadowPixmap, edit.pixmap75);
- n++;
- }
-
- XtSetValues(colorButton[i], args, n);
- }
+ /* PUT DIALOG saying can't dynamically change */
+ if(First)
+ {
+ InfoDialog(NEXT_SESSION, style.colorDialog, False);
+ First = False;
+ }
+ allocNewColors();
}
else /* XmCO_BLACK_WHITE */
{
if ((edit.DialogShell == NULL) || (!XtIsManaged(edit.DialogShell)))
{
+ Pixel bg_pixel;
+
/* make the new selected button have a border color */
- n=0;
- XtSetArg (args[n], XmNborderColor,
- pCurrentPalette->color[pCurrentPalette->secondary].bg.pixel);
+ n=0;
+ XtSetArg(args[n],XmNbackground,&bg_pixel); n++;
+ XtGetValues(colorDialog.colorForm,args,n);
+
+ n=0;
+ XtSetArg (args[n], XmNborderColor,bg_pixel);
n++;
XtSetValues(colorButton[selected_button],args,n);
color_set = (ColorSet *) &pCurrentPalette->color[selected_button];
ColorEditor(style.colorDialog,color_set);
+
+ if(!style.dynamicColor) /* need to update pixels */
+ XtAddCallback(edit.DialogShell, XmNcallback, colorEditorCB, NULL);
}
}
+/*
+ * Color editor callback for screens without dynamicColor.
+ */
+static void colorEditorCB(Widget w, XtPointer client_data, XtPointer call_data)
+{
+ static Boolean first = True;
+ DtDialogBoxCallbackStruct *cb = (DtDialogBoxCallbackStruct *) call_data;
+
+ /* show "next session" message if first edit */
+ if(cb->button_position==OK_BUTTON && first){
+ InfoDialog(NEXT_SESSION, style.colorDialog, False);
+ first = False;
+ }
+ allocNewColors();
+ XtRemoveCallback(edit.DialogShell, XmNcallback, colorEditorCB, NULL);
+}
/*
** This is the double click timeout callback. If this routine is called
register int n;
int i;
Arg args[2];
+ Pixel bg_pixel;
if (TypeOfMonitor == XmCO_BLACK_WHITE)
return;
if ((edit.DialogShell == NULL) || (!XtIsManaged(edit.DialogShell)))
{
/* make the new selected button have a border color */
+ n=0;
+ XtSetArg(args[n],XmNbackground,&bg_pixel); n++;
+ XtGetValues(colorDialog.colorForm,args,n);
+
n=0;
- XtSetArg (args[n], XmNborderColor,
- pCurrentPalette->color[pCurrentPalette->secondary].bg.pixel);
+ XtSetArg (args[n], XmNborderColor,bg_pixel);
n++;
XtSetValues(colorButton[selected_button],args,n);
color_set = (ColorSet *) &pCurrentPalette->color[selected_button];
ColorEditor(style.colorDialog,color_set);
+ if(!style.dynamicColor) /* need to update pixels */
+ XtAddCallback(edit.DialogShell, XmNcallback, colorEditorCB, NULL);
}
if(style.count > 10)
return;
-
- if(style.dynamicColor)
+ if(TypeOfMonitor != XmCO_BLACK_WHITE)
{
/* Create form for Add and Delete buttons */
n = 0;
XtManageChild(style.buttonsForm);
/* Create Modify... button */
- if(style.dynamicColor)
+ if(TypeOfMonitor != XmCO_BLACK_WHITE)
{
n = 0;
XtSetArg (args[n], XmNtopAttachment, XmATTACH_FORM); n++;