The workarounds were made because of conflicts with running multiple UI
threads at once on macOS, which macOS can't do very well, and would be
susceptible to crashes. This would cause crashes not only on startup
but seemingly at random when using the browser source on macOS. The
original "fix" was a hack to try to minimize UI code and browser UI code
from executing at the same time. The macOS initial scene loading was
deferred until all Qt-related and main window initialization was
completed. Although this worked to some extent to prevent conflicts, it
made it so that there was an initial period on startup where the entire
UI seemed "blank" for users, and it was still possible for the main UI
thread and the browser UI thread to clash, causing crashes seemingly at
random for users.
The external message pump method of CEF is the solution to the problem,
which is the method which allows the main UI thread to share events with
CEF. To do this, all CEF operations need to be performed in the UI
thread (Qt's main thread), and CefDoMessageLoopWork() needs to be called
when CefApp::OnScheduleMessagePumpWork callback is triggered. A number
of other issues had to be solved as well, such as CefBrowser references
getting "stuck" in the Qt event queue.
With this, macOS no longer needs to do the "deferred load" hack, and
browsers are now much more stable and no longer as susceptible to
seemingly random crashes, improving overall program stability when
browsers are used.
libobs: Add support for limited to full color range conversions when
using RGB or Y800 formats, and move RGB converison for Y800 formats to
the GPU.
decklink: Stop hiding color space/range properties for RGB formats, and
remove "YUV" from "YUV Color Space" and "YUV Color Range".
win-dshow: Remove "YUV" from "YUV Color Space" and "YUV Color Range".
UI: Remove "YUV" from "YUV Color Space" and "YUV Color Range".
This changes all of the icons from png to svg. With svgs, scaling is
unlimited. With the svgs, the issue of the @ symbols with the Windows
updater is no longer an issue.
I changed the colors of the icons to a light gray (#d2d2d2), in the
dark themes, because I thought they looked better with this color.
The mute, unmute, plus, minus, up, down and expand icons are from the
Feather Icons set. https://feathericons.com/
The visibility icon is from the Octicons set. https://octicons.github.com/
The locked and unlocked icons are from the Open Iconic set.
https://github.com/iconic/open-iconic
For the "ignore wheel" widgets, do not leave focus on mouse leave
events. This causes unintended side effects such as not being able to
type in edit boxes, and is very annoying.
This commit fixes the issue of being able to scroll through the mixer
with the mouse wheel without modifying the volume slider. This
functionality can be temporarily restored by holding a click on the
volume meter.
The line drawing functions previously assumed the upper-left 3x3 for
box_transform only held scale. The matrix can also hold rotation, so
pass in scale separately.
Fixes https://obsproject.com/mantis/view.php?id=1442
Don't override the theme color settings for the Projector.
If required, the background color of the projector can be changed via
OBSProjector {qproperty-...}
record placed after "OBSQTDisplay {qproperty-...}" section in the theme
file (qss).
If custom theme for obs UI has no record about background custom
property in the qss file, then application can set random color per
display initialization. This fixes this issue.
Ignore wheelEvent using subclass
slider,spinbox,combobox with eventhandlers:
wheelEvent - ignore if widget is not focused,
leaveEvent - clear focus when mouse leaves event.
Use these new subclass widgets in properties
to ignore wheelEvent when scrolling.
I considered making this an option, but I decided against it because
I felt it wasn't necessary and would make the settings more complex.
Opinions are welcome.
The system theme was named Default even though the default theme is Dark.
This addresses that by renaming Default.qss to System.qss. I've made it
backwards compatible so users already using this theme are not affected.
The theme list now shows up as:
-System
-Dark (Default)
-Acri
-Rachni
I have also made it so that you can specify the default theme in the
UI config file.
Add D3D/GL debug markers to make RenderDoc captures easier to tranverse.
Also add obs_source_get_name_no_null() to avoid boilerplate for safe
string formatting.
Closesobsproject/obs-studio#1799
Previously enabling and disabling bandwidth testing in a certain order
lead to the parameter being included in the stream key that is saved to
disk, making it impossible to disable the bandwidth test later on.
By doing this properly and using string concatenation instead of
modifying (appending to) the key_ value this will no longer happen.
Fixes the `obs.rc` file appearing in the UI source tree and moves it
into the out-of-tree build directories provided by CMake. Projects
requiring this can use it by adding `${obs-studio_BINARY_DIR}/obs.rc`
to their source list.
All UI elements are accessible through the obs frontend api via
obs_frontend_api_get_main_window, except for the tray icon and its
elements. This commit adds an obs_frontend_api_get_system_tray function
which returns the pointer to the QSystemTrayIcon cast to void (much like
the QMainWindow pointer for the main window).
This solves the issue of users who close the primary dock widgets and
can't figure out how to get them back, who for whatever reason choose
not to read the message box when closing dock widgets that tells them
how to get it back. The users can still hide the primary dock widgets
via the View menu, but they can no longer close them via the [x] button
on the dock widget. This change does not apply to secondary dock
widgets, such as a chat window, stats, etc.
Closesobsproject/obs-studio#1804
- Now uses a QVBoxLayout with a QScrollArea for the container
- Uses QGroupBox for each section
- Moved Monitoring and ducking settings out of the Advanced tab
- Push-to hotkeys are no longer in a child scroll area
- Renamed device labels for consistency