psychopy 2024.2.5__py3-none-any.whl → 2025.1.1__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of psychopy might be problematic. Click here for more details.
- psychopy/CHANGELOG.txt +4 -4
- psychopy/GIT_SHA +1 -1
- psychopy/LICENSE.txt +1 -1
- psychopy/VERSION +1 -1
- psychopy/__init__.py +10 -7
- psychopy/alerts/__init__.py +1 -1
- psychopy/alerts/_alerts.py +53 -17
- psychopy/alerts/_errorHandler.py +3 -4
- psychopy/alerts/alertsCatalogue/3210.yaml +27 -0
- psychopy/alerts/alertsCatalogue/3610.yaml +19 -0
- psychopy/alerts/alertsCatalogue/4130.yaml +19 -0
- psychopy/alerts/alertsCatalogue/alertCategories.yaml +8 -1
- psychopy/alerts/alertsCatalogue/alertmsg.py +1 -1
- psychopy/alerts/alerttools.py +0 -16
- psychopy/app/Resources/betasplash.png +0 -0
- psychopy/app/Resources/betasplash@2x.png +0 -0
- psychopy/app/Resources/classic/case.png +0 -0
- psychopy/app/Resources/classic/case@2x.png +0 -0
- psychopy/app/Resources/classic/fileaudio.png +0 -0
- psychopy/app/Resources/classic/fileaudio@2x.png +0 -0
- psychopy/app/Resources/classic/filecss.png +0 -0
- psychopy/app/Resources/classic/filecss@2x.png +0 -0
- psychopy/app/Resources/classic/filecsv.png +0 -0
- psychopy/app/Resources/classic/filecsv@2x.png +0 -0
- psychopy/app/Resources/classic/filedesign.png +0 -0
- psychopy/app/Resources/classic/filedesign@2x.png +0 -0
- psychopy/app/Resources/classic/filefont.png +0 -0
- psychopy/app/Resources/classic/filefont@2x.png +0 -0
- psychopy/app/Resources/classic/filegit.png +0 -0
- psychopy/app/Resources/classic/filegit@2x.png +0 -0
- psychopy/app/Resources/classic/filehtml.png +0 -0
- psychopy/app/Resources/classic/filehtml@2x.png +0 -0
- psychopy/app/Resources/classic/fileimage.png +0 -0
- psychopy/app/Resources/classic/fileimage@2x.png +0 -0
- psychopy/app/Resources/classic/fileinfo.png +0 -0
- psychopy/app/Resources/classic/fileinfo@2x.png +0 -0
- psychopy/app/Resources/classic/filejs.png +0 -0
- psychopy/app/Resources/classic/filejs@2x.png +0 -0
- psychopy/app/Resources/classic/filejson.png +0 -0
- psychopy/app/Resources/classic/filejson@2x.png +0 -0
- psychopy/app/Resources/classic/filepkg.png +0 -0
- psychopy/app/Resources/classic/filepkg@2x.png +0 -0
- psychopy/app/Resources/classic/filepsyexp.png +0 -0
- psychopy/app/Resources/classic/filepsyexp@2x.png +0 -0
- psychopy/app/Resources/classic/filepy.png +0 -0
- psychopy/app/Resources/classic/filepy@2x.png +0 -0
- psychopy/app/Resources/classic/filetxt.png +0 -0
- psychopy/app/Resources/classic/filetxt@2x.png +0 -0
- psychopy/app/Resources/classic/fileunknown.png +0 -0
- psychopy/app/Resources/classic/fileunknown@2x.png +0 -0
- psychopy/app/Resources/classic/filevideo.png +0 -0
- psychopy/app/Resources/classic/filevideo@2x.png +0 -0
- psychopy/app/Resources/classic/find.png +0 -0
- psychopy/app/Resources/classic/find@2x.png +0 -0
- psychopy/app/Resources/classic/loop.png +0 -0
- psychopy/app/Resources/classic/loop@2x.png +0 -0
- psychopy/app/Resources/classic/regex.png +0 -0
- psychopy/app/Resources/classic/regex@2x.png +0 -0
- psychopy/app/Resources/dark/case.png +0 -0
- psychopy/app/Resources/dark/case@2x.png +0 -0
- psychopy/app/Resources/dark/fileaudio.png +0 -0
- psychopy/app/Resources/dark/fileaudio@2x.png +0 -0
- psychopy/app/Resources/dark/filecss.png +0 -0
- psychopy/app/Resources/dark/filecss@2x.png +0 -0
- psychopy/app/Resources/dark/filecsv.png +0 -0
- psychopy/app/Resources/dark/filecsv@2x.png +0 -0
- psychopy/app/Resources/dark/filedesign.png +0 -0
- psychopy/app/Resources/dark/filedesign@2x.png +0 -0
- psychopy/app/Resources/dark/filefont.png +0 -0
- psychopy/app/Resources/dark/filefont@2x.png +0 -0
- psychopy/app/Resources/dark/filegit.png +0 -0
- psychopy/app/Resources/dark/filegit@2x.png +0 -0
- psychopy/app/Resources/dark/filehtml.png +0 -0
- psychopy/app/Resources/dark/filehtml@2x.png +0 -0
- psychopy/app/Resources/dark/fileimage.png +0 -0
- psychopy/app/Resources/dark/fileimage@2x.png +0 -0
- psychopy/app/Resources/dark/fileinfo.png +0 -0
- psychopy/app/Resources/dark/fileinfo@2x.png +0 -0
- psychopy/app/Resources/dark/filejs.png +0 -0
- psychopy/app/Resources/dark/filejs@2x.png +0 -0
- psychopy/app/Resources/dark/filejson.png +0 -0
- psychopy/app/Resources/dark/filejson@2x.png +0 -0
- psychopy/app/Resources/dark/filepkg.png +0 -0
- psychopy/app/Resources/dark/filepkg@2x.png +0 -0
- psychopy/app/Resources/dark/filepsyexp.png +0 -0
- psychopy/app/Resources/dark/filepsyexp@2x.png +0 -0
- psychopy/app/Resources/dark/filepy.png +0 -0
- psychopy/app/Resources/dark/filepy@2x.png +0 -0
- psychopy/app/Resources/dark/filetxt.png +0 -0
- psychopy/app/Resources/dark/filetxt@2x.png +0 -0
- psychopy/app/Resources/dark/fileunknown.png +0 -0
- psychopy/app/Resources/dark/fileunknown@2x.png +0 -0
- psychopy/app/Resources/dark/filevideo.png +0 -0
- psychopy/app/Resources/dark/filevideo@2x.png +0 -0
- psychopy/app/Resources/dark/find.png +0 -0
- psychopy/app/Resources/dark/find@2x.png +0 -0
- psychopy/app/Resources/dark/loop.png +0 -0
- psychopy/app/Resources/dark/loop@2x.png +0 -0
- psychopy/app/Resources/dark/regex.png +0 -0
- psychopy/app/Resources/dark/regex@2x.png +0 -0
- psychopy/app/Resources/light/case.png +0 -0
- psychopy/app/Resources/light/case@2x.png +0 -0
- psychopy/app/Resources/light/fileaudio.png +0 -0
- psychopy/app/Resources/light/fileaudio@2x.png +0 -0
- psychopy/app/Resources/light/filecss.png +0 -0
- psychopy/app/Resources/light/filecss@2x.png +0 -0
- psychopy/app/Resources/light/filecsv.png +0 -0
- psychopy/app/Resources/light/filecsv@2x.png +0 -0
- psychopy/app/Resources/light/filedesign.png +0 -0
- psychopy/app/Resources/light/filedesign@2x.png +0 -0
- psychopy/app/Resources/light/filefont.png +0 -0
- psychopy/app/Resources/light/filefont@2x.png +0 -0
- psychopy/app/Resources/light/filegit.png +0 -0
- psychopy/app/Resources/light/filegit@2x.png +0 -0
- psychopy/app/Resources/light/filehtml.png +0 -0
- psychopy/app/Resources/light/filehtml@2x.png +0 -0
- psychopy/app/Resources/light/fileimage.png +0 -0
- psychopy/app/Resources/light/fileimage@2x.png +0 -0
- psychopy/app/Resources/light/fileinfo.png +0 -0
- psychopy/app/Resources/light/fileinfo@2x.png +0 -0
- psychopy/app/Resources/light/filejs.png +0 -0
- psychopy/app/Resources/light/filejs@2x.png +0 -0
- psychopy/app/Resources/light/filejson.png +0 -0
- psychopy/app/Resources/light/filejson@2x.png +0 -0
- psychopy/app/Resources/light/filepkg.png +0 -0
- psychopy/app/Resources/light/filepkg@2x.png +0 -0
- psychopy/app/Resources/light/filepsyexp.png +0 -0
- psychopy/app/Resources/light/filepsyexp@2x.png +0 -0
- psychopy/app/Resources/light/filepy.png +0 -0
- psychopy/app/Resources/light/filepy@2x.png +0 -0
- psychopy/app/Resources/light/filetxt.png +0 -0
- psychopy/app/Resources/light/filetxt@2x.png +0 -0
- psychopy/app/Resources/light/fileunknown.png +0 -0
- psychopy/app/Resources/light/fileunknown@2x.png +0 -0
- psychopy/app/Resources/light/filevideo.png +0 -0
- psychopy/app/Resources/light/filevideo@2x.png +0 -0
- psychopy/app/Resources/light/find.png +0 -0
- psychopy/app/Resources/light/find@2x.png +0 -0
- psychopy/app/Resources/light/loop.png +0 -0
- psychopy/app/Resources/light/loop@2x.png +0 -0
- psychopy/app/Resources/light/regex.png +0 -0
- psychopy/app/Resources/light/regex@2x.png +0 -0
- psychopy/app/Resources/routine_templates/Basic.psyexp +0 -1
- psychopy/app/Resources/routine_templates/Misc.psyexp +0 -1
- psychopy/app/Resources/routine_templates/Online.psyexp +0 -2
- psychopy/app/Resources/routine_templates/Trials.psyexp +0 -1
- psychopy/app/Resources/splash.png +0 -0
- psychopy/app/Resources/splash@2x.png +0 -0
- psychopy/app/__init__.py +49 -8
- psychopy/app/__main__.py +3 -0
- psychopy/app/_psychopyApp.py +134 -125
- psychopy/app/builder/builder.py +42 -22
- psychopy/app/builder/dialogs/__init__.py +44 -11
- psychopy/app/builder/dialogs/dlgsCode.py +1 -1
- psychopy/app/builder/dialogs/dlgsConditions.py +1 -1
- psychopy/app/builder/dialogs/findDlg.py +106 -20
- psychopy/app/builder/dialogs/paramCtrls.py +42 -1
- psychopy/app/builder/validators.py +1 -1
- psychopy/app/coder/codeEditorBase.py +8 -8
- psychopy/app/coder/coder.py +32 -29
- psychopy/app/coder/fileBrowser.py +68 -22
- psychopy/app/coder/folding.py +1 -1
- psychopy/app/coder/psychoParser.py +1 -1
- psychopy/app/coder/repl.py +1 -1
- psychopy/app/coder/sourceTree.py +1 -1
- psychopy/app/connections/__init__.py +1 -1
- psychopy/app/connections/news.py +1 -1
- psychopy/app/connections/sendusage.py +1 -1
- psychopy/app/connections/updates.py +1 -1
- psychopy/app/console.py +1 -1
- psychopy/app/errorDlg.py +1 -1
- psychopy/app/frametracker.py +1 -1
- psychopy/app/idle.py +1 -1
- psychopy/app/jobs.py +5 -2
- psychopy/app/linuxconfig/__init__.py +1 -1
- psychopy/app/locale/ar_001/LC_MESSAGE/messages.mo +0 -0
- psychopy/app/locale/ar_001/LC_MESSAGE/messages.po +4 -4
- psychopy/app/locale/cs_CZ/LC_MESSAGE/messages.mo +0 -0
- psychopy/app/locale/da_DK/LC_MESSAGE/messages.mo +0 -0
- psychopy/app/locale/de_DE/LC_MESSAGE/messages.mo +0 -0
- psychopy/app/locale/de_DE/LC_MESSAGE/messages.po +3 -3
- psychopy/app/locale/el_GR/LC_MESSAGE/messages.mo +0 -0
- psychopy/app/locale/en_NZ/LC_MESSAGE/messages.mo +0 -0
- psychopy/app/locale/en_US/LC_MESSAGE/messages.mo +0 -0
- psychopy/app/locale/es_CO/LC_MESSAGE/messages.mo +0 -0
- psychopy/app/locale/es_CO/LC_MESSAGE/messages.po +4 -4
- psychopy/app/locale/es_ES/LC_MESSAGE/messages.mo +0 -0
- psychopy/app/locale/es_ES/LC_MESSAGE/messages.po +4 -4
- psychopy/app/locale/es_US/LC_MESSAGE/messages.mo +0 -0
- psychopy/app/locale/es_US/LC_MESSAGE/messages.po +4 -4
- psychopy/app/locale/et_EE/LC_MESSAGE/messages.mo +0 -0
- psychopy/app/locale/et_EE/LC_MESSAGE/messages.po +2 -2
- psychopy/app/locale/fa_IR/LC_MESSAGE/messages.mo +0 -0
- psychopy/app/locale/fa_IR/LC_MESSAGE/messages.po +1 -1
- psychopy/app/locale/fi_FI/LC_MESSAGE/messages.mo +0 -0
- psychopy/app/locale/fr_FR/LC_MESSAGE/messages.mo +0 -0
- psychopy/app/locale/fr_FR/LC_MESSAGE/messages.po +2 -2
- psychopy/app/locale/he_IL/LC_MESSAGE/messages.mo +0 -0
- psychopy/app/locale/he_IL/LC_MESSAGE/messages.po +2 -2
- psychopy/app/locale/hi_IN/LC_MESSAGE/messages.mo +0 -0
- psychopy/app/locale/hi_IN/LC_MESSAGE/messages.po +2 -2
- psychopy/app/locale/hu_HU/LC_MESSAGE/messages.mo +0 -0
- psychopy/app/locale/it_IT/LC_MESSAGE/messages.mo +0 -0
- psychopy/app/locale/it_IT/LC_MESSAGE/messages.po +2 -2
- psychopy/app/locale/ja_JP/LC_MESSAGE/messages.mo +0 -0
- psychopy/app/locale/ja_JP/LC_MESSAGE/messages.po +3421 -2396
- psychopy/app/locale/ko_KR/LC_MESSAGE/messages.mo +0 -0
- psychopy/app/locale/ms_MY/LC_MESSAGE/messages.mo +0 -0
- psychopy/app/locale/ms_MY/LC_MESSAGE/messages.po +2 -2
- psychopy/app/locale/nl_NL/LC_MESSAGE/messages.mo +0 -0
- psychopy/app/locale/nn_NO/LC_MESSAGE/messages.mo +0 -0
- psychopy/app/locale/pl_PL/LC_MESSAGE/messages.mo +0 -0
- psychopy/app/locale/pt_PT/LC_MESSAGE/messages.mo +0 -0
- psychopy/app/locale/pt_PT/LC_MESSAGE/messages.po +4 -4
- psychopy/app/locale/ro_RO/LC_MESSAGE/messages.mo +0 -0
- psychopy/app/locale/ru_RU/LC_MESSAGE/messages.mo +0 -0
- psychopy/app/locale/sv_SE/LC_MESSAGE/messages.mo +0 -0
- psychopy/app/locale/sv_SE/LC_MESSAGE/messages.po +2 -2
- psychopy/app/locale/tr_TR/LC_MESSAGE/messages.mo +0 -0
- psychopy/app/locale/tr_TR/LC_MESSAGE/messages.po +2 -2
- psychopy/app/locale/zh_CN/LC_MESSAGE/messages.mo +0 -0
- psychopy/app/locale/zh_CN/LC_MESSAGE/messages.po +3 -3
- psychopy/app/locale/zh_TW/LC_MESSAGE/messages.mo +0 -0
- psychopy/app/locale/zh_TW/LC_MESSAGE/messages.po +2 -2
- psychopy/app/{builder/localizedStrings.py → localizedStrings.py} +173 -26
- psychopy/app/pavlovia_ui/__init__.py +1 -1
- psychopy/app/pavlovia_ui/_base.py +1 -1
- psychopy/app/pavlovia_ui/functions.py +1 -1
- psychopy/app/pavlovia_ui/menu.py +1 -1
- psychopy/app/pavlovia_ui/project.py +1 -1
- psychopy/app/pavlovia_ui/search.py +1 -1
- psychopy/app/pavlovia_ui/sync.py +1 -1
- psychopy/app/pavlovia_ui/user.py +1 -1
- psychopy/app/plugin_manager/dialog.py +34 -96
- psychopy/app/plugin_manager/packages.py +10 -14
- psychopy/app/plugin_manager/plugins.py +64 -4
- psychopy/app/preferencesDlg.py +12 -37
- psychopy/app/psychopyApp.py +130 -44
- psychopy/app/ribbon.py +1 -0
- psychopy/app/runner/runner.py +19 -7
- psychopy/app/runner/scriptProcess.py +11 -6
- psychopy/app/stdout/stdOutRich.py +9 -2
- psychopy/app/themes/fonts.py +1 -1
- psychopy/app/themes/icons.py +2 -38
- psychopy/app/ui/__init__.py +1 -1
- psychopy/app/utils.py +3 -3
- psychopy/assets/default.mp3 +0 -0
- psychopy/assets/fonts/NotoSans-Bold.ttf +0 -0
- psychopy/assets/fonts/NotoSans-BoldItalic.ttf +0 -0
- psychopy/assets/fonts/NotoSans-Italic.ttf +0 -0
- psychopy/assets/fonts/NotoSans-Regular.ttf +0 -0
- psychopy/assets/voicekeyThresholdStim.wav +0 -0
- psychopy/clock.py +4 -1
- psychopy/colors.py +12 -5
- psychopy/core.py +1 -1
- psychopy/data/base.py +1 -1
- psychopy/data/experiment.py +151 -46
- psychopy/data/routine.py +27 -1
- psychopy/data/staircase.py +2 -1
- psychopy/data/trial.py +62 -14
- psychopy/data/utils.py +2 -2
- psychopy/demos/builder/Design Templates/branchedExperiment/branchedExperiment.psyexp +333 -218
- psychopy/demos/builder/Design Templates/psychophysicsStaircase/psychophysicsStaircase.psyexp +261 -239
- psychopy/demos/builder/Design Templates/psychophysicsStairsInterleaved/psychophysicsStaircaseInterleaved.psyexp +319 -180
- psychopy/demos/builder/Design Templates/randomisedBlocks/randomisedBlocks.psyexp +204 -116
- psychopy/demos/builder/Experiments/BART/assets/background.jpg +0 -0
- psychopy/demos/builder/Experiments/BART/assets/blueBalloon.png +0 -0
- psychopy/demos/builder/Experiments/BART/assets/greenBalloon.png +0 -0
- psychopy/demos/builder/Experiments/BART/assets/redBalloon.png +0 -0
- psychopy/demos/builder/Experiments/BART/bart.psyexp +779 -866
- psychopy/demos/builder/Experiments/BigFiveInventory/BFI.psyexp +242 -180
- psychopy/demos/builder/Experiments/GoNoGo/gng.psyexp +419 -406
- psychopy/demos/builder/Experiments/dragAndDrop/README.md +2 -37
- psychopy/demos/builder/Experiments/dragAndDrop/drag_and_drop.psyexp +460 -1204
- psychopy/demos/builder/Experiments/dragAndDrop/stimuli/blank_grid.png +0 -0
- psychopy/demos/builder/Experiments/dragAndDrop/stimuli/make_shapes.psyexp +221 -0
- psychopy/demos/builder/Experiments/dragAndDrop/stimuli/readme.md +4 -0
- psychopy/demos/builder/Experiments/dragAndDrop/stimuli/solution_1.png +0 -0
- psychopy/demos/builder/Experiments/dragAndDrop/stimuli/solution_10.png +0 -0
- psychopy/demos/builder/Experiments/dragAndDrop/stimuli/solution_2.png +0 -0
- psychopy/demos/builder/Experiments/dragAndDrop/stimuli/solution_3.png +0 -0
- psychopy/demos/builder/Experiments/dragAndDrop/stimuli/solution_4.png +0 -0
- psychopy/demos/builder/Experiments/dragAndDrop/stimuli/solution_5.png +0 -0
- psychopy/demos/builder/Experiments/dragAndDrop/stimuli/solution_6.png +0 -0
- psychopy/demos/builder/Experiments/dragAndDrop/stimuli/solution_7.png +0 -0
- psychopy/demos/builder/Experiments/dragAndDrop/stimuli/solution_8.png +0 -0
- psychopy/demos/builder/Experiments/dragAndDrop/stimuli/solution_9.png +0 -0
- psychopy/demos/builder/Experiments/dragAndDrop/stimuli/solutions.xlsx +0 -0
- psychopy/demos/builder/Experiments/mentalRotation/MentalRotation.psyexp +583 -542
- psychopy/demos/builder/Experiments/navon/NavonTask.psyexp +458 -427
- psychopy/demos/builder/Experiments/sternberg/sternberg.psyexp +588 -550
- psychopy/demos/builder/Experiments/stroop/stroop.psyexp +303 -207
- psychopy/demos/builder/Experiments/stroopExtended/stroop.psyexp +390 -215
- psychopy/demos/builder/Experiments/stroopExtended/stroopReverse.psyexp +390 -215
- psychopy/demos/builder/Experiments/stroopVoice/stroopVoice.psyexp +357 -331
- psychopy/demos/builder/Feature Demos/buttonBox/buttonBoxDemo.psyexp +3 -2
- psychopy/demos/builder/Feature Demos/counterbalance/counterbalance.psyexp +287 -277
- psychopy/demos/builder/Feature Demos/gratings/gratings.psyexp +370 -320
- psychopy/demos/builder/Feature Demos/noise/noise.psyexp +452 -399
- psychopy/demos/builder/Feature Demos/panorama/panorama.psyexp +168 -133
- psychopy/demos/builder/Feature Demos/pilotMode/pilotMode.psyexp +4 -3
- psychopy/demos/builder/Feature Demos/progress/progressBar.psyexp +420 -392
- psychopy/demos/builder/Feature Demos/sliders/sliders.psyexp +917 -871
- psychopy/demos/builder/Feature Demos/visualValidator/readme.md +7 -0
- psychopy/demos/builder/Feature Demos/visualValidator/visualValidator.psyexp +200 -0
- psychopy/demos/builder/Hardware/EEG_parallel_component/EEG_triggers_parallel_comp.psyexp +25 -9
- psychopy/demos/builder/Hardware/EEG_serial_code/EEG_triggers_serial_code.psyexp +372 -361
- psychopy/demos/builder/Hardware/EEG_serial_component/EEG_triggers_serial_comp.psyexp +25 -9
- psychopy/demos/builder/Hardware/EGI_netstation/stroop.psyexp +320 -235
- psychopy/demos/builder/Hardware/Eyetracking_visual_search/visualSearch.psyexp +790 -651
- psychopy/demos/builder/Hardware/camera/camera.psyexp +326 -246
- psychopy/demos/builder/Hardware/eyetracking/eyetracking.psyexp +432 -327
- psychopy/demos/builder/Hardware/eyetracking_custom_cal/eyetracking_custom_cal.psyexp +440 -321
- psychopy/demos/builder/Hardware/fMRI/fMRI_demo.psyexp +190 -181
- psychopy/demos/builder/Hardware/lab_streaming_layer/lsl_triggers_demo.psyexp +323 -312
- psychopy/demos/builder/Hardware/lab_streaming_layer/lsl_triggers_demo_legacy.psyexp +360 -0
- psychopy/demos/builder/Hardware/lab_streaming_layer/lsl_triggers_demo_legacy_legacy.psyexp +312 -0
- psychopy/demos/builder/Hardware/lab_streaming_layer_legacy/lsl_triggers_demo_legacy.psyexp +329 -273
- psychopy/demos/builder/Hardware/lab_streaming_layer_legacy/lsl_triggers_demo_legacy_legacy.psyexp +360 -0
- psychopy/demos/builder/Hardware/lab_streaming_layer_legacy/lsl_triggers_demo_legacy_legacy_legacy.psyexp +312 -0
- psychopy/demos/builder/Hardware/microphone/microphone.psyexp +450 -404
- psychopy/demos/builder/Hardware/pump/pump.psyexp +593 -329
- psychopy/demos/builder/Helper Tools/achorVSalignment/FlowCircular-Regular.ttf +0 -0
- psychopy/demos/builder/Helper Tools/achorVSalignment/anchorAlignment.psyexp +336 -274
- psychopy/demos/builder/Helper Tools/clockFace/clockFace.psyexp +200 -149
- psychopy/demos/builder/Helper Tools/colors/colors.psyexp +300 -279
- psychopy/demos/builder/Helper Tools/drawPolygon/drawPolygon.psyexp +677 -564
- psychopy/demos/builder/Helper Tools/keyNameFinder/keyNameFinder.psyexp +214 -158
- psychopy/demos/builder/Helper Tools/spatialUnits/unitDemo.psyexp +195 -146
- psychopy/demos/coder/experiment control/runtimeInfo.py +1 -1
- psychopy/devices/__init__.py +1 -1
- psychopy/event.py +1 -1
- psychopy/exceptions.py +1 -1
- psychopy/experiment/__init__.py +1 -1
- psychopy/experiment/_experiment.py +30 -9
- psychopy/experiment/components/__init__.py +1 -6
- psychopy/experiment/components/_base.py +44 -19
- psychopy/experiment/components/aperture/__init__.py +1 -1
- psychopy/experiment/components/brush/__init__.py +2 -2
- psychopy/experiment/components/button/__init__.py +24 -28
- psychopy/experiment/components/camera/__init__.py +38 -39
- psychopy/experiment/components/code/__init__.py +1 -1
- psychopy/experiment/components/dots/__init__.py +1 -1
- psychopy/experiment/components/eyetracker_record/__init__.py +7 -3
- psychopy/experiment/components/form/__init__.py +3 -3
- psychopy/experiment/components/grating/__init__.py +1 -1
- psychopy/experiment/components/image/__init__.py +1 -1
- psychopy/experiment/components/joyButtons/__init__.py +2 -2
- psychopy/experiment/components/joyButtons/virtualJoyButtons.py +1 -1
- psychopy/experiment/components/joystick/__init__.py +3 -3
- psychopy/experiment/components/joystick/virtualJoystick.py +1 -1
- psychopy/experiment/components/keyboard/__init__.py +98 -122
- psychopy/experiment/components/microphone/__init__.py +54 -98
- psychopy/experiment/components/mouse/__init__.py +92 -93
- psychopy/experiment/components/movie/__init__.py +28 -50
- psychopy/experiment/components/parallelOut/__init__.py +3 -3
- psychopy/experiment/components/polygon/__init__.py +2 -3
- psychopy/experiment/components/roi/__init__.py +2 -2
- psychopy/experiment/components/routineSettings/__init__.py +2 -0
- psychopy/experiment/components/serialOut/__init__.py +7 -7
- psychopy/experiment/components/settings/__init__.py +317 -313
- psychopy/experiment/components/settings/eyetracking.py +108 -0
- psychopy/experiment/components/slider/__init__.py +5 -5
- psychopy/experiment/components/sound/__init__.py +168 -78
- psychopy/experiment/components/soundsensor/__init__.py +361 -0
- psychopy/experiment/components/soundsensor/classic/soundsensor.png +0 -0
- psychopy/experiment/components/soundsensor/classic/soundsensor@2x.png +0 -0
- psychopy/experiment/components/soundsensor/dark/soundsensor.png +0 -0
- psychopy/experiment/components/soundsensor/dark/soundsensor@2x.png +0 -0
- psychopy/experiment/components/soundsensor/light/soundsensor.png +0 -0
- psychopy/experiment/components/soundsensor/light/soundsensor@2x.png +0 -0
- psychopy/experiment/components/static/__init__.py +59 -33
- psychopy/experiment/components/text/__init__.py +2 -6
- psychopy/experiment/components/textbox/__init__.py +3 -7
- psychopy/experiment/components/unknown/__init__.py +2 -0
- psychopy/experiment/components/unknownPlugin/__init__.py +2 -0
- psychopy/experiment/exports.py +1 -1
- psychopy/experiment/flow.py +2 -2
- psychopy/experiment/localization.py +1 -1
- psychopy/experiment/loops.py +43 -10
- psychopy/experiment/params.py +6 -4
- psychopy/experiment/plugins.py +8 -1
- psychopy/experiment/py2js.py +1 -1
- psychopy/experiment/py2js_transpiler.py +1 -1
- psychopy/experiment/routines/__init__.py +1 -1
- psychopy/experiment/routines/_base.py +23 -24
- psychopy/experiment/routines/audioValidator/__init__.py +343 -0
- psychopy/experiment/routines/audioValidator/classic/audio_validator.png +0 -0
- psychopy/experiment/routines/audioValidator/classic/audio_validator@2x.png +0 -0
- psychopy/experiment/routines/audioValidator/dark/audio_validator.png +0 -0
- psychopy/experiment/routines/audioValidator/dark/audio_validator@2x.png +0 -0
- psychopy/experiment/routines/audioValidator/light/audio_validator.png +0 -0
- psychopy/experiment/routines/audioValidator/light/audio_validator@2x.png +0 -0
- psychopy/experiment/routines/eyetracker_calibrate/__init__.py +76 -17
- psychopy/experiment/routines/eyetracker_validate/__init__.py +1 -1
- psychopy/experiment/routines/unknown/__init__.py +2 -0
- psychopy/experiment/routines/{photodiodeValidator → visualValidator}/__init__.py +89 -120
- psychopy/experiment/routines/visualValidator/classic/visual_validator.png +0 -0
- psychopy/experiment/routines/visualValidator/classic/visual_validator@2x.png +0 -0
- psychopy/experiment/routines/visualValidator/dark/visual_validator.png +0 -0
- psychopy/experiment/routines/visualValidator/dark/visual_validator@2x.png +0 -0
- psychopy/experiment/routines/visualValidator/light/visual_validator.png +0 -0
- psychopy/experiment/routines/visualValidator/light/visual_validator@2x.png +0 -0
- psychopy/experiment/utils.py +1 -1
- psychopy/gui/__init__.py +1 -1
- psychopy/gui/qtgui.py +15 -6
- psychopy/gui/wxgui.py +1 -1
- psychopy/hardware/__init__.py +0 -1
- psychopy/hardware/base.py +147 -16
- psychopy/hardware/bbtk/__init__.py +10 -16
- psychopy/hardware/brainproducts.py +7 -13
- psychopy/hardware/button.py +21 -2
- psychopy/hardware/buttonbox/__init__.py +1 -1
- psychopy/hardware/camera/__init__.py +18 -5
- psychopy/hardware/cedrus.py +5 -16
- psychopy/hardware/crs/__init__.py +1 -1
- psychopy/hardware/crs/bits.py +36 -33
- psychopy/hardware/crs/colorcal.py +8 -11
- psychopy/hardware/crs/optical.py +7 -10
- psychopy/hardware/crs/shaders.py +18 -5
- psychopy/hardware/emotiv.py +1 -1
- psychopy/hardware/emulator.py +11 -5
- psychopy/hardware/exceptions.py +86 -0
- psychopy/hardware/forp.py +18 -23
- psychopy/hardware/gammasci.py +8 -3
- psychopy/hardware/iolab.py +8 -19
- psychopy/hardware/joystick/__init__.py +865 -266
- psychopy/hardware/joystick/_base.py +251 -0
- psychopy/hardware/joystick/backend_glfw.py +306 -0
- psychopy/hardware/joystick/backend_pyglet.py +309 -0
- psychopy/hardware/joystick/mappings.py +287 -0
- psychopy/hardware/keyboard.py +4 -2
- psychopy/hardware/labhackers.py +1 -1
- psychopy/hardware/labjacks.py +9 -13
- psychopy/hardware/{photodiode.py → lightsensor.py} +146 -203
- psychopy/hardware/listener.py +9 -8
- psychopy/hardware/manager.py +24 -35
- psychopy/hardware/microphone.py +535 -155
- psychopy/hardware/minolta.py +14 -4
- psychopy/hardware/mouse/__init__.py +1 -1
- psychopy/hardware/photometer/__init__.py +2 -2
- psychopy/hardware/pr.py +14 -4
- psychopy/hardware/qmix.py +18 -27
- psychopy/hardware/serialdevice.py +43 -12
- psychopy/hardware/soundsensor.py +473 -0
- psychopy/hardware/spatial/__init__.py +231 -0
- psychopy/hardware/speaker.py +298 -36
- psychopy/hardware/triggerbox/__init__.py +1 -1
- psychopy/hardware/triggerbox/base.py +1 -1
- psychopy/hardware/triggerbox/parallel.py +1 -1
- psychopy/info.py +1 -1
- psychopy/iohub/devices/eyetracker/__init__.py +10 -18
- psychopy/iohub/devices/eyetracker/calibration/procedure.py +15 -33
- psychopy/iohub/devices/eyetracker/hw/gazepoint/__init__.py +2 -2
- psychopy/iohub/devices/eyetracker/hw/gazepoint/gp3/__init__.py +1 -0
- psychopy/iohub/devices/eyetracker/hw/gazepoint/gp3/eyetracker.py +10 -0
- psychopy/iohub/devices/eyetracker/hw/pupil_labs/neon/__init__.py +1 -0
- psychopy/iohub/devices/mouse/linux2.py +2 -1
- psychopy/layout.py +1 -1
- psychopy/liaison.py +91 -39
- psychopy/locale_setup.py +11 -1
- psychopy/localization/__init__.py +1 -1
- psychopy/localization/_localization.py +1 -1
- psychopy/localization/messages.pot +2 -2
- psychopy/logging.py +14 -12
- psychopy/microphone.py +4 -3
- psychopy/misc.py +1 -1
- psychopy/monitors/MonitorCenter.py +3 -3
- psychopy/monitors/__init__.py +1 -1
- psychopy/monitors/calibData.py +1 -1
- psychopy/monitors/calibTools.py +3 -2
- psychopy/platform_specific/__init__.py +1 -1
- psychopy/platform_specific/darwin.py +1 -1
- psychopy/platform_specific/linux.py +1 -1
- psychopy/platform_specific/win32.py +1 -1
- psychopy/plugins/__init__.py +26 -17
- psychopy/plugins/util.py +65 -0
- psychopy/preferences/Darwin.spec +11 -3
- psychopy/preferences/FreeBSD.spec +11 -3
- psychopy/preferences/Linux.spec +11 -3
- psychopy/preferences/Windows.spec +11 -3
- psychopy/preferences/__init__.py +1 -1
- psychopy/preferences/baseNoArch.spec +11 -3
- psychopy/preferences/hints.py +78 -61
- psychopy/preferences/preferences.py +82 -13
- psychopy/projects/__init__.py +1 -1
- psychopy/projects/pavlovia.py +29 -13
- psychopy/scripts/psyexpCompile.py +1 -1
- psychopy/session.py +81 -8
- psychopy/sound/__init__.py +25 -10
- psychopy/sound/_base.py +134 -34
- psychopy/sound/audioclip.py +38 -15
- psychopy/sound/audiodevice.py +1 -1
- psychopy/sound/backend_ptb.py +53 -321
- psychopy/sound/backend_pygame.py +7 -3
- psychopy/sound/backend_pyo.py +53 -22
- psychopy/sound/backend_pysound.py +10 -27
- psychopy/sound/backend_sounddevice.py +33 -21
- psychopy/sound/exceptions.py +1 -1
- psychopy/sound/microphone.py +83 -5
- psychopy/sound/transcribe.py +3 -3
- psychopy/tests/data/test_basic_run.py +1 -0
- psychopy/tests/data/test_sounds/default_16000.wav +0 -0
- psychopy/tests/data/test_sounds/default_192000.wav +0 -0
- psychopy/tests/data/test_sounds/default_22050.wav +0 -0
- psychopy/tests/data/test_sounds/default_32000.wav +0 -0
- psychopy/tests/data/test_sounds/default_44100.wav +0 -0
- psychopy/tests/data/test_sounds/default_48000.wav +0 -0
- psychopy/tests/data/test_sounds/default_8000.wav +0 -0
- psychopy/tests/data/test_sounds/default_96000.wav +0 -0
- psychopy/tests/test_alerts/test_alerttools.py +2 -1
- psychopy/tests/test_app/test_command_line.py +65 -0
- psychopy/tests/test_data/test_TrialHandler2.py +18 -7
- psychopy/tests/test_demos/test_builder_demos.py +1 -1
- psychopy/tests/test_experiment/needs_wx/componsTemplate.txt +5238 -4188
- psychopy/tests/test_experiment/needs_wx/test_components.py +1 -1
- psychopy/tests/test_experiment/test_components/test_RoutineSettingsComponent.py +16 -0
- psychopy/tests/test_experiment/test_components/test_all_components.py +1 -1
- psychopy/tests/test_experiment/test_components/test_base_components.py +26 -17
- psychopy/tests/test_experiment/test_loops.py +12 -4
- psychopy/tests/test_experiment/test_params.py +17 -4
- psychopy/tests/test_experiment/test_routines/test_PhotodiodeValidationRoutine.py +2 -2
- psychopy/tests/test_hardware/test_photodiode.py +66 -0
- psychopy/tests/test_liaison/test_Liaison.py +4 -4
- psychopy/tests/test_misc/test_clock.py +2 -0
- psychopy/tests/test_misc/test_color.py +2 -0
- psychopy/tests/test_misc/test_event.py +1 -0
- psychopy/tests/test_plugins/__init__.py +0 -0
- psychopy/tests/test_plugins/test_plugin_stubs.py +125 -0
- psychopy/tests/test_sound/test_sound.py +111 -40
- psychopy/tests/test_tools/test_colorspacetools.py +24 -23
- psychopy/tests/test_tools/test_mathtools.py +9 -9
- psychopy/tests/test_tools/test_viewtools.py +101 -0
- psychopy/tests/test_validators/__init__.py +0 -0
- psychopy/tests/test_validators/test_voicekeyValidator.py +95 -0
- psychopy/tests/test_visual/test_all_stimuli.py +2 -2
- psychopy/tests/test_visual/test_basevisual.py +37 -7
- psychopy/tests/test_visual/test_button.py +2 -2
- psychopy/tests/test_visual/test_circle.py +10 -2
- psychopy/tests/test_visual/test_dots.py +1 -1
- psychopy/tests/test_visual/test_form.py +13 -13
- psychopy/tests/test_visual/test_gamma.py +3 -3
- psychopy/tests/test_visual/test_image.py +2 -2
- psychopy/tests/test_visual/test_progress.py +2 -2
- psychopy/tests/test_visual/test_roi.py +8 -2
- psychopy/tests/test_visual/test_shape.py +2 -2
- psychopy/tests/test_visual/test_slider.py +2 -2
- psychopy/tests/test_visual/test_target.py +2 -2
- psychopy/tests/test_visual/test_textbox.py +6 -8
- psychopy/tests/test_visual/test_winScalePos.py +6 -5
- psychopy/tests/test_visual/test_window.py +17 -0
- psychopy/tests/utils.py +51 -1
- psychopy/tools/__init__.py +1 -1
- psychopy/tools/arraytools.py +2 -2
- psychopy/tools/attributetools.py +52 -1
- psychopy/tools/audiotools.py +4 -1
- psychopy/tools/colorspacetools.py +6 -4
- psychopy/tools/coordinatetools.py +1 -1
- psychopy/tools/fileerrortools.py +21 -9
- psychopy/tools/filetools.py +2 -2
- psychopy/tools/fontmanager.py +47 -28
- psychopy/tools/gltools.py +2967 -559
- psychopy/tools/imagetools.py +1 -1
- psychopy/tools/mathtools.py +997 -127
- psychopy/tools/monitorunittools.py +7 -1
- psychopy/tools/movietools.py +1 -2
- psychopy/tools/pkgtools.py +157 -127
- psychopy/tools/plottools.py +1 -1
- psychopy/tools/rifttools.py +1 -1
- psychopy/tools/stereotools.py +1 -1
- psychopy/tools/stimulustools.py +172 -2
- psychopy/tools/stringtools.py +22 -2
- psychopy/tools/systemtools.py +1 -1
- psychopy/tools/typetools.py +1 -1
- psychopy/tools/unittools.py +1 -1
- psychopy/tools/versionchooser.py +3 -1
- psychopy/tools/viewtools.py +54 -70
- psychopy/tools/wizard.py +2 -2
- psychopy/validation/__init__.py +6 -0
- psychopy/validation/audio.py +74 -0
- psychopy/validation/visual.py +115 -0
- psychopy/visual/__init__.py +1 -4
- psychopy/visual/aperture.py +9 -6
- psychopy/visual/backends/__init__.py +1 -1
- psychopy/visual/backends/_base.py +1 -1
- psychopy/visual/backends/gamma.py +1 -1
- psychopy/visual/backends/glfwbackend.py +8 -12
- psychopy/visual/backends/pygamebackend.py +1 -1
- psychopy/visual/backends/pygletbackend.py +32 -11
- psychopy/visual/basevisual.py +93 -13
- psychopy/visual/brush.py +1 -1
- psychopy/visual/bufferimage.py +90 -10
- psychopy/visual/button.py +1 -1
- psychopy/visual/circle.py +12 -20
- psychopy/visual/custommouse.py +1 -1
- psychopy/visual/dot.py +80 -14
- psychopy/visual/elementarray.py +84 -10
- psychopy/visual/filters.py +1 -1
- psychopy/visual/form.py +43 -28
- psychopy/visual/grating.py +105 -25
- psychopy/visual/helpers.py +4 -2
- psychopy/visual/image.py +98 -20
- psychopy/visual/line.py +15 -25
- psychopy/visual/movie.py +1 -1
- psychopy/visual/movie2.py +4 -3
- psychopy/visual/movie3.py +4 -3
- psychopy/visual/movies/__init__.py +1 -1
- psychopy/visual/movies/frame.py +1 -1
- psychopy/visual/movies/metadata.py +1 -1
- psychopy/visual/movies/players/__init__.py +1 -1
- psychopy/visual/movies/players/_base.py +1 -1
- psychopy/visual/movies/players/ffpyplayer_player.py +2 -3
- psychopy/visual/nnlvs.py +9 -6
- psychopy/visual/noise.py +4 -16
- psychopy/visual/patch.py +4 -3
- psychopy/visual/pie.py +3 -14
- psychopy/visual/polygon.py +21 -28
- psychopy/visual/radial.py +4 -18
- psychopy/visual/ratingscale.py +4 -3
- psychopy/visual/rect.py +16 -25
- psychopy/visual/rift.py +8 -2
- psychopy/visual/secondorder.py +4 -16
- psychopy/visual/shaders.py +620 -286
- psychopy/visual/shape.py +281 -90
- psychopy/visual/simpleimage.py +1 -1
- psychopy/visual/slider.py +78 -25
- psychopy/visual/stim3d.py +5 -608
- psychopy/visual/text.py +13 -3
- psychopy/visual/textbox2/textbox2.py +188 -56
- psychopy/visual/vlcmoviestim.py +1 -1
- psychopy/visual/window.py +374 -201
- psychopy/web.py +1 -1
- {psychopy-2024.2.5.dist-info → psychopy-2025.1.1.dist-info}/METADATA +13 -12
- {psychopy-2024.2.5.dist-info → psychopy-2025.1.1.dist-info}/RECORD +647 -624
- {psychopy-2024.2.5.dist-info → psychopy-2025.1.1.dist-info}/WHEEL +1 -1
- psychopy/.DS_Store +0 -0
- psychopy/__init__.py.orig +0 -65
- psychopy/app/.DS_Store +0 -0
- psychopy/app/Resources/.DS_Store +0 -0
- psychopy/app/Resources/classic/filecsv16.png +0 -0
- psychopy/app/Resources/classic/fileimage16.png +0 -0
- psychopy/app/Resources/classic/fileunknown16.png +0 -0
- psychopy/app/Resources/dark/filecsv16.png +0 -0
- psychopy/app/Resources/dark/filecsv16@2x.png +0 -0
- psychopy/app/Resources/dark/fileimage16.png +0 -0
- psychopy/app/Resources/dark/fileimage16@2x.png +0 -0
- psychopy/app/Resources/dark/fileunknown16.png +0 -0
- psychopy/app/Resources/dark/fileunknown16@2x.png +0 -0
- psychopy/app/Resources/fonts/OpenSans-Bold.ttf +0 -0
- psychopy/app/Resources/fonts/OpenSans-BoldItalic.ttf +0 -0
- psychopy/app/Resources/fonts/OpenSans-ExtraBold.ttf +0 -0
- psychopy/app/Resources/fonts/OpenSans-ExtraBoldItalic.ttf +0 -0
- psychopy/app/Resources/fonts/OpenSans-Italic.ttf +0 -0
- psychopy/app/Resources/fonts/OpenSans-Light.ttf +0 -0
- psychopy/app/Resources/fonts/OpenSans-LightItalic.ttf +0 -0
- psychopy/app/Resources/fonts/OpenSans-Regular.ttf +0 -0
- psychopy/app/Resources/fonts/OpenSans-SemiBold.ttf +0 -0
- psychopy/app/Resources/fonts/OpenSans-SemiBoldItalic.ttf +0 -0
- psychopy/app/Resources/light/filecsv16.png +0 -0
- psychopy/app/Resources/light/filecsv16@2x.png +0 -0
- psychopy/app/Resources/light/fileimage16.png +0 -0
- psychopy/app/Resources/light/fileimage16@2x.png +0 -0
- psychopy/app/Resources/light/fileunknown16.png +0 -0
- psychopy/app/Resources/light/fileunknown16@2x.png +0 -0
- psychopy/app/Resources/psychopySplash.png +0 -0
- psychopy/app/Resources/psychopySplash@2x.png +0 -0
- psychopy/app/builder/builder.py.orig +0 -3932
- psychopy/app/builder/dialogs/__init__.py.orig +0 -1679
- psychopy/app/builder/dialogs/paramCtrls.py.orig +0 -713
- psychopy/app/colorpicker/__init__.py.orig +0 -411
- psychopy/app/locale/ar_001/.DS_Store +0 -0
- psychopy/app/locale/ar_001/LC_MESSAGE/.DS_Store +0 -0
- psychopy/core.py.orig +0 -169
- psychopy/demos/builder/.DS_Store +0 -0
- psychopy/demos/builder/Design Templates/randomisedBlocks/randomisedBlocks_lastrun.py +0 -330
- psychopy/demos/builder/Experiments/.DS_Store +0 -0
- psychopy/demos/builder/Experiments/dragAndDrop/archived_conditions.xlsx +0 -0
- psychopy/demos/builder/Experiments/dragAndDrop/draw grid stim.py +0 -61
- psychopy/demos/builder/Experiments/dragAndDrop/shapeMaker.psyexp +0 -91
- psychopy/demos/builder/Experiments/dragAndDrop/stimuli/grid_image_1.png +0 -0
- psychopy/demos/builder/Experiments/dragAndDrop/stimuli/grid_image_10.png +0 -0
- psychopy/demos/builder/Experiments/dragAndDrop/stimuli/grid_image_2.png +0 -0
- psychopy/demos/builder/Experiments/dragAndDrop/stimuli/grid_image_3.png +0 -0
- psychopy/demos/builder/Experiments/dragAndDrop/stimuli/grid_image_4.png +0 -0
- psychopy/demos/builder/Experiments/dragAndDrop/stimuli/grid_image_5.png +0 -0
- psychopy/demos/builder/Experiments/dragAndDrop/stimuli/grid_image_6.png +0 -0
- psychopy/demos/builder/Experiments/dragAndDrop/stimuli/grid_image_7.png +0 -0
- psychopy/demos/builder/Experiments/dragAndDrop/stimuli/grid_image_8.png +0 -0
- psychopy/demos/builder/Experiments/dragAndDrop/stimuli/grid_image_9.png +0 -0
- psychopy/demos/builder/Experiments/dragAndDrop/updated_conditions.xlsx +0 -0
- psychopy/demos/builder/Tools/.DS_Store +0 -0
- psychopy/demos/builder/Tools/gammaCalibration/.DS_Store +0 -0
- psychopy/demos/builder/Tools/gammaCalibration/data/.DS_Store +0 -0
- psychopy/demos/builder/Tools/gammaCalibration/data/_gamma_correction_visual_2022-05-18_14h18.29.439.csv +0 -38
- psychopy/demos/builder/Tools/gammaCalibration/data/_gamma_correction_visual_2022-05-18_14h18.29.439.log +0 -3418
- psychopy/demos/builder/Tools/gammaCalibration/data/_gamma_correction_visual_2022-05-18_14h18.29.439.psydat +0 -0
- psychopy/demos/builder/Tools/gammaCalibration/data/x1_gamma_correction_visual_2022-05-17_13h59.42.928.csv +0 -2
- psychopy/demos/builder/Tools/gammaCalibration/data/x1_gamma_correction_visual_2022-05-17_13h59.42.928.log +0 -15
- psychopy/demos/builder/Tools/gammaCalibration/data/x1_gamma_correction_visual_2022-05-17_13h59.42.928.psydat +0 -0
- psychopy/demos/builder/Tools/gammaCalibration/gamma_correction_visual_lastrun.py +0 -562
- psychopy/demos/coder/.DS_Store +0 -0
- psychopy/demos/coder/experiment control/info_gamma.pickle +0 -0
- psychopy/demos/coder/iohub/.iohpid +0 -1
- psychopy/demos/coder/iohub/eyetracking/.iohpid +0 -1
- psychopy/demos/coder/iohub/wintab/.DS_Store +0 -0
- psychopy/demos/coder/stimuli/.DS_Store +0 -0
- psychopy/experiment/_experiment.py.orig +0 -1032
- psychopy/experiment/components/.DS_Store +0 -0
- psychopy/experiment/components/_base.py.orig +0 -823
- psychopy/experiment/components/form/.DS_Store +0 -0
- psychopy/experiment/components/microphone/__init__.py.orig +0 -490
- psychopy/experiment/components/settings/__init__.py.orig +0 -1337
- psychopy/experiment/components/textbox/__init__.py.orig +0 -310
- psychopy/experiment/components/webcam/.DS_Store +0 -0
- psychopy/experiment/components/webcam/light/.DS_Store +0 -0
- psychopy/experiment/loops.py.orig +0 -829
- psychopy/experiment/params.py.orig +0 -408
- psychopy/experiment/routine.py.orig +0 -503
- psychopy/experiment/routines/photodiodeValidator/classic/photodiode_validator.png +0 -0
- psychopy/experiment/routines/photodiodeValidator/classic/photodiode_validator@2x.png +0 -0
- psychopy/experiment/routines/photodiodeValidator/dark/photodiode_validator.png +0 -0
- psychopy/experiment/routines/photodiodeValidator/dark/photodiode_validator@2x.png +0 -0
- psychopy/experiment/routines/photodiodeValidator/light/photodiode_validator.png +0 -0
- psychopy/experiment/routines/photodiodeValidator/light/photodiode_validator@2x.png +0 -0
- psychopy/hardware/.DS_Store +0 -0
- psychopy/hardware/brainproducts.py.orig +0 -680
- psychopy/hardware/iolab.py.orig +0 -238
- psychopy/iohub/datastore/__init__.py.orig +0 -443
- psychopy/iohub/datastore/util.py.orig +0 -692
- psychopy/iohub/devices/mouse/darwin.py.orig +0 -427
- psychopy/iohub/devices/mouse/linux2.py.orig +0 -198
- psychopy/preferences/.DS_Store +0 -0
- psychopy/projects/pavlovia.py.orig +0 -1295
- psychopy/tests/.DS_Store +0 -0
- psychopy/tests/data/.DS_Store +0 -0
- psychopy/tests/data/TestCircle_fill_local.png +0 -0
- psychopy/tests/data/aperture1_normHexbackground_local.png +0 -0
- psychopy/tests/data/aperture1_norm_local.png +0 -0
- psychopy/tests/data/aperture2_normHexbackground_local.png +0 -0
- psychopy/tests/data/beatandrcos_height_local.png +0 -0
- psychopy/tests/data/beatandrcos_normAddBlend_local.png +0 -0
- psychopy/tests/data/beatandrcos_normHexbackground_local.png +0 -0
- psychopy/tests/data/beatandrcos_norm_local.png +0 -0
- psychopy/tests/data/beatandrcos_stencil_local.png +0 -0
- psychopy/tests/data/blend_add_height_local.png +0 -0
- psychopy/tests/data/blend_add_normAddBlend_local.png +0 -0
- psychopy/tests/data/blend_add_normHexbackground_local.png +0 -0
- psychopy/tests/data/blend_add_normNoShade_local.png +0 -0
- psychopy/tests/data/blend_add_norm_local.png +0 -0
- psychopy/tests/data/blend_add_stencil_local.png +0 -0
- psychopy/tests/data/bufferimg_gabor_height_local.png +0 -0
- psychopy/tests/data/bufferimg_gabor_normAddBlend_local.png +0 -0
- psychopy/tests/data/bufferimg_gabor_normHexbackground_local.png +0 -0
- psychopy/tests/data/bufferimg_gabor_normNoShade_local.png +0 -0
- psychopy/tests/data/bufferimg_gabor_norm_local.png +0 -0
- psychopy/tests/data/bufferimg_gabor_stencil_local.png +0 -0
- psychopy/tests/data/circleHex_height_local.png +0 -0
- psychopy/tests/data/circleHex_normAddBlend_local.png +0 -0
- psychopy/tests/data/circleHex_normHexbackground_local.png +0 -0
- psychopy/tests/data/circleHex_normNoShade_local.png +0 -0
- psychopy/tests/data/circleHex_norm_local.png +0 -0
- psychopy/tests/data/circleHex_stencil_local.png +0 -0
- psychopy/tests/data/color_comparison_local.png +0 -0
- psychopy/tests/data/correctScript/.DS_Store +0 -0
- psychopy/tests/data/dots_height_local.png +0 -0
- psychopy/tests/data/dots_normAddBlend_local.png +0 -0
- psychopy/tests/data/dots_normHexbackground_local.png +0 -0
- psychopy/tests/data/dots_normNoShade_local.png +0 -0
- psychopy/tests/data/dots_norm_local.png +0 -0
- psychopy/tests/data/dots_stencil_local.png +0 -0
- psychopy/tests/data/elarray1_height_local.png +0 -0
- psychopy/tests/data/elarray1_normAddBlend_local.png +0 -0
- psychopy/tests/data/elarray1_normHexbackground_local.png +0 -0
- psychopy/tests/data/elarray1_norm_local.png +0 -0
- psychopy/tests/data/elarray1_stencil_local.png +0 -0
- psychopy/tests/data/envelopeandrcos_height_local.png +0 -0
- psychopy/tests/data/envelopeandrcos_normAddBlend_local.png +0 -0
- psychopy/tests/data/envelopeandrcos_normHexbackground_local.png +0 -0
- psychopy/tests/data/envelopeandrcos_norm_local.png +0 -0
- psychopy/tests/data/envelopeandrcos_stencil_local.png +0 -0
- psychopy/tests/data/envelopepowerandrcos_height_local.png +0 -0
- psychopy/tests/data/envelopepowerandrcos_normAddBlend_local.png +0 -0
- psychopy/tests/data/envelopepowerandrcos_normHexbackground_local.png +0 -0
- psychopy/tests/data/envelopepowerandrcos_norm_local.png +0 -0
- psychopy/tests/data/envelopepowerandrcos_stencil_local.png +0 -0
- psychopy/tests/data/gabor1_height_local.png +0 -0
- psychopy/tests/data/gabor1_normAddBlend_local.png +0 -0
- psychopy/tests/data/gabor1_normHexbackground_local.png +0 -0
- psychopy/tests/data/gabor1_normNoShade_local.png +0 -0
- psychopy/tests/data/gabor1_norm_local.png +0 -0
- psychopy/tests/data/gabor1_stencil_local.png +0 -0
- psychopy/tests/data/greyscale_normHexbackground_local.png +0 -0
- psychopy/tests/data/imageAndGauss_height_local.png +0 -0
- psychopy/tests/data/imageAndGauss_normAddBlend_local.png +0 -0
- psychopy/tests/data/imageAndGauss_normHexbackground_local.png +0 -0
- psychopy/tests/data/imageAndGauss_normNoShade_local.png +0 -0
- psychopy/tests/data/imageAndGauss_norm_local.png +0 -0
- psychopy/tests/data/imageAndGauss_stencil_local.png +0 -0
- psychopy/tests/data/movFrame1_stencil_local.png +0 -0
- psychopy/tests/data/noiseAndRcos_height_local.png +0 -0
- psychopy/tests/data/noiseAndRcos_normAddBlend_local.png +0 -0
- psychopy/tests/data/noiseAndRcos_normHexbackground_local.png +0 -0
- psychopy/tests/data/noiseAndRcos_normNoShade_local.png +0 -0
- psychopy/tests/data/noiseAndRcos_norm_local.png +0 -0
- psychopy/tests/data/noiseAndRcos_stencil_local.png +0 -0
- psychopy/tests/data/noiseFiltersAndRcos_height_local.png +0 -0
- psychopy/tests/data/noiseFiltersAndRcos_normAddBlend_local.png +0 -0
- psychopy/tests/data/noiseFiltersAndRcos_normHexbackground_local.png +0 -0
- psychopy/tests/data/noiseFiltersAndRcos_normNoShade_local.png +0 -0
- psychopy/tests/data/noiseFiltersAndRcos_norm_local.png +0 -0
- psychopy/tests/data/noiseFiltersAndRcos_stencil_local.png +0 -0
- psychopy/tests/data/numpyImage_height_local.png +0 -0
- psychopy/tests/data/numpyImage_normAddBlend_local.png +0 -0
- psychopy/tests/data/numpyImage_normHexbackground_local.png +0 -0
- psychopy/tests/data/numpyImage_normNoShade_local.png +0 -0
- psychopy/tests/data/numpyImage_norm_local.png +0 -0
- psychopy/tests/data/numpyImage_stencil_local.png +0 -0
- psychopy/tests/data/shape2_1_normAddBlend_local.png +0 -0
- psychopy/tests/data/shape2_1_normHexbackground_local.png +0 -0
- psychopy/tests/data/shape2_1_normNoShade_local.png +0 -0
- psychopy/tests/data/shape2_1_norm_local.png +0 -0
- psychopy/tests/data/shape2_1_stencil_local.png +0 -0
- psychopy/tests/data/text1_height_local.png +0 -0
- psychopy/tests/data/text1_normAddBlend_local.png +0 -0
- psychopy/tests/data/text1_normHexbackground_local.png +0 -0
- psychopy/tests/data/text1_norm_local.png +0 -0
- psychopy/tests/data/text1_stencil_local.png +0 -0
- psychopy/tests/data/wedge1_height_local.png +0 -0
- psychopy/tests/data/wedge1_normAddBlend_local.png +0 -0
- psychopy/tests/data/wedge1_normHexbackground_local.png +0 -0
- psychopy/tests/data/wedge1_normNoShade_local.png +0 -0
- psychopy/tests/data/wedge1_norm_local.png +0 -0
- psychopy/tests/data/wedge1_stencil_local.png +0 -0
- psychopy/tests/test_app/.DS_Store +0 -0
- psychopy/tests/test_app/test_builder/.DS_Store +0 -0
- psychopy/tests/test_app/test_builder/data/_2021_ 5_03_1206.log +0 -177
- psychopy/tests/test_app/test_builder/data/_2021_ 5_03_1206.psydat +0 -0
- psychopy/tests/test_app/test_builder/data/_2021_ 5_03_1206.xlsx +0 -0
- psychopy/tests/test_app/test_builder/data/_2021_ 5_03_1324.log +0 -168
- psychopy/tests/test_app/test_builder/data/_2021_ 5_03_1324.psydat +0 -0
- psychopy/tests/test_app/test_builder/data/_2021_ 5_03_1324.xlsx +0 -0
- psychopy/tests/test_data/.DS_Store +0 -0
- psychopy/tests/test_hardware/test_CRS_BitsSharp.py +0 -67
- psychopy/tests/test_hardware/test_CRS_BitsSharp.py.orig +0 -68
- psychopy/tests/test_hardware/test_CRS_bitsShaders.py +0 -110
- psychopy/tests/test_visual/test_image.py.orig +0 -219
- psychopy/visual/basevisual.py.orig +0 -1723
- psychopy/visual/form.py.orig +0 -1181
- psychopy/visual/text.py.orig +0 -752
- psychopy/visual/textbox2/textbox2.py.orig +0 -1315
- psychopy/visual/windowwarp.py.orig +0 -463
- /psychopy/{app/cortex.log → alerts/alertsCatalogue/3600.yaml} +0 -0
- /psychopy/{app/Resources → assets}/fonts/Arvo-Bold.ttf +0 -0
- /psychopy/{app/Resources → assets}/fonts/Arvo-BoldItalic.ttf +0 -0
- /psychopy/{app/Resources → assets}/fonts/Arvo-Italic.ttf +0 -0
- /psychopy/{app/Resources → assets}/fonts/Arvo-Regular.ttf +0 -0
- /psychopy/{app/Resources → assets}/fonts/DejaVuSerif.ttf +0 -0
- /psychopy/{app/Resources → assets}/fonts/IndieFlower-Regular.ttf +0 -0
- /psychopy/{app/Resources → assets}/fonts/JetBrainsMono-Italic-VariableFont_wght.ttf +0 -0
- /psychopy/{app/Resources → assets}/fonts/JetBrainsMono-VariableFont_wght.ttf +0 -0
- /psychopy/demos/builder/Experiments/{GoNoGo → goNoGo}/readme.md +0 -0
- {psychopy-2024.2.5.dist-info → psychopy-2025.1.1.dist-info}/entry_points.txt +0 -0
- {psychopy-2024.2.5.dist-info → psychopy-2025.1.1.dist-info}/licenses/LICENSE +0 -0
psychopy/visual/aperture.py
CHANGED
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
"""
|
|
6
6
|
|
|
7
7
|
# Part of the PsychoPy library
|
|
8
|
-
# Copyright (C) 2002-2018 Jonathan Peirce (C) 2019-
|
|
8
|
+
# Copyright (C) 2002-2018 Jonathan Peirce (C) 2019-2025 Open Science Tools Ltd.
|
|
9
9
|
# Distributed under the terms of the GNU General Public License (GPL).
|
|
10
10
|
|
|
11
11
|
import os
|
|
@@ -26,7 +26,7 @@ import psychopy.event
|
|
|
26
26
|
# (JWP has no idea why!)
|
|
27
27
|
from psychopy.tools.monitorunittools import cm2pix, deg2pix, convertToPix
|
|
28
28
|
from psychopy.tools.attributetools import attributeSetter, setAttribute
|
|
29
|
-
from psychopy.visual.shape import
|
|
29
|
+
from psychopy.visual.shape import ShapeStim, knownShapes
|
|
30
30
|
from psychopy.visual.image import ImageStim
|
|
31
31
|
from psychopy.visual.basevisual import MinimalStim, ContainerMixin, WindowMixin
|
|
32
32
|
|
|
@@ -102,7 +102,7 @@ class Aperture(MinimalStim, ContainerMixin):
|
|
|
102
102
|
win=self.win, image=self.__dict__['filename'],
|
|
103
103
|
pos=pos, size=size, autoLog=False, units=self.units)
|
|
104
104
|
else:
|
|
105
|
-
self._shape =
|
|
105
|
+
self._shape = ShapeStim(
|
|
106
106
|
win=self.win, vertices=vertices, fillColor=1, lineColor=None, colorSpace='rgb',
|
|
107
107
|
interpolate=False, pos=pos, size=size, anchor=anchor, autoLog=False, units=self.units)
|
|
108
108
|
self.vertices = self._shape.vertices
|
|
@@ -134,7 +134,9 @@ class Aperture(MinimalStim, ContainerMixin):
|
|
|
134
134
|
GL.glClearStencil(0)
|
|
135
135
|
GL.glClear(GL.GL_STENCIL_BUFFER_BIT)
|
|
136
136
|
|
|
137
|
-
|
|
137
|
+
if self.win.USE_LEGACY_GL:
|
|
138
|
+
GL.glPushMatrix()
|
|
139
|
+
|
|
138
140
|
if self.__dict__['filename'] == False:
|
|
139
141
|
self.win.setScale('pix')
|
|
140
142
|
|
|
@@ -159,7 +161,8 @@ class Aperture(MinimalStim, ContainerMixin):
|
|
|
159
161
|
GL.glStencilFunc(GL.GL_EQUAL, 1, 1)
|
|
160
162
|
GL.glStencilOp(GL.GL_KEEP, GL.GL_KEEP, GL.GL_KEEP)
|
|
161
163
|
|
|
162
|
-
|
|
164
|
+
if self.win.USE_LEGACY_GL:
|
|
165
|
+
GL.glPopMatrix()
|
|
163
166
|
|
|
164
167
|
@property
|
|
165
168
|
def size(self):
|
|
@@ -327,4 +330,4 @@ class Aperture(MinimalStim, ContainerMixin):
|
|
|
327
330
|
try:
|
|
328
331
|
self.enabled = False
|
|
329
332
|
except (ImportError, ModuleNotFoundError, TypeError):
|
|
330
|
-
pass # trying to avoid 'Exception ignored in: ....' error from pyglet when experiment exits
|
|
333
|
+
pass # trying to avoid 'Exception ignored in: ....' error from pyglet when experiment exits
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
# -*- coding: utf-8 -*-
|
|
3
3
|
|
|
4
4
|
# Part of the PsychoPy library
|
|
5
|
-
# Copyright (C) 2002-2018 Jonathan Peirce (C) 2019-
|
|
5
|
+
# Copyright (C) 2002-2018 Jonathan Peirce (C) 2019-2025 Open Science Tools Ltd.
|
|
6
6
|
# Distributed under the terms of the GNU General Public License (GPL).
|
|
7
7
|
|
|
8
8
|
"""Backends provide the window creation and flipping commands.
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
# -*- coding: utf-8 -*-
|
|
3
3
|
|
|
4
4
|
# Part of the PsychoPy library
|
|
5
|
-
# Copyright (C) 2002-2018 Jonathan Peirce (C) 2019-
|
|
5
|
+
# Copyright (C) 2002-2018 Jonathan Peirce (C) 2019-2025 Open Science Tools Ltd.
|
|
6
6
|
# Distributed under the terms of the GNU General Public License (GPL).
|
|
7
7
|
|
|
8
8
|
"""A Backend class defines the core low-level functions required by a Window
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
# -*- coding: utf-8 -*-
|
|
3
3
|
|
|
4
4
|
# Part of the PsychoPy library
|
|
5
|
-
# Copyright (C) 2002-2018 Jonathan Peirce (C) 2019-
|
|
5
|
+
# Copyright (C) 2002-2018 Jonathan Peirce (C) 2019-2025 Open Science Tools Ltd.
|
|
6
6
|
# Distributed under the terms of the GNU General Public License (GPL).
|
|
7
7
|
|
|
8
8
|
# set the gamma LUT using platform-specific hardware calls
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
# -*- coding: utf-8 -*-
|
|
3
3
|
|
|
4
4
|
# Part of the PsychoPy library
|
|
5
|
-
# Copyright (C) 2002-2018 Jonathan Peirce (C) 2019-
|
|
5
|
+
# Copyright (C) 2002-2018 Jonathan Peirce (C) 2019-2025 Open Science Tools Ltd.
|
|
6
6
|
# Distributed under the terms of the GNU General Public License (GPL).
|
|
7
7
|
|
|
8
8
|
"""A Backend class defines the core low-level functions required by a Window
|
|
@@ -12,17 +12,13 @@ used by backends.getBackend(winType) which will locate the appropriate class
|
|
|
12
12
|
and initialize an instance using the attributes of the Window.
|
|
13
13
|
"""
|
|
14
14
|
|
|
15
|
-
import psychopy.logging as logging
|
|
16
15
|
|
|
17
|
-
|
|
18
|
-
from psychopy_glfw import GLFWBackend
|
|
19
|
-
except (ModuleNotFoundError, ImportError):
|
|
20
|
-
logging.warning(
|
|
21
|
-
"GLFW window backend support is not installed. To get support, install "
|
|
22
|
-
"the `psychopy-glfw` package and restart your session."
|
|
23
|
-
)
|
|
24
|
-
logging.flush()
|
|
16
|
+
from psychopy.plugins import PluginStub
|
|
25
17
|
|
|
26
18
|
|
|
27
|
-
|
|
28
|
-
|
|
19
|
+
class GLFWBackend(
|
|
20
|
+
PluginStub,
|
|
21
|
+
plugin="psychopy-glfw",
|
|
22
|
+
docsHome="https://github.com/psychopy/psychopy-glfw",
|
|
23
|
+
):
|
|
24
|
+
pass
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
# -*- coding: utf-8 -*-
|
|
3
3
|
|
|
4
4
|
# Part of the PsychoPy library
|
|
5
|
-
# Copyright (C) 2002-2018 Jonathan Peirce (C) 2019-
|
|
5
|
+
# Copyright (C) 2002-2018 Jonathan Peirce (C) 2019-2025 Open Science Tools Ltd.
|
|
6
6
|
# Distributed under the terms of the GNU General Public License (GPL).
|
|
7
7
|
|
|
8
8
|
"""A Backend class defines the core low-level functions required by a Window
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
# -*- coding: utf-8 -*-
|
|
3
3
|
|
|
4
4
|
# Part of the PsychoPy library
|
|
5
|
-
# Copyright (C) 2002-2018 Jonathan Peirce (C) 2019-
|
|
5
|
+
# Copyright (C) 2002-2018 Jonathan Peirce (C) 2019-2025 Open Science Tools Ltd.
|
|
6
6
|
# Distributed under the terms of the GNU General Public License (GPL).
|
|
7
7
|
|
|
8
8
|
"""A Backend class defines the core low-level functions required by a Window
|
|
@@ -46,6 +46,9 @@ if pyglet.version < '1.4':
|
|
|
46
46
|
else:
|
|
47
47
|
_default_display_ = pyglet.canvas.get_display()
|
|
48
48
|
|
|
49
|
+
USE_LEGACY_GL = pyglet.version < '2.0'
|
|
50
|
+
|
|
51
|
+
|
|
49
52
|
# Cursors available to pyglet. These are used to map string names to symbolic
|
|
50
53
|
# constants used to specify which cursor to use.
|
|
51
54
|
_PYGLET_CURSORS_ = {
|
|
@@ -139,11 +142,13 @@ class PygletBackend(BaseBackend):
|
|
|
139
142
|
win.stereo = False
|
|
140
143
|
|
|
141
144
|
if sys.platform == 'darwin' and not win.useRetina and pyglet.version >= "1.3":
|
|
142
|
-
|
|
145
|
+
logging.warn(
|
|
143
146
|
"As of PsychoPy 1.85.3 OSX windows should all be set to "
|
|
144
147
|
"`useRetina=True` (or remove the argument). Pyglet 1.3 appears "
|
|
145
148
|
"to be forcing us to use retina on any retina-capable screen "
|
|
146
|
-
"so setting to False has no effect."
|
|
149
|
+
"so setting to False has no effect."
|
|
150
|
+
)
|
|
151
|
+
win.useRetina = True
|
|
147
152
|
|
|
148
153
|
# window framebuffer configuration
|
|
149
154
|
bpc = backendConf.get('bpc', (8, 8, 8))
|
|
@@ -385,6 +390,17 @@ class PygletBackend(BaseBackend):
|
|
|
385
390
|
|
|
386
391
|
# store properties of the system
|
|
387
392
|
self._driver = pyglet.gl.gl_info.get_renderer()
|
|
393
|
+
logging.info("Using renderer '{}' for graphics".format(self._driver))
|
|
394
|
+
|
|
395
|
+
# report the OpenGL version
|
|
396
|
+
glVersion = pyglet.gl.gl_info.get_version()
|
|
397
|
+
logging.info("OpenGL version supported by driver is {}.{}".format(
|
|
398
|
+
glVersion[0], glVersion[1]))
|
|
399
|
+
|
|
400
|
+
if int(glVersion[0]) < 2:
|
|
401
|
+
raise RuntimeError(
|
|
402
|
+
"OpenGL version 2.0 or higher is required! Please update your "
|
|
403
|
+
"graphics drivers or use a different backend.")
|
|
388
404
|
|
|
389
405
|
@property
|
|
390
406
|
def frameBufferSize(self):
|
|
@@ -394,7 +410,7 @@ class PygletBackend(BaseBackend):
|
|
|
394
410
|
@property
|
|
395
411
|
def shadersSupported(self):
|
|
396
412
|
# on pyglet shaders are fine so just check GL>2.0
|
|
397
|
-
return pyglet.gl.gl_info.get_version() >=
|
|
413
|
+
return int(pyglet.gl.gl_info.get_version()[0]) >= 2
|
|
398
414
|
|
|
399
415
|
def swapBuffers(self, flipThisFrame=True):
|
|
400
416
|
"""Performs various hardware events around the window flip and then
|
|
@@ -409,7 +425,9 @@ class PygletBackend(BaseBackend):
|
|
|
409
425
|
self.winHandle.switch_to()
|
|
410
426
|
globalVars.currWindow = self
|
|
411
427
|
|
|
412
|
-
|
|
428
|
+
# DEPRECATED: this is now done in the Window class
|
|
429
|
+
if USE_LEGACY_GL:
|
|
430
|
+
GL.glTranslatef(0.0, 0.0, -5.0)
|
|
413
431
|
|
|
414
432
|
for dispatcher in self.win._eventDispatchers:
|
|
415
433
|
try:
|
|
@@ -941,9 +959,12 @@ def _onResize(width, height):
|
|
|
941
959
|
back_width, back_height = width, height
|
|
942
960
|
|
|
943
961
|
GL.glViewport(0, 0, back_width, back_height)
|
|
944
|
-
|
|
945
|
-
|
|
946
|
-
|
|
947
|
-
|
|
948
|
-
|
|
949
|
-
|
|
962
|
+
|
|
963
|
+
# DEPRECATED - this is now done with matrices we compute
|
|
964
|
+
if USE_LEGACY_GL:
|
|
965
|
+
GL.glMatrixMode(GL.GL_PROJECTION)
|
|
966
|
+
GL.glLoadIdentity()
|
|
967
|
+
GL.glOrtho(-1, 1, -1, 1, -1, 1)
|
|
968
|
+
# GL.gluPerspective(90, 1.0 * width / height, 0.1, 100.0)
|
|
969
|
+
GL.glMatrixMode(GL.GL_MODELVIEW)
|
|
970
|
+
GL.glLoadIdentity()
|
psychopy/visual/basevisual.py
CHANGED
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
"""
|
|
6
6
|
|
|
7
7
|
# Part of the PsychoPy library
|
|
8
|
-
# Copyright (C) 2002-2018 Jonathan Peirce (C) 2019-
|
|
8
|
+
# Copyright (C) 2002-2018 Jonathan Peirce (C) 2019-2025 Open Science Tools Ltd.
|
|
9
9
|
# Distributed under the terms of the GNU General Public License (GPL).
|
|
10
10
|
|
|
11
11
|
from pathlib import Path
|
|
@@ -1155,12 +1155,12 @@ class TextureMixin:
|
|
|
1155
1155
|
stim.win.glVendor.startswith('nvidia')):
|
|
1156
1156
|
# nvidia under win/linux might not support 32bit float
|
|
1157
1157
|
# could use GL_LUMINANCE32F_ARB here but check shader code?
|
|
1158
|
-
internalFormat = GL.
|
|
1158
|
+
internalFormat = GL.GL_RGB16F
|
|
1159
1159
|
else:
|
|
1160
1160
|
# we've got a mac or an ATI card and can handle
|
|
1161
1161
|
# 32bit float textures
|
|
1162
1162
|
# could use GL_LUMINANCE32F_ARB here but check shader code?
|
|
1163
|
-
internalFormat = GL.
|
|
1163
|
+
internalFormat = GL.GL_RGB32F
|
|
1164
1164
|
# initialise data array as a float
|
|
1165
1165
|
data = numpy.ones((intensity.shape[0], intensity.shape[1], 3),
|
|
1166
1166
|
numpy.float32)
|
|
@@ -1180,7 +1180,7 @@ class TextureMixin:
|
|
|
1180
1180
|
data[:, :, 2] = intensity # B
|
|
1181
1181
|
elif pixFormat == GL.GL_RGB and dataType == GL.GL_FLOAT:
|
|
1182
1182
|
# probably a custom rgb array or rgb image
|
|
1183
|
-
internalFormat = GL.
|
|
1183
|
+
internalFormat = GL.GL_RGB32F
|
|
1184
1184
|
data = intensity
|
|
1185
1185
|
elif pixFormat == GL.GL_RGB:
|
|
1186
1186
|
# not wasLum, not useShaders - an RGB bitmap with no shader
|
|
@@ -1203,8 +1203,8 @@ class TextureMixin:
|
|
|
1203
1203
|
pixFormat = GL.GL_RGBA
|
|
1204
1204
|
if internalFormat == GL.GL_RGB:
|
|
1205
1205
|
internalFormat = GL.GL_RGBA
|
|
1206
|
-
elif internalFormat == GL.
|
|
1207
|
-
internalFormat = GL.
|
|
1206
|
+
elif internalFormat == GL.GL_RGB32F:
|
|
1207
|
+
internalFormat = GL.GL_RGBA32F
|
|
1208
1208
|
texture = data.ctypes # serialise
|
|
1209
1209
|
|
|
1210
1210
|
# Create the pixel buffer object which will serve as the texture memory
|
|
@@ -1242,9 +1242,9 @@ class TextureMixin:
|
|
|
1242
1242
|
GL.GL_TEXTURE_2D, GL.GL_TEXTURE_WRAP_T, GL.GL_REPEAT)
|
|
1243
1243
|
else:
|
|
1244
1244
|
GL.glTexParameteri(
|
|
1245
|
-
GL.GL_TEXTURE_2D, GL.GL_TEXTURE_WRAP_S, GL.
|
|
1245
|
+
GL.GL_TEXTURE_2D, GL.GL_TEXTURE_WRAP_S, GL.GL_CLAMP_TO_BORDER)
|
|
1246
1246
|
GL.glTexParameteri(
|
|
1247
|
-
GL.GL_TEXTURE_2D, GL.GL_TEXTURE_WRAP_T, GL.
|
|
1247
|
+
GL.GL_TEXTURE_2D, GL.GL_TEXTURE_WRAP_T, GL.GL_CLAMP_TO_BORDER)
|
|
1248
1248
|
# data from PIL/numpy is packed, but default for GL is 4 bytes
|
|
1249
1249
|
GL.glPixelStorei(GL.GL_UNPACK_ALIGNMENT, 1)
|
|
1250
1250
|
# important if using bits++ because GL_LINEAR
|
|
@@ -1252,11 +1252,8 @@ class TextureMixin:
|
|
|
1252
1252
|
if interpolate:
|
|
1253
1253
|
GL.glTexParameteri(
|
|
1254
1254
|
GL.GL_TEXTURE_2D, GL.GL_TEXTURE_MAG_FILTER, GL.GL_LINEAR)
|
|
1255
|
-
# GL_GENERATE_MIPMAP was only available from OpenGL 1.4
|
|
1256
1255
|
GL.glTexParameteri(
|
|
1257
1256
|
GL.GL_TEXTURE_2D, GL.GL_TEXTURE_MIN_FILTER, GL.GL_LINEAR)
|
|
1258
|
-
GL.glTexParameteri(GL.GL_TEXTURE_2D, GL.GL_GENERATE_MIPMAP,
|
|
1259
|
-
GL.GL_TRUE)
|
|
1260
1257
|
GL.glTexImage2D(GL.GL_TEXTURE_2D, 0, internalFormat,
|
|
1261
1258
|
data.shape[1], data.shape[0], 0,
|
|
1262
1259
|
pixFormat, dataType, texture)
|
|
@@ -1268,9 +1265,10 @@ class TextureMixin:
|
|
|
1268
1265
|
GL.glTexImage2D(GL.GL_TEXTURE_2D, 0, internalFormat,
|
|
1269
1266
|
data.shape[1], data.shape[0], 0,
|
|
1270
1267
|
pixFormat, dataType, texture)
|
|
1268
|
+
GL.glGenerateMipmap(GL.GL_TEXTURE_2D)
|
|
1271
1269
|
|
|
1272
|
-
GL.glTexEnvi(GL.GL_TEXTURE_ENV, GL.GL_TEXTURE_ENV_MODE,
|
|
1273
|
-
|
|
1270
|
+
# GL.glTexEnvi(GL.GL_TEXTURE_ENV, GL.GL_TEXTURE_ENV_MODE,
|
|
1271
|
+
# GL.GL_MODULATE) # ?? do we need this - think not!
|
|
1274
1272
|
# unbind our texture so that it doesn't affect other rendering
|
|
1275
1273
|
GL.glBindTexture(GL.GL_TEXTURE_2D, 0)
|
|
1276
1274
|
|
|
@@ -1661,6 +1659,69 @@ class WindowMixin:
|
|
|
1661
1659
|
self._updateListShaders()
|
|
1662
1660
|
|
|
1663
1661
|
|
|
1662
|
+
class PointerMixin:
|
|
1663
|
+
"""Mixin class to handle mouse/pointer interaction with an object.
|
|
1664
|
+
|
|
1665
|
+
Attributes
|
|
1666
|
+
==========
|
|
1667
|
+
clickable : bool
|
|
1668
|
+
This attribute determines whether the stimulus can be clicked on and
|
|
1669
|
+
trigger the `onMouse` method.
|
|
1670
|
+
|
|
1671
|
+
Methods
|
|
1672
|
+
=======
|
|
1673
|
+
containsPointer
|
|
1674
|
+
Check if the mouse is within the stimulus boundaries.
|
|
1675
|
+
doClickActions
|
|
1676
|
+
Handle mouse interaction with the stimulus. This is called by the
|
|
1677
|
+
`Window` object each frame to update the stimulus based on mouse
|
|
1678
|
+
interactions.
|
|
1679
|
+
|
|
1680
|
+
"""
|
|
1681
|
+
def containsPointer(self):
|
|
1682
|
+
"""Check if the mouse is within the stimulus boundaries.
|
|
1683
|
+
|
|
1684
|
+
Returns
|
|
1685
|
+
-------
|
|
1686
|
+
bool
|
|
1687
|
+
Whether the mouse is within the stimulus.
|
|
1688
|
+
|
|
1689
|
+
"""
|
|
1690
|
+
if not isinstance(self.mouse, Mouse):
|
|
1691
|
+
self.mouse = Mouse(visible=self.win.mouseVisible, win=self.win)
|
|
1692
|
+
|
|
1693
|
+
# Check if mouse is within vertices
|
|
1694
|
+
return self.mouse.isPressedIn(self, buttons=[0])
|
|
1695
|
+
|
|
1696
|
+
def doPointerActions(self):
|
|
1697
|
+
"""Handle mouse interaction with the stimulus.
|
|
1698
|
+
|
|
1699
|
+
This method should be called each frame to update the stimulus based
|
|
1700
|
+
on mouse interactions.
|
|
1701
|
+
|
|
1702
|
+
"""
|
|
1703
|
+
# If the stimulus is clickable and the mouse is within the stimulus
|
|
1704
|
+
if self.clickable and self.containsPointer():
|
|
1705
|
+
if not hasattr(self, '_onMouse'):
|
|
1706
|
+
return
|
|
1707
|
+
|
|
1708
|
+
self._onMouse()
|
|
1709
|
+
|
|
1710
|
+
@attributeSetter
|
|
1711
|
+
def clickable(self, value):
|
|
1712
|
+
"""Whether the stimulus can be clicked on.
|
|
1713
|
+
|
|
1714
|
+
If set to `True`, the stimulus will be checked for mouse clicks
|
|
1715
|
+
and the `_onMouse` method will be called if the stimulus is clicked.
|
|
1716
|
+
|
|
1717
|
+
"""
|
|
1718
|
+
# if we don't have reference to a mouse, make one
|
|
1719
|
+
if not isinstance(self.mouse, Mouse):
|
|
1720
|
+
self.mouse = Mouse(visible=self.win.mouseVisible, win=self.win)
|
|
1721
|
+
|
|
1722
|
+
self.__dict__['clickable'] = value
|
|
1723
|
+
|
|
1724
|
+
|
|
1664
1725
|
class DraggingMixin:
|
|
1665
1726
|
"""
|
|
1666
1727
|
Mixin to give an object innate dragging behaviour.
|
|
@@ -1944,3 +2005,22 @@ class BaseVisualStim(MinimalStim, WindowMixin, LegacyVisualMixin):
|
|
|
1944
2005
|
# For DotStim
|
|
1945
2006
|
if attrib in ('nDots', 'coherence'):
|
|
1946
2007
|
self.coherence = round(self.coherence * self.nDots) / self.nDots
|
|
2008
|
+
|
|
2009
|
+
@attributeSetter
|
|
2010
|
+
def alphaThreshold(self, value):
|
|
2011
|
+
"""Threshold for alpha values.
|
|
2012
|
+
|
|
2013
|
+
If the alpha value of a pixel is below this threshold, the pixel will
|
|
2014
|
+
be rejected (not drawn). This can be useful for creating a mask from
|
|
2015
|
+
an image with an alpha channel. The default value is 0.0, which means
|
|
2016
|
+
that no thresholding will be applied.
|
|
2017
|
+
|
|
2018
|
+
"""
|
|
2019
|
+
self.__dict__['alphaThreshold'] = value
|
|
2020
|
+
|
|
2021
|
+
def setAlphaThreshold(self, value, log=None):
|
|
2022
|
+
"""Usually you can use 'stim.attribute = value' syntax instead,
|
|
2023
|
+
but use this method if you need to suppress the log message.
|
|
2024
|
+
"""
|
|
2025
|
+
setAttribute(self, 'alphaThreshold', value, log)
|
|
2026
|
+
|
psychopy/visual/brush.py
CHANGED
|
@@ -6,7 +6,7 @@ Inspired by rockNroll87q - https://github.com/rockNroll87q/pyDrawing
|
|
|
6
6
|
"""
|
|
7
7
|
|
|
8
8
|
# Part of the PsychoPy library
|
|
9
|
-
# Copyright (C) 2002-2018 Jonathan Peirce (C) 2019-
|
|
9
|
+
# Copyright (C) 2002-2018 Jonathan Peirce (C) 2019-2025 Open Science Tools Ltd.
|
|
10
10
|
# Distributed under the terms of the GNU General Public License (GPL).
|
|
11
11
|
|
|
12
12
|
from psychopy import event, logging
|
psychopy/visual/bufferimage.py
CHANGED
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
RBGA object.`"""
|
|
6
6
|
|
|
7
7
|
# Part of the PsychoPy library
|
|
8
|
-
# Copyright (C) 2002-2018 Jonathan Peirce (C) 2019-
|
|
8
|
+
# Copyright (C) 2002-2018 Jonathan Peirce (C) 2019-2025 Open Science Tools Ltd.
|
|
9
9
|
# Distributed under the terms of the GNU General Public License (GPL).
|
|
10
10
|
|
|
11
11
|
|
|
@@ -27,6 +27,8 @@ from psychopy import core, logging
|
|
|
27
27
|
from psychopy.tools.attributetools import attributeSetter, setAttribute
|
|
28
28
|
from psychopy.tools.typetools import float_uint8
|
|
29
29
|
from psychopy.visual.image import ImageStim
|
|
30
|
+
from psychopy.tools import mathtools as mt
|
|
31
|
+
from psychopy.tools import gltools as gt
|
|
30
32
|
|
|
31
33
|
try:
|
|
32
34
|
from PIL import Image
|
|
@@ -143,7 +145,7 @@ class BufferImageStim(ImageStim):
|
|
|
143
145
|
|
|
144
146
|
# take a screenshot of the buffer using win._getRegionOfFrame():
|
|
145
147
|
glversion = pyglet.gl.gl_info.get_version()
|
|
146
|
-
if
|
|
148
|
+
if not sqPower2:
|
|
147
149
|
region = win._getRegionOfFrame(buffer=buffer, rect=rect)
|
|
148
150
|
else:
|
|
149
151
|
if not sqPower2:
|
|
@@ -206,6 +208,21 @@ class BufferImageStim(ImageStim):
|
|
|
206
208
|
"""
|
|
207
209
|
setAttribute(self, 'flipVert', newVal, log) # call attributeSetter
|
|
208
210
|
|
|
211
|
+
def _drawLegacyGL(self, win):
|
|
212
|
+
"""Legacy draw method for OpenGL 2.x."""
|
|
213
|
+
GL.glPushMatrix() # preserve state
|
|
214
|
+
# GL.glLoadIdentity()
|
|
215
|
+
|
|
216
|
+
# dynamic flip
|
|
217
|
+
GL.glScalef(self.thisScale[0] * (1, -1)[self.flipHoriz],
|
|
218
|
+
self.thisScale[1] * (1, -1)[self.flipVert], 1.0)
|
|
219
|
+
|
|
220
|
+
# enable dynamic position, orientation, opacity; depth not working?
|
|
221
|
+
GL.glColor4f(*self._foreColor.render('rgba1'))
|
|
222
|
+
|
|
223
|
+
GL.glCallList(self._listID) # make it happen
|
|
224
|
+
GL.glPopMatrix() # return the view to previous state
|
|
225
|
+
|
|
209
226
|
def draw(self, win=None):
|
|
210
227
|
"""Draws the BufferImage on the screen, similar to
|
|
211
228
|
:class:`~psychopy.visual.ImageStim` `.draw()`.
|
|
@@ -217,15 +234,78 @@ class BufferImageStim(ImageStim):
|
|
|
217
234
|
win = self.win
|
|
218
235
|
self._selectWindow(win)
|
|
219
236
|
|
|
220
|
-
|
|
221
|
-
|
|
237
|
+
if win.USE_LEGACY_GL:
|
|
238
|
+
self._drawLegacyGL(win)
|
|
239
|
+
return
|
|
222
240
|
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
self.thisScale[1] * (1, -1)[self.flipVert], 1.0)
|
|
241
|
+
win.setScale('pix')
|
|
242
|
+
win.setOrthographicView()
|
|
226
243
|
|
|
244
|
+
# dynamic flip
|
|
245
|
+
# GL.glScalef(self.thisScale[0] * (1, -1)[self.flipHoriz],
|
|
246
|
+
# self.thisScale[1] * (1, -1)[self.flipVert], 1.0)
|
|
227
247
|
# enable dynamic position, orientation, opacity; depth not working?
|
|
228
|
-
GL.glColor4f(*self._foreColor.render('rgba1'))
|
|
248
|
+
# GL.glColor4f(*self._foreColor.render('rgba1'))
|
|
229
249
|
|
|
230
|
-
|
|
231
|
-
|
|
250
|
+
if self._needTextureUpdate:
|
|
251
|
+
self.setImage(value=self._imName, log=False)
|
|
252
|
+
|
|
253
|
+
if self.isLumImage: # select the appropriate shader
|
|
254
|
+
# for a luminance image do recoloring
|
|
255
|
+
_prog = self.win._progSignedTexMask
|
|
256
|
+
else:
|
|
257
|
+
# for an rgb image there is no recoloring
|
|
258
|
+
_prog = self.win._progImageStim
|
|
259
|
+
|
|
260
|
+
gt.useProgram(_prog)
|
|
261
|
+
|
|
262
|
+
# bind textures
|
|
263
|
+
GL.glEnable(GL.GL_TEXTURE_2D)
|
|
264
|
+
GL.glActiveTexture(GL.GL_TEXTURE1) # mask
|
|
265
|
+
GL.glBindTexture(GL.GL_TEXTURE_2D, self._maskID)
|
|
266
|
+
GL.glActiveTexture(GL.GL_TEXTURE0) # color/lum image
|
|
267
|
+
GL.glBindTexture(GL.GL_TEXTURE_2D, self._texID)
|
|
268
|
+
|
|
269
|
+
scaleMat = mt.scaleMatrix(
|
|
270
|
+
(self.thisScale[0] * (1, -1)[self.flipHoriz],
|
|
271
|
+
self.thisScale[1] * (1, -1)[self.flipVert],
|
|
272
|
+
1.0)
|
|
273
|
+
)
|
|
274
|
+
modelViewMatrix = mt.multMatrix((win.viewMatrix, scaleMat))
|
|
275
|
+
|
|
276
|
+
# set the shader uniforms
|
|
277
|
+
gt.setUniformValue(_prog, b'uTexture', 0, 'int') # is texture unit 0
|
|
278
|
+
gt.setUniformValue(_prog, b'uMask', 1, 'int') # mask is texture unit 1
|
|
279
|
+
gt.setUniformValue(_prog, b'uColor', self._foreColor.render('rgba1'))
|
|
280
|
+
alphaThreshold = getattr(self, 'alphaThreshold', 1.0)
|
|
281
|
+
gt.setUniformValue(
|
|
282
|
+
_prog, b'uAlphaThreshold', alphaThreshold, ignoreNotDefined=True)
|
|
283
|
+
gt.setUniformMatrix(
|
|
284
|
+
_prog,
|
|
285
|
+
'uModelViewMatrix',
|
|
286
|
+
modelViewMatrix,
|
|
287
|
+
transpose=True)
|
|
288
|
+
gt.setUniformMatrix(
|
|
289
|
+
_prog,
|
|
290
|
+
b'uProjectionMatrix',
|
|
291
|
+
win.projectionMatrix,
|
|
292
|
+
transpose=True)
|
|
293
|
+
|
|
294
|
+
# draw the image
|
|
295
|
+
gt.drawClientArrays({
|
|
296
|
+
'gl_Vertex': self.verticesPix,
|
|
297
|
+
'gl_MultiTexCoord0': self._texCoords,
|
|
298
|
+
'gl_MultiTexCoord1': self._maskCoords},
|
|
299
|
+
'GL_QUADS')
|
|
300
|
+
|
|
301
|
+
gt.useProgram(None)
|
|
302
|
+
|
|
303
|
+
# unbind the textures
|
|
304
|
+
GL.glActiveTexture(GL.GL_TEXTURE1)
|
|
305
|
+
GL.glBindTexture(GL.GL_TEXTURE_2D, 0)
|
|
306
|
+
GL.glActiveTexture(GL.GL_TEXTURE0)
|
|
307
|
+
GL.glBindTexture(GL.GL_TEXTURE_2D, 0)
|
|
308
|
+
GL.glDisable(GL.GL_TEXTURE_2D)
|
|
309
|
+
|
|
310
|
+
# GL.glCallList(self._listID) # make it happen
|
|
311
|
+
# GL.glPopMatrix() # return the view to previous state
|
psychopy/visual/button.py
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
"""Creates a button"""
|
|
5
5
|
|
|
6
6
|
# Part of the PsychoPy library
|
|
7
|
-
# Copyright (C) 2002-2018 Jonathan Peirce (C) 2019-
|
|
7
|
+
# Copyright (C) 2002-2018 Jonathan Peirce (C) 2019-2025 Open Science Tools Ltd.
|
|
8
8
|
# Distributed under the terms of the GNU General Public License (GPL).
|
|
9
9
|
import numpy as np
|
|
10
10
|
|
psychopy/visual/circle.py
CHANGED
|
@@ -6,11 +6,12 @@ as a special case of a :class:`~psychopy.visual.Polygon`
|
|
|
6
6
|
"""
|
|
7
7
|
|
|
8
8
|
# Part of the PsychoPy library
|
|
9
|
-
# Copyright (C) 2002-2018 Jonathan Peirce (C) 2019-
|
|
9
|
+
# Copyright (C) 2002-2018 Jonathan Peirce (C) 2019-2025 Open Science Tools Ltd.
|
|
10
10
|
# Distributed under the terms of the GNU General Public License (GPL).
|
|
11
11
|
|
|
12
12
|
import psychopy # so we can get the __path__
|
|
13
13
|
|
|
14
|
+
from psychopy.tools.attributetools import undefined
|
|
14
15
|
from psychopy.visual.polygon import Polygon
|
|
15
16
|
|
|
16
17
|
|
|
@@ -39,11 +40,6 @@ class Circle(Polygon):
|
|
|
39
40
|
lineColor, fillColor : array_like, str, :class:`~psychopy.colors.Color` or None
|
|
40
41
|
Color of the circle's outline and fill. If `None`, a fully
|
|
41
42
|
transparent color is used which makes the fill or outline invisible.
|
|
42
|
-
lineColorSpace, fillColorSpace : str
|
|
43
|
-
Colorspace to use for the outline and fill. These change how the
|
|
44
|
-
values passed to `lineColor` and `fillColor` are interpreted.
|
|
45
|
-
*Deprecated*. Please use `colorSpace` to set both outline and fill
|
|
46
|
-
colorspace. These arguments may be removed in a future version.
|
|
47
43
|
pos : array_like
|
|
48
44
|
Initial position (`x`, `y`) of the circle on-screen relative to the
|
|
49
45
|
origin located at the center of the window or buffer in `units`
|
|
@@ -80,9 +76,6 @@ class Circle(Polygon):
|
|
|
80
76
|
produces a smoother (less-pixelated) outline of the shape.
|
|
81
77
|
draggable : bool
|
|
82
78
|
Can this stimulus be dragged by a mouse click?
|
|
83
|
-
lineRGB, fillRGB: array_like, :class:`~psychopy.colors.Color` or None
|
|
84
|
-
*Deprecated*. Please use `lineColor` and `fillColor`. These
|
|
85
|
-
arguments may be removed in a future version.
|
|
86
79
|
name : str
|
|
87
80
|
Optional name of the stimuli for logging.
|
|
88
81
|
autoLog : bool
|
|
@@ -107,17 +100,14 @@ class Circle(Polygon):
|
|
|
107
100
|
|
|
108
101
|
"""
|
|
109
102
|
|
|
110
|
-
_defaultFillColor = "white"
|
|
111
|
-
_defaultLineColor = None
|
|
112
|
-
|
|
113
103
|
def __init__(self,
|
|
114
104
|
win,
|
|
115
105
|
radius=.5,
|
|
116
106
|
edges="circle",
|
|
117
107
|
units='',
|
|
118
108
|
lineWidth=1.5,
|
|
119
|
-
lineColor=
|
|
120
|
-
fillColor=
|
|
109
|
+
lineColor=None,
|
|
110
|
+
fillColor="white",
|
|
121
111
|
colorSpace='rgb',
|
|
122
112
|
pos=(0, 0),
|
|
123
113
|
size=1.0,
|
|
@@ -134,9 +124,9 @@ class Circle(Polygon):
|
|
|
134
124
|
autoLog=None,
|
|
135
125
|
autoDraw=False,
|
|
136
126
|
# legacy
|
|
137
|
-
color=
|
|
138
|
-
fillColorSpace=
|
|
139
|
-
lineColorSpace=
|
|
127
|
+
color=undefined,
|
|
128
|
+
fillColorSpace=undefined,
|
|
129
|
+
lineColorSpace=undefined,
|
|
140
130
|
):
|
|
141
131
|
|
|
142
132
|
# what local vars are defined (these are the init params) for use by
|
|
@@ -152,9 +142,7 @@ class Circle(Polygon):
|
|
|
152
142
|
units=units,
|
|
153
143
|
lineWidth=lineWidth,
|
|
154
144
|
lineColor=lineColor,
|
|
155
|
-
lineColorSpace=lineColorSpace,
|
|
156
145
|
fillColor=fillColor,
|
|
157
|
-
fillColorSpace=fillColorSpace,
|
|
158
146
|
pos=pos,
|
|
159
147
|
size=size,
|
|
160
148
|
anchor=anchor,
|
|
@@ -169,5 +157,9 @@ class Circle(Polygon):
|
|
|
169
157
|
name=name,
|
|
170
158
|
autoLog=autoLog,
|
|
171
159
|
autoDraw=autoDraw,
|
|
160
|
+
colorSpace=colorSpace,
|
|
161
|
+
# legacy
|
|
172
162
|
color=color,
|
|
173
|
-
|
|
163
|
+
fillColorSpace=fillColorSpace,
|
|
164
|
+
lineColorSpace=lineColorSpace,
|
|
165
|
+
)
|
psychopy/visual/custommouse.py
CHANGED
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
including the pointer graphic and bounding box."""
|
|
6
6
|
|
|
7
7
|
# Part of the PsychoPy library
|
|
8
|
-
# Copyright (C) 2002-2018 Jonathan Peirce (C) 2019-
|
|
8
|
+
# Copyright (C) 2002-2018 Jonathan Peirce (C) 2019-2025 Open Science Tools Ltd.
|
|
9
9
|
# Distributed under the terms of the GNU General Public License (GPL).
|
|
10
10
|
|
|
11
11
|
|