1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110
|
/*
SCREENWindowSize.c
AUTHORS:
Allen.Ingling@nyu.edu awi
PLATFORMS:
Only OS X for now.
HISTORY:
2/26/05 awi Created. Inspired by Frans Cornelissen's script "WindowSize".
TO DO:
*/
#include "Screen.h"
// If you change the useString then also change the corresponding synopsis string in ScreenSynopsis.c
static char useString[] = "[width, height]=Screen('WindowSize', windowPointerOrScreenNumber);";
// 1
static char synopsisString[] =
"Return the width and height of a window or screen in units of pixels.";
static char seeAlsoString[] = "Screen('Rect')";
PsychError SCREENWindowSize(void)
{
PsychWindowRecordType *windowRecord;
int screenNumber;
PsychRectType rect;
double rectWidth, rectHeight;
//all sub functions should have these two lines
PsychPushHelp(useString, synopsisString,seeAlsoString);
if(PsychIsGiveHelp()){PsychGiveHelp();return(PsychError_none);};
//check for superfluous arguments
PsychErrorExit(PsychCapNumInputArgs(1)); //The maximum number of inputs
PsychErrorExit(PsychRequireNumInputArgs(1)); //Insist that the argument be present.
PsychErrorExit(PsychCapNumOutputArgs(2)); //The maximum number of outputs
if(PsychIsScreenNumberArg(1)){
PsychCopyInScreenNumberArg(1, TRUE, &screenNumber);
PsychGetScreenRect(screenNumber, rect);
rectWidth=PsychGetWidthFromRect(rect);
rectHeight=PsychGetHeightFromRect(rect);
PsychCopyOutDoubleArg(1, kPsychArgOptional, rectWidth);
PsychCopyOutDoubleArg(2, kPsychArgOptional, rectHeight);
}else if(PsychIsWindowIndexArg(1)){
PsychAllocInWindowRecordArg(1, TRUE, &windowRecord);
PsychOSProcessEvents(windowRecord, 0);
rectWidth=PsychGetWidthFromRect(windowRecord->clientrect);
rectHeight=PsychGetHeightFromRect(windowRecord->clientrect);
PsychCopyOutDoubleArg(1, kPsychArgOptional, rectWidth);
PsychCopyOutDoubleArg(2, kPsychArgOptional, rectHeight);
}else
PsychErrorExitMsg(PsychError_user, "Argument was recognized as neither a window index nor a screen pointer");
return(PsychError_none);
}
PsychError SCREENDisplaySize(void)
{
static char useString[] = "[width, height]=Screen('DisplaySize', ScreenNumber);";
static char synopsisString[] =
"Return the physical width and height of the output display device associated with 'ScreenNumber'. "
"The size is returned in units of millimeters as reported by the display device itself to the OS. "
"On MacOS-X, if Extended Display Identification Data (EDID) for the display device is not "
"available, the size is estimated by OS-X based on the device width and height in pixels, with an "
"assumed resolution of 2.835 pixels/mm or 72 DPI, a reasonable guess for displays predating "
"EDID support. On M$-Windows and GNU/Linux, the behaviour in case of missing EDID data is "
"unknown. This function returns a width and height of zero if physical display size can't be "
"queried from the operating system. Please handle the returned information with great caution. "
"It is unclear how accurate the EDID data for typical monitors or video beamers really is. This "
"information could be pretty unreliable and therefore misleading!";
static char seeAlsoString[] = "";
int screenNumber, Width, Height;
//all sub functions should have these two lines
PsychPushHelp(useString, synopsisString,seeAlsoString);
if(PsychIsGiveHelp()){PsychGiveHelp();return(PsychError_none);};
//check for superfluous arguments
PsychErrorExit(PsychCapNumInputArgs(1)); //The maximum number of inputs
PsychErrorExit(PsychRequireNumInputArgs(1)); //Insist that the argument be present.
PsychErrorExit(PsychCapNumOutputArgs(2)); //The maximum number of outputs
// Retrieve screen number:
PsychCopyInScreenNumberArg(1, TRUE, &screenNumber);
// Query physical size of this screen in millimeters:
PsychGetDisplaySize(screenNumber, &Width, &Height);
// Return it:
PsychCopyOutDoubleArg(1, kPsychArgOptional, (double) Width);
PsychCopyOutDoubleArg(2, kPsychArgOptional, (double) Height);
return(PsychError_none);
}
|