void PopulateColorServicesInfo (GPtr globals, ColorServicesInfo *csinfo) { CSInitInfo(csinfo); // now populate color services info with particulars: csinfo->sourceSpace = gColor; csinfo->resultSpace = gColorize; CSCopyColor(csinfo->colorComponents, gSourceColor); // on input, source color; on output, result color }
OSErr DoConversion (GPtr globals, HWND dp, ColorServicesInfo *csinfo) { OSErr gotErr = noErr; short loop = 0; PopulateColorServicesInfo (globals, csinfo); gotErr = ColorServices (csinfo); gColorize = csinfo->resultSpace; // should be the same CSCopyColor (gTargetColor, csinfo->colorComponents); for (loop = 0; loop < 4; loop++) StuffNumber(dp, dEditTarget1 + loop, gTargetColor[loop]); return gotErr; }
void ValidateParameters (GPtr globals) { if (gStuff->parameters == NULL) { // We haven't created these yet. gStuff->parameters = PINewHandle ((long) sizeof (TParameters)); if (gStuff->parameters != NULL) { // Got it. Fill out the fields. CSSetColor (gSourceColor, 0, 0, 0, 255); CSCopyColor (gTargetColor, gSourceColor); gColor = gColorize = 0; } else { // Oops. Couldn't allocate memory. gResult = memFullErr; return; } } // parameters } // end ValidateParameters
DLLExport BOOL WINAPI FilterProc(HWND hDlg, UINT wMsg, WPARAM wParam, LPARAM lParam) // Win32 Change { long x = 1; double dx = 0; short numberErr = noErr; short item; static short lastItem = 0, lastTitem = 0; static short cColor; static int16 cSourceColor[4]; static short cColorize; static int16 cTargetColor[4]; static short gotErr = 0; PIType key = NULLID; static ColorServicesInfo csinfo; int cmd; static GPtr globals = NULL; /* need to be static */ switch (wMsg) { case WM_INITDIALOG: /* set up globals */ globals = (GPtr) lParam; CenterDialog(hDlg); // save globals in locals for later if user cancels CSCopyColor(cSourceColor, gSourceColor); CSCopyColor(cTargetColor, gTargetColor); cColor = gColor; cColorize = gColorize; UpdateDialogInfo(globals, hDlg); SelectTextItem(hDlg, dEditSource1); /* drop into PAINT */ case WM_PAINT: // paint here return FALSE; break; case WM_COMMAND: item = COMMANDID (wParam); // WIN32 Change cmd = HIWORD (wParam); switch (item) { case dSourcePicker: if ((numberErr = Validate(hDlg, &lastItem, &dx, true)) == noErr) { // didn't have to change focus. Continue. if (cmd == BN_CLICKED) { PopulateColorServicesInfo (globals, &csinfo); csinfo.selector = plugIncolorServicesChooseColor; // change csinfo.resultSpace = plugIncolorServicesChosenSpace; // will return user chosen if (gotErr = ColorServices (&csinfo) == noErr) { // no problems. Do this. gColor = csinfo.resultSpace; CSCopyColor (gSourceColor, csinfo.colorComponents); DoConversion(globals, hDlg, &csinfo); UpdateDialogInfo (globals, hDlg); } SelectTextItem(hDlg, lastTitem); return FALSE; } } break; case dTargetPicker: if ((numberErr = Validate(hDlg, &lastItem, &dx, true)) == noErr) { // didn't have to change focus. Continue. if (cmd == BN_CLICKED) { PopulateColorServicesInfo (globals, &csinfo); csinfo.selector = plugIncolorServicesChooseColor; // picker if (gotErr = ColorServices (&csinfo) == noErr) { // no problems. Do this. // move old target to source space CSCopyColor (gSourceColor, gTargetColor); gColor = gColorize; // now pull results to target gColorize = csinfo.resultSpace; // should be the same CSCopyColor (gTargetColor, csinfo.colorComponents); UpdateDialogInfo (globals, hDlg); } SelectTextItem(hDlg, lastTitem); return FALSE; } } break; case OK: if ((numberErr = Validate(hDlg, &lastItem, &dx, true)) == noErr) { // validated fine if (cmd == BN_CLICKED) { // wants to dismiss. End dialog. EndDialog(hDlg, item); return TRUE; } } break; case CANCEL: if (cmd == BN_CLICKED) { // return all globals from saved locals CSCopyColor(gSourceColor, cSourceColor); CSCopyColor(gTargetColor, cTargetColor); gColor = cColor; gColorize = cColorize; gResult = userCanceledErr; EndDialog(hDlg, item); // WIN32 change return TRUE; } // don't ever validate during cancel break; default: if (item >= dSource1 && item <= dSourceEnd) { if ((numberErr = Validate(hDlg, &lastItem, &dx, true)) == noErr) { // validated fine if (cmd == BN_CLICKED) { // process button SetRadioGroupState (hDlg, dSource1, dSourceEnd, item); gColor = item - dSource1; DoConversion (globals, hDlg, &csinfo); SelectTextItem(hDlg, lastTitem); return FALSE; } } } else if (item >= dTarget1 && item <= dTargetEnd) { // set group then do conversion if ((numberErr = Validate(hDlg, &lastItem, &dx, true)) == noErr) { // validated fine if (cmd == BN_CLICKED) { // process SetRadioGroupState (hDlg, dTarget1, dTargetEnd, item); gColorize = item - dTarget1; DoConversion (globals, hDlg, &csinfo); SelectTextItem(hDlg, lastTitem); return FALSE; } } } else if (item >= dEditSource1 && item <= dEditSourceEnd) { if ((numberErr = Validate(hDlg, &lastItem, &dx, true)) == noErr) { if (cmd == EN_KILLFOCUS) lastItem = item; // validate will get this else if (cmd == EN_CHANGE) { // do me numberErr = Validate(hDlg, &item, &dx, false); gSourceColor[item - dEditSource1] = (int16)dx; lastTitem = item; DoConversion (globals, hDlg, &csinfo); return FALSE; } } } break; } // switch (item) break; // case WM_COMMAND default: return FALSE; break; } // switch return TRUE; }