X-Git-Url: http://winboard.nl/cgi-bin?a=blobdiff_plain;f=nengineoutput.c;h=7b013c016ca08b5d15c957e75c394d5cfa05cee0;hb=0aa6203676d6c3e1bfb8fb6a17d801ebecf4c317;hp=c925792b83c1145a7072df021e1d095e48d71831;hpb=cbb23e5f23cee542f8099c7f80fd07df8d9f0a08;p=xboard.git diff --git a/nengineoutput.c b/nengineoutput.c index c925792..7b013c0 100644 --- a/nengineoutput.c +++ b/nengineoutput.c @@ -69,26 +69,9 @@ extern char *getenv(); int windowMode = 1; char *mem1, *mem2; // dummies, as this dialog can never be OK'ed +static int currentPV, highTextStart[2], highTextEnd[2]; -void -MemoProc (Option *opt, int n, int x, int y) -{ - static int pressed; // keep track of button 3 state - switch(n) { - case 0: // pointer motion - if(!pressed) return; -// MovePV(x, y, lineGap + BOARD_HEIGHT * (squareSize + lineGap)); - break; - case 3: // press button 3 - pressed = 1; - SelectPV(opt, x, y); - break; - case -3: // release button 3 - pressed = 0; - StopPV(opt); - break; - } -} +int MemoProc P((Option *opt, int n, int x, int y, char *text, int index)); Option engoutOptions[] = { { 0, LL|T2T, 17, NULL, NULL, NULL, NULL, Label, " " }, @@ -107,6 +90,37 @@ Option engoutOptions[] = { { 0, NO_OK, 0, NULL, NULL, "", NULL, EndMark , "" } }; +int +MemoProc (Option *opt, int n, int x, int y, char *text, int index) +{ // user callback for mouse events in memo + static int pressed; // keep track of button 3 state + int start, end, currentPV = (opt != &engoutOptions[5]); + + switch(n) { + case 0: // pointer motion + if(!pressed) return FALSE; // only motion with button 3 down is of interest + MovePV(x, y, 500/*lineGap + BOARD_HEIGHT * (squareSize + lineGap)*/); + break; + case 3: // press button 3 + pressed = 1; + if(LoadMultiPV(x, y, text, index, &start, &end, currentPV)) { + highTextStart[currentPV] = start; highTextEnd[currentPV] = end; + HighlightText(&engoutOptions[currentPV ? 12 : 5], start, end, TRUE); + } + break; + case -3: // release button 3 + pressed = 0; + if(highTextStart[currentPV] != highTextEnd[currentPV]) + HighlightText(&engoutOptions[currentPV ? 12 : 5], highTextStart[currentPV], highTextEnd[currentPV], FALSE); + highTextStart[currentPV] = highTextEnd[currentPV] = 0; + UnLoadPV(); + break; + default: + return FALSE; // not meant for us; do regular event handler + } + return TRUE; +} + void SetIcon (int which, int field, int nIcon) { // first call into xengineoutput.c to pick up icon pixmap