void PsychInitTextRecordSettings(PsychTextAttributes *settings) { char tryFontName[]="Times"; Boolean foundFont; // FIXME PsychFontStructType *initFontRecord; settings->textMode=kPsychTextFill; settings->textPositionX=0; settings->textPositionY=0; settings->textSize=24; // Should be read from preferences but for now we just make it up. settings->textStyle=1+2; // 0=normal,1=bold,2=italic,4=underline,8=outline,32=condense,64=extend #ifdef COMMENTEDOUT // FIXME! /* to initialize the font record to coherent settings, we choose a default font and lookup the matching number */ foundFont=PsychGetFontRecordFromFontFamilyNameAndFontStyle(tryFontName, settings->textStyle, &initFontRecord); if(!foundFont) PsychErrorExitMsg(PsychError_internal,"Failed to initialze the window record because the default font for DrawText, Geneva, was not found."); #endif strcpy(settings->textFontName, tryFontName); // settings->textFontNumber=initFontRecord->fontNumber; settings->textFontNumber=0; // FIXME: Don't know yet how to assign a reasonable value. PsychLoadColorStruct(&(settings->textColor), kPsychIndexColor, 0); //index type which may be coerced into anything. PsychLoadColorStruct(&(settings->textBackgroundColor), kPsychIndexColor, 0); //index type which may be coerced into anything. settings->DisplayList=0; // Initially no font display list assigned. settings->needsRebuild=TRUE; // We need to build the display list on first invocation of DrawText. }
void PsychInitTextRecordSettings(PsychTextAttributes *settings) { char* tryFontName; psych_bool foundFont; PsychPrefStateGet_DefaultFontName(&tryFontName); settings->textMode=kPsychTextFill; settings->textPositionX=0; settings->textPositionY=0; // We use a different textSize (18 vs. 12) on Windoofs to compensate for its broken text renderer. // We also compensate for more MS-Braindamage by selecting bold text by default. settings->textSize= PsychPrefStateGet_DefaultTextSize(); settings->textStyle= PsychPrefStateGet_DefaultTextStyle(); // 0=normal,1=bold,2=italic,4=underline,8=outline,32=condense,64=extend #ifdef COMMENTEDOUT // FIXME! /* to initialize the font record to coherent settings, we choose a default font and lookup the matching number */ foundFont=PsychGetFontRecordFromFontFamilyNameAndFontStyle(tryFontName, settings->textStyle, &initFontRecord); if(!foundFont) PsychErrorExitMsg(PsychError_internal,"Failed to initialze the window record because the default font for DrawText, Geneva, was not found."); #endif strcpy(settings->textFontName, tryFontName); settings->textFontNumber=0; // FIXME: Don't know yet how to assign a reasonable value. PsychLoadColorStruct(&(settings->textColor), kPsychIndexColor, 0); //index type which may be coerced into anything. PsychLoadColorStruct(&(settings->textBackgroundColor), kPsychRGBAColor, 0, 0, 0, 0); // Assign black with zero alpha -- transparent. PsychCoerceColorMode(&(settings->textColor)); PsychCoerceColorMode(&(settings->textBackgroundColor)); settings->DisplayList=0; // Initially no font display list assigned. settings->needsRebuild=TRUE; // We need to build the display list on first invocation of DrawText. }
void PsychInitTextRecordSettings(PsychTextAttributes *settings) { const char* tryFontName; psych_bool foundFont; PsychFontStructType *initFontRecord; PsychPrefStateGet_DefaultFontName(&tryFontName); settings->DisplayList=0; settings->textMode=kPsychTextFill; settings->textPositionX=0; settings->textPositionY=0; settings->textSize= PsychPrefStateGet_DefaultTextSize(); settings->textStyle= PsychPrefStateGet_DefaultTextStyle(); // 0=normal,1=bold,2=italic,4=underline,8=outline,32=condense,64=extend // Set default font number and name: strcpy((char*) settings->textFontName, ""); settings->textFontNumber = 0; /* to initialize the font record to coherent settings, we choose a default font and lookup the matching number */ foundFont=PsychGetFontRecordFromFontFamilyNameAndFontStyle((char*) tryFontName, settings->textStyle, &initFontRecord); if(foundFont) { // Use detected font name and number: strcpy((char*) settings->textFontName, tryFontName); settings->textFontNumber=initFontRecord->fontNumber; } else { PsychErrorExitMsg(PsychError_internal,"Failed to initialize the window record because the default font for DrawText, Geneva, was not found."); } PsychLoadColorStruct(&(settings->textColor), kPsychIndexColor, 0.0); //index type which may be coerced into anything. PsychLoadColorStruct(&(settings->textBackgroundColor), kPsychRGBAColor, 0.0, 0.0, 0.0, 0.0); // Assign black with zero alpha -- transparent. PsychCoerceColorMode(&(settings->textColor)); PsychCoerceColorMode(&(settings->textBackgroundColor)); }
PsychError SCREENTextStyle(void) { psych_bool doSetStyle, foundFont; PsychWindowRecordType *windowRecord; int oldTextStyle, newTextStyle; #if PSYCH_SYSTEM == PSYCH_OSX PsychFontStructType *fontRecord; #endif //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(1)); //Get the window record PsychAllocInWindowRecordArg(kPsychUseDefaultArgPosition, TRUE, &windowRecord); //Save the old text size value and return it. oldTextStyle=windowRecord->textAttributes.textStyle; PsychCopyOutDoubleArg(1, FALSE, (double)oldTextStyle); //Fetch and set the new size if it is specified. doSetStyle= PsychCopyInIntegerArg(2, FALSE, &newTextStyle); if (doSetStyle) { windowRecord->textAttributes.needsRebuild|=(windowRecord->textAttributes.textStyle != newTextStyle) ? TRUE : FALSE; windowRecord->textAttributes.textStyle=newTextStyle; #if PSYCH_SYSTEM == PSYCH_OSX // Need to update font name and number from changed style on OS/X: foundFont = PsychGetFontRecordFromFontFamilyNameAndFontStyle((char*) windowRecord->textAttributes.textFontName, windowRecord->textAttributes.textStyle, &fontRecord); if (foundFont) { strncpy((char*) windowRecord->textAttributes.textFontName, (const char*) fontRecord->fontFMFamilyName, 255); windowRecord->textAttributes.textFontNumber= fontRecord->fontNumber; } else { // Failed! Revert to old setting: windowRecord->textAttributes.textStyle = oldTextStyle; } #endif } return(PsychError_none); }
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 }