* refactor: move button to widgets folder
* refactor: move inputbox to widgets folder
* refactor: move label to widgets folder
* refactor: move list_view to widgets
* refactor: move scroll_panel to widgets
* refactor: move scroller to widgets
* refactor: move toggle to widgets
* refactor: Move widget.py to widgets/__init__.py
* fix: remove extra list_view
* refactor: rearrange some of the imports
* fix: remove extra scroller.py
* fix: Add scroller back
* fix: delete right scroller.py this time
* move scroll_panel back to system/ui/lib
* add todos for label and button
* refactor(raylib): use dictionary to map font weight to file name
* refactor: add space
* refactor: format
* refactor: Switch FontWeight to a StrEnum with font file values
* update settings close text to use multiplication x character
* add todo
* fix: Add settings close text char to loaded glyphs
* refactor: Use font medium for settings close button text and remove font bold property; change font_)medium property to font_weight
* move close icon down a bit
* fix: offset settings close text in button to correct centering
* fix: remove horizontal offset
* refactor: it's actually a font, so rename back
* mouse thread
* instanciate mouse
* type that
* pc handling
* use mouse event list in widget
* use events in scroll panel
* no stop that
* hack for now
* typing
* run
* clean up
* Localizer is too laggy for control
* typo
* typo
* fix test
* fix imports
* Revert "fix imports"
This reverts commit 5074f8050170f974b451e00d9fdc752f09a47d57.
* fix improt
* import
* encode/store audio as part of video file
* better match write_audio() with write()
* handle different FFmpeg versions, flush audio encoder, suppress encoder QAvg/info messages
* use audio_buffer.size() instead of keeping track of size separately
* no more for loops
* save to qcam and rlog
* assert audio support check
* microphone --> soundPressure, audioData --> rawAudioData
* deque much more efficient if buffer ever >> frame_size, ~ same performance for defaults
* cleanup and fix time scaling
* initialize audio separately and pass sample_rate in
* update comments
* ensure header is written before writing audio
* buffer audio frame but do not process before header written
* handle buffer overflow now that we are using as an actual buffer
* spelling