PsychError SCREENTextFont(void) { boolean doSetByName, doSetByNumber, foundFont; PsychWindowRecordType *windowRecord; PsychFontStructType *fontRecord; int oldTextFontNumber, inputTextFontNumber; char *oldTextFontName, *inputTextFontName; //all subfunctions should have these two lines. PsychPushHelp(useString, synopsisString, seeAlsoString); if(PsychIsGiveHelp()){PsychGiveHelp();return(PsychError_none);}; //check for valid number of arguments PsychErrorExit(PsychRequireNumInputArgs(1)); PsychErrorExit(PsychCapNumInputArgs(2)); PsychErrorExit(PsychCapNumOutputArgs(2)); //Get the window record PsychAllocInWindowRecordArg(kPsychUseDefaultArgPosition, TRUE, &windowRecord); //Save the old text size value and return it. oldTextFontNumber=windowRecord->textAttributes.textFontNumber; PsychCopyOutDoubleArg(2, FALSE, (double)oldTextFontNumber); oldTextFontName=windowRecord->textAttributes.textFontName; PsychCopyOutCharArg(1, FALSE, oldTextFontName); //Fetch and set the new font if specified by name or number PsychCheckInputArgType(2, kPsychArgOptional, PsychArgType_double | PsychArgType_char); //if the argument is there check that it is the right type. doSetByNumber= PsychCopyInIntegerArg(2, kPsychArgAnything, &inputTextFontNumber); doSetByName= PsychAllocInCharArg(2, kPsychArgAnything, &inputTextFontName); foundFont=0; if(doSetByNumber) foundFont=PsychGetFontRecordFromFontNumber(inputTextFontNumber, &fontRecord); if(doSetByName) foundFont=PsychGetFontRecordFromFontFamilyNameAndFontStyle(inputTextFontName, windowRecord->textAttributes.textStyle, &fontRecord); if(foundFont){ strncpy(windowRecord->textAttributes.textFontName, fontRecord->fontFMFamilyName, 255); windowRecord->textAttributes.textFontNumber= fontRecord->fontNumber; } return(PsychError_none); }
PsychError SCREENTextFont(void) { psych_bool doSetByName, doSetByNumber, foundFont; PsychWindowRecordType *windowRecord; #if PSYCH_SYSTEM == PSYCH_OSX PsychFontStructType *fontRecord; #endif int oldTextFontNumber, inputTextFontNumber; char *oldTextFontName, *inputTextFontName; int oldTextStyle, newTextStyle; //all subfunctions should have these two lines. PsychPushHelp(useString, synopsisString, seeAlsoString); if(PsychIsGiveHelp()){PsychGiveHelp();return(PsychError_none);}; //check for valid number of arguments PsychErrorExit(PsychRequireNumInputArgs(1)); PsychErrorExit(PsychCapNumInputArgs(3)); PsychErrorExit(PsychCapNumOutputArgs(3)); //Get the window record PsychAllocInWindowRecordArg(kPsychUseDefaultArgPosition, TRUE, &windowRecord); //Save the old text font value and return it. oldTextFontNumber=windowRecord->textAttributes.textFontNumber; PsychCopyOutDoubleArg(2, FALSE, (double)oldTextFontNumber); oldTextFontName=(char*) windowRecord->textAttributes.textFontName; PsychCopyOutCharArg(1, FALSE, oldTextFontName); oldTextStyle = windowRecord->textAttributes.textStyle; PsychCopyOutDoubleArg(3, FALSE, (double) oldTextStyle); //Fetch and set the new font if specified by name or number PsychCheckInputArgType(2, kPsychArgOptional, PsychArgType_double | PsychArgType_char); //if the argument is there check that it is the right type. doSetByNumber= PsychCopyInIntegerArg(2, kPsychArgAnything, &inputTextFontNumber); doSetByName= PsychAllocInCharArg(2, kPsychArgAnything, &inputTextFontName); foundFont=0; #if PSYCH_SYSTEM == PSYCH_OSX if(doSetByNumber) { foundFont=PsychGetFontRecordFromFontNumber(inputTextFontNumber, &fontRecord); } if(doSetByName) { if (PsychCopyInIntegerArg(3, FALSE, &newTextStyle)) windowRecord->textAttributes.textStyle = newTextStyle; foundFont=PsychGetFontRecordFromFontFamilyNameAndFontStyle(inputTextFontName, windowRecord->textAttributes.textStyle, &fontRecord); } if(foundFont) { strncpy((char*) windowRecord->textAttributes.textFontName, (char*) fontRecord->fontFMFamilyName, 255); windowRecord->textAttributes.textFontNumber = fontRecord->fontNumber; windowRecord->textAttributes.textStyle = fontRecord->fontFMStyle; } else { // Font not found. Is this textrenderer 2 with a font given by name? if (doSetByName && (PsychPrefStateGet_TextRenderer() > 1)) { // Yes: Must be a special font specifier string for the renderer plugin. Just assign it directly: strncpy((char*) windowRecord->textAttributes.textFontName, inputTextFontName, 255); // Don't have a valid fontNumber: Just assign a zero... windowRecord->textAttributes.textFontNumber = 0; } else { // Restore old text style setting: windowRecord->textAttributes.textStyle = oldTextStyle; } } return(PsychError_none); #else // Special case for MS-Windows and Linux: if(doSetByNumber) printf("PTB-WARNING: Sorry, selecting font by number in Screen('TextFont') is not yet supported on Windows or Linux. Command ignored.\n"); if(doSetByName && (strncmp(windowRecord->textAttributes.textFontName, inputTextFontName, 255 )!=0)) { strncpy(windowRecord->textAttributes.textFontName, inputTextFontName, 255); windowRecord->textAttributes.textFontNumber= 0; // Set the rebuild flag: windowRecord->textAttributes.needsRebuild=TRUE; } // New and different text style provided? if (PsychCopyInIntegerArg(3, FALSE, &newTextStyle) && (windowRecord->textAttributes.textStyle != newTextStyle)) { windowRecord->textAttributes.textStyle = newTextStyle; // Set the rebuild flag: windowRecord->textAttributes.needsRebuild=TRUE; } return(PsychError_none); #endif }