This is Window_FixSF.m in view mode; [Download] [Up]
/* * This subclass of Window just fixes the processing of "setFrameFromString". * There should be a similar subclass written for Panel. * Garance Alistair Drosehn/gad@eclipse.its.rpi.edu * May 31/1995 */ #import "Window_FixSF.h" @implementation Window_FixSF - (void)setFrameFromString:(const char *)string { #define MIN_PIXELS 2 int numScreens, screenCount; const NXScreen *screenList, *originScreen, *upperLeftScreen; BOOL valuesOK, frameOK; const char *pos1, *pos2; NXCoord tmpValue; NXRect frameRect, upperLeft; const NXRect *curScreenRect; if (string == NULL) return; if (*string == '\0') return; [super setFrameFromString:string]; valuesOK = NO; frameRect.origin.x = frameRect.origin.y = 0.0; frameRect.size.width = frameRect.size.height = 0.0; for (pos1 = string; *pos1 != '\0'; pos1++) { if (NXIsDigit(*pos1) || *pos1 == '-') break; } tmpValue = strtod(pos1, &pos2); if (pos1 != pos2) { frameRect.origin.x = tmpValue; for (pos1 = pos2; *pos1 != '\0'; pos1++) { if (NXIsDigit(*pos1) || *pos1 == '-') break; } tmpValue = strtod(pos1, &pos2); } if (pos1 != pos2) { frameRect.origin.y = tmpValue; for (pos1 = pos2; *pos1 != '\0'; pos1++) { if (NXIsDigit(*pos1)) break; } tmpValue = strtod(pos1, &pos2); } if (pos1 != pos2) { frameRect.size.width = tmpValue; for (pos1 = pos2; *pos1 != '\0'; pos1++) { if (NXIsDigit(*pos1)) break; } tmpValue = strtod(pos1, &pos2); } if (pos1 != pos2) { frameRect.size.height = tmpValue; valuesOK = YES; } #ifdef DEBUG printf("%s: Window_FixSF's setFrameFromString: ",[NXApp appName]); if (valuesOK) { printf("x=%1.0f y=%1.0f w=%1.0f h=%1.0f\n", frameRect.origin.x, frameRect.origin.y, frameRect.size.width, frameRect.size.height); } else { printf("unable to parse xywh values!\n"); return; } #else if (!valuesOK) { printf("%s: In Window_FixSF's setFrameFromString method:\n",[NXApp appName]); printf("%s: unable to parse xywh values from \"%s\" !\n",[NXApp appName], string); return; } #endif upperLeft.origin.x = frameRect.origin.x; upperLeft.origin.y = frameRect.origin.y + frameRect.size.height - MIN_PIXELS; upperLeft.size.width = upperLeft.size.height = MIN_PIXELS; [NXApp getScreens:&screenList count:&numScreens]; frameOK = NO; originScreen = upperLeftScreen = NULL; for (screenCount = 0; screenCount < numScreens; screenCount++) { curScreenRect = &screenList[screenCount].screenBounds; #ifdef DEBUG printf(" %d) checking screen #%d (%1.0f,%1.0f - %1.0f,%1.0f)", screenCount + 1, screenList[screenCount].screenNumber, curScreenRect->origin.x, curScreenRect->origin.y, curScreenRect->size.width, curScreenRect->size.height); #endif if (NXContainsRect(curScreenRect, &frameRect)) { #ifdef DEBUG printf(": screen contains frameRect\n"); #endif frameOK = YES; break; } if (NXIntersectsRect(curScreenRect, &frameRect)) { #ifdef DEBUG printf(": screen has part of frameRect"); #endif if (NXMouseInRect(&(frameRect.origin), curScreenRect, NO)) { #ifdef DEBUG printf(" & contains it's origin"); #endif originScreen = &screenList[screenCount]; } if (NXMouseInRect(&(upperLeft.origin), curScreenRect, NO)) { #ifdef DEBUG printf(" & contains the upperLeft point"); #endif upperLeftScreen = &screenList[screenCount]; } } #ifdef DEBUG printf("\n"); #endif } /* not sure how elaborate these boundry checks should be */ if (originScreen || upperLeftScreen) { frameOK = YES; } if (frameOK) { [self moveTo:frameRect.origin.x:frameRect.origin.y]; } return; } @end
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.