X-Git-Url: https://git.librecmc.org/?a=blobdiff_plain;f=cde%2Fprograms%2Fdtstyle%2FColorMain.c;h=3f2957967f17ea6a862df4119d1d0c775dbae45f;hb=3503243d14aabccf09337dfd6b0133513d14d846;hp=80d9513103e99a5a852d639114f50fcdaacc846f;hpb=c742edcb2ff2c8d33d985eee7193ac232b671272;p=oweals%2Fcde.git diff --git a/cde/programs/dtstyle/ColorMain.c b/cde/programs/dtstyle/ColorMain.c index 80d95131..3f295796 100644 --- a/cde/programs/dtstyle/ColorMain.c +++ b/cde/programs/dtstyle/ColorMain.c @@ -16,7 +16,7 @@ * details. * * You should have received a copy of the GNU Lesser General Public - * License along with these librararies and programs; if not, write + * License along with these libraries and programs; if not, write * to the Free Software Foundation, Inc., 51 Franklin Street, Fifth * Floor, Boston, MA 02110-1301 USA */ @@ -40,14 +40,11 @@ /*+++++++++++++++++++++++++++++++++++++++*/ /* include files */ /*+++++++++++++++++++++++++++++++++++++++*/ -#ifdef __apollo -#include "/sys5/usr/include/limits.h" -#else /* common default */ #include -#endif /* __apollo */ #include #include +#include #include #include #include @@ -218,6 +215,12 @@ static void _DtmapCB_colorUse( 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(); @@ -551,8 +554,9 @@ CreatePaletteButtons( 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++; } @@ -589,10 +593,11 @@ CreatePaletteButtons( 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); + (XtPointer) (intptr_t) i); XmStringFree(string); } XtManageChildren(colorButton,pCurrentPalette->num_of_colors); @@ -600,14 +605,18 @@ CreatePaletteButtons( 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++; } @@ -742,6 +751,77 @@ InitializePaletteList( 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; inum_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. @@ -754,16 +834,13 @@ selectPaletteCB( 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); @@ -793,82 +870,15 @@ selectPaletteCB( 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; inum_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 */ { @@ -973,12 +983,13 @@ selectColorCB( XtPointer client_data, XtPointer call_data ) { - int i,n; + intptr_t i; + int n; Arg args[4]; ColorSet *color_set; XmPushButtonCallbackStruct *cb = (XmPushButtonCallbackStruct *)call_data; - i = (int) client_data; + i = (intptr_t) client_data; /* if click_count == 1 .. first button press, set time out */ if(cb->click_count == 1) @@ -994,10 +1005,15 @@ selectColorCB( 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); @@ -1010,9 +1026,28 @@ selectColorCB( 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 @@ -1024,20 +1059,24 @@ timeoutCB( XtIntervalId *id ) { register int n; - int i; + intptr_t i; Arg args[2]; + Pixel bg_pixel; if (TypeOfMonitor == XmCO_BLACK_WHITE) return; - i = (int)client_data; + i = (intptr_t) client_data; 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); @@ -1366,6 +1405,8 @@ modifyColorCB( 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); } @@ -1704,7 +1745,7 @@ colorUseCB( XmToggleButtonCallbackStruct *cb = (XmToggleButtonCallbackStruct *)call_data; - colorDialog.currentColorUse = (int) client_data; + colorDialog.currentColorUse = (int) (intptr_t) client_data; switch (colorDialog.currentColorUse) { case XmCO_HIGH_COLOR: @@ -2284,7 +2325,7 @@ show_selection( style.colorSrv = True; if(value != NULL) { - if((int)client_data == GET_TYPE_MONITOR) + if((intptr_t) client_data == GET_TYPE_MONITOR) { sscanf ((char *)value, "%x_%x_%x_%x", (unsigned int *) &(TypeOfMonitor), (unsigned int *) &(UsePixmaps), (unsigned int *) &(FgColor), (unsigned int *) &dynamic_color); @@ -2413,7 +2454,9 @@ saveColor( pCurrentPalette->name); sprintf(bufr, "%s*paletteDlg.selected_button: %d\n", bufr, selected_button); - write (fd, bufr, strlen(bufr)); + if(-1 == write (fd, bufr, strlen(bufr))) { + perror(strerror(errno)); + } } } @@ -2738,8 +2781,7 @@ CreateBottomColor( void ) if(style.count > 10) return; - - if(style.dynamicColor) + if(TypeOfMonitor != XmCO_BLACK_WHITE) { /* Create form for Add and Delete buttons */ n = 0; @@ -2814,7 +2856,7 @@ CreateBottomColor( void ) XtManageChild(style.buttonsForm); /* Create Modify... button */ - if(style.dynamicColor) + if(TypeOfMonitor != XmCO_BLACK_WHITE) { n = 0; XtSetArg (args[n], XmNtopAttachment, XmATTACH_FORM); n++;