* Massachusetts.
*
* Enhancements Copyright 1992-2001, 2002, 2003, 2004, 2005, 2006,
- * 2007, 2008, 2009, 2010 Free Software Foundation, Inc.
+ * 2007, 2008, 2009, 2010, 2011 Free Software Foundation, Inc.
*
* The following terms apply to Digital Equipment Corporation's copyright
* interest in XBoard:
RETSIGTYPE CmailSigHandler P((int sig));
RETSIGTYPE IntSigHandler P((int sig));
RETSIGTYPE TermSizeSigHandler P((int sig));
-void CreateGCs P((void));
+void CreateGCs P((int redo));
void CreateXIMPieces P((void));
void CreateXPMPieces P((void));
void CreateXPMBoard P((char *s, int n));
Cardinal *nprms));
void AnimateMovingProc P((Widget w, XEvent *event, String *prms,
Cardinal *nprms));
-void AutocommProc P((Widget w, XEvent *event, String *prms,
- Cardinal *nprms));
void AutoflagProc P((Widget w, XEvent *event, String *prms, Cardinal *nprms));
void AutoflipProc P((Widget w, XEvent *event, String *prms, Cardinal *nprms));
-void AutobsProc P((Widget w, XEvent *event, String *prms,
- Cardinal *nprms));
-void AutoraiseProc P((Widget w, XEvent *event, String *prms, Cardinal *nprms));
-void AutosaveProc P((Widget w, XEvent *event, String *prms, Cardinal *nprms));
void BlindfoldProc P((Widget w, XEvent *event, String *prms, Cardinal *nprms));
void FlashMovesProc P((Widget w, XEvent *event, String *prms,
Cardinal *nprms));
void FlipViewProc P((Widget w, XEvent *event, String *prms, Cardinal *nprms));
-void GetMoveListProc P((Widget w, XEvent *event, String *prms,
- Cardinal *nprms));
void HighlightDraggingProc P((Widget w, XEvent *event, String *prms,
Cardinal *nprms));
void HighlightLastMoveProc P((Widget w, XEvent *event, String *prms,
void HighlightArrowProc P((Widget w, XEvent *event, String *prms,
Cardinal *nprms));
void MoveSoundProc P((Widget w, XEvent *event, String *prms, Cardinal *nprms));
-void IcsAlarmProc P((Widget w, XEvent *event, String *prms, Cardinal *nprms));
+//void IcsAlarmProc P((Widget w, XEvent *event, String *prms, Cardinal *nprms));
void OneClickProc P((Widget w, XEvent *event, String *prms, Cardinal *nprms));
void PeriodicUpdatesProc P((Widget w, XEvent *event, String *prms,
Cardinal *nprms));
Cardinal *nprms));
void PopupExitMessageProc P((Widget w, XEvent *event, String *prms,
Cardinal *nprms));
-void PremoveProc P((Widget w, XEvent *event, String *prms, Cardinal *nprms));
-void QuietPlayProc P((Widget w, XEvent *event, String *prms, Cardinal *nprms));
+//void PremoveProc P((Widget w, XEvent *event, String *prms, Cardinal *nprms));
void ShowCoordsProc P((Widget w, XEvent *event, String *prms,
Cardinal *nprms));
void ShowThinkingProc P((Widget w, XEvent *event, String *prms,
void FirstSettingsProc P((Widget w, XEvent *event, String *prms, Cardinal *nprms));
void SecondSettingsProc P((Widget w, XEvent *event, String *prms, Cardinal *nprms));
void GameListOptionsPopUp P((Widget w, XEvent *event, String *prms, Cardinal *nprms));
+void BoardOptionsProc P((Widget w, XEvent *event, String *prms, Cardinal *nprms));
+void IcsOptionsProc P((Widget w, XEvent *event, String *prms, Cardinal *nprms));
+void LoadOptionsProc P((Widget w, XEvent *event, String *prms, Cardinal *nprms));
+void SaveOptionsProc P((Widget w, XEvent *event, String *prms, Cardinal *nprms));
void GameListOptionsPopDown P(());
void ShufflePopDown P(());
void EnginePopDown P(());
{N_("Tags"), "Show Tags", EditTagsProc},
{N_("Comments"), "Show Comments", EditCommentProc},
{N_("ICS Input Box"), "ICS Input Box", IcsInputBoxProc},
+ {"----", NULL, NothingProc},
+ {N_("Board..."), "Board Options", BoardOptionsProc},
+ {N_("Game List Tags..."), "Game List", GameListOptionsPopUp},
{NULL, NULL, NULL}
};
{N_("Time Control ... Alt+Shift+T"), "Time Control", TimeControlProc},
{N_("Common Engine ... Alt+Shift+U"), "Common Engine", UciMenuProc},
{N_("Adjudications ... Alt+Shift+J"), "Adjudications", EngineMenuProc},
+ {N_("ICS ..."), "ICS", IcsOptionsProc},
+ {N_("Load Game ..."), "Load Game", LoadOptionsProc},
+ {N_("Save Game ..."), "Save Game", SaveOptionsProc},
+// {N_(" ..."), "", OptionsProc},
{N_("Game List ..."), "Game List", GameListOptionsPopUp},
{"----", NULL, NothingProc},
{N_("Always Queen Ctrl+Shift+Q"), "Always Queen", AlwaysQueenProc},
{N_("Animate Dragging"), "Animate Dragging", AnimateDraggingProc},
{N_("Animate Moving Ctrl+Shift+A"), "Animate Moving", AnimateMovingProc},
- {N_("Auto Comment"), "Auto Comment", AutocommProc},
{N_("Auto Flag Ctrl+Shift+F"), "Auto Flag", AutoflagProc},
{N_("Auto Flip View"), "Auto Flip View", AutoflipProc},
- {N_("Auto Observe"), "Auto Observe", AutobsProc},
- {N_("Auto Raise Board"), "Auto Raise Board", AutoraiseProc},
- {N_("Auto Save"), "Auto Save", AutosaveProc},
{N_("Blindfold"), "Blindfold", BlindfoldProc},
{N_("Flash Moves"), "Flash Moves", FlashMovesProc},
- {N_("Get Move List"), "Get Move List", GetMoveListProc},
#if HIGHDRAG
{N_("Highlight Dragging"), "Highlight Dragging", HighlightDraggingProc},
#endif
{N_("Highlight Last Move"), "Highlight Last Move", HighlightLastMoveProc},
{N_("Highlight With Arrow"), "Arrow", HighlightArrowProc},
{N_("Move Sound"), "Move Sound", MoveSoundProc},
- {N_("ICS Alarm"), "ICS Alarm", IcsAlarmProc},
+// {N_("ICS Alarm"), "ICS Alarm", IcsAlarmProc},
{N_("One-Click Moving"), "OneClick", OneClickProc},
{N_("Periodic Updates"), "Periodic Updates", PeriodicUpdatesProc},
{N_("Ponder Next Move Ctrl+Shift+P"), "Ponder Next Move", PonderNextMoveProc},
{N_("Popup Exit Message"), "Popup Exit Message", PopupExitMessageProc},
{N_("Popup Move Errors"), "Popup Move Errors", PopupMoveErrorsProc},
- {N_("Premove"), "Premove", PremoveProc},
- {N_("Quiet Play"), "Quiet Play", QuietPlayProc},
+// {N_("Premove"), "Premove", PremoveProc},
{N_("Show Coords"), "Show Coords", ShowCoordsProc},
{N_("Hide Thinking Ctrl+Shift+H"), "Hide Thinking", HideThinkingProc},
{N_("Test Legality Ctrl+Shift+L"), "Test Legality", TestLegalityProc},
{ "ShowMoveListProc", HistoryShowProc},
{ "EditTagsProc", EditCommentProc },
{ "EditCommentProc", EditCommentProc },
- { "IcsAlarmProc", IcsAlarmProc },
{ "IcsInputBoxProc", IcsInputBoxProc },
{ "PauseProc", PauseProc },
{ "AcceptProc", AcceptProc },
{ "AnimateMovingProc", AnimateMovingProc },
{ "AutoflagProc", AutoflagProc },
{ "AutoflipProc", AutoflipProc },
- { "AutobsProc", AutobsProc },
- { "AutoraiseProc", AutoraiseProc },
- { "AutosaveProc", AutosaveProc },
{ "BlindfoldProc", BlindfoldProc },
{ "FlashMovesProc", FlashMovesProc },
{ "FlipViewProc", FlipViewProc },
- { "GetMoveListProc", GetMoveListProc },
#if HIGHDRAG
{ "HighlightDraggingProc", HighlightDraggingProc },
#endif
{ "HighlightLastMoveProc", HighlightLastMoveProc },
- { "IcsAlarmProc", IcsAlarmProc },
+// { "IcsAlarmProc", IcsAlarmProc },
{ "MoveSoundProc", MoveSoundProc },
{ "PeriodicUpdatesProc", PeriodicUpdatesProc },
{ "PonderNextMoveProc", PonderNextMoveProc },
{ "PopupExitMessageProc", PopupExitMessageProc },
{ "PopupMoveErrorsProc", PopupMoveErrorsProc },
- { "PremoveProc", PremoveProc },
- { "QuietPlayProc", QuietPlayProc },
+// { "PremoveProc", PremoveProc },
{ "ShowCoordsProc", ShowCoordsProc },
{ "ShowThinkingProc", ShowThinkingProc },
{ "HideThinkingProc", HideThinkingProc },
SaveFontArg(FILE *f, ArgDescriptor *ad)
{
char *name;
- int i, n = (int)ad->argLoc;
+ int i, n = (int)(intptr_t)ad->argLoc;
switch(n) {
case 0: // CLOCK_FONT
name = appData.clockFont;
void
SaveAttribsArg(FILE *f, ArgDescriptor *ad)
{ // here the "argLoc" defines a table index. It could have contained the 'ta' pointer itself, though
- fprintf(f, OPTCHAR "%s" SEPCHAR "%s\n", ad->argName, (&appData.colorShout)[(int)ad->argLoc]);
+ fprintf(f, OPTCHAR "%s" SEPCHAR "%s\n", ad->argName, (&appData.colorShout)[(int)(intptr_t)ad->argLoc]);
}
void
SaveColor(FILE *f, ArgDescriptor *ad)
{ // in WinBoard the color is an int and has to be converted to text. In X it would be a string already?
- if(colorVariable[(int)ad->argLoc])
- fprintf(f, OPTCHAR "%s" SEPCHAR "%s\n", ad->argName, *(char**)colorVariable[(int)ad->argLoc]);
+ if(colorVariable[(int)(intptr_t)ad->argLoc])
+ fprintf(f, OPTCHAR "%s" SEPCHAR "%s\n", ad->argName, *(char**)colorVariable[(int)(intptr_t)ad->argLoc]);
}
void
XtSetArg(args[0], XtNdefaultDistance, &sep);
XtGetValues(formWidget, args, 1);
+ if(appData.overrideLineGap >= 0) lineGap = appData.overrideLineGap;
boardWidth = lineGap + BOARD_WIDTH * (squareSize + lineGap);
boardHeight = lineGap + BOARD_HEIGHT * (squareSize + lineGap);
CreateGrid();
}
#endif
+void ParseIcsTextColors()
+{ // [HGM] tken out of main(), so it can be called from ICS-Options dialog
+ if (parse_cpair(ColorShout, appData.colorShout) < 0 ||
+ parse_cpair(ColorSShout, appData.colorSShout) < 0 ||
+ parse_cpair(ColorChannel1, appData.colorChannel1) < 0 ||
+ parse_cpair(ColorChannel, appData.colorChannel) < 0 ||
+ parse_cpair(ColorKibitz, appData.colorKibitz) < 0 ||
+ parse_cpair(ColorTell, appData.colorTell) < 0 ||
+ parse_cpair(ColorChallenge, appData.colorChallenge) < 0 ||
+ parse_cpair(ColorRequest, appData.colorRequest) < 0 ||
+ parse_cpair(ColorSeek, appData.colorSeek) < 0 ||
+ parse_cpair(ColorNormal, appData.colorNormal) < 0)
+ {
+ if (appData.colorize) {
+ fprintf(stderr,
+ _("%s: can't parse color names; disabling colorization\n"),
+ programName);
+ }
+ appData.colorize = FALSE;
+ }
+}
+
+int MakeColors()
+{ // [HGM] taken out of main(), so it can be called from BoardOptions dialog
+ XrmValue vFrom, vTo;
+ int forceMono = False;
+
+ if (!appData.monoMode) {
+ vFrom.addr = (caddr_t) appData.lightSquareColor;
+ vFrom.size = strlen(appData.lightSquareColor);
+ XtConvert(shellWidget, XtRString, &vFrom, XtRPixel, &vTo);
+ if (vTo.addr == NULL) {
+ appData.monoMode = True;
+ forceMono = True;
+ } else {
+ lightSquareColor = *(Pixel *) vTo.addr;
+ }
+ }
+ if (!appData.monoMode) {
+ vFrom.addr = (caddr_t) appData.darkSquareColor;
+ vFrom.size = strlen(appData.darkSquareColor);
+ XtConvert(shellWidget, XtRString, &vFrom, XtRPixel, &vTo);
+ if (vTo.addr == NULL) {
+ appData.monoMode = True;
+ forceMono = True;
+ } else {
+ darkSquareColor = *(Pixel *) vTo.addr;
+ }
+ }
+ if (!appData.monoMode) {
+ vFrom.addr = (caddr_t) appData.whitePieceColor;
+ vFrom.size = strlen(appData.whitePieceColor);
+ XtConvert(shellWidget, XtRString, &vFrom, XtRPixel, &vTo);
+ if (vTo.addr == NULL) {
+ appData.monoMode = True;
+ forceMono = True;
+ } else {
+ whitePieceColor = *(Pixel *) vTo.addr;
+ }
+ }
+ if (!appData.monoMode) {
+ vFrom.addr = (caddr_t) appData.blackPieceColor;
+ vFrom.size = strlen(appData.blackPieceColor);
+ XtConvert(shellWidget, XtRString, &vFrom, XtRPixel, &vTo);
+ if (vTo.addr == NULL) {
+ appData.monoMode = True;
+ forceMono = True;
+ } else {
+ blackPieceColor = *(Pixel *) vTo.addr;
+ }
+ }
+
+ if (!appData.monoMode) {
+ vFrom.addr = (caddr_t) appData.highlightSquareColor;
+ vFrom.size = strlen(appData.highlightSquareColor);
+ XtConvert(shellWidget, XtRString, &vFrom, XtRPixel, &vTo);
+ if (vTo.addr == NULL) {
+ appData.monoMode = True;
+ forceMono = True;
+ } else {
+ highlightSquareColor = *(Pixel *) vTo.addr;
+ }
+ }
+
+ if (!appData.monoMode) {
+ vFrom.addr = (caddr_t) appData.premoveHighlightColor;
+ vFrom.size = strlen(appData.premoveHighlightColor);
+ XtConvert(shellWidget, XtRString, &vFrom, XtRPixel, &vTo);
+ if (vTo.addr == NULL) {
+ appData.monoMode = True;
+ forceMono = True;
+ } else {
+ premoveHighlightColor = *(Pixel *) vTo.addr;
+ }
+ }
+ return forceMono;
+}
+
int
main(argc, argv)
int argc;
appData.monoMode = True;
}
- if (!appData.monoMode) {
- vFrom.addr = (caddr_t) appData.lightSquareColor;
- vFrom.size = strlen(appData.lightSquareColor);
- XtConvert(shellWidget, XtRString, &vFrom, XtRPixel, &vTo);
- if (vTo.addr == NULL) {
- appData.monoMode = True;
- forceMono = True;
- } else {
- lightSquareColor = *(Pixel *) vTo.addr;
- }
- }
- if (!appData.monoMode) {
- vFrom.addr = (caddr_t) appData.darkSquareColor;
- vFrom.size = strlen(appData.darkSquareColor);
- XtConvert(shellWidget, XtRString, &vFrom, XtRPixel, &vTo);
- if (vTo.addr == NULL) {
- appData.monoMode = True;
- forceMono = True;
- } else {
- darkSquareColor = *(Pixel *) vTo.addr;
- }
- }
- if (!appData.monoMode) {
- vFrom.addr = (caddr_t) appData.whitePieceColor;
- vFrom.size = strlen(appData.whitePieceColor);
- XtConvert(shellWidget, XtRString, &vFrom, XtRPixel, &vTo);
- if (vTo.addr == NULL) {
- appData.monoMode = True;
- forceMono = True;
- } else {
- whitePieceColor = *(Pixel *) vTo.addr;
- }
- }
- if (!appData.monoMode) {
- vFrom.addr = (caddr_t) appData.blackPieceColor;
- vFrom.size = strlen(appData.blackPieceColor);
- XtConvert(shellWidget, XtRString, &vFrom, XtRPixel, &vTo);
- if (vTo.addr == NULL) {
- appData.monoMode = True;
- forceMono = True;
- } else {
- blackPieceColor = *(Pixel *) vTo.addr;
- }
- }
-
- if (!appData.monoMode) {
- vFrom.addr = (caddr_t) appData.highlightSquareColor;
- vFrom.size = strlen(appData.highlightSquareColor);
- XtConvert(shellWidget, XtRString, &vFrom, XtRPixel, &vTo);
- if (vTo.addr == NULL) {
- appData.monoMode = True;
- forceMono = True;
- } else {
- highlightSquareColor = *(Pixel *) vTo.addr;
- }
- }
-
- if (!appData.monoMode) {
- vFrom.addr = (caddr_t) appData.premoveHighlightColor;
- vFrom.size = strlen(appData.premoveHighlightColor);
- XtConvert(shellWidget, XtRString, &vFrom, XtRPixel, &vTo);
- if (vTo.addr == NULL) {
- appData.monoMode = True;
- forceMono = True;
- } else {
- premoveHighlightColor = *(Pixel *) vTo.addr;
- }
- }
+ forceMono = MakeColors();
if (forceMono) {
fprintf(stderr, _("%s: too few colors available; trying monochrome mode\n"),
(unsigned long) XBlackPixel(xDisplay, xScreen));
}
- if (parse_cpair(ColorShout, appData.colorShout) < 0 ||
- parse_cpair(ColorSShout, appData.colorSShout) < 0 ||
- parse_cpair(ColorChannel1, appData.colorChannel1) < 0 ||
- parse_cpair(ColorChannel, appData.colorChannel) < 0 ||
- parse_cpair(ColorKibitz, appData.colorKibitz) < 0 ||
- parse_cpair(ColorTell, appData.colorTell) < 0 ||
- parse_cpair(ColorChallenge, appData.colorChallenge) < 0 ||
- parse_cpair(ColorRequest, appData.colorRequest) < 0 ||
- parse_cpair(ColorSeek, appData.colorSeek) < 0 ||
- parse_cpair(ColorNormal, appData.colorNormal) < 0)
- {
- if (appData.colorize) {
- fprintf(stderr,
- _("%s: can't parse color names; disabling colorization\n"),
- programName);
- }
- appData.colorize = FALSE;
- }
+ ParseIcsTextColors();
textColors[ColorNone].fg = textColors[ColorNone].bg = -1;
textColors[ColorNone].attr = 0;
XtSetValues(XtNameToWidget(menuBarWidget, "menuOptions.Animate Moving"),
args, 1);
}
- if (appData.autoComment) {
- XtSetValues(XtNameToWidget(menuBarWidget, "menuOptions.Auto Comment"),
- args, 1);
- }
if (appData.autoCallFlag) {
XtSetValues(XtNameToWidget(menuBarWidget, "menuOptions.Auto Flag"),
args, 1);
XtSetValues(XtNameToWidget(menuBarWidget,"menuOptions.Auto Flip View"),
args, 1);
}
- if (appData.autoObserve) {
- XtSetValues(XtNameToWidget(menuBarWidget, "menuOptions.Auto Observe"),
- args, 1);
- }
- if (appData.autoRaiseBoard) {
- XtSetValues(XtNameToWidget(menuBarWidget,
- "menuOptions.Auto Raise Board"), args, 1);
- }
- if (appData.autoSaveGames) {
- XtSetValues(XtNameToWidget(menuBarWidget, "menuOptions.Auto Save"),
- args, 1);
- }
- if (appData.saveGameFile[0] != NULLCHAR) {
- /* Can't turn this off from menu */
- XtSetValues(XtNameToWidget(menuBarWidget, "menuOptions.Auto Save"),
- args, 1);
- XtSetSensitive(XtNameToWidget(menuBarWidget, "menuOptions.Auto Save"),
- False);
-
- }
if (appData.blindfold) {
XtSetValues(XtNameToWidget(menuBarWidget,
"menuOptions.Blindfold"), args, 1);
"menuOptions.Flash Moves"),
args, 1);
}
- if (appData.getMoveList) {
- XtSetValues(XtNameToWidget(menuBarWidget, "menuOptions.Get Move List"),
- args, 1);
- }
#if HIGHDRAG
if (appData.highlightDragging) {
XtSetValues(XtNameToWidget(menuBarWidget,
"menuOptions.Arrow"),
args, 1);
}
- if (appData.icsAlarm) {
- XtSetValues(XtNameToWidget(menuBarWidget, "menuOptions.ICS Alarm"),
- args, 1);
- }
+// if (appData.icsAlarm) {
+// XtSetValues(XtNameToWidget(menuBarWidget, "menuOptions.ICS Alarm"),
+// args, 1);
+// }
if (appData.ringBellAfterMoves) {
XtSetValues(XtNameToWidget(menuBarWidget, "menuOptions.Move Sound"),
args, 1);
XtSetValues(XtNameToWidget(menuBarWidget,
"menuOptions.Popup Move Errors"), args, 1);
}
- if (appData.premove) {
- XtSetValues(XtNameToWidget(menuBarWidget,
- "menuOptions.Premove"), args, 1);
- }
- if (appData.quietPlay) {
- XtSetValues(XtNameToWidget(menuBarWidget,
- "menuOptions.Quiet Play"), args, 1);
- }
+// if (appData.premove) {
+// XtSetValues(XtNameToWidget(menuBarWidget,
+// "menuOptions.Premove"), args, 1);
+// }
if (appData.showCoords) {
XtSetValues(XtNameToWidget(menuBarWidget, "menuOptions.Show Coords"),
args, 1);
CatchDeleteWindow(shellWidget, "QuitProc");
- CreateGCs();
+ CreateGCs(False);
CreateGrid();
#if HAVE_LIBXPM
if (appData.bitmapDirectory[0] != NULLCHAR) {
{ "menuEngine.Engine #2 Settings", False },
{ "menuEngine.Move Now", False },
{ "menuEngine.Retract Move", False },
- { "menuOptions.Auto Comment", False },
{ "menuOptions.Auto Flag", False },
{ "menuOptions.Auto Flip View", False },
- { "menuOptions.Auto Observe", False },
- { "menuOptions.Auto Raise Board", False },
- { "menuOptions.Get Move List", False },
- { "menuOptions.ICS Alarm", False },
+ { "menuOptions.ICS", False },
+// { "menuOptions.ICS Alarm", False },
{ "menuOptions.Move Sound", False },
- { "menuOptions.Quiet Play", False },
{ "menuOptions.Hide Thinking", False },
{ "menuOptions.Periodic Updates", False },
{ "menuOptions.Ponder Next Move", False },
{ "menuAction.Upload to Examine", False },
{ "menuEdit.Revert", False },
{ "menuEdit.Annotate", False },
- { "menuOptions.Auto Comment", False },
- { "menuOptions.Auto Observe", False },
- { "menuOptions.Auto Raise Board", False },
- { "menuOptions.Get Move List", False },
- { "menuOptions.Premove", False },
- { "menuOptions.Quiet Play", False },
+ { "menuOptions.ICS", False },
/* The next two options rely on SetCmailMode being called *after* */
/* SetGNUMode so that when GNU is being used to give hints these */
return p;
}
-void CreateGCs()
+void DeleteGCs()
+{ // [HGM] deletes GCs that are to be remade, to prevent resource leak;
+ // must be called before all non-first callse to CreateGCs()
+ XtReleaseGC(shellWidget, highlineGC);
+ XtReleaseGC(shellWidget, lightSquareGC);
+ XtReleaseGC(shellWidget, darkSquareGC);
+ if (appData.monoMode) {
+ if (DefaultDepth(xDisplay, xScreen) == 1) {
+ XtReleaseGC(shellWidget, wbPieceGC);
+ } else {
+ XtReleaseGC(shellWidget, bwPieceGC);
+ }
+ } else {
+ XtReleaseGC(shellWidget, prelineGC);
+ XtReleaseGC(shellWidget, jailSquareGC);
+ XtReleaseGC(shellWidget, wdPieceGC);
+ XtReleaseGC(shellWidget, wlPieceGC);
+ XtReleaseGC(shellWidget, wjPieceGC);
+ XtReleaseGC(shellWidget, bdPieceGC);
+ XtReleaseGC(shellWidget, blPieceGC);
+ XtReleaseGC(shellWidget, bjPieceGC);
+ }
+}
+
+void CreateGCs(int redo)
{
XtGCMask value_mask = GCLineWidth | GCLineStyle | GCForeground
| GCBackground | GCFunction | GCPlaneMask;
gc_values.line_style = LineSolid;
gc_values.function = GXcopy;
+ if(redo) {
+ DeleteGCs(); // called a second time; clean up old GCs first
+ } else { // [HGM] grid and font GCs created on first call only
gc_values.foreground = XBlackPixel(xDisplay, xScreen);
gc_values.background = XBlackPixel(xDisplay, xScreen);
lineGC = XtGetGC(shellWidget, value_mask, &gc_values);
coordGC = XtGetGC(shellWidget, value_mask, &gc_values);
XSetFont(xDisplay, coordGC, coordFontID);
- // [HGM] make font for holdings counts (white on black0
+ // [HGM] make font for holdings counts (white on black)
gc_values.foreground = XWhitePixel(xDisplay, xScreen);
gc_values.background = XBlackPixel(xDisplay, xScreen);
countGC = XtGetGC(shellWidget, value_mask, &gc_values);
XSetFont(xDisplay, countGC, countFontID);
-
+ }
if (appData.monoMode) {
gc_values.foreground = XWhitePixel(xDisplay, xScreen);
gc_values.background = XWhitePixel(xDisplay, xScreen);
}
}
+ fclose(fp);
+
/* create Pixmap of piece */
*dest = XCreatePixmap(xDisplay, DefaultRootWindow(xDisplay),
w, h, xim->depth);
{
XpmAttributes attr;
attr.valuemask = 0;
- if(s == NULL || *s == 0 || *s == '*') return;
+ if(s == NULL || *s == 0 || *s == '*') { useTexture &= ~(kind+1); return; }
if (XpmReadFileToPixmap(xDisplay, xBoardWindow, s, &(xpmBoardBitmap[kind]), NULL, &attr) == 0) {
useTexture |= kind + 1; textureW[kind] = attr.width; textureH[kind] = attr.height;
}
}
+void FreeXPMPieces()
+{ // [HGM] to prevent resoucre leak on calling CreaeXPMPieces() a second time,
+ // thisroutine has to be called t free the old piece pixmaps
+ int piece, kind;
+ for (piece = (int) WhitePawn; piece <= (int) WhiteKing + 4; piece++)
+ for (kind=0; kind<4; kind++) XFreePixmap(xDisplay, xpmPieceBitmap2[kind][piece]);
+ if(useImageSqs) {
+ XFreePixmap(xDisplay, xpmLightSquare);
+ XFreePixmap(xDisplay, xpmDarkSquare);
+ }
+}
+
void CreateXPMPieces()
{
int piece, kind, r;
XpmAttributes attr;
static char *xpmkind[] = { "ll", "ld", "dl", "dd" };
XpmColorSymbol symbols[4];
+ static int redo = False;
+
+ if(redo) FreeXPMPieces(); else redo = 1;
/* The XSynchronize calls were copied from CreatePieces.
Not sure if needed, but can't hurt */
}
break;
}
- if(appData.upsideDown && flipView) kind ^= 2; // swap white and black pieces
+ if(appData.upsideDown && flipView) { kind ^= 2; p += p < BlackPawn ? BlackPawn : -BlackPawn; }// swap white and black pieces
if(useTexture & square_color+1) {
BlankSquare(x, y, square_color, piece, dest, 1); // erase previous contents with background
XSetClipMask(xDisplay, wlPieceGC, xpmMask[p]);
* but this causes a very distracting flicker.
*/
- if ( lineGap && IsDrawArrowEnabled()) repaint = True;
if (!repaint && lastBoardValid[nr] && (nr == 1 || lastFlipView == flipView)) {
+ if ( lineGap && IsDrawArrowEnabled())
+ XDrawSegments(xDisplay, xBoardWindow, lineGC,
+ gridSegments, BOARD_HEIGHT + BOARD_WIDTH + 2);
+
/* If too much changes (begin observing new game, etc.), don't
do flashing */
do_flash = too_many_diffs(board, lastBoard[nr]) ? 0 : 1;
XTranslateCoordinates(xDisplay, XtWindow(shellWidget),
RootWindowOfScreen(XtScreen(shellWidget)),
(bw_width - w) / 2, 0 - h / 2, &xx, &yy, &junk);
-#endif /*!NOTDEF*/
x = xx;
y = yy;
+#endif /*!NOTDEF*/
if (y < 0) y = 0; /*avoid positioning top offscreen*/
j = 0;
rewind(f);
selection_tmp = XtMalloc(len + 1);
count = fread(selection_tmp, 1, len, f);
+ fclose(f);
if (len != count) {
XtFree(selection_tmp);
return False;
args, 1);
}
-void AutocommProc(w, event, prms, nprms)
- Widget w;
- XEvent *event;
- String *prms;
- Cardinal *nprms;
-{
- Arg args[16];
-
- appData.autoComment = !appData.autoComment;
-
- if (appData.autoComment) {
- XtSetArg(args[0], XtNleftBitmap, xMarkPixmap);
- } else {
- XtSetArg(args[0], XtNleftBitmap, None);
- }
- XtSetValues(XtNameToWidget(menuBarWidget, "menuOptions.Auto Comment"),
- args, 1);
-}
-
-
void AutoflagProc(w, event, prms, nprms)
Widget w;
XEvent *event;
args, 1);
}
-void AutobsProc(w, event, prms, nprms)
- Widget w;
- XEvent *event;
- String *prms;
- Cardinal *nprms;
-{
- Arg args[16];
-
- appData.autoObserve = !appData.autoObserve;
-
- if (appData.autoObserve) {
- XtSetArg(args[0], XtNleftBitmap, xMarkPixmap);
- } else {
- XtSetArg(args[0], XtNleftBitmap, None);
- }
- XtSetValues(XtNameToWidget(menuBarWidget, "menuOptions.Auto Observe"),
- args, 1);
-}
-
-void AutoraiseProc(w, event, prms, nprms)
- Widget w;
- XEvent *event;
- String *prms;
- Cardinal *nprms;
-{
- Arg args[16];
-
- appData.autoRaiseBoard = !appData.autoRaiseBoard;
-
- if (appData.autoRaiseBoard) {
- XtSetArg(args[0], XtNleftBitmap, xMarkPixmap);
- } else {
- XtSetArg(args[0], XtNleftBitmap, None);
- }
- XtSetValues(XtNameToWidget(menuBarWidget, "menuOptions.Auto Raise Board"),
- args, 1);
-}
-
-void AutosaveProc(w, event, prms, nprms)
- Widget w;
- XEvent *event;
- String *prms;
- Cardinal *nprms;
-{
- Arg args[16];
-
- appData.autoSaveGames = !appData.autoSaveGames;
-
- if (appData.autoSaveGames) {
- XtSetArg(args[0], XtNleftBitmap, xMarkPixmap);
- } else {
- XtSetArg(args[0], XtNleftBitmap, None);
- }
- XtSetValues(XtNameToWidget(menuBarWidget, "menuOptions.Auto Save"),
- args, 1);
-}
-
void BlindfoldProc(w, event, prms, nprms)
Widget w;
XEvent *event;
DrawPosition(True, NULL);
}
-void GetMoveListProc(w, event, prms, nprms)
- Widget w;
- XEvent *event;
- String *prms;
- Cardinal *nprms;
-{
- Arg args[16];
-
- appData.getMoveList = !appData.getMoveList;
-
- if (appData.getMoveList) {
- XtSetArg(args[0], XtNleftBitmap, xMarkPixmap);
- GetMoveListEvent();
- } else {
- XtSetArg(args[0], XtNleftBitmap, None);
- }
- XtSetValues(XtNameToWidget(menuBarWidget, "menuOptions.Get Move List"),
- args, 1);
-}
-
#if HIGHDRAG
void HighlightDraggingProc(w, event, prms, nprms)
Widget w;
"menuOptions.Arrow"), args, 1);
}
+#if 0
void IcsAlarmProc(w, event, prms, nprms)
Widget w;
XEvent *event;
XtSetValues(XtNameToWidget(menuBarWidget,
"menuOptions.ICS Alarm"), args, 1);
}
+#endif
void MoveSoundProc(w, event, prms, nprms)
Widget w;
args, 1);
}
+#if 0
void PremoveProc(w, event, prms, nprms)
Widget w;
XEvent *event;
XtSetValues(XtNameToWidget(menuBarWidget,
"menuOptions.Premove"), args, 1);
}
-
-void QuietPlayProc(w, event, prms, nprms)
- Widget w;
- XEvent *event;
- String *prms;
- Cardinal *nprms;
-{
- Arg args[16];
-
- appData.quietPlay = !appData.quietPlay;
-
- if (appData.quietPlay) {
- XtSetArg(args[0], XtNleftBitmap, xMarkPixmap);
- } else {
- XtSetArg(args[0], XtNleftBitmap, None);
- }
- XtSetValues(XtNameToWidget(menuBarWidget, "menuOptions.Quiet Play"),
- args, 1);
-}
+#endif
void ShowCoordsProc(w, event, prms, nprms)
Widget w;
{
Pixmap mask;
+ if(appData.upsideDown && flipView) piece += piece < BlackPawn ? BlackPawn : -BlackPawn;
/* The old buffer is initialised with the start square (empty) */
BlankSquare(start->x, start->y, startColor, EmptySquare, anim->saveBuf, 0);
anim->prevFrame = *start;
DrawArrowBetweenPoints( s_x, s_y, d_x, d_y );
- if(lineGap == 0) {
- // this is a good idea, but it only works when lineGap == 0, because 'damage' on grid lines is not repaired
- hor = 64*s_col + 32; vert = 64*s_row + 32;
- for(i=0; i<= 64; i++) {
+ hor = 64*s_col + 32; vert = 64*s_row + 32;
+ for(i=0; i<= 64; i++) {
damage[0][vert+6>>6][hor+6>>6] = True;
damage[0][vert-6>>6][hor+6>>6] = True;
damage[0][vert+6>>6][hor-6>>6] = True;
damage[0][vert-6>>6][hor-6>>6] = True;
hor += d_col - s_col; vert += d_row - s_row;
- }
}
}