% Clear the workspace close all; clear; % Here we call some default settings for setting up Psychtoolbox PsychDefaultSetup(2); % Get the screen numbers screens = Screen('Screens'); % Draw to the external screen if avaliable screenNumber = max(screens); % Define colors white = WhiteIndex(screenNumber); black = BlackIndex(screenNumber); grey = GrayIndex(screenNumber); red = [white 0 0]; blue = [0 0 white]; % Open an on screen window [window, windowRect] = PsychImaging('OpenWindow', screenNumber, black,... [], [], [], [], [], kPsychNeedRetinaResolution); % Get the size of the on screen window [screenXpixels, screenYpixels] = Screen('WindowSize', window); % Change the blend function for anti-aliasing Screen('BlendFunction', window, 'GL_SRC_ALPHA', 'GL_ONE_MINUS_SRC_ALPHA'); % Set the size of the text textSize = 240; Screen('TextSize', window, textSize); % The text to write myText = 'Hello World'; % Get the Bounding box for the text: Broadly speaking this is the minimal % rectangle which will encompass all of the text - it is defined in the top % left of the screen. But, all we are interested in is its size [~, ~, textBounds] = DrawFormattedText(window, myText, 0, 0, white); textWidth = range([textBounds(1) textBounds(3)]); textHeight = range([textBounds(2) textBounds(4)]); % Hide the mouse cursor HideCursor; % Maximum priority level topPriorityLevel = MaxPriority(window); Priority(topPriorityLevel); % Query the frame duration ifi = Screen('GetFlipInterval', window); % Number of frames to wait before redrawing waitframes = 1; % Get the centre coordinate of the window [xCenter, yCenter] = RectCenter(windowRect); % Position of the text: this will be for the standard drawing of the text % where the text is positioned such that the bottom left corner of the % bounding box is aligned with the requested screen position of the text tx = screenYpixels * 0.25; ty = screenXpixels * 0.25; % Position of the centered text: This is the position upon which we will % centre a second peice of text such that the centre of the bounding box is % aligned with this point txc = screenYpixels * 0.6; tyc = screenXpixels * 0.4; % In order to align the centre of the text we need to move the drawing % position requested to the left by half the width of the bounding box and % down by half the height of the bounding box txcCorrected = txc - textWidth / 2; tycCorrected = tyc + textHeight / 2; % Sync us and get a time stamp. We blank the window first to remove the % text that we drew to get the bounding box. Screen('FillRect', window, black) vbl = Screen('Flip', window); % Loop the animation until a key is pressed while ~KbCheck(-1) % Draw the text in the deafult way: where the text is positioned such % that the bottom left corner of the bounding box is aligned with % the requested screen position of the text DrawFormattedText(window, myText, tx, ty, white); % Draw the text again, but in the corrected position such that the % centre of the bounding box in on the requested drawing coordinate DrawFormattedText(window, myText, txcCorrected, tycCorrected, white); % Draw the Bounding box of both bits of text Screen('FrameRect', window, blue, textBounds + [tx, ty, tx, ty]); Screen('FrameRect', window, red, textBounds + [txcCorrected, tycCorrected, txcCorrected, tycCorrected]); % Draw the requested points at which the text is being drawn Screen('DrawDots', window, [tx ty], 25, blue, [], 2); Screen('DrawDots', window, [txc tyc], 25, red, [], 2); % Draw crosshairs for the aligned bounding box text - this shows its % centering Screen('DrawLines', window, [txc - textWidth / 2 tyc; txc + textWidth / 2 tyc]', [], red); Screen('DrawLines', window, [txc tyc - textHeight / 2; txc tyc + textHeight / 2]', [], red) % Flip to the screen vbl = Screen('Flip', window, vbl + (waitframes - 0.5) * ifi); end % Clear the screen sca;